kosmas58-cucumber 0.1.99.23 → 0.1.100.5

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.
Files changed (100) hide show
  1. data/History.txt +8 -23
  2. data/Manifest.txt +14 -2
  3. data/examples/i18n/en-lol/Rakefile +6 -0
  4. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
  5. data/examples/i18n/en-lol/features/stuffing.feature +8 -0
  6. data/examples/i18n/en-lol/features/support/env.rb +8 -0
  7. data/examples/i18n/en-lol/lib/basket.rb +12 -0
  8. data/examples/i18n/en-lol/lib/belly.rb +11 -0
  9. data/examples/i18n/et/features/jagamine.feature +9 -0
  10. data/examples/jbehave/README.textile +4 -1
  11. data/examples/jbehave/features/trading.feature +4 -0
  12. data/examples/jbehave/pom.xml +5 -0
  13. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +6 -1
  14. data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
  15. data/examples/selenium/features/support/env.rb +19 -0
  16. data/examples/selenium_webrat/Rakefile +6 -0
  17. data/examples/selenium_webrat/features/search.feature +9 -0
  18. data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
  19. data/examples/selenium_webrat/features/support/env.rb +41 -0
  20. data/examples/self_test/Rakefile +1 -1
  21. data/examples/self_test/features/background/failing_background.feature +1 -0
  22. data/examples/self_test/features/step_definitions/sample_steps.rb +1 -1
  23. data/examples/self_test/features/support/tag_count_formatter.rb +1 -1
  24. data/examples/tickets/Rakefile +13 -8
  25. data/examples/tickets/cucumber.yml +2 -1
  26. data/examples/tickets/features/236.feature +13 -0
  27. data/examples/tickets/features/241.feature +13 -0
  28. data/examples/tickets/features/step_definitons/tickets_steps.rb +17 -4
  29. data/examples/tickets/features/tickets.feature +1 -1
  30. data/features/background.feature +9 -11
  31. data/features/cucumber_cli.feature +24 -1
  32. data/features/cucumber_cli_outlines.feature +10 -19
  33. data/features/report_called_undefined_steps.feature +2 -0
  34. data/gem_tasks/rspec.rake +3 -2
  35. data/lib/cucumber.rb +7 -15
  36. data/lib/cucumber/ast.rb +3 -3
  37. data/lib/cucumber/ast/background.rb +28 -66
  38. data/lib/cucumber/ast/examples.rb +15 -3
  39. data/lib/cucumber/ast/feature.rb +20 -24
  40. data/lib/cucumber/ast/feature_element.rb +46 -0
  41. data/lib/cucumber/ast/features.rb +2 -21
  42. data/lib/cucumber/ast/outline_table.rb +46 -14
  43. data/lib/cucumber/ast/py_string.rb +9 -3
  44. data/lib/cucumber/ast/scenario.rb +34 -73
  45. data/lib/cucumber/ast/scenario_outline.rb +40 -42
  46. data/lib/cucumber/ast/step.rb +51 -90
  47. data/lib/cucumber/ast/step_collection.rb +66 -0
  48. data/lib/cucumber/ast/step_invocation.rb +110 -0
  49. data/lib/cucumber/ast/table.rb +41 -21
  50. data/lib/cucumber/ast/tags.rb +4 -11
  51. data/lib/cucumber/ast/visitor.rb +35 -19
  52. data/lib/cucumber/broadcaster.rb +1 -3
  53. data/lib/cucumber/cli/configuration.rb +25 -17
  54. data/lib/cucumber/cli/language_help_formatter.rb +4 -4
  55. data/lib/cucumber/cli/main.rb +6 -4
  56. data/lib/cucumber/core_ext/proc.rb +2 -2
  57. data/lib/cucumber/formatter/ansicolor.rb +0 -1
  58. data/lib/cucumber/formatter/console.rb +24 -34
  59. data/lib/cucumber/formatter/html.rb +18 -11
  60. data/lib/cucumber/formatter/pretty.rb +48 -36
  61. data/lib/cucumber/formatter/profile.rb +6 -6
  62. data/lib/cucumber/formatter/progress.rb +14 -22
  63. data/lib/cucumber/formatter/rerun.rb +6 -6
  64. data/lib/cucumber/jbehave.rb +21 -26
  65. data/lib/cucumber/languages.yml +17 -2
  66. data/lib/cucumber/parser/feature.rb +26 -29
  67. data/lib/cucumber/parser/feature.tt +17 -12
  68. data/lib/cucumber/parser/treetop_ext.rb +13 -13
  69. data/lib/cucumber/platform.rb +0 -1
  70. data/lib/cucumber/rails/world.rb +2 -2
  71. data/lib/cucumber/rake/task.rb +1 -2
  72. data/lib/cucumber/step_definition.rb +21 -12
  73. data/lib/cucumber/step_match.rb +49 -0
  74. data/lib/cucumber/step_mother.rb +100 -80
  75. data/lib/cucumber/version.rb +2 -2
  76. data/lib/cucumber/world.rb +53 -0
  77. data/rails_generators/cucumber/templates/paths.rb +1 -1
  78. data/rails_generators/cucumber/templates/webrat_steps.rb +17 -17
  79. data/rails_generators/feature/feature_generator.rb +5 -1
  80. data/rails_generators/feature/templates/steps.erb +0 -4
  81. data/spec/cucumber/ast/background_spec.rb +32 -41
  82. data/spec/cucumber/ast/feature_factory.rb +10 -1
  83. data/spec/cucumber/ast/feature_spec.rb +7 -30
  84. data/spec/cucumber/ast/py_string_spec.rb +7 -0
  85. data/spec/cucumber/ast/scenario_outline_spec.rb +3 -0
  86. data/spec/cucumber/ast/scenario_spec.rb +8 -25
  87. data/spec/cucumber/ast/step_collection_spec.rb +8 -0
  88. data/spec/cucumber/ast/step_spec.rb +49 -28
  89. data/spec/cucumber/ast/table_spec.rb +13 -3
  90. data/spec/cucumber/ast/tags_spec.rb +2 -18
  91. data/spec/cucumber/broadcaster_spec.rb +6 -5
  92. data/spec/cucumber/cli/configuration_spec.rb +7 -0
  93. data/spec/cucumber/cli/main_spec.rb +1 -1
  94. data/spec/cucumber/parser/feature_parser_spec.rb +6 -5
  95. data/spec/cucumber/step_definition_spec.rb +16 -5
  96. data/spec/cucumber/step_mother_spec.rb +6 -6
  97. data/spec/cucumber/world/pending_spec.rb +1 -1
  98. metadata +24 -5
  99. data/lib/cucumber/ast/filter.rb +0 -22
  100. data/lib/cucumber/ast/steps.rb +0 -13
