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 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 Pretty Text, HTML and CSV.
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
- Feature: Abominable Aardvark
13
- Scenario: An Aardvark eats ants
14
- Scenario: Zee Zebra eats zee aardvark
15
- Feature: Wired
16
- Scenario: Everybody's Wired
17
- Scenario Outline: Why is everybody so wired?
18
- Examples: loosely wired
19
- | arg1 | arg2 |
20
- | foo | bar |
21
- | shif | fish |
22
- Examples: tightly wired
23
- | name | value |
24
- | foo | bar |
25
- | frotz | knurl |
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
- Feature: Wired
28
- Scenario Outline: Why is everybody so wired?
29
- Examples: tightly wired
30
- | name | value |
31
- | foo | bar |
32
- | frotz | knurl |
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
- Feature: HTML formatter
35
- Scenario: Everything in fixtures/self_test
36
- Feature: not everyone is involved
37
- Scenario: Failure is not an option, people
38
- Feature: sample
39
- Scenario: And yet another Example
40
- Feature: search examples
41
- Scenario: Generate PDF with pdf formatter
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 # pretty-print demo report to stdout
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 # default input features/**/*.feature to named output file
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
@@ -56,7 +56,7 @@ namespace :cuporter do
56
56
 
57
57
  spec = Gem::Specification.new do |s|
58
58
  s.name = 'cuporter'
59
- s.version = '0.1.1'
59
+ s.version = '0.2.0'
60
60
  s.rubyforge_project = s.name
61
61
 
62
62
  s.platform = Gem::Platform::RUBY
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, Cuporter::Options[:output]).write
9
+ formatter.new(tag_report.scenarios_per_tag,
10
+ Cuporter::Options[:output],
11
+ Cuporter::Options[:numbers]).write
@@ -38,6 +38,9 @@ module Cuporter
38
38
  end
39
39
  @options[:format] ||= :Text
40
40
 
41
+ opts.on("-n", "--numbers", "number scenarios and examples") do |n|
42
+ @options[:numbers] = n
43
+ end
41
44
  end.parse!
42
45
 
43
46
 
@@ -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 = NonSortingNode.new($1, @feature.tags | @current_tags)
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))
@@ -4,7 +4,14 @@ module Cuporter
4
4
  class Csv < Writer
5
5
  include TextMethods
6
6
 
7
- TAB = ","
7
+ def tab
8
+ ","
9
+ end
10
+
11
+ def line(number, line)
12
+ line.sub!(/^#{tab}/, "#{number}#{tab}") if number
13
+ line
14
+ end
8
15
 
9
16
  end
10
17
  end
@@ -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.sort.children.each do |tag_node|
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.name, :class => "#{NODE_CLASS[indent_level]}_name")
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.sort.children.each do |child|
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(child.name, :class => "#{NODE_CLASS[indent_level + 1]}_name")
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
- TAB = " "
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.sort.children.each do |tag_node|
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 "#{self.class::TAB * tab_stops}#{node.name}"
14
- node.sort.children.each do |child|
15
- @output.puts "#{self.class::TAB + (self.class::TAB * tab_stops)}#{child.name}"
16
- child.sort.children.each do |grand_child|
17
- if grand_child.has_children?
18
- write_node(grand_child, tab_stops + 2)
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
- if output
10
- @output = File.open(output, "w")
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 sort
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
@@ -16,6 +16,7 @@ module Cuporter
16
16
  content = File.read(file)
17
17
  tags.merge(FeatureParser.parse(content)) unless content.empty?
18
18
  end
19
+ tags.sort_all_descendants!
19
20
  tags
20
21
  end
21
22
 
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/non_sorting_node'
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
@@ -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
- - 1
8
- - 1
9
- version: 0.1.1
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/non_sorting_node.rb
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
@@ -1,16 +0,0 @@
1
- # Copyright 2010 ThoughtWorks, Inc. Licensed under the MIT License
2
- module Cuporter
3
- class NonSortingNode < Node
4
- attr_reader :tags
5
-
6
- def initialize(name, tags)
7
- super(name)
8
- @tags = tags
9
- end
10
-
11
- def sort
12
- self
13
- end
14
-
15
- end
16
- end