cucumber 3.0.0.pre.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +32 -0
  3. data/.github/ISSUE_TEMPLATE.md +1 -1
  4. data/.github/PULL_REQUEST_TEMPLATE.md +1 -0
  5. data/.rubocop_todo.yml +1 -85
  6. data/.travis.yml +2 -2
  7. data/{History.md → CHANGELOG.md} +69 -13
  8. data/appveyor.yml +2 -1
  9. data/bin/cucumber +2 -1
  10. data/cucumber.gemspec +1 -1
  11. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +6 -1
  12. data/examples/i18n/bg/features/support/env.rb +6 -1
  13. data/examples/i18n/bg/lib/calculator.rb +2 -1
  14. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +6 -1
  15. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +6 -1
  16. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +6 -1
  17. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +6 -1
  18. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +6 -1
  19. data/examples/i18n/en-lol/features/support/env.rb +6 -2
  20. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +6 -1
  21. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +6 -1
  22. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +6 -1
  23. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +6 -1
  24. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +6 -1
  25. data/examples/i18n/fr/features/support/env.rb +6 -1
  26. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +6 -1
  27. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +6 -1
  28. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +6 -2
  29. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +6 -1
  30. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +6 -1
  31. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +6 -1
  32. data/examples/i18n/ja/features/support/env.rb +6 -1
  33. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +6 -1
  34. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +6 -1
  35. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +6 -1
  36. data/examples/i18n/no/features/support/env.rb +6 -1
  37. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +6 -1
  38. data/examples/i18n/pl/features/support/env.rb +6 -1
  39. data/examples/i18n/pt/features/support/env.rb +6 -1
  40. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +6 -1
  41. data/examples/i18n/ru/features/support/env.rb +6 -1
  42. data/examples/i18n/ru/lib/calculator.rb +2 -1
  43. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +6 -1
  44. data/examples/i18n/sr-Cyrl/features/support/env.rb +6 -1
  45. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +6 -1
  46. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +6 -1
  47. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +6 -1
  48. data/examples/i18n/uk/features/support/env.rb +6 -1
  49. data/examples/i18n/uk/lib/calculator.rb +2 -1
  50. data/examples/i18n/uz/features/support/env.rb +6 -1
  51. data/examples/i18n/uz/lib/calculator.rb +2 -1
  52. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +6 -1
  53. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +6 -1
  54. data/examples/sinatra/features/support/env.rb +6 -1
  55. data/examples/tcl/features/support/env.rb +2 -1
  56. data/examples/watir/features/step_definitions/search_steps.rb +4 -3
  57. data/examples/watir/features/support/env.rb +5 -1
  58. data/features/docs/api/listen_for_events.feature +2 -2
  59. data/features/docs/cli/execute_with_tag_filter.feature +4 -2
  60. data/features/docs/defining_steps/ambiguous_steps.feature +89 -0
  61. data/features/docs/events/{test_case_starting_event.feature → test_case_started_event.feature} +3 -3
  62. data/features/docs/events/{test_run_starting_event.feature → test_run_started_event.feature} +5 -5
  63. data/features/docs/events/test_step_finished_event.feature +1 -1
  64. data/features/docs/events/{test_step_starting_event.feature → test_step_started_event.feature} +3 -3
  65. data/features/docs/extending_cucumber/custom_formatter.feature +5 -33
  66. data/features/docs/gherkin/outlines.feature +2 -4
  67. data/features/docs/writing_support_code/parameter_types.feature +1 -23
  68. data/features/lib/step_definitions/iso-8859-1_steps.rb +6 -3
  69. data/features/lib/support/fake_wire_server.rb +9 -1
  70. data/features/lib/support/parameter_types.rb +1 -4
  71. data/gem_tasks/fix_cr_lf.rake +17 -6
  72. data/lib/autotest/cucumber_mixin.rb +1 -1
  73. data/lib/cucumber/cli/configuration.rb +2 -2
  74. data/lib/cucumber/cli/options.rb +62 -41
  75. data/lib/cucumber/cli/profile_loader.rb +1 -1
  76. data/lib/cucumber/configuration.rb +3 -2
  77. data/lib/cucumber/deprecate.rb +2 -2
  78. data/lib/cucumber/events.rb +3 -3
  79. data/lib/cucumber/events/test_case_finished.rb +1 -1
  80. data/lib/cucumber/events/{test_case_starting.rb → test_case_started.rb} +1 -1
  81. data/lib/cucumber/events/{test_run_starting.rb → test_run_started.rb} +1 -1
  82. data/lib/cucumber/events/{test_step_starting.rb → test_step_started.rb} +1 -1
  83. data/lib/cucumber/filters.rb +1 -1
  84. data/lib/cucumber/filters/activate_steps.rb +6 -2
  85. data/lib/cucumber/filters/{broadcast_test_run_starting_event.rb → broadcast_test_run_started_event.rb} +2 -2
  86. data/lib/cucumber/formatter/console.rb +1 -1
  87. data/lib/cucumber/formatter/console_issues.rb +2 -2
  88. data/lib/cucumber/formatter/fail_fast.rb +1 -1
  89. data/lib/cucumber/formatter/html.rb +9 -10
  90. data/lib/cucumber/formatter/html_builder.rb +21 -11
  91. data/lib/cucumber/formatter/io.rb +1 -1
  92. data/lib/cucumber/formatter/json.rb +13 -12
  93. data/lib/cucumber/formatter/junit.rb +7 -7
  94. data/lib/cucumber/formatter/legacy_api/adapter.rb +30 -14
  95. data/lib/cucumber/formatter/legacy_api/ast.rb +10 -2
  96. data/lib/cucumber/formatter/progress.rb +2 -2
  97. data/lib/cucumber/formatter/rerun.rb +1 -1
  98. data/lib/cucumber/formatter/summary.rb +1 -1
  99. data/lib/cucumber/glue/dsl.rb +7 -25
  100. data/lib/cucumber/glue/proto_world.rb +0 -5
  101. data/lib/cucumber/hooks.rb +4 -4
  102. data/lib/cucumber/multiline_argument.rb +3 -11
  103. data/lib/cucumber/multiline_argument/data_table.rb +5 -3
  104. data/lib/cucumber/project_initializer.rb +1 -1
  105. data/lib/cucumber/rake/task.rb +8 -4
  106. data/lib/cucumber/runtime.rb +2 -2
  107. data/lib/cucumber/runtime/support_code.rb +1 -1
  108. data/lib/cucumber/runtime/user_interface.rb +5 -5
  109. data/lib/cucumber/step_match.rb +13 -0
  110. data/lib/cucumber/version +1 -1
  111. data/scripts/{update-history → update-changelog} +14 -11
  112. data/spec/cucumber/cli/configuration_spec.rb +13 -1
  113. data/spec/cucumber/cli/options_spec.rb +1 -1
  114. data/spec/cucumber/filters/activate_steps_spec.rb +4 -4
  115. data/spec/cucumber/formatter/fail_fast_spec.rb +1 -1
  116. data/spec/cucumber/formatter/html_spec.rb +1 -1
  117. data/spec/cucumber/formatter/json_spec.rb +26 -51
  118. data/spec/cucumber/formatter/junit_spec.rb +4 -4
  119. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +86 -98
  120. data/spec/cucumber/formatter/pretty_spec.rb +0 -13
  121. data/spec/cucumber/glue/snippet_spec.rb +2 -2
  122. data/spec/cucumber/hooks_spec.rb +2 -2
  123. data/spec/cucumber/multiline_argument/data_table_spec.rb +10 -5
  124. data/spec/cucumber/rake/forked_spec.rb +15 -11
  125. data/spec/cucumber/world/pending_spec.rb +1 -1
  126. data/spec/support/standard_step_actions.rb +1 -1
  127. metadata +25 -25
  128. data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