@@ -23,7 +23,7 @@ module Cucumber
23
23
 
24
24
  def visit_features(features)
25
25
  super
26
- print_summary(features) unless @options[:autoformat]
26
+ print_summary unless @options[:autoformat]
27
27
  end
28
28
 
29
29
  def visit_feature(feature)
@@ -34,14 +34,10 @@ module Cucumber
34
34
  mkdir_p(dir) unless File.directory?(dir)
35
35
  File.open(file, Cucumber.file_mode('w')) do |io|
36
36
  @io = io
37
- with_color do
38
- feature.accept(self)
39
- end
37
+ super
40
38
  end
41
39
  else
42
- with_color do
43
- feature.accept(self)
44
- end
40
+ super
45
41
  end
46
42
  end
47
43
 
@@ -79,21 +75,22 @@ module Cucumber
79
75
 
80
76
  def visit_feature_element(feature_element)
81
77
  @indent = 2
82
- @last_undefined = feature_element.undefined?
83
- feature_element.accept(self)
78
+ super
84
79
  @io.puts
85
80
  @io.flush
86
81
  end
87
82
 
88
- def visit_background(background)
83
+ def visit_background(background)
89
84
  @indent = 2
90
- background_already_visible = background.already_visited_steps?
91
- background.accept(self)
92
- @io.puts unless background_already_visible
85
+ @in_background = true
86
+ super
87
+ @in_background = nil
88
+ @io.puts
89
+ @io.flush
93
90
  end
94
91
 
95
- def visit_examples(examples)
96
- examples.accept(self)
92
+ def visit_background_name(keyword, name, file_colon_line, source_indent)
93
+ visit_feature_element_name(keyword, name, file_colon_line, source_indent)
97
94
  end
98
95
 
99
96
  def visit_examples_name(keyword, name)
@@ -102,12 +99,15 @@ module Cucumber
102
99
  @indent = 4
