kosmas58-cucumber 0.1.99.23 → 0.1.100.5

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