@@ -10,11 +10,6 @@ module Cucumber
10
10
  # make sense in your domain. For more on that, see {Cucumber::Glue::Dsl#World}
11
11
  module ProtoWorld
12
12
 
13
- # Call a Transform with a string from another Transform definition
14
- def Transform(arg)
15
- super
16
- end
17
-
18
13
  # Run a single Gherkin step
19
14
  # @example Call another step
20
15
  # step "I am logged in"
@@ -19,7 +19,7 @@ module Cucumber
19
19
  end
20
20
 
21
21
  def after_step_hook(source, location, &block)
22
- raise ArgumentError unless source.last.kind_of?(Core::Ast::Step)
22
+ raise ArgumentError unless source.last.is_a?(Core::Ast::Step)
23
23
  build_hook_step(source, location, block, AfterStepHook, Core::Test::Action)
24
24
  end
25
25
 
@@ -43,7 +43,7 @@ module Cucumber
43
43
  @location = location
44
44
  end
45
45
 
46
- def name
46
+ def text
47
47
  'After hook'
48
48
  end
49
49
 
@@ -63,7 +63,7 @@ module Cucumber
63
63
  @location = location
64
64
  end
65
65
 
66
- def name
66
+ def text
67
67
  'Before hook'
68
68
  end
69
69
 