103
100
  end
104
101
 
105
- def visit_scenario_name(keyword, name, file_line, source_indent)
102
+ def visit_scenario_name(keyword, name, file_colon_line, source_indent)
103
+ visit_feature_element_name(keyword, name, file_colon_line, source_indent)
104
+ end
105
+
106
+ def visit_feature_element_name(keyword, name, file_colon_line, source_indent)
106
107
  line = " #{keyword} #{name}"
107
- line = format_string(line, :undefined) if @last_undefined
108
108
  @io.print(line)
109
109
  if @options[:source]
110
- line_comment = " # #{file_line}".indent(source_indent)
110
+ line_comment = " # #{file_colon_line}".indent(source_indent)
111
111
  @io.print(format_string(line_comment, :comment))
112
112
  end
113
113
  @io.puts
@@ -116,27 +116,39 @@ module Cucumber
116
116
 
117
117
  def visit_step(step)
118
118
  @indent = 6
119
- exception = step.accept(self)
120
- print_exception(exception, @indent) if exception
119
+ super
121
120
  end
122
121
 
123
- def visit_step_name(keyword, step_name, status, step_definition, source_indent)
124
- source_indent = nil unless @options[:source]
125
- formatted_step_name = format_step(keyword, step_name, status, step_definition, source_indent)
126
- @io.puts(" " + formatted_step_name)
127
- @io.flush
122
+ def visit_step_name(keyword, step_match, status, source_indent, background)
123
+ @step_matches ||= []
124
+
125
+ non_failed_background_step_outside_background = !@in_background && background && (status != :failed)
126
+ @skip_step = @step_matches.index(step_match) || non_failed_background_step_outside_background
127
+
128
+ unless(@skip_step)
129
+ source_indent = nil unless @options[:source]
130
+ formatted_step_name = format_step(keyword, step_match, status, source_indent)
131
+ @io.puts(" " + formatted_step_name)
132
+ end
133
+ @step_matches << step_match
134
+ end
135
+
136
+ def visit_multiline_arg(multiline_arg)
137
+ return if @options[:no_multiline] || @skip_step
138
+ super
128
139
  end
129
140
 
130
- def visit_multiline_arg(multiline_arg, status)
131
- return if @options[:no_multiline]
132
- multiline_arg.accept(self, status)
141
+ def visit_exception(exception, status)
142
+ return if @skip_step
143
+ print_exception(exception, status, @indent)
144
+ @io.flush
133
145
  end
134
146
 
135
- def visit_table_row(table_row, status)
147
+ def visit_table_row(table_row)
136
148
  @io.print @delim.indent(@indent)
137
- exception = table_row.accept(self, status)
149
+ super
138
150
  @io.puts
139
- print_exception(exception, 6) if exception
151
+ print_exception(table_row.exception, :failed, @indent) if table_row.exception
140
152
  end
141
153
 
142
154
  def visit_py_string(string, status)
@@ -146,8 +158,8 @@ module Cucumber
146
158
  @io.flush
147
159
  end
148
160
 
149
- def visit_table_cell(table_cell, status)
150
- table_cell.accept(self, status)
161
+ def visit_table_cell(table_cell)
162
+ super
151
163
  end
152
164
 
153
165
  def visit_table_cell_value(value, width, status)
@@ -157,9 +169,9 @@ module Cucumber
157
169
 
158
170
  private
159
171
 
160
- def print_summary(features)
161
- print_counts(features)
162
- print_snippets(features, @options)
172
+ def print_summary
173
+ print_counts
174
+ print_snippets(@options)
163
175
  end
164
176
 
165
177
  end
@@ -17,17 +17,17 @@ module Cucumber
17
17
  super
18
18
  end
19
19
 
20
- def visit_step_name(keyword, step_name, status, step_definition, source_indent)
20
+ def visit_step_name(keyword, step_match, status, source_indent, background)
21
21
  duration = Time.now - @step_duration
22
22
  super
23
23
 
24
- if step_definition # nil for outline steps
25
- description = format_step(keyword, step_name, status, step_definition, nil)
26
- @step_definition_durations[step_definition] << [duration, description, @step.file_line]
24
+ if step_match.step_definition
25
+ description = format_step(keyword, step_match, status, nil)
26
+ @step_definition_durations[step_match.step_definition] << [duration, description, @step.file_colon_line]
27
27
  end
