cuporter 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|