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 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