28
28
  end
29
29
 
30
- def print_summary(features)
30
+ def print_summary
31
31
  super
32
32
  @io.puts "\n\nTop #{NUMBER_OF_STEP_DEFINITONS_TO_SHOW} average slowest steps with #{NUMBER_OF_STEP_INVOCATIONS_TO_SHOW} slowest matches:\n"
33
33
 
@@ -60,7 +60,7 @@ module Cucumber
60
60
 
61
61
  def print_step_definition(step_definition, mean_duration)
62
62
  duration = sprintf("%.7f", mean_duration)
63
- @io.puts format_string("#{duration} #{step_definition.to_backtrace_line}", :failed)
63
+ @io.puts format_string("#{duration} #{step_definition.backtrace_line}", :failed)
64
64
  end
65
65
 
66
66
  def print_step_definitions(duration_description_location, step_definition)
@@ -12,41 +12,33 @@ module Cucumber
12
12
  end
13
13
 
14
14
  def visit_features(features)
15
- with_color do
16
- super
17
- @io.puts
18
- @io.puts
19
- print_summary(features)
20
- end
15
+ super
16
+ @io.puts
17
+ @io.puts
18
+ print_summary
21
19
  end
22
20
 
23
- def visit_multiline_arg(multiline_arg, status)
21
+ def visit_multiline_arg(multiline_arg)
24
22
  @multiline_arg = true
25
23
  super
26
24
  @multiline_arg = false
27
25
  end
28
26
 
29
- def visit_feature_element(feature_element)
30
- progress(:undefined) if feature_element.undefined?
31
- super
32
- end
33
-
34
- def visit_step_name(keyword, step_name, status, step_definition, source_indent)
27
+ def visit_step_name(keyword, step_match, status, source_indent, background)
35
28
  progress(status) unless status == :outline
36
29
  end
37
30
 
38
31
  def visit_table_cell_value(value, width, status)
39
32
  progress(status) if (status != :thead) && !@multiline_arg
40
33
  end
41
-
34
+
42
35
  private
43
36
 
44
- def print_summary(features)
45
- print_undefined_scenarios(features)
46
- print_steps(features, :pending)
47
- print_steps(features, :failed)
48
- print_counts(features)
49
- print_snippets(features, @options)
37
+ def print_summary
38
+ print_steps(:pending)
39
+ print_steps(:failed)
40
+ print_counts
41
+ print_snippets(@options)
50
42
  end
51
43
 
52
44
  CHARS = {
@@ -54,7 +46,7 @@ module Cucumber
54
46
  :failed => 'F',
55
47
  :undefined => 'U',
56
48
  :pending => 'P',
57
- :skipped => 'S'
49
+ :skipped => '-'
58
50
  }
59
51
 
60
52
  def progress(status)
@@ -65,4 +57,4 @@ module Cucumber
65
57
 
66
58
  end
67
59
  end
68
- end
60
+ end
@@ -5,13 +5,13 @@ module Cucumber
5
5
  super(step_mother)
6
6
  @io = io
7
7
  @file_names = []
8
- @file_lines = Hash.new{|h,k| h[k] = []}
8
+ @file_colon_lines = Hash.new{|h,k| h[k] = []}
9
9
  end
10
10
 
11
11
  def visit_features(features)
12
12
  super
13
13
  files = @file_names.uniq.map do |file|
14
- lines = @file_lines[file]
14
+ lines = @file_colon_lines[file]
15
15
  "#{file}:#{lines.join(':')}"
16
16
  end
17
17
  @io.puts files.join(' ')
@@ -21,15 +21,15 @@ module Cucumber
21
21
  @rerun = false
22
22
  super
23
23
  if @rerun
24
- file, line = *feature_element.file_line.split(':')
25
- @file_lines[file] << line
24
+ file, line = *feature_element.file_colon_line.split(':')
25
+ @file_colon_lines[file] << line
26
26
  @file_names << file
27
27
  end
28
28
  end
29
29
 
30
- def visit_step_name(keyword, step_name, status, step_definition, source_indent)
30
+ def visit_step_name(keyword, step_match, status, source_indent, background)
31
31
  @rerun = true if [:failed].index(status)
32
32
  end
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -23,65 +23,60 @@ if defined?(JRUBY_VERSION)
23
23
  def initialize(jbehave_steps, jbehave_candidate_step)