@@ -83,7 +83,7 @@ module Cucumber
83
83
  @location = location
84
84
  end
85
85
 
86
- def name
86
+ def text
87
87
  'AfterStep hook'
88
88
  end
89
89
 
@@ -11,14 +11,14 @@ module Cucumber
11
11
  builder.wrap(node)
12
12
  end
13
13
 
14
- def from(argument, location=nil)
14
+ def from(argument, location=nil, content_type=nil)
15
15
  location ||= Core::Ast::Location.of_caller
16
16
  case argument
17
17
  when String
18
- doc_string(argument, 'text/plain', location)
18
+ builder.doc_string(Core::Ast::DocString.new(argument, content_type, location))
19
19
  when Array
20
20
  location = location.on_line(argument.first.line..argument.last.line)
21
- data_table(argument.map{ |row| row.cells }, location)
21
+ builder.data_table(argument.map{ |row| row.cells }, location)
22
22
  when DataTable, DocString, None
23
23
  argument
24
24
  when nil
@@ -28,14 +28,6 @@ module Cucumber
28
28
  end
29
29
  end
30
30
 
31
- def doc_string(argument, content_type, location)
32
- builder.doc_string(Core::Ast::DocString.new(argument, content_type, location))
33
- end
34
-
35
- def data_table(data, location)
36
- builder.data_table(Core::Ast::DataTable.new(data, location))
37
- end
38
-
39
31
  private
40
32
 
41
33
  def builder
@@ -82,7 +82,7 @@ module Cucumber
82
82
  # @param header_mappings [Hash] see map_headers!
83
83
  # @param header_conversion_proc [Proc] see map_headers!
84
84
  def initialize(data, conversion_procs = NULL_CONVERSIONS.dup, header_mappings = {}, header_conversion_proc = nil)
85
- raise ArgumentError, 'data must be a Core::Ast::DataTable' unless data.kind_of? Core::Ast::DataTable
85
+ raise ArgumentError, 'data must be a Core::Ast::DataTable' unless data.is_a? Core::Ast::DataTable
86
86
  ast_table = data
87
87
  # Verify that it's square
88
88
  ast_table.transpose
@@ -159,8 +159,10 @@ module Cucumber
159
159
  # [{:foo => '2', :bar => '3', :foo_bar => '5'}, {:foo => '7', :bar => '9', :foo_bar => '16'}]
160
160
  #
161
161
  def symbolic_hashes
162
- @header_conversion_proc = lambda { |h| symbolize_key(h) }
163
- @symbolic_hashes ||= build_hashes
162
+ @symbolic_hashes ||=
163
+ self.hashes.map do |string_hash|
164
+ Hash[string_hash.map{ |a,b| [symbolize_key(a), b] }]
165
+ end
164
166
  end
165
167
 
166
168
  # Converts this table into a Hash where the first column is
@@ -27,7 +27,7 @@ module Cucumber
27
27
  :touch
28
28
  end
29
29
 
30
- report_exists(file_name) || return if File.exists?(file_name)
30
+ report_exists(file_name) || return if File.exist?(file_name)
31
31
 
