cuporter 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.textile +39 -32
- data/Rakefile +1 -1
- data/bin/cuporter +3 -1
- data/lib/cuporter/cli/options.rb +3 -0
- data/lib/cuporter/example_set_node.rb +19 -0
- data/lib/cuporter/feature_parser.rb +1 -1
- data/lib/cuporter/formatters/csv.rb +8 -1
- data/lib/cuporter/formatters/html.rb +11 -5
- data/lib/cuporter/formatters/text.rb +13 -1
- data/lib/cuporter/formatters/text_methods.rb +9 -11
- data/lib/cuporter/formatters/writer.rb +3 -6
- data/lib/cuporter/node.rb +27 -3
- data/lib/cuporter/node_numberer.rb +18 -0
- data/lib/cuporter/tag_report.rb +1 -0
- data/lib/cuporter.rb +2 -1
- data/spec/cuporter/example_set_node_spec.rb +26 -0
- data/spec/cuporter/node_numberer_spec.rb +80 -0
- data/spec/cuporter/node_spec.rb +26 -0
- data/spec/cuporter/sort_node_spec.rb +187 -0
- metadata +8 -4
- data/lib/cuporter/non_sorting_node.rb +0 -16
data/README.textile
CHANGED
@@ -1,44 +1,47 @@
|
|
1
1
|
h1. Cuporter
|
2
2
|
|
3
|
-
Scrapes your feature files and shows scenarios per tag, with their context. Formats
|
3
|
+
Scrapes your feature files and shows scenarios per tag, with their context. Formats HTML, CSV, and Pretty Text.
|
4
4
|
|
5
5
|
Consider this a stop-gap until we get this functionality in a proper cucumber formatter.
|
6
6
|
|
7
|
+
In version 0.2.0 and later you can number the Scenarios and Example rows with the @-n@ or @--numbers@ option.
|
8
|
+
|
7
9
|
---------
|
8
|
-
h3. Example Output
|
10
|
+
h3. Example Output: numbered pretty text
|
9
11
|
|
10
12
|
<pre>
|
11
13
|
@failing
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
14
|
+
Feature: Abominable Aardvark
|
15
|
+
1. Scenario: An Aardvark eats ants
|
16
|
+
2. Scenario: Zee Zebra eats zee aardvark
|
17
|
+
Feature: Wired
|
18
|
+
3. Scenario: Everybody's Wired
|
19
|
+
Scenario Outline: Why is everybody so wired?
|
20
|
+
Examples: loosely wired
|
21
|
+
| arg1 | arg2 |
|
22
|
+
4. | foo | bar |
|
23
|
+
5. | shif | fish |
|
24
|
+
Examples: tightly wired
|
25
|
+
| arg1 | arg2 |
|
26
|
+
6. | foo | bar |
|
27
|
+
7. | frotz | knurl |
|
28
|
+
8. Scenario: Yellow lines
|
26
29
|
@ignore
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
Feature: Wired
|
31
|
+
Scenario Outline: Why is everybody so wired?
|
32
|
+
Examples: tightly wired
|
33
|
+
| arg1 | arg2 |
|
34
|
+
1. | foo | bar |
|
35
|
+
2. | frotz | knurl |
|
33
36
|
@wip
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
37
|
+
Feature: HTML formatter
|
38
|
+
1. Scenario: Everything in fixtures/self_test
|
39
|
+
Feature: not everyone is involved
|
40
|
+
2. Scenario: Failure is not an option, people
|
41
|
+
Feature: sample
|
42
|
+
3. Scenario: And yet another Example
|
43
|
+
Feature: search examples
|
44
|
+
4. Scenario: Generate PDF with pdf formatter
|
42
45
|
|
43
46
|
</pre>
|
44
47
|
|
@@ -70,14 +73,18 @@ h4. help
|
|
70
73
|
|
71
74
|
-f, --format [pretty|html|csv] Output format
|
72
75
|
Default: pretty text
|
76
|
+
|
77
|
+
-n, --numbers number scenarios and examples
|
73
78
|
</pre>
|
74
79
|
|
75
80
|
h4. run script directly
|
76
81
|
|
77
82
|
<pre>
|
78
|
-
$ ./bin/cuporter.rb -i fixtures/self_text
|
83
|
+
$ ./bin/cuporter.rb -i fixtures/self_text # pretty-print demo report to stdout
|
84
|
+
|
85
|
+
$ ./bin/cuporter.rb -f html -o feature_tag_report.html # default input features/**/*.feature to named output file
|
79
86
|
|
80
|
-
$ ./bin/cuporter.rb -f html -o feature_tag_report.html #
|
87
|
+
$ ./bin/cuporter.rb -f html --numbers -o feature_tag_report.html # same, but number the scenarios and example rows
|
81
88
|
</pre>
|
82
89
|
|
83
90
|
h4. run via rake
|
data/Rakefile
CHANGED
data/bin/cuporter
CHANGED
@@ -6,4 +6,6 @@ require 'cuporter'
|
|
6
6
|
tag_report = Cuporter::TagReport.new(Cuporter::Options[:input_file] || Cuporter::Options[:input_dir])
|
7
7
|
|
8
8
|
formatter = Cuporter::Formatters.const_get(Cuporter::Options[:format])
|
9
|
-
formatter.new(tag_report.scenarios_per_tag,
|
9
|
+
formatter.new(tag_report.scenarios_per_tag,
|
10
|
+
Cuporter::Options[:output],
|
11
|
+
Cuporter::Options[:numbers]).write
|
data/lib/cuporter/cli/options.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright 2010 ThoughtWorks, Inc. Licensed under the MIT License
|
2
|
+
module Cuporter
|
3
|
+
class ExampleSetNode < TagListNode
|
4
|
+
|
5
|
+
def initialize(name, tags)
|
6
|
+
super(name, tags)
|
7
|
+
end
|
8
|
+
|
9
|
+
def sort!
|
10
|
+
# no op
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_child(node)
|
14
|
+
node.numerable = false unless has_children? #first row ( arg list header)
|
15
|
+
super(node)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -45,7 +45,7 @@ module Cuporter
|
|
45
45
|
when EXAMPLE_SET_LINE, SCENARIO_SET_LINE
|
46
46
|
@scenario_outline.add_to_tag_nodes(@example_set) if @example_set
|
47
47
|
|
48
|
-
@example_set =
|
48
|
+
@example_set = ExampleSetNode.new($1, @feature.tags | @current_tags)
|
49
49
|
@current_tags = []
|
50
50
|
when EXAMPLE_LINE
|
51
51
|
@example_set.add_child(Node.new($1))
|
@@ -7,10 +7,11 @@ module Cuporter
|
|
7
7
|
module Formatters
|
8
8
|
class Html < Writer
|
9
9
|
|
10
|
-
NODE_CLASS = [:tag, :feature, :scenario, :example_set]
|
10
|
+
NODE_CLASS = [:tag, :feature, :scenario, :example_set, :example]
|
11
11
|
|
12
12
|
def write_nodes
|
13
|
-
@report.
|
13
|
+
@report.children.each do |tag_node|
|
14
|
+
tag_node.number_all_descendants if @number_scenarios
|
14
15
|
write_node(tag_node, 0)
|
15
16
|
end
|
16
17
|
builder
|
@@ -22,14 +23,19 @@ module Cuporter
|
|
22
23
|
|
23
24
|
def write_node(node, indent_level)
|
24
25
|
builder.li(:class => NODE_CLASS[indent_level]) do |list_item|
|
25
|
-
list_item.span(node.
|
26
|
+
list_item.span("#{node.number}.", :class => :number) if node.number
|
27
|
+
list_item.span(node.name, :class => "#{NODE_CLASS[indent_level]}_name" )
|
28
|
+
|
26
29
|
if node.has_children?
|
27
30
|
list_item.ul(:class => "#{NODE_CLASS[indent_level]}_children") do |list|
|
28
|
-
node.
|
31
|
+
node.children.each do |child|
|
29
32
|
if child.has_children?
|
30
33
|
write_node(child, indent_level + 1)
|
31
34
|
else
|
32
|
-
list.li(
|
35
|
+
list.li() do |item|
|
36
|
+
item.span("#{child.number}.", :class => :number) if child.number
|
37
|
+
item.span(child.name, :class => "#{NODE_CLASS[indent_level + 1]}_name")
|
38
|
+
end
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
@@ -4,7 +4,19 @@ module Cuporter
|
|
4
4
|
class Text < Writer
|
5
5
|
include TextMethods
|
6
6
|
|
7
|
-
|
7
|
+
def tab
|
8
|
+
@tab ||= @number_scenarios ? " " : " "
|
9
|
+
end
|
10
|
+
|
11
|
+
COL_WIDTH = 5
|
12
|
+
def line(number, line)
|
13
|
+
if @number_scenarios
|
14
|
+
number_string = number ? "#{number}." : ""
|
15
|
+
number_field = number_string.rjust(COL_WIDTH, " ")
|
16
|
+
line.sub!(/^\s{#{COL_WIDTH}}/, number_field)
|
17
|
+
end
|
18
|
+
line
|
19
|
+
end
|
8
20
|
|
9
21
|
end
|
10
22
|
end
|
@@ -4,25 +4,23 @@ module Cuporter
|
|
4
4
|
module TextMethods
|
5
5
|
|
6
6
|
def write
|
7
|
-
@report.
|
7
|
+
@report.children.each do |tag_node|
|
8
|
+
tag_node.number_all_descendants if @number_scenarios
|
8
9
|
write_node(tag_node, 0)
|
9
10
|
end
|
10
11
|
end
|
11
12
|
|
12
13
|
def write_node(node, tab_stops)
|
13
|
-
@output.puts "#{
|
14
|
-
node.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
else
|
20
|
-
@output.puts "#{self.class::TAB * tab_stops}#{self.class::TAB * 2}#{grand_child.name}"
|
21
|
-
end
|
14
|
+
@output.puts line(node.number, "#{tab * tab_stops}#{node.name}")
|
15
|
+
node.children.each do |child|
|
16
|
+
if child.has_children?
|
17
|
+
write_node(child, tab_stops + 1)
|
18
|
+
else
|
19
|
+
@output.puts line(child.number, "#{tab * tab_stops}#{tab }#{child.name}")
|
22
20
|
end
|
23
21
|
end
|
24
22
|
end
|
25
|
-
|
23
|
+
|
26
24
|
end
|
27
25
|
end
|
28
26
|
end
|
@@ -4,13 +4,10 @@ module Cuporter
|
|
4
4
|
module Formatters
|
5
5
|
class Writer
|
6
6
|
|
7
|
-
def initialize(report, output)
|
7
|
+
def initialize(report, output, number_scenarios)
|
8
8
|
@report = report
|
9
|
-
|
10
|
-
|
11
|
-
else
|
12
|
-
@output = STDOUT
|
13
|
-
end
|
9
|
+
@output = output ? File.open(output, "w") : STDOUT
|
10
|
+
@number_scenarios = number_scenarios
|
14
11
|
end
|
15
12
|
end
|
16
13
|
end
|
data/lib/cuporter/node.rb
CHANGED
@@ -4,9 +4,10 @@ module Cuporter
|
|
4
4
|
include Comparable
|
5
5
|
|
6
6
|
attr_reader :name, :children
|
7
|
+
attr_accessor :number
|
7
8
|
|
8
9
|
def initialize(name)
|
9
|
-
@name = name.strip
|
10
|
+
@name = name.to_s.strip
|
10
11
|
@children = []
|
11
12
|
end
|
12
13
|
|
@@ -19,6 +20,10 @@ module Cuporter
|
|
19
20
|
@children << node unless has_child?(node)
|
20
21
|
end
|
21
22
|
|
23
|
+
def names
|
24
|
+
children.collect {|c| c.name }
|
25
|
+
end
|
26
|
+
|
22
27
|
def find_or_create_child(name)
|
23
28
|
child_node = self[name]
|
24
29
|
unless child_node
|
@@ -42,9 +47,13 @@ module Cuporter
|
|
42
47
|
@name_without_title ||= name.split(/:\s+/).last
|
43
48
|
end
|
44
49
|
|
45
|
-
def
|
50
|
+
def sort_all_descendants!
|
51
|
+
sort!
|
52
|
+
children.each {|child| child.sort_all_descendants! }
|
53
|
+
end
|
54
|
+
|
55
|
+
def sort!
|
46
56
|
children.sort!
|
47
|
-
self
|
48
57
|
end
|
49
58
|
|
50
59
|
# sort on name or substring of name after any ':'
|
@@ -73,5 +82,20 @@ module Cuporter
|
|
73
82
|
end
|
74
83
|
end
|
75
84
|
|
85
|
+
def total
|
86
|
+
number_all_descendants unless @numberer
|
87
|
+
@numberer.total
|
88
|
+
end
|
89
|
+
|
90
|
+
def number_all_descendants
|
91
|
+
@numberer = NodeNumberer.new
|
92
|
+
@numberer.number(self)
|
93
|
+
end
|
94
|
+
|
95
|
+
def numerable?
|
96
|
+
@numerable.nil? ? !has_children? : @numerable
|
97
|
+
end
|
98
|
+
attr_writer :numerable
|
99
|
+
|
76
100
|
end
|
77
101
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Cuporter
|
2
|
+
class NodeNumberer
|
3
|
+
|
4
|
+
attr_reader :total
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@total = 0
|
8
|
+
end
|
9
|
+
|
10
|
+
def number(node)
|
11
|
+
node.children.each do |child|
|
12
|
+
child.number = @total += 1 if child.numerable?
|
13
|
+
number(child)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
data/lib/cuporter/tag_report.rb
CHANGED
data/lib/cuporter.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Copyright 2010 ThoughtWorks, Inc. Licensed under the MIT License
|
2
2
|
require 'cuporter/node'
|
3
3
|
require 'cuporter/tag_list_node'
|
4
|
-
require 'cuporter/
|
4
|
+
require 'cuporter/example_set_node'
|
5
|
+
require 'cuporter/node_numberer'
|
5
6
|
require 'cuporter/feature_parser'
|
6
7
|
require 'cuporter/extensions/string'
|
7
8
|
require 'cuporter/cli/options'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Cuporter
|
3
|
+
describe ExampleSetNode do
|
4
|
+
context 'empty' do
|
5
|
+
it 'raises no error when numbering' do
|
6
|
+
node = ExampleSetNode.new("Scenarios: stuff", [])
|
7
|
+
expect do
|
8
|
+
node.number_all_descendants
|
9
|
+
end.to_not raise_error
|
10
|
+
node.total.should == 0
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'with children' do
|
15
|
+
it 'does not count first or "header" row' do
|
16
|
+
node = ExampleSetNode.new("Scenarios: stuff", [])
|
17
|
+
node.add_child(Node.new("|col1|col2|"))
|
18
|
+
node.add_child(Node.new("|val1|val2|"))
|
19
|
+
|
20
|
+
node.number_all_descendants
|
21
|
+
node.children.first.number.should be_nil
|
22
|
+
node.children.last.number.should == 1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Cuporter
|
4
|
+
describe NodeNumberer do
|
5
|
+
context '#number' do
|
6
|
+
let(:root) {Node.new("root")}
|
7
|
+
let(:numberer) { NodeNumberer.new}
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
root.add_child(Node.new("child_1"))
|
11
|
+
root.add_child(Node.new("child_2"))
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'does not add number to root node' do
|
15
|
+
numberer.number(root)
|
16
|
+
|
17
|
+
root.number.should be_nil
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'adds a number to both children' do
|
21
|
+
numberer.number(root)
|
22
|
+
|
23
|
+
root[:child_1].number.should == 1
|
24
|
+
root[:child_2].number.should == 2
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'does not add a number to children with children' do
|
28
|
+
root[:child_1].add_child(Node.new("grandbaby"))
|
29
|
+
|
30
|
+
numberer.number(root)
|
31
|
+
|
32
|
+
root[:child_1].number.should be_nil
|
33
|
+
root[:child_2].number.should == 2
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'numbers child and grandchild in same sequence' do
|
37
|
+
root[:child_1].add_child(Node.new("grandbaby"))
|
38
|
+
|
39
|
+
numberer.number(root)
|
40
|
+
|
41
|
+
root[:child_1][:grandbaby].number.should == 1
|
42
|
+
root[:child_2].number.should == 2
|
43
|
+
end
|
44
|
+
|
45
|
+
context '2 children, 1 grandchild, and 2 great-grandchildren' do
|
46
|
+
before(:each) do
|
47
|
+
root[:child_2].add_child(Node.new("grandbaby"))
|
48
|
+
root.add_child(Node.new(:child_3))
|
49
|
+
child_4 = Node.new(:child_4)
|
50
|
+
child_4.add_child(Node.new(:grandchild))
|
51
|
+
child_4[:grandchild].add_child(Node.new(:great_grandchild_1))
|
52
|
+
child_4[:grandchild].add_child(Node.new(:great_grandchild_2))
|
53
|
+
root.add_child(child_4)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'numbers the leaf nodes' do
|
57
|
+
numberer.number(root)
|
58
|
+
|
59
|
+
root.number.should be_nil
|
60
|
+
root[:child_1].number.should == 1
|
61
|
+
root[:child_2].number.should be_nil
|
62
|
+
root[:child_3].number.should == 3
|
63
|
+
root[:child_4].number.should be_nil
|
64
|
+
|
65
|
+
root[:child_2][:grandbaby].number.should == 2
|
66
|
+
root[:child_4][:grandchild].number.should be_nil
|
67
|
+
root[:child_4][:grandchild][:great_grandchild_1].number.should == 4
|
68
|
+
root[:child_4][:grandchild][:great_grandchild_2].number.should == 5
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'keeps total' do
|
72
|
+
numberer.total.should == 0
|
73
|
+
numberer.number(root)
|
74
|
+
numberer.total.should == 5
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
data/spec/cuporter/node_spec.rb
CHANGED
@@ -51,5 +51,31 @@ module Cuporter
|
|
51
51
|
n1.should == n2
|
52
52
|
end
|
53
53
|
end
|
54
|
+
|
55
|
+
context 'numbering' do
|
56
|
+
let(:node) {Node.new(:node)}
|
57
|
+
it 'can number itself' do
|
58
|
+
expect do
|
59
|
+
node.number_all_descendants
|
60
|
+
end.to_not raise_error()
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'gets a leaf count' do
|
64
|
+
node.number_all_descendants
|
65
|
+
node.total.should == 0
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'can number itself with a child' do
|
69
|
+
node.add_child(Node.new(:child))
|
70
|
+
node.number_all_descendants
|
71
|
+
node.total.should == 1
|
72
|
+
node[:child].number.should == 1
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'can get count from child' do
|
76
|
+
node.add_child(Node.new(:child))
|
77
|
+
node[:child].total.should == 0
|
78
|
+
end
|
79
|
+
end
|
54
80
|
end
|
55
81
|
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Cuporter
|
4
|
+
describe Node do
|
5
|
+
context 'sorting' do
|
6
|
+
it 'defaults to order of addition' do
|
7
|
+
root = Node.new('root')
|
8
|
+
root.add_child(Node.new('zebra'))
|
9
|
+
root.add_child(Node.new('aardvark'))
|
10
|
+
|
11
|
+
root.names.should == %w[zebra aardvark]
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'sorts direct descendants' do
|
15
|
+
root = Node.new('root')
|
16
|
+
root.add_child(Node.new('zebra'))
|
17
|
+
root.add_child(Node.new('aardvark'))
|
18
|
+
|
19
|
+
root.sort_all_descendants!
|
20
|
+
root.names.should == %w[aardvark zebra]
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'sorts all descendants to an arbitrary depth, such as 6' do
|
24
|
+
root = Node.new('root')
|
25
|
+
zebra = Node.new("zebra")
|
26
|
+
apple = Node.new("apple")
|
27
|
+
zebra1 = Node.new("zebra1")
|
28
|
+
apple1 = Node.new("apple1")
|
29
|
+
zebra2 = Node.new("zebra2")
|
30
|
+
apple2 = Node.new("apple2")
|
31
|
+
zebra3 = Node.new("zebra3")
|
32
|
+
apple3 = Node.new("apple3")
|
33
|
+
zebra4 = Node.new("zebra4")
|
34
|
+
apple4 = Node.new("apple4")
|
35
|
+
zebra5 = Node.new("zebra5")
|
36
|
+
apple5 = Node.new("apple5")
|
37
|
+
|
38
|
+
zebra4.add_child(zebra5)
|
39
|
+
zebra4.add_child(apple5)
|
40
|
+
apple4.add_child(zebra5)
|
41
|
+
apple4.add_child(apple5)
|
42
|
+
|
43
|
+
zebra3.add_child(zebra4)
|
44
|
+
zebra3.add_child(apple4)
|
45
|
+
apple3.add_child(zebra4)
|
46
|
+
apple3.add_child(apple4)
|
47
|
+
|
48
|
+
zebra2.add_child(zebra3)
|
49
|
+
zebra2.add_child(apple3)
|
50
|
+
apple2.add_child(zebra3)
|
51
|
+
apple2.add_child(apple3)
|
52
|
+
|
53
|
+
zebra1.add_child(zebra2)
|
54
|
+
zebra1.add_child(apple2)
|
55
|
+
apple1.add_child(zebra2)
|
56
|
+
apple1.add_child(apple2)
|
57
|
+
|
58
|
+
zebra.add_child(zebra1)
|
59
|
+
zebra.add_child(apple1)
|
60
|
+
apple.add_child(zebra1)
|
61
|
+
apple.add_child(apple1)
|
62
|
+
|
63
|
+
root.add_child(zebra)
|
64
|
+
root.add_child(apple)
|
65
|
+
|
66
|
+
root.sort_all_descendants!
|
67
|
+
root.names.should == %w[apple zebra]
|
68
|
+
gen_1 = %w[apple1 zebra1]
|
69
|
+
root[:apple].names.should == gen_1
|
70
|
+
root[:zebra].names.should == gen_1
|
71
|
+
|
72
|
+
gen_2 = %w[apple2 zebra2]
|
73
|
+
root[:apple][:apple1].names.should == gen_2
|
74
|
+
root[:apple][:zebra1].names.should == gen_2
|
75
|
+
root[:zebra][:apple1].names.should == gen_2
|
76
|
+
root[:zebra][:zebra1].names.should == gen_2
|
77
|
+
|
78
|
+
gen_3 = %w[apple3 zebra3]
|
79
|
+
root[:apple][:apple1][:apple2].names.should == gen_3
|
80
|
+
root[:apple][:apple1][:zebra2].names.should == gen_3
|
81
|
+
root[:apple][:zebra1][:apple2].names.should == gen_3
|
82
|
+
root[:apple][:zebra1][:zebra2].names.should == gen_3
|
83
|
+
root[:zebra][:apple1][:apple2].names.should == gen_3
|
84
|
+
root[:zebra][:apple1][:zebra2].names.should == gen_3
|
85
|
+
root[:zebra][:zebra1][:apple2].names.should == gen_3
|
86
|
+
root[:zebra][:zebra1][:zebra2].names.should == gen_3
|
87
|
+
|
88
|
+
gen_4 = %w[apple4 zebra4]
|
89
|
+
root[:apple][:apple1][:apple2][:apple3].names.should == gen_4
|
90
|
+
root[:apple][:apple1][:apple2][:zebra3].names.should == gen_4
|
91
|
+
root[:apple][:apple1][:zebra2][:apple3].names.should == gen_4
|
92
|
+
root[:apple][:apple1][:zebra2][:zebra3].names.should == gen_4
|
93
|
+
|
94
|
+
root[:apple][:zebra1][:apple2][:apple3].names.should == gen_4
|
95
|
+
root[:apple][:zebra1][:apple2][:zebra3].names.should == gen_4
|
96
|
+
root[:apple][:zebra1][:zebra2][:apple3].names.should == gen_4
|
97
|
+
root[:apple][:zebra1][:zebra2][:zebra3].names.should == gen_4
|
98
|
+
|
99
|
+
root[:zebra][:apple1][:apple2][:apple3].names.should == gen_4
|
100
|
+
root[:zebra][:apple1][:apple2][:zebra3].names.should == gen_4
|
101
|
+
root[:zebra][:apple1][:zebra2][:apple3].names.should == gen_4
|
102
|
+
root[:zebra][:apple1][:zebra2][:zebra3].names.should == gen_4
|
103
|
+
|
104
|
+
root[:zebra][:zebra1][:apple2][:apple3].names.should == gen_4
|
105
|
+
root[:zebra][:zebra1][:apple2][:zebra3].names.should == gen_4
|
106
|
+
root[:zebra][:zebra1][:zebra2][:apple3].names.should == gen_4
|
107
|
+
root[:zebra][:zebra1][:zebra2][:zebra3].names.should == gen_4
|
108
|
+
|
109
|
+
gen_5 = %w[apple5 zebra5]
|
110
|
+
root[:apple][:apple1][:apple2][:apple3][:apple4].names.should == gen_5
|
111
|
+
root[:apple][:apple1][:apple2][:apple3][:zebra4].names.should == gen_5
|
112
|
+
root[:apple][:apple1][:apple2][:apple3][:apple4].names.should == gen_5
|
113
|
+
root[:apple][:apple1][:apple2][:apple3][:zebra4].names.should == gen_5
|
114
|
+
root[:apple][:apple1][:apple2][:zebra3][:apple4].names.should == gen_5
|
115
|
+
root[:apple][:apple1][:apple2][:zebra3][:zebra4].names.should == gen_5
|
116
|
+
root[:apple][:apple1][:apple2][:zebra3][:apple4].names.should == gen_5
|
117
|
+
root[:apple][:apple1][:apple2][:zebra3][:zebra4].names.should == gen_5
|
118
|
+
|
119
|
+
root[:apple][:apple1][:zebra2][:apple3][:apple4].names.should == gen_5
|
120
|
+
root[:apple][:apple1][:zebra2][:apple3][:zebra4].names.should == gen_5
|
121
|
+
root[:apple][:apple1][:zebra2][:apple3][:apple4].names.should == gen_5
|
122
|
+
root[:apple][:apple1][:zebra2][:apple3][:zebra4].names.should == gen_5
|
123
|
+
root[:apple][:apple1][:zebra2][:zebra3][:apple4].names.should == gen_5
|
124
|
+
root[:apple][:apple1][:zebra2][:zebra3][:zebra4].names.should == gen_5
|
125
|
+
root[:apple][:apple1][:zebra2][:zebra3][:apple4].names.should == gen_5
|
126
|
+
root[:apple][:apple1][:zebra2][:zebra3][:zebra4].names.should == gen_5
|
127
|
+
|
128
|
+
root[:apple][:zebra1][:apple2][:apple3][:apple4].names.should == gen_5
|
129
|
+
root[:apple][:zebra1][:apple2][:apple3][:zebra4].names.should == gen_5
|
130
|
+
root[:apple][:zebra1][:apple2][:apple3][:apple4].names.should == gen_5
|
131
|
+
root[:apple][:zebra1][:apple2][:apple3][:zebra4].names.should == gen_5
|
132
|
+
root[:apple][:zebra1][:apple2][:zebra3][:apple4].names.should == gen_5
|
133
|
+
root[:apple][:zebra1][:apple2][:zebra3][:zebra4].names.should == gen_5
|
134
|
+
root[:apple][:zebra1][:apple2][:zebra3][:apple4].names.should == gen_5
|
135
|
+
root[:apple][:zebra1][:apple2][:zebra3][:zebra4].names.should == gen_5
|
136
|
+
|
137
|
+
root[:apple][:zebra1][:zebra2][:apple3][:apple4].names.should == gen_5
|
138
|
+
root[:apple][:zebra1][:zebra2][:apple3][:zebra4].names.should == gen_5
|
139
|
+
root[:apple][:zebra1][:zebra2][:apple3][:apple4].names.should == gen_5
|
140
|
+
root[:apple][:zebra1][:zebra2][:apple3][:zebra4].names.should == gen_5
|
141
|
+
root[:apple][:zebra1][:zebra2][:zebra3][:apple4].names.should == gen_5
|
142
|
+
root[:apple][:zebra1][:zebra2][:zebra3][:zebra4].names.should == gen_5
|
143
|
+
root[:apple][:zebra1][:zebra2][:zebra3][:apple4].names.should == gen_5
|
144
|
+
root[:apple][:zebra1][:zebra2][:zebra3][:zebra4].names.should == gen_5
|
145
|
+
|
146
|
+
|
147
|
+
root[:zebra][:apple1][:apple2][:apple3][:apple4].names.should == gen_5
|
148
|
+
root[:zebra][:apple1][:apple2][:apple3][:zebra4].names.should == gen_5
|
149
|
+
root[:zebra][:apple1][:apple2][:apple3][:apple4].names.should == gen_5
|
150
|
+
root[:zebra][:apple1][:apple2][:apple3][:zebra4].names.should == gen_5
|
151
|
+
root[:zebra][:apple1][:apple2][:zebra3][:apple4].names.should == gen_5
|
152
|
+
root[:zebra][:apple1][:apple2][:zebra3][:zebra4].names.should == gen_5
|
153
|
+
root[:zebra][:apple1][:apple2][:zebra3][:apple4].names.should == gen_5
|
154
|
+
root[:zebra][:apple1][:apple2][:zebra3][:zebra4].names.should == gen_5
|
155
|
+
|
156
|
+
root[:zebra][:apple1][:zebra2][:apple3][:apple4].names.should == gen_5
|
157
|
+
root[:zebra][:apple1][:zebra2][:apple3][:zebra4].names.should == gen_5
|
158
|
+
root[:zebra][:apple1][:zebra2][:apple3][:apple4].names.should == gen_5
|
159
|
+
root[:zebra][:apple1][:zebra2][:apple3][:zebra4].names.should == gen_5
|
160
|
+
root[:zebra][:apple1][:zebra2][:zebra3][:apple4].names.should == gen_5
|
161
|
+
root[:zebra][:apple1][:zebra2][:zebra3][:zebra4].names.should == gen_5
|
162
|
+
root[:zebra][:apple1][:zebra2][:zebra3][:apple4].names.should == gen_5
|
163
|
+
root[:zebra][:apple1][:zebra2][:zebra3][:zebra4].names.should == gen_5
|
164
|
+
|
165
|
+
root[:zebra][:zebra1][:apple2][:apple3][:apple4].names.should == gen_5
|
166
|
+
root[:zebra][:zebra1][:apple2][:apple3][:zebra4].names.should == gen_5
|
167
|
+
root[:zebra][:zebra1][:apple2][:apple3][:apple4].names.should == gen_5
|
168
|
+
root[:zebra][:zebra1][:apple2][:apple3][:zebra4].names.should == gen_5
|
169
|
+
root[:zebra][:zebra1][:apple2][:zebra3][:apple4].names.should == gen_5
|
170
|
+
root[:zebra][:zebra1][:apple2][:zebra3][:zebra4].names.should == gen_5
|
171
|
+
root[:zebra][:zebra1][:apple2][:zebra3][:apple4].names.should == gen_5
|
172
|
+
root[:zebra][:zebra1][:apple2][:zebra3][:zebra4].names.should == gen_5
|
173
|
+
|
174
|
+
root[:zebra][:zebra1][:zebra2][:apple3][:apple4].names.should == gen_5
|
175
|
+
root[:zebra][:zebra1][:zebra2][:apple3][:zebra4].names.should == gen_5
|
176
|
+
root[:zebra][:zebra1][:zebra2][:apple3][:apple4].names.should == gen_5
|
177
|
+
root[:zebra][:zebra1][:zebra2][:apple3][:zebra4].names.should == gen_5
|
178
|
+
root[:zebra][:zebra1][:zebra2][:zebra3][:apple4].names.should == gen_5
|
179
|
+
root[:zebra][:zebra1][:zebra2][:zebra3][:zebra4].names.should == gen_5
|
180
|
+
root[:zebra][:zebra1][:zebra2][:zebra3][:apple4].names.should == gen_5
|
181
|
+
root[:zebra][:zebra1][:zebra2][:zebra3][:zebra4].names.should == gen_5
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Tim Camper
|
@@ -31,7 +31,7 @@ files:
|
|
31
31
|
- LICENSE
|
32
32
|
- README.textile
|
33
33
|
- Rakefile
|
34
|
-
- lib/cuporter/
|
34
|
+
- lib/cuporter/example_set_node.rb
|
35
35
|
- lib/cuporter/formatters/csv.rb
|
36
36
|
- lib/cuporter/formatters/text.rb
|
37
37
|
- lib/cuporter/formatters/html.rb
|
@@ -42,11 +42,15 @@ files:
|
|
42
42
|
- lib/cuporter/extensions/string.rb
|
43
43
|
- lib/cuporter/feature_parser.rb
|
44
44
|
- lib/cuporter/node.rb
|
45
|
+
- lib/cuporter/node_numberer.rb
|
45
46
|
- lib/cuporter/tag_report.rb
|
46
47
|
- lib/cuporter.rb
|
47
48
|
- spec/cuporter/node_spec.rb
|
49
|
+
- spec/cuporter/sort_node_spec.rb
|
48
50
|
- spec/cuporter/feature_parser_spec.rb
|
49
51
|
- spec/cuporter/support/functional/cli.rb
|
52
|
+
- spec/cuporter/node_numberer_spec.rb
|
53
|
+
- spec/cuporter/example_set_node_spec.rb
|
50
54
|
- spec/cuporter/functional/scenario_outlines_spec.rb
|
51
55
|
- spec/cuporter/functional/single_feature_spec.rb
|
52
56
|
- spec/cuporter/tag_list_node_spec.rb
|