24
24
  @jbehave_steps = jbehave_steps
25
25
  @jbehave_candidate_step = jbehave_candidate_step
26
+ @regexp = Regexp.new(jbehave_candidate_step.pattern.pattern)
26
27
  end
27
-
28
- def match(step_name)
29
- full_text = "Given #{step_name}" # JBehave doesn't distinguish GWT internally :-)
30
- @jbehave_candidate_step.matches(full_text)
28
+
29
+ def step_match(name_to_match, name_to_report)
30
+ if(match = name_to_match.match(@regexp))
31
+ StepMatch.new(self, name_to_match, name_to_report, match.captures)
32
+ else
33
+ nil
34
+ end
31
35
  end
32
-
36
+
33
37
  def file_colon_line
34
38
  @jbehave_steps.java_class.name
35
39
  end
36
40
 
37
41
  def format_args(step_name, format)
38
- java_pattern = @jbehave_candidate_step.pattern.pattern
39
- regexp = Regexp.new(java_pattern)
40
- step_name.gzub(regexp, format)
42
+ step_name.gzub(@regexp, format)
41
43
  end
42
44
 
43
- def matched_args(step_name)
44
- java_pattern = @jbehave_candidate_step.pattern.pattern
45
- regexp = Regexp.new(java_pattern)
46
- step_name.match(regexp).captures
47
- end
45
+ def invoke(world, args, step_name)
46
+ step = @jbehave_candidate_step.createFrom("Given #{step_name}") # JBehave doesn't care about the adverb.
47
+ step = @jbehave_candidate_step.__send__(:createStep, "Given #{step_name}", args) # JBehave doesn't care about the adverb.
48
48
 
49
- def execute(step_name, world, *args)
50
- step = @jbehave_candidate_step.createFrom("Given #{step_name}")
51
49
  result = step.perform
52
- result.describeTo(JBehave::REPORTER)
50
+ result.describeTo(Reporter)
53
51
  end
54
52
  end
55
53
 
56
- class JBehaveException < Exception
57
- end
58
-
59
54
  # Implements the org.jbehave.scenario.reporters.ScenarioReporter methods
60
55
  class Reporter
61
- def successful(step_text)
56
+ def self.successful(step_text)
62
57
  # noop
63
58
  end
64
59
 
65
- def failed(step, java_exception)
60
+ def self.failed(step, java_exception)
66
61
  raise java_exception_to_ruby_exception(java_exception)
67
62
  end
68
63
 
69
64
  private
70
65
 
71
- def java_exception_to_ruby_exception(java_exception)
66
+ def self.java_exception_to_ruby_exception(java_exception)
72
67
  # OK, this is a little funky - JRuby weirdness
73
68
  ruby_exception = org.jruby.NativeException.new(JRuby.runtime, JBehaveException, java_exception)
74
69
  ruby_exception.set_backtrace([]) # work around backtrace bug in jruby
75
-
76
- exception = JBehaveException.new(java_exception.getMessage)
70
+ exception = JBehaveException.new("#{java_exception.getClass.getName}: #{java_exception.getMessage}")
77
71
  bt = ruby_exception.backtrace
78
72
  Exception.cucumber_strip_backtrace!(bt, nil, nil)
79
73
  exception.set_backtrace(bt)
80
74
  exception
81
75
  end
82
76
  end
83
-
84
- REPORTER = Reporter.new
77
+
78
+ class JBehaveException < Exception
79
+ end
85
80
 
86
81
  def self.snippet_text(step_keyword, step_name)
87
82
  camel = step_name.gsub(/(\s.)/) {$1.upcase.strip}
@@ -20,6 +20,7 @@
20
20
  then: Then
21
21
  and: And
22
22
  but: But
23
+
23
24
  # Please help us keeping the languages below uptodate. The parsers for a language
24
25
  # that is missing a keyword will expect the English word until the missing word(s)
25
26
  # are added.
@@ -94,6 +95,20 @@
94
95
  then: Dann
95
96
  and: Und
96
97
  but: Aber
98
+ "en-au":
99
+ name: Australian
100
+ native: Australian
101
+ encoding: UTF-8
102
+ feature: Crikey
103
+ background: Background
104
+ scenario: Mate
105
+ scenario_outline: Blokes
106
+ examples: Cobber
107
+ given: Ya know how
108
+ when: When
109
+ then: Ya gotta
110
+ and: N
111
+ but: Cept
97
112
  "en-lol":