32
32
  report_creating(file_name)
33
33
  FileUtils.send file_type, file_name
@@ -81,11 +81,15 @@ module Cucumber
81
81
 
82
82
  def cmd
83
83
  if use_bundler
84
- [ Cucumber::RUBY_BINARY, '-S', 'bundle', 'exec', 'cucumber', @cucumber_opts,
85
- @feature_files ].flatten
84
+ [
85
+ Cucumber::RUBY_BINARY,'-S', 'bundle', 'exec', 'cucumber',
86
+ @cucumber_opts, @feature_files
87
+ ].flatten
86
88
  else
87
- [ Cucumber::RUBY_BINARY, '-I', load_path, quoted_binary(@cucumber_bin),
88
- @cucumber_opts, @feature_files ].flatten
89
+ [
90
+ Cucumber::RUBY_BINARY, '-I', load_path,
91
+ quoted_binary(@cucumber_bin), @cucumber_opts, @feature_files
92
+ ].flatten
89
93
  end
90
94
  end
91
95
 
@@ -229,7 +229,7 @@ module Cucumber
229
229
  if @configuration.wip?
230
230
  summary_report.test_cases.total_passed > 0
231
231
  else
232
- !summary_report.ok?(@configuration.strict?)
232
+ !summary_report.ok?(@configuration.strict)
233
233
  end
234
234
  end
235
235
  public :failure?
@@ -256,7 +256,7 @@ module Cucumber
256
256
  filters << Filters::ApplyBeforeHooks.new(@support_code)
257
257
  filters << Filters::ApplyAfterHooks.new(@support_code)
258
258
  filters << Filters::ApplyAroundHooks.new(@support_code)
259
- filters << Filters::BroadcastTestRunStartingEvent.new(@configuration)
259
+ filters << Filters::BroadcastTestRunStartedEvent.new(@configuration)
260
260
  filters << Filters::Quit.new
261
261
  filters << Filters::Retry.new(@configuration)
262
262
  # need to do this last so it becomes the first test step
@@ -34,7 +34,7 @@ module Cucumber
34
34
 
35
35
  if argument
36
36
  if argument[:type] == :DocString
37
- MultilineArgument.doc_string(argument[:content], argument[:content_type], location)
37
+ MultilineArgument.from(argument[:content], location, argument[:content_type])
38
38
  else
39
39
  MultilineArgument::DataTable.from(argument[:rows].map { |row| row[:cells].map { |cell| cell[:value] } })
40
40
  end
@@ -33,11 +33,11 @@ module Cucumber
33
33
  STDOUT.flush
34
34
  puts(question)
35
35
 
36
- if(Cucumber::JRUBY)
37
- answer = jruby_gets(timeout_seconds)
38
- else
39
- answer = mri_gets(timeout_seconds)
40
- end
36
+ answer = if(Cucumber::JRUBY)
37
+ jruby_gets(timeout_seconds)
38
+ else
39
+ mri_gets(timeout_seconds)
40
+ end
41
41
 
42
42
  raise("Waited for input for #{timeout_seconds} seconds, then timed out.") unless answer
43
43
  puts(answer)
@@ -140,4 +140,17 @@ module Cucumber
140
140
  return test_step
141
141
  end
142
142
  end
143
+
144
+ class AmbiguousStepMatch
145
+
146
+ def initialize(error)
147
+ @error = error
148
+ end
149
+
150
+ def activate(test_step)
151
+ return test_step.with_action { raise @error }
152
+ end
153
+
154
+ end
155
+
143
156
  end
data/lib/cucumber/version CHANGED
@@ -1 +1 @@
1
- 3.0.0.pre.2
1
+ 3.0.0
@@ -11,7 +11,10 @@ class PullRequest
11
11
 
12
12
  def entry
13
13
  pr = gh.pull_request('cucumber/cucumber-ruby', num)
14
- "#{pr['title']} ([##{num}(#{pr['url']}) @#{pr['user']['login']})"
14
+ username = pr['user']['login']
15
+ url = pr['html_url']
16
+ title = pr['title']
17
+ "#{title} ([##{num}](#{url}) [@#{username}](https://github.com/#{username}))"
15
18
  end
