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.
- checksums.yaml +4 -4
- data/.gitattributes +32 -0
- data/.github/ISSUE_TEMPLATE.md +1 -1
- data/.github/PULL_REQUEST_TEMPLATE.md +1 -0
- data/.rubocop_todo.yml +1 -85
- data/.travis.yml +2 -2
- data/{History.md → CHANGELOG.md} +69 -13
- data/appveyor.yml +2 -1
- data/bin/cucumber +2 -1
- data/cucumber.gemspec +1 -1
- data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/bg/features/support/env.rb +6 -1
- data/examples/i18n/bg/lib/calculator.rb +2 -1
- data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +6 -1
- data/examples/i18n/de/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/en-lol/features/support/env.rb +6 -2
- data/examples/i18n/en/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/es/features/step_definitions/calculador_steps.rb +6 -1
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +6 -1
- data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +6 -1
- data/examples/i18n/fr/features/support/env.rb +6 -1
- data/examples/i18n/he/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +6 -2
- data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/id/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +6 -1
- data/examples/i18n/ja/features/support/env.rb +6 -1
- data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/no/features/support/env.rb +6 -1
- data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/pl/features/support/env.rb +6 -1
- data/examples/i18n/pt/features/support/env.rb +6 -1
- data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/ru/features/support/env.rb +6 -1
- data/examples/i18n/ru/lib/calculator.rb +2 -1
- data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/sr-Cyrl/features/support/env.rb +6 -1
- data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +6 -1
- data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +6 -1
- data/examples/i18n/uk/features/support/env.rb +6 -1
- data/examples/i18n/uk/lib/calculator.rb +2 -1
- data/examples/i18n/uz/features/support/env.rb +6 -1
- data/examples/i18n/uz/lib/calculator.rb +2 -1
- data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +6 -1
- data/examples/sinatra/features/support/env.rb +6 -1
- data/examples/tcl/features/support/env.rb +2 -1
- data/examples/watir/features/step_definitions/search_steps.rb +4 -3
- data/examples/watir/features/support/env.rb +5 -1
- data/features/docs/api/listen_for_events.feature +2 -2
- data/features/docs/cli/execute_with_tag_filter.feature +4 -2
- data/features/docs/defining_steps/ambiguous_steps.feature +89 -0
- data/features/docs/events/{test_case_starting_event.feature → test_case_started_event.feature} +3 -3
- data/features/docs/events/{test_run_starting_event.feature → test_run_started_event.feature} +5 -5
- data/features/docs/events/test_step_finished_event.feature +1 -1
- data/features/docs/events/{test_step_starting_event.feature → test_step_started_event.feature} +3 -3
- data/features/docs/extending_cucumber/custom_formatter.feature +5 -33
- data/features/docs/gherkin/outlines.feature +2 -4
- data/features/docs/writing_support_code/parameter_types.feature +1 -23
- data/features/lib/step_definitions/iso-8859-1_steps.rb +6 -3
- data/features/lib/support/fake_wire_server.rb +9 -1
- data/features/lib/support/parameter_types.rb +1 -4
- data/gem_tasks/fix_cr_lf.rake +17 -6
- data/lib/autotest/cucumber_mixin.rb +1 -1
- data/lib/cucumber/cli/configuration.rb +2 -2
- data/lib/cucumber/cli/options.rb +62 -41
- data/lib/cucumber/cli/profile_loader.rb +1 -1
- data/lib/cucumber/configuration.rb +3 -2
- data/lib/cucumber/deprecate.rb +2 -2
- data/lib/cucumber/events.rb +3 -3
- data/lib/cucumber/events/test_case_finished.rb +1 -1
- data/lib/cucumber/events/{test_case_starting.rb → test_case_started.rb} +1 -1
- data/lib/cucumber/events/{test_run_starting.rb → test_run_started.rb} +1 -1
- data/lib/cucumber/events/{test_step_starting.rb → test_step_started.rb} +1 -1
- data/lib/cucumber/filters.rb +1 -1
- data/lib/cucumber/filters/activate_steps.rb +6 -2
- data/lib/cucumber/filters/{broadcast_test_run_starting_event.rb → broadcast_test_run_started_event.rb} +2 -2
- data/lib/cucumber/formatter/console.rb +1 -1
- data/lib/cucumber/formatter/console_issues.rb +2 -2
- data/lib/cucumber/formatter/fail_fast.rb +1 -1
- data/lib/cucumber/formatter/html.rb +9 -10
- data/lib/cucumber/formatter/html_builder.rb +21 -11
- data/lib/cucumber/formatter/io.rb +1 -1
- data/lib/cucumber/formatter/json.rb +13 -12
- data/lib/cucumber/formatter/junit.rb +7 -7
- data/lib/cucumber/formatter/legacy_api/adapter.rb +30 -14
- data/lib/cucumber/formatter/legacy_api/ast.rb +10 -2
- data/lib/cucumber/formatter/progress.rb +2 -2
- data/lib/cucumber/formatter/rerun.rb +1 -1
- data/lib/cucumber/formatter/summary.rb +1 -1
- data/lib/cucumber/glue/dsl.rb +7 -25
- data/lib/cucumber/glue/proto_world.rb +0 -5
- data/lib/cucumber/hooks.rb +4 -4
- data/lib/cucumber/multiline_argument.rb +3 -11
- data/lib/cucumber/multiline_argument/data_table.rb +5 -3
- data/lib/cucumber/project_initializer.rb +1 -1
- data/lib/cucumber/rake/task.rb +8 -4
- data/lib/cucumber/runtime.rb +2 -2
- data/lib/cucumber/runtime/support_code.rb +1 -1
- data/lib/cucumber/runtime/user_interface.rb +5 -5
- data/lib/cucumber/step_match.rb +13 -0
- data/lib/cucumber/version +1 -1
- data/scripts/{update-history → update-changelog} +14 -11
- data/spec/cucumber/cli/configuration_spec.rb +13 -1
- data/spec/cucumber/cli/options_spec.rb +1 -1
- data/spec/cucumber/filters/activate_steps_spec.rb +4 -4
- data/spec/cucumber/formatter/fail_fast_spec.rb +1 -1
- data/spec/cucumber/formatter/html_spec.rb +1 -1
- data/spec/cucumber/formatter/json_spec.rb +26 -51
- data/spec/cucumber/formatter/junit_spec.rb +4 -4
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +86 -98
- data/spec/cucumber/formatter/pretty_spec.rb +0 -13
- data/spec/cucumber/glue/snippet_spec.rb +2 -2
- data/spec/cucumber/hooks_spec.rb +2 -2
- data/spec/cucumber/multiline_argument/data_table_spec.rb +10 -5
- data/spec/cucumber/rake/forked_spec.rb +15 -11
- data/spec/cucumber/world/pending_spec.rb +1 -1
- data/spec/support/standard_step_actions.rb +1 -1
- metadata +25 -25
- data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
@@ -26,7 +26,7 @@ module Cucumber
|
|
26
26
|
@args = args
|
27
27
|
@options.parse!(args)
|
28
28
|
arrange_formats
|
29
|
-
raise("You can't use both --strict and --wip") if strict? && wip?
|
29
|
+
raise("You can't use both --strict and --wip") if strict.strict? && wip?
|
30
30
|
set_environment_variables
|
31
31
|
end
|
32
32
|
|
@@ -42,7 +42,7 @@ module Cucumber
|
|
42
42
|
Integer(@options[:seed] || rand(0xFFFF))
|
43
43
|
end
|
44
44
|
|
45
|
-
def strict
|
45
|
+
def strict
|
46
46
|
@options[:strict]
|
47
47
|
end
|
48
48
|
|
data/lib/cucumber/cli/options.rb
CHANGED
@@ -3,6 +3,7 @@ require 'cucumber/cli/profile_loader'
|
|
3
3
|
require 'cucumber/formatter/ansicolor'
|
4
4
|
require 'cucumber/glue/registry_and_more'
|
5
5
|
require 'cucumber/project_initializer'
|
6
|
+
require 'cucumber/core/test/result'
|
6
7
|
|
7
8
|
module Cucumber
|
8
9
|
module Cli
|
@@ -24,20 +25,21 @@ module Cucumber
|
|
24
25
|
'junit' => ['Cucumber::Formatter::Junit', 'Generates a report similar to Ant+JUnit.'],
|
25
26
|
'json' => ['Cucumber::Formatter::Json', 'Prints the feature as JSON'],
|
26
27
|
'json_pretty' => ['Cucumber::Formatter::JsonPretty', 'Prints the feature as prettified JSON'],
|
27
|
-
'summary'
|
28
|
+
'summary' => ['Cucumber::Formatter::Summary', 'Summary output of feature and scenarios']
|
28
29
|
}
|
29
30
|
max = BUILTIN_FORMATS.keys.map{|s| s.length}.max
|
30
|
-
FORMAT_HELP_MSG = [
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
31
|
+
FORMAT_HELP_MSG = [
|
32
|
+
'Use --format rerun --out rerun.txt to write out failing',
|
33
|
+
'features. You can rerun them with cucumber @rerun.txt.',
|
34
|
+
'FORMAT can also be the fully qualified class name of',
|
35
|
+
"your own custom formatter. If the class isn't loaded,",
|
36
|
+
'Cucumber will attempt to require a file with a relative',
|
37
|
+
'file name that is the underscore name of the class name.',
|
38
|
+
'Example: --format Foo::BarZap -> Cucumber will look for',
|
39
|
+
'foo/bar_zap.rb. You can place the file with this relative',
|
40
|
+
'path underneath your features/support directory or anywhere',
|
41
|
+
"on Ruby's LOAD_PATH, for example in a Ruby gem."
|
42
|
+
]
|
41
43
|
|
42
44
|
FORMAT_HELP = (BUILTIN_FORMATS.keys.sort.map do |key|
|
43
45
|
" #{key}#{' ' * (max - key.length)} : #{BUILTIN_FORMATS[key][1]}"
|
@@ -48,11 +50,12 @@ module Cucumber
|
|
48
50
|
NO_PROFILE_LONG_FLAG = '--no-profile'
|
49
51
|
FAIL_FAST_FLAG = '--fail-fast'
|
50
52
|
RETRY_FLAG = '--retry'
|
51
|
-
OPTIONS_WITH_ARGS = [
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
53
|
+
OPTIONS_WITH_ARGS = [
|
54
|
+
'-r', '--require', '--i18n-keywords', '-f', '--format', '-o',
|
55
|
+
'--out', '-t', '--tags', '-n', '--name', '-e', '--exclude',
|
56
|
+
PROFILE_SHORT_FLAG, PROFILE_LONG_FLAG, RETRY_FLAG, '-l',
|
57
|
+
'--lines', '--port', '-I', '--snippet-type'
|
58
|
+
]
|
56
59
|
ORDER_TYPES = %w{defined random}
|
57
60
|
TAG_LIMIT_MATCHER = /(?<tag_name>\@\w+):(?<limit>\d+)/x
|
58
61
|
|
@@ -119,7 +122,10 @@ module Cucumber
|
|
119
122
|
opts.on('-q', '--quiet', 'Alias for --no-snippets --no-source.') { shut_up }
|
120
123
|
opts.on('--no-duration', "Don't print the duration at the end of the summary") { set_option :duration, false }
|
121
124
|
opts.on('-b', '--backtrace', 'Show full backtrace for all errors.') { Cucumber.use_full_backtrace = true }
|
122
|
-
opts.on('-S', '--strict',
|
125
|
+
opts.on('-S', '--[no-]strict', *strict_msg) { |setting| set_strict(setting) }
|
126
|
+
opts.on('--[no-]strict-undefined', 'Fail if there are any undefined results.') { |setting| set_strict(setting, :undefined) }
|
127
|
+
opts.on('--[no-]strict-pending', 'Fail if there are any pending results.') { |setting| set_strict(setting, :pending) }
|
128
|
+
opts.on('--[no-]strict-flaky', 'Fail if there are any flaky results.') { |setting| set_strict(setting, :flaky) }
|
123
129
|
opts.on('-w', '--wip', 'Fail if there are any passing scenarios.') { set_option :wip }
|
124
130
|
opts.on('-v', '--verbose', 'Show the files and features loaded.') { set_option :verbose }
|
125
131
|
opts.on('-g', '--guess', 'Guess best match for Ambiguous steps.') { set_option :guess }
|
@@ -254,6 +260,13 @@ TEXT
|
|
254
260
|
]
|
255
261
|
end
|
256
262
|
|
263
|
+
def strict_msg
|
264
|
+
[
|
265
|
+
'Fail if there are any strict affected results ',
|
266
|
+
'(that is undefined, pending or flaky results).'
|
267
|
+
]
|
268
|
+
end
|
269
|
+
|
257
270
|
def parse_formats(v)
|
258
271
|
formatter, *formatter_options = v.split(',')
|
259
272
|
options_hash = Hash[formatter_options.map { |s| s.split('=') }]
|
@@ -318,12 +331,13 @@ TEXT
|
|
318
331
|
end
|
319
332
|
|
320
333
|
def banner
|
321
|
-
[
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
334
|
+
[
|
335
|
+
'Usage: cucumber [options] [ [FILE|DIR|URL][:LINE[:LINE]*] ]+', '',
|
336
|
+
'Examples:',
|
337
|
+
'cucumber examples/i18n/en/features',
|
338
|
+
'cucumber @rerun.txt (See --format rerun)',
|
339
|
+
'cucumber examples/i18n/it/features/somma.feature:6:98:113',
|
340
|
+
'cucumber -s -i http://rubyurl.com/eeCl', '', ''
|
327
341
|
].join("\n")
|
328
342
|
end
|
329
343
|
|
@@ -409,6 +423,10 @@ TEXT
|
|
409
423
|
@options[:duration] = false
|
410
424
|
end
|
411
425
|
|
426
|
+
def set_strict(setting, type = nil)
|
427
|
+
@options[:strict].set_strict(setting, type)
|
428
|
+
end
|
429
|
+
|
412
430
|
def stdout_formats
|
413
431
|
@options[:formats].select { |_, _, output| output == @out_stream }
|
414
432
|
end
|
@@ -477,7 +495,7 @@ TEXT
|
|
477
495
|
@options[:source] &= other_options[:source]
|
478
496
|
@options[:snippets] &= other_options[:snippets]
|
479
497
|
@options[:duration] &= other_options[:duration]
|
480
|
-
@options[:strict]
|
498
|
+
@options[:strict] = other_options[:strict].merge!(@options[:strict])
|
481
499
|
@options[:dry_run] |= other_options[:dry_run]
|
482
500
|
|
483
501
|
@profiles += other_options.profiles
|
@@ -506,21 +524,24 @@ TEXT
|
|
506
524
|
require 'gherkin/dialect'
|
507
525
|
language = ::Gherkin::Dialect.for(lang)
|
508
526
|
data = Cucumber::MultilineArgument::DataTable.from(
|
509
|
-
[
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
527
|
+
[
|
528
|
+
['feature', to_keywords_string(language.feature_keywords)],
|
529
|
+
['background', to_keywords_string(language.background_keywords)],
|
530
|
+
['scenario', to_keywords_string(language.scenario_keywords)],
|
531
|
+
['scenario_outline', to_keywords_string(language.scenario_outline_keywords)],
|
532
|
+
['examples', to_keywords_string(language.examples_keywords)],
|
533
|
+
['given', to_keywords_string(language.given_keywords)],
|
534
|
+
['when', to_keywords_string(language.when_keywords)],
|
535
|
+
['then', to_keywords_string(language.then_keywords)],
|
536
|
+
['and', to_keywords_string(language.and_keywords)],
|
537
|
+
['but', to_keywords_string(language.but_keywords)],
|
538
|
+
['given (code)', to_code_keywords_string(language.given_keywords)],
|
539
|
+
['when (code)', to_code_keywords_string(language.when_keywords)],
|
540
|
+
['then (code)', to_code_keywords_string(language.then_keywords)],
|
541
|
+
['and (code)', to_code_keywords_string(language.and_keywords)],
|
542
|
+
['but (code)', to_code_keywords_string(language.but_keywords)]
|
543
|
+
]
|
544
|
+
)
|
524
545
|
@out_stream.write(data.to_s({ color: false, prefixes: Hash.new('') }))
|
525
546
|
Kernel.exit(0)
|
526
547
|
end
|
@@ -545,7 +566,7 @@ TEXT
|
|
545
566
|
|
546
567
|
def default_options
|
547
568
|
{
|
548
|
-
:strict =>
|
569
|
+
:strict => Cucumber::Core::Test::Result::StrictConfiguration.new,
|
549
570
|
:require => [],
|
550
571
|
:dry_run => false,
|
551
572
|
:formats => [],
|
@@ -72,7 +72,7 @@ Defined profiles in cucumber.yml:
|
|
72
72
|
end
|
73
73
|
|
74
74
|
begin
|
75
|
-
@cucumber_yml = YAML
|
75
|
+
@cucumber_yml = YAML.load(@cucumber_erb)
|
76
76
|
rescue StandardError
|
77
77
|
raise(YmlLoadError,"cucumber.yml was found, but could not be parsed. Please refer to cucumber's documentation on correct profile usage.\n")
|
78
78
|
end
|
@@ -3,6 +3,7 @@ require 'cucumber/constantize'
|
|
3
3
|
require 'cucumber/cli/rerun_file'
|
4
4
|
require 'cucumber/events'
|
5
5
|
require 'cucumber/core/event_bus'
|
6
|
+
require 'cucumber/core/test/result'
|
6
7
|
require 'forwardable'
|
7
8
|
require 'cucumber'
|
8
9
|
|
@@ -71,7 +72,7 @@ module Cucumber
|
|
71
72
|
@options[:guess]
|
72
73
|
end
|
73
74
|
|
74
|
-
def strict
|
75
|
+
def strict
|
75
76
|
@options[:strict]
|
76
77
|
end
|
77
78
|
|
@@ -243,7 +244,7 @@ module Cucumber
|
|
243
244
|
{
|
244
245
|
:autoload_code_paths => ['features/support', 'features/step_definitions'],
|
245
246
|
:filters => [],
|
246
|
-
:strict =>
|
247
|
+
:strict => Cucumber::Core::Test::Result::StrictConfiguration.new,
|
247
248
|
:require => [],
|
248
249
|
:dry_run => false,
|
249
250
|
:fail_fast => false,
|
data/lib/cucumber/deprecate.rb
CHANGED
@@ -20,11 +20,11 @@ module Cucumber
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
STRATEGY = $0.match(/rspec$/) ? ForDevelopers : ForUsers
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.deprecate(*args)
|
27
|
-
Deprecate::
|
27
|
+
Deprecate::STRATEGY.call(*args)
|
28
28
|
end
|
29
29
|
|
30
30
|
end
|
data/lib/cucumber/events.rb
CHANGED
@@ -24,15 +24,15 @@ module Cucumber
|
|
24
24
|
|
25
25
|
def self.registry
|
26
26
|
Core::Events.build_registry(
|
27
|
-
|
27
|
+
TestCaseStarted,
|
28
28
|
TestCaseFinished,
|
29
29
|
TestStepFinished,
|
30
|
-
|
30
|
+
TestStepStarted,
|
31
31
|
StepDefinitionRegistered,
|
32
32
|
StepActivated,
|
33
33
|
TestRunFinished,
|
34
34
|
GherkinSourceRead,
|
35
|
-
|
35
|
+
TestRunStarted
|
36
36
|
)
|
37
37
|
end
|
38
38
|
end
|
@@ -9,7 +9,7 @@ module Cucumber
|
|
9
9
|
# @return [Cucumber::Core::Test::Case] that was executed
|
10
10
|
attr_reader :test_case
|
11
11
|
|
12
|
-
# @return [Cucumber::Core::Test::Result] the result of running the {Cucumber::Core::Test::
|
12
|
+
# @return [Cucumber::Core::Test::Result] the result of running the {Cucumber::Core::Test::Case}
|
13
13
|
attr_reader :result
|
14
14
|
|
15
15
|
end
|
@@ -4,7 +4,7 @@ module Cucumber
|
|
4
4
|
module Events
|
5
5
|
|
6
6
|
# Signals that a {Cucumber::Core::Test::Case} is about to be executed
|
7
|
-
class
|
7
|
+
class TestCaseStarted < Core::Events::TestCaseStarted
|
8
8
|
|
9
9
|
# @return [Cucumber::Core::Test::Case] the test case to be executed
|
10
10
|
attr_reader :test_case
|
@@ -6,7 +6,7 @@ module Cucumber
|
|
6
6
|
|
7
7
|
# Event fired once all test cases have been filtered before
|
8
8
|
# the first one is executed.
|
9
|
-
class
|
9
|
+
class TestRunStarted < Core::Event.new(:test_cases)
|
10
10
|
|
11
11
|
# @return [Array<Cucumber::Core::Test::Case>] the test cases to be executed
|
12
12
|
attr_reader :test_cases
|
@@ -4,7 +4,7 @@ module Cucumber
|
|
4
4
|
module Events
|
5
5
|
|
6
6
|
# Signals that a {Cucumber::Core::Test::Step} is about to be executed
|
7
|
-
class
|
7
|
+
class TestStepStarted < Core::Events::TestStepStarted
|
8
8
|
|
9
9
|
# @return [Cucumber::Core::Test::Step] the test step to be executed
|
10
10
|
attr_reader :test_step
|
data/lib/cucumber/filters.rb
CHANGED
@@ -4,7 +4,7 @@ require 'cucumber/filters/apply_after_step_hooks'
|
|
4
4
|
require 'cucumber/filters/apply_before_hooks'
|
5
5
|
require 'cucumber/filters/apply_after_hooks'
|
6
6
|
require 'cucumber/filters/apply_around_hooks'
|
7
|
-
require 'cucumber/filters/
|
7
|
+
require 'cucumber/filters/broadcast_test_run_started_event'
|
8
8
|
require 'cucumber/filters/prepare_world'
|
9
9
|
require 'cucumber/filters/quit'
|
10
10
|
require 'cucumber/filters/randomizer'
|
@@ -43,7 +43,11 @@ module Cucumber
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def result
|
46
|
-
|
46
|
+
begin
|
47
|
+
return NoStepMatch.new(test_step.source.last, test_step.text) unless matches.any?
|
48
|
+
rescue Cucumber::Ambiguous => e
|
49
|
+
return AmbiguousStepMatch.new(e)
|
50
|
+
end
|
47
51
|
configuration.notify :step_activated, test_step, match
|
48
52
|
return SkippingStepMatch.new if configuration.dry_run?
|
49
53
|
match
|
@@ -59,7 +63,7 @@ module Cucumber
|
|
59
63
|
end
|
60
64
|
|
61
65
|
def matches
|
62
|
-
step_match_search.call(test_step.
|
66
|
+
step_match_search.call(test_step.text)
|
63
67
|
end
|
64
68
|
end
|
65
69
|
end
|
@@ -3,7 +3,7 @@ module Cucumber
|
|
3
3
|
module Filters
|
4
4
|
# Added at the end of the filter chain to broadcast a list of
|
5
5
|
# all of the test cases that have made it through the filters.
|
6
|
-
class
|
6
|
+
class BroadcastTestRunStartedEvent < Core::Filter.new(:config)
|
7
7
|
def initialize(config, receiver=nil)
|
8
8
|
super
|
9
9
|
@test_cases = []
|
@@ -15,7 +15,7 @@ module Cucumber
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def done
|
18
|
-
config.notify :
|
18
|
+
config.notify :test_run_started, @test_cases
|
19
19
|
@test_cases.map do |test_case|
|
20
20
|
test_case.describe_to(@receiver)
|
21
21
|
end
|
@@ -135,7 +135,7 @@ module Cucumber
|
|
135
135
|
|
136
136
|
def do_print_snippets(snippet_text_proc)
|
137
137
|
snippets = @snippets_input.map do |data|
|
138
|
-
snippet_text_proc.call(data.actual_keyword, data.step.
|
138
|
+
snippet_text_proc.call(data.actual_keyword, data.step.text, data.step.multiline_arg)
|
139
139
|
end.uniq
|
140
140
|
|
141
141
|
text = "\nYou can implement step definitions for undefined steps with these snippets:\n\n"
|
@@ -12,9 +12,9 @@ module Cucumber
|
|
12
12
|
@config.on_event(:test_case_finished) do |event|
|
13
13
|
if event.test_case != @previous_test_case
|
14
14
|
@previous_test_case = event.test_case
|
15
|
-
@issues[event.result.to_sym] << event.test_case unless event.result.ok?(@config.strict
|
15
|
+
@issues[event.result.to_sym] << event.test_case unless event.result.ok?(@config.strict)
|
16
16
|
elsif event.result.passed?
|
17
|
-
@issues[:flaky] << event.test_case unless Core::Test::Result::Flaky.ok?(@config.strict
|
17
|
+
@issues[:flaky] << event.test_case unless Core::Test::Result::Flaky.ok?(@config.strict)
|
18
18
|
@issues[:failed].delete(event.test_case)
|
19
19
|
end
|
20
20
|
end
|
@@ -10,7 +10,7 @@ module Cucumber
|
|
10
10
|
def initialize(configuration)
|
11
11
|
configuration.on_event :test_case_finished do |event|
|
12
12
|
_test_case, result = *event.attributes
|
13
|
-
Cucumber.wants_to_quit = true unless result.ok?(configuration.strict
|
13
|
+
Cucumber.wants_to_quit = true unless result.ok?(configuration.strict)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -42,15 +42,14 @@ module Cucumber
|
|
42
42
|
def embed(src, mime_type, label)
|
43
43
|
if image?(mime_type)
|
44
44
|
src = src_is_file_or_data?(src) ? src : "data:#{standardize_mime_type(mime_type)},#{src}"
|
45
|
-
|
46
|
-
builder.embed_image(src: set_path(src), label: label, id: next_id(:img))
|
45
|
+
builder.embed(type: :image, src: set_path(src), label: label, id: next_id(:img))
|
47
46
|
else
|
48
|
-
builder.
|
47
|
+
builder.embed(type: :text, src: src, label: label, id: next_id(:text))
|
49
48
|
end
|
50
49
|
end
|
51
50
|
|
52
51
|
def set_path(src)
|
53
|
-
if @io.respond_to?(:path)
|
52
|
+
if @io.respond_to?(:path) && File.file?(src)
|
54
53
|
out_dir = Pathname.new(File.dirname(File.absolute_path(@io.path)))
|
55
54
|
src = Pathname.new(File.absolute_path(src)).relative_path_from(out_dir)
|
56
55
|
end
|
@@ -63,7 +62,7 @@ module Cucumber
|
|
63
62
|
end
|
64
63
|
|
65
64
|
def src_is_file_or_data?(src)
|
66
|
-
File.file?(src)
|
65
|
+
File.file?(src) || src =~ /^data:image\/(png|gif|jpg|jpeg);base64,/
|
67
66
|
end
|
68
67
|
|
69
68
|
def image?(mime_type)
|
@@ -222,7 +221,7 @@ module Cucumber
|
|
222
221
|
|
223
222
|
def after_steps(_steps)
|
224
223
|
print_messages
|
225
|
-
builder << '</ol>' if @in_background
|
224
|
+
builder << '</ol>' if @in_background || @in_scenario_outline
|
226
225
|
end
|
227
226
|
|
228
227
|
def before_step(step)
|
@@ -366,7 +365,7 @@ module Cucumber
|
|
366
365
|
def print_messages
|
367
366
|
return if @delayed_messages.empty?
|
368
367
|
|
369
|
-
|
368
|
+
#builder.ol do
|
370
369
|
@delayed_messages.each do |ann|
|
371
370
|
builder.li(:class => 'step message') do
|
372
371
|
builder << ann
|
@@ -390,7 +389,7 @@ module Cucumber
|
|
390
389
|
end
|
391
390
|
|
392
391
|
def after_test_case(_test_case, result)
|
393
|
-
if result.failed?
|
392
|
+
if result.failed? && !@scenario_red
|
394
393
|
set_scenario_color_failed
|
395
394
|
end
|
396
395
|
end
|
@@ -438,7 +437,7 @@ module Cucumber
|
|
438
437
|
end
|
439
438
|
|
440
439
|
def set_scenario_color(status)
|
441
|
-
if status.nil?
|
440
|
+
if status.nil? || status == :undefined || status == :pending
|
442
441
|
set_scenario_color_pending
|
443
442
|
end
|
444
443
|
if status == :failed
|
@@ -453,7 +452,7 @@ module Cucumber
|
|
453
452
|
scenario_or_background = @in_background ? 'background' : 'scenario'
|
454
453
|
builder.text!("makeRed('#{scenario_or_background}_#{@scenario_number}');") unless @scenario_red
|
455
454
|
@scenario_red = true
|
456
|
-
if @options[:expand]
|
455
|
+
if @options[:expand] && @inside_outline
|
457
456
|
builder.text!("makeRed('#{scenario_or_background}_#{@scenario_number}_#{@outline_row}');")
|
458
457
|
end
|
459
458
|
end
|