98
113
  name: LOLCAT
99
114
  native: LOLCAT
@@ -103,7 +118,7 @@
103
118
  scenario: MISHUN
104
119
  scenario_outline: MISHUN SRSLY
105
120
  examples: EXAMPLZ
106
- given: GIVN
121
+ given: I CAN HAZ
107
122
  when: WEN
108
123
  then: DEN
109
124
  and: AN
@@ -115,7 +130,7 @@
115
130
  feature: Feature
116
131
  background: Background
117
132
  scenario: Scenario
118
- scenario_outline: Scenario Outline
133
+ scenario_outline: All y'all
119
134
  examples: Examples
120
135
  given: Given y'all
121
136
  when: When y'all
@@ -45,7 +45,7 @@ module Cucumber
45
45
  elements[5]
46
46
  end
47
47
 
48
- def background
48
+ def bg
49
49
  elements[6]
50
50
  end
51
51
 
@@ -57,11 +57,14 @@ module Cucumber
57
57
 
58
58
  module Feature2
59
59
  def build
60
- if background.respond_to?(:build)
61
- Ast::Feature.new(comment.build, tags.build, header.text_value, feature_elements.build, background.build)
62
- else
63
- Ast::Feature.new(comment.build, tags.build, header.text_value, feature_elements.build)
64
- end
60
+ background = bg.respond_to?(:build) ? bg.build : nil
61
+ Ast::Feature.new(
62
+ background,
63
+ comment.build,
64
+ tags.build,
65
+ header.text_value,
66
+ feature_elements.build(background)
67
+ )
65
68
  end
66
69
  end
67
70
 
@@ -311,7 +314,7 @@ module Cucumber
311
314
  if r1
312
315
  s2, i2 = [], index
313
316
  loop do
314
- if input.index(Regexp.new('[^@\\n\\t ]'), index) == index
317
+ if input.index(Regexp.new('[^@\\r\\n\\t ]'), index) == index
315
318
  r3 = (SyntaxNode).new(input, index...(index + 1))
316
319
  @index += 1
317
320
  else
@@ -548,8 +551,8 @@ module Cucumber
548
551
  end
549
552
 
550
553
  module FeatureElements0
551
- def build
552
- elements.map{|s| s.build}
554
+ def build(background)
555
+ elements.map{|s| s.build(background)}
553
556
  end
554
557
  end
555
558
 
@@ -611,6 +614,10 @@ module Cucumber
611
614
  elements[5]
612
615
  end
613
616
 
617
+ def white
618
+ elements[6]
619
+ end
620
+
614
621
  def steps
615
622
  elements[7]
616
623
  end
@@ -621,8 +628,9 @@ module Cucumber
621
628
  end
622
629
 
623
630
  module Scenario1
624
- def build
631
+ def build(background)
625
632
  Ast::Scenario.new(
633
+ background,
626
634
  comment.build,
627
635
  tags.build,
628
636
  scenario_keyword.line,
@@ -669,26 +677,14 @@ module Cucumber
669
677
  r7 = _nt_line_to_eol
670
678
  s0 << r7
671
679
  if r7
672
- i8 = index
673
- r9 = _nt_white
674
- if r9
675
- r8 = r9
676
- else
677
- r10 = _nt_eof
678
- if r10
679
- r8 = r10
680
- else
681
- self.index = i8
682
- r8 = nil
683
- end
684
- end
680
+ r8 = _nt_white
685
681
  s0 << r8
686
682
  if r8
687
- r11 = _nt_steps
688
- s0 << r11
689
- if r11
690
- r12 = _nt_white
691
- s0 << r12
683
+ r9 = _nt_steps
684
+ s0 << r9
685
+ if r9
686
+ r10 = _nt_white
687
+ s0 << r10
692
688
  end
693
689
  end
694
690
  end
@@ -750,8 +746,9 @@ module Cucumber
750
746
  end
751
747
 
752
748
  module ScenarioOutline1
753
- def build
749
+ def build(background)
754
750
  Ast::ScenarioOutline.new(
751
+ background,
755
752
  comment.build,
756
753
  tags.build,
757
754
  scenario_outline_keyword.line,