16
19
 
17
20
  def labels
@@ -32,12 +35,12 @@ class PullRequest
32
35
  end
33
36
  end
34
37
 
35
- class HistoryFile
38
+ class Changelog
36
39
  def self.open(path, &block)
37
- full_path = File.expand_path(File.dirname(__FILE__) + '/' + path + '/History.md')
38
- history = new(File.read(full_path))
39
- history.instance_exec(&block)
40
- File.write(full_path, history.body)
40
+ full_path = File.expand_path(File.dirname(__FILE__) + '/' + path + '/CHANGELOG.md')
41
+ log = new(File.read(full_path))
42
+ log.instance_exec(&block)
43
+ File.write(full_path, log.body)
41
44
  end
42
45
 
43
46
  attr_reader :lines
@@ -49,16 +52,16 @@ class HistoryFile
49
52
  def insert(label, entry)
50
53
  section_index = lines.index { |line| line.strip == heading_for(label) }
51
54
  unless section_index
52
- raise("Unable to find matching heading in History.md for '#{label}' (#{heading_for(label)})")
55
+ raise("Unable to find matching heading in CHANGELOG.md for '#{label}' (#{heading_for(label)})")
53
56
  end
54
57
  lines.insert(section_index + 2, "* #{entry}\n")
55
58
  end
56
59
 
57
60
  def heading_for(label)
58
61
  text = {
59
- 'type: new feature' => 'New Features',
60
- 'type: bug' => 'Bugfixes',
61
- 'type: refactoring / developer experience' => 'Refactoring / Developer Experience'
62
+ 'type: new feature' => 'Added',
63
+ 'type: bug' => 'Fixed',
64
+ 'type: refactoring / developer experience' => 'Changed'
62
65
  }.fetch(label)
63
66
  "### #{text}"
64
67
  end
@@ -75,7 +78,7 @@ begin
75
78
  gh = Octokit::Client.new(access_token: token)
76
79
  pr = PullRequest.new(gh, num)
77
80
 
78
- HistoryFile.open('..') do
81
+ Changelog.open('..') do
79
82
  insert(pr.type_label, pr.entry)
80
83
  end
81
84
  rescue StandardError => error
@@ -71,7 +71,19 @@ module Cli
71
71
 
72
72
  config.parse!(%w{--profile bongo})
73
73
 
74
- expect(config.options[:strict]).to be true
74
+ expect(config.options[:strict].strict?(:undefined)).to be true
75
+ expect(config.options[:strict].strict?(:pending)).to be true
76
+ expect(config.options[:strict].strict?(:flaky)).to be true
77
+ end
78
+
79
+ it 'allows --strict from a profile to be selectively overridden' do
80
+ given_cucumber_yml_defined_as({'bongo' => '--strict'})
81
+
82
+ config.parse!(%w{--profile bongo --no-strict-flaky})
83
+
84
+ expect(config.options[:strict].strict?(:undefined)).to be true
85
+ expect(config.options[:strict].strict?(:pending)).to be true
86
+ expect(config.options[:strict].strict?(:flaky)).to be false
75
87
  end
76
88
 
77
89
  it 'parses ERB syntax in the cucumber.yml file' do
@@ -310,7 +310,7 @@ module Cucumber
310
310
  <% $cucumber_yml_read_count += 1 %>
311
311
  default: --format pretty
312
312
  END
313
- )
313
+ )
314
314
  options = Options.new(output_stream, error_stream, :default_profile => 'default')
315
315
  options.parse!(%w(-f progress))
316
316
 
@@ -27,7 +27,7 @@ describe Cucumber::Filters::ActivateSteps do
27
27
 
28
28
  it 'activates each step' do
29
29
  expect(step_match).to receive(:activate) do |test_step|
30
- expect(test_step.name).to eq 'a passing step'
30
+ expect(test_step.text).to eq 'a passing step'
31
31
  end
32
32
  compile [doc], receiver, [filter]
33
33
  end
@@ -35,7 +35,7 @@ describe Cucumber::Filters::ActivateSteps do
35
35
  it 'notifies with a StepActivated event' do
36
36
  expect(configuration).to receive(:notify) do |message, test_step, step_match|
37
37
  expect(message).to eq :step_activated
38
- expect(test_step.name).to eq 'a passing step'
38
+ expect(test_step.text).to eq 'a passing step'
39
39
  expect(step_match).to eq step_match
40
40
  end
41
41
  compile [doc], receiver, [filter]
@@ -60,7 +60,7 @@ describe Cucumber::Filters::ActivateSteps do
60
60
 
61
61
  it 'activates each step' do
62
62
  expect(step_match).to receive(:activate) do |test_step|
63
- expect(test_step.name).to eq 'a passing step'
63
+ expect(test_step.text).to eq 'a passing step'
64
64
  end
65
65
  compile [doc], receiver, [filter]
66
66
  end
@@ -115,7 +115,7 @@ describe Cucumber::Filters::ActivateSteps do
115
115
  it 'notifies with a StepActivated event' do
116
116
  expect(configuration).to receive(:notify) do |message, test_step, step_match|
117
117
  expect(message).to eq :step_activated
118
- expect(test_step.name).to eq 'a passing step'
118
+ expect(test_step.text).to eq 'a passing step'
119
119
  expect(step_match).to eq step_match
120
120
  end
121
121
  compile [doc], receiver, [filter]
@@ -75,7 +75,7 @@ module Cucumber::Formatter
75
75
  end
76
76
 
77
77
  context 'in strict mode' do
78
- let(:configuration) { Cucumber::Configuration.new strict: true }
78
+ let(:configuration) { Cucumber::Configuration.new strict: Cucumber::Core::Test::Result::StrictConfiguration.new([:undefined]) }
79
79
 
80
80
  it 'sets Cucumber.wants_to_quit' do
81
81
  execute [@gherkin], [StandardStepActions.new], configuration.event_bus
@@ -355,7 +355,7 @@ module Cucumber
355
355
 
356
356
  describe 'with a step that embeds a text' do
357
357
  define_steps do
358
- Given(/log/) { embed('log.txt', 'text/plain') }
358
+ Given(/log/) { embed('log.txt', 'text/plain', 'foo') }
359
359
  end
360
360
 
361
361
  define_feature(<<-FEATURE)
@@ -18,31 +18,6 @@ module Cucumber
18
18
  run_defined_feature
19
19
  end
20
20
 
21
- describe 'with a scenario with no steps' do
22
- define_feature <<-FEATURE
23
- Feature: Banana party
24
-
25
- Scenario: Monkey eats bananas
26
- FEATURE
27
-
28
- it 'outputs the json data' do
29
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
30
- [{"id": "banana-party",
31
- "uri": "spec.feature",
32
- "keyword": "Feature",
33
- "name": "Banana party",
34
- "line": 1,
35
- "description": "",
36
- "elements":
37
- [{"id": "banana-party;monkey-eats-bananas",
38
- "keyword": "Scenario",
39
- "name": "Monkey eats bananas",
40
- "line": 3,
41
- "description": "",
42
- "type": "scenario"}]}]})
43
- end
44
- end
45
-
46
21
  describe 'with a scenario with an undefined step' do
47
22
  define_feature <<-FEATURE
48
23
  Feature: Banana party
@@ -106,7 +81,7 @@ module Cucumber
106
81
  [{"keyword": "Given ",
107
82
  "name": "there are bananas",
108
83
  "line": 4,
109
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:87"},
84
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:62"},
110
85
  "result": {"status": "passed",
111
86
  "duration": 1}}]}]}]})
112
87
  end
@@ -143,9 +118,9 @@ module Cucumber
143
118
  [{"keyword": "Given ",
144
119
  "name": "there are bananas",
145
120
  "line": 4,
146
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:124"},
121
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:99"},
147
122
  "result": {"status": "failed",
148
- "error_message": "no bananas (RuntimeError)\\n./spec/cucumber/formatter/json_spec.rb:124:in `/^there are bananas$/'\\nspec.feature:4:in `Given there are bananas'",
123
+ "error_message": "no bananas (RuntimeError)\\n./spec/cucumber/formatter/json_spec.rb:99:in `/^there are bananas$/'\\nspec.feature:4:in `Given there are bananas'",
149
124
  "duration": 1}}]}]}]})
150
125
  end
151
126
  end
@@ -181,9 +156,9 @@ module Cucumber
181
156
  [{"keyword": "Given ",
182
157
  "name": "there are bananas",
183
158
  "line": 4,
184
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:162"},
159
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:137"},
185
160
  "result": {"status": "pending",
186
- "error_message": "TODO (Cucumber::Pending)\\n./spec/cucumber/formatter/json_spec.rb:162:in `/^there are bananas$/'\\nspec.feature:4:in `Given there are bananas'",
161
+ "error_message": "TODO (Cucumber::Pending)\\n./spec/cucumber/formatter/json_spec.rb:137:in `/^there are bananas$/'\\nspec.feature:4:in `Given there are bananas'",
187
162
  "duration": 1}}]}]}]})
188
163
  end
189
164
  end
@@ -223,7 +198,7 @@ module Cucumber
223
198
  [{"keyword": "Given ",
224
199
  "name": "there are bananas",
225
200
  "line": 8,
226
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:204"},
201
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:179"},
227
202
  "result": {"status": "passed",
228
203
  "duration": 1}}]}]}]})
229
204
  end
@@ -277,7 +252,7 @@ module Cucumber
277
252
  [{"keyword": "Given ",
278
253
  "name": "there are bananas",
279
254
  "line": 6,
280
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:252"},
255
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:227"},
281
256
  "result": {"status": "passed",
282
257
  "duration": 1}}]},
283
258
  {"id": "banana-party;monkey-eats-bananas;fruit-table;2",
@@ -296,7 +271,7 @@ module Cucumber
296
271
  [{"keyword": "Given ",
297
272
  "name": "there are bananas",
298
273
  "line": 15,
299
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:252"},
274
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:227"},
300
275
  "result": {"status": "passed",
301
276
  "duration": 1}}]}]}]})
302
277
  end
@@ -355,7 +330,7 @@ module Cucumber
355
330
  [{"keyword": "Given ",
356
331
  "name": "there are bananas",
357
332
  "line": 6,
358
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:332"},
333
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:307"},
359
334
  "result": {"status": "passed",
360
335
  "duration": 1}}]},
361
336
  {"id": "banana-party;monkey-eats-bananas",
@@ -372,7 +347,7 @@ module Cucumber
372
347
  "line": 11,
373
348
  "comments": [{"value": "#step comment1",
374
349
  "line": 10}],
375
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:333"},
350
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:308"},
376
351
  "result": {"status": "passed",
377
352
  "duration": 1}}]},
378
353
  {"keyword": "Background",
@@ -386,7 +361,7 @@ module Cucumber
386
361
  [{"keyword": "Given ",
387
362
  "name": "there are bananas",
388
363
  "line": 6,
389
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:332"},
364
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:307"},
390
365
  "result": {"status": "passed",
391
366
  "duration": 1}}]},
392
367
  {"id": "banana-party;monkey-eats-bananas;fruit-table;2",
@@ -407,7 +382,7 @@ module Cucumber
407
382
  "line": 22,
408
383
  "comments": [{"value": "#step comment2",
409
384
  "line": 15}],
410
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:333"},
385
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:308"},
411
386
  "result": {"status": "passed",
412
387
  "duration": 1}}]}]}]})
413
388
  end
@@ -450,7 +425,7 @@ module Cucumber
450
425
  "doc_string": {"value": "the doc string",
451
426
  "content_type": "",
452
427
  "line": 5},
453
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:428"},
428
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:403"},
454
429
  "result": {"status": "passed",
455
430
  "duration": 1}}]}]}]})
456
431
  end
@@ -488,7 +463,7 @@ module Cucumber
488
463
  "name": "there are bananas",
489
464
  "line": 4,
490
465
  "output": ["from step"],
491
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:468"},
466
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:443"},
492
467
  "result": {"status": "passed",
493
468
  "duration": 1}}]}]}]})
494
469
  end
@@ -600,7 +575,7 @@ module Cucumber
600
575
  "line": 4,
601
576
  "embeddings": [{"mime_type": "mime-type",
602
577
  "data": "YWJj"}],
603
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:578"},
578
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:553"},
604
579
  "result": {"status": "passed",
605
580
  "duration": 1}}]}]}]})
606
581
  end
@@ -645,7 +620,7 @@ module Cucumber
645
620
  "line": 4,
646
621
  "embeddings": [{"mime_type": "image/png",
647
622
  "data": "Zm9v"}],
648
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:618"},
623
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:593"},
649
624
  "result": {"status": "passed",
650
625
  "duration": 1}}]}]}]})
651
626
  end
@@ -686,31 +661,31 @@ module Cucumber
686
661
  "description": "",
687
662
  "type": "scenario",
688
663
  "before":
689
- [{"match": {"location": "spec/cucumber/formatter/json_spec.rb:663"},
664
+ [{"match": {"location": "spec/cucumber/formatter/json_spec.rb:638"},
690
665
  "result": {"status": "passed",
691
666
  "duration": 1}},
692
- {"match": {"location": "spec/cucumber/formatter/json_spec.rb:664"},
667
+ {"match": {"location": "spec/cucumber/formatter/json_spec.rb:639"},
693
668
  "result": {"status": "passed",
694
669
  "duration": 1}}],
695
670
  "steps":
696
671
  [{"keyword": "Given ",
697
672
  "name": "there are bananas",
698
673
  "line": 4,
699
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:670"},
674
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:645"},
700
675
  "result": {"status": "passed",
701
676
  "duration": 1},
702
677
  "after":
703
- [{"match": {"location": "spec/cucumber/formatter/json_spec.rb:667"},
678
+ [{"match": {"location": "spec/cucumber/formatter/json_spec.rb:642"},
704
679
  "result": {"status": "passed",
705
680
  "duration": 1}},
706
- {"match": {"location": "spec/cucumber/formatter/json_spec.rb:668"},
681
+ {"match": {"location": "spec/cucumber/formatter/json_spec.rb:643"},
707
682
  "result": {"status": "passed",
708
683
  "duration": 1}}]}],
709
684
  "after":
710
- [{"match": {"location": "spec/cucumber/formatter/json_spec.rb:666"},
685
+ [{"match": {"location": "spec/cucumber/formatter/json_spec.rb:641"},
711
686
  "result": {"status": "passed",
712
687
  "duration": 1}},
713
- {"match": {"location": "spec/cucumber/formatter/json_spec.rb:665"},
688
+ {"match": {"location": "spec/cucumber/formatter/json_spec.rb:640"},
714
689
  "result": {"status": "passed",
715
690
  "duration": 1}}]}]}]})
716
691
  end
@@ -748,13 +723,13 @@ module Cucumber
748
723
  [{"keyword": "Given ",
749
724
  "name": "there are bananas",
750
725
  "line": 4,
751
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:729"},
726
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:704"},
752
727
  "result": {"status": "passed",
753
728
  "duration": 1}}],
754
729
  "around":
755
730
  [{"match": {"location": "unknown_hook_location:1"},
756
731
  "result": {"status": "failed",
757
- "error_message": "error (RuntimeError)\\n./spec/cucumber/formatter/json_spec.rb:728:in `Around'",
732
+ "error_message": "error (RuntimeError)\\n./spec/cucumber/formatter/json_spec.rb:703:in `Around'",
758
733
  "duration": 1}}]}]}]})
759
734
  end
760
735
  end
@@ -795,7 +770,7 @@ module Cucumber
795
770
  "rows":
796
771
  [{"cells": ["aa", "bb"]},
797
772
  {"cells": ["cc", "dd"]}],
798
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:773"},
773
+ "match": {"location": "spec/cucumber/formatter/json_spec.rb:748"},
799
774
  "result": {"status": "passed",
800
775
  "duration": 1}}]}]}]})
801
776
  end