cucumber 3.0.0.pre.1 → 3.0.0.pre.2
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.
- checksums.yaml +4 -4
- data/.cucumberproignore +6 -0
- data/.rubocop.yml +13 -0
- data/.rubocop_todo.yml +1075 -0
- data/.travis.yml +42 -8
- data/CONTRIBUTING.md +8 -1
- data/Gemfile +16 -10
- data/History.md +96 -36
- data/README.md +12 -3
- data/Rakefile +12 -2
- data/appveyor.yml +26 -0
- data/cucumber.gemspec +15 -10
- data/cucumber.yml +9 -10
- data/examples/i18n/Rakefile +1 -1
- data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +2 -2
- data/examples/i18n/ar/lib/calculator.rb +2 -2
- data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +6 -6
- data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/ca/lib/calculadora.rb +2 -2
- data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/cs/lib/calculator.rb +3 -3
- data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +4 -4
- data/examples/i18n/da/lib/lommeregner.rb +2 -2
- data/examples/i18n/de/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/de/lib/calculator.rb +2 -2
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/el/lib/calculator.rb +2 -2
- data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +4 -4
- data/examples/i18n/en-lol/lib/basket.rb +2 -2
- data/examples/i18n/en-lol/lib/belly.rb +2 -2
- data/examples/i18n/en/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/en/lib/calculator.rb +2 -2
- data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/eo/lib/calculator.rb +2 -2
- data/examples/i18n/es/features/step_definitions/calculador_steps.rb +5 -5
- data/examples/i18n/es/lib/calculador.rb +2 -2
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +4 -4
- data/examples/i18n/et/lib/kalkulaator.rb +3 -3
- data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +3 -3
- data/examples/i18n/fi/lib/laskin.rb +1 -1
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +8 -8
- data/examples/i18n/fr/features/support/env.rb +1 -1
- data/examples/i18n/fr/lib/calculatrice.rb +2 -2
- data/examples/i18n/he/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/he/lib/calculator.rb +1 -1
- data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +3 -3
- data/examples/i18n/hi/lib/calculator.rb +1 -1
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +4 -4
- data/examples/i18n/ht/lib/kalkilatris.rb +2 -2
- data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/hu/lib/calculator.rb +1 -1
- data/examples/i18n/id/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/id/lib/calculator.rb +2 -2
- data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +4 -4
- data/examples/i18n/it/lib/calcolatrice.rb +3 -3
- data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +3 -3
- data/examples/i18n/ja/features/support/env.rb +1 -1
- data/examples/i18n/ja/lib/calculator.rb +2 -2
- data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/ko/lib/calculator.rb +2 -2
- data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/lt/lib/calculator.rb +2 -2
- data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/lv/lib/calculator.rb +2 -2
- data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +3 -3
- data/examples/i18n/no/features/support/env.rb +1 -1
- data/examples/i18n/no/lib/kalkulator.rb +2 -2
- data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/pl/lib/calculator.rb +2 -2
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +3 -3
- data/examples/i18n/pt/features/support/env.rb +1 -1
- data/examples/i18n/pt/lib/calculadora.rb +1 -1
- data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/ro/lib/calculator.rb +1 -1
- data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/sk/lib/calculator.rb +2 -2
- data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +3 -3
- data/examples/i18n/sr-Cyrl/features/support/env.rb +1 -1
- data/examples/i18n/sr-Cyrl/lib/calculator.rb +2 -2
- data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/sr-Latn/lib/calculator.rb +2 -2
- data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +3 -3
- data/examples/i18n/sv/lib/kalkulator.rb +2 -2
- data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +4 -4
- data/examples/i18n/tr/lib/hesap_makinesi.rb +2 -2
- data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/zh-CN/lib/calculator.rb +2 -2
- data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/zh-TW/lib/calculator.rb +2 -2
- data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +3 -3
- data/examples/sinatra/features/step_definitions/add_steps.rb +4 -4
- data/examples/tcl/features/step_definitions/fib_steps.rb +2 -2
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +4 -4
- data/examples/watir/features/step_definitions/search_steps.rb +3 -3
- data/examples/watir/features/support/screenshots.rb +5 -5
- data/features/docs/api/list_step_defs_as_json.feature +21 -7
- data/features/docs/api/listen_for_events.feature +1 -1
- data/features/docs/api/run_cli_main_with_existing_runtime.feature +1 -0
- data/features/docs/cli/dry_run.feature +3 -0
- data/features/docs/cli/execute_with_tag_filter.feature +4 -4
- data/features/docs/cli/fail_fast.feature +2 -0
- data/features/docs/{gherkin/language_help.feature → cli/i18n.feature} +6 -6
- data/features/docs/cli/randomize.feature +2 -2
- data/features/docs/cli/retry_failing_tests.feature +28 -3
- data/features/docs/cli/run_scenarios_matching_name.feature +1 -0
- data/features/docs/cli/specifying_multiple_formatters.feature +3 -0
- data/features/docs/cli/strict_mode.feature +6 -0
- data/features/docs/defining_steps/nested_steps.feature +5 -1
- data/features/docs/defining_steps/nested_steps_i18n.feature +1 -0
- data/features/docs/defining_steps/nested_steps_with_second_arg.feature +2 -0
- data/features/docs/defining_steps/printing_messages.feature +1 -1
- data/features/docs/defining_steps/skip_scenario.feature +1 -0
- data/features/docs/defining_steps/snippets.feature +18 -18
- data/features/docs/events/gherkin_source_read_event.feature +43 -0
- data/features/docs/events/step_activated_event.feature +36 -0
- data/features/docs/events/step_definition_registered_event.feature +29 -0
- data/features/docs/events/test_case_finished_event.feature +35 -0
- data/features/docs/events/test_case_starting_event.feature +54 -0
- data/features/docs/events/test_run_finished_event.feature +40 -0
- data/features/docs/events/test_run_starting_event.feature +41 -0
- data/features/docs/events/test_step_finished_event.feature +47 -0
- data/features/docs/events/test_step_starting_event.feature +43 -0
- data/features/docs/exception_in_after_hook.feature +3 -2
- data/features/docs/exception_in_after_step_hook.feature +2 -0
- data/features/docs/exception_in_around_hook.feature +2 -0
- data/features/docs/exception_in_before_hook.feature +3 -1
- data/features/docs/extending_cucumber/custom_formatter.feature +21 -1
- data/features/docs/formatters/json_formatter.feature +4 -4
- data/features/docs/formatters/junit_formatter.feature +7 -6
- data/features/docs/formatters/pretty_formatter.feature +1 -0
- data/features/docs/formatters/progress_formatter.feature +1 -0
- data/features/docs/formatters/rerun_formatter.feature +2 -0
- data/features/docs/formatters/summary_formatter.feature +1 -0
- data/features/docs/formatters/usage_formatter.feature +3 -0
- data/features/docs/getting_started.feature +2 -1
- data/features/docs/gherkin/background.feature +5 -5
- data/features/docs/gherkin/doc_strings.feature +2 -0
- data/features/docs/gherkin/expand_option_for_outlines.feature +1 -0
- data/features/docs/gherkin/outlines.feature +4 -0
- data/features/docs/gherkin/unicode_table.feature +1 -0
- data/features/docs/gherkin/using_descriptions.feature +1 -0
- data/features/docs/gherkin/using_star_notation.feature +1 -1
- data/features/docs/post_configuration_hook.feature +1 -1
- data/features/docs/rake_task.feature +5 -0
- data/features/docs/raketask.feature +3 -1
- data/features/docs/work_in_progress.feature +5 -2
- data/features/docs/writing_support_code/after_step_hooks.feature +3 -1
- data/features/docs/writing_support_code/around_hooks.feature +6 -0
- data/features/docs/writing_support_code/before_hook.feature +1 -0
- data/features/docs/writing_support_code/hook_order.feature +3 -1
- data/features/docs/writing_support_code/parameter_types.feature +75 -0
- data/features/docs/writing_support_code/tagged_hooks.feature +1 -1
- data/features/lib/step_definitions/aruba_steps.rb +4 -10
- data/features/lib/step_definitions/cli_steps.rb +2 -2
- data/features/lib/step_definitions/cucumber_steps.rb +8 -12
- data/features/lib/step_definitions/iso-8859-1_steps.rb +2 -2
- data/features/lib/step_definitions/json_steps.rb +1 -1
- data/features/lib/step_definitions/junit_steps.rb +1 -1
- data/features/lib/step_definitions/language_steps.rb +2 -2
- data/features/lib/step_definitions/profile_steps.rb +6 -6
- data/features/lib/step_definitions/retry_steps.rb +3 -3
- data/features/lib/step_definitions/ruby_steps.rb +1 -1
- data/features/lib/support/env.rb +1 -1
- data/features/lib/support/fake_wire_server.rb +7 -2
- data/features/lib/support/feature_factory.rb +1 -1
- data/features/lib/support/normalise_output.rb +13 -12
- data/features/lib/support/parameter_types.rb +8 -0
- data/gem_tasks/contributors.rake +9 -6
- data/gem_tasks/environment.rake +1 -5
- data/gem_tasks/examples.rake +1 -1
- data/gem_tasks/fix_cr_lf.rake +1 -1
- data/gem_tasks/flog.rake +2 -2
- data/gem_tasks/rspec.rake +1 -1
- data/lib/autotest/cucumber_mixin.rb +15 -15
- data/lib/autotest/discover.rb +2 -2
- data/lib/cucumber/cli/configuration.rb +7 -13
- data/lib/cucumber/cli/main.rb +6 -6
- data/lib/cucumber/cli/options.rb +163 -126
- data/lib/cucumber/cli/profile_loader.rb +24 -20
- data/lib/cucumber/configuration.rb +12 -17
- data/lib/cucumber/constantize.rb +1 -1
- data/lib/cucumber/core_ext/string.rb +1 -1
- data/lib/cucumber/deprecate.rb +1 -1
- data/lib/cucumber/events.rb +11 -1
- data/lib/cucumber/events/gherkin_source_read.rb +17 -0
- data/lib/cucumber/events/{step_match.rb → step_activated.rb} +2 -2
- data/lib/cucumber/events/step_definition_registered.rb +1 -1
- data/lib/cucumber/events/test_case_finished.rb +18 -0
- data/lib/cucumber/events/test_case_starting.rb +15 -0
- data/lib/cucumber/events/test_run_starting.rb +16 -0
- data/lib/cucumber/events/test_step_finished.rb +20 -0
- data/lib/cucumber/events/test_step_starting.rb +17 -0
- data/lib/cucumber/filters.rb +1 -0
- data/lib/cucumber/filters/activate_steps.rb +1 -1
- data/lib/cucumber/filters/broadcast_test_run_starting_event.rb +27 -0
- data/lib/cucumber/filters/retry.rb +1 -1
- data/lib/cucumber/filters/tag_limits.rb +3 -3
- data/lib/cucumber/filters/tag_limits/verifier.rb +1 -1
- data/lib/cucumber/formatter/ansicolor.rb +8 -11
- data/lib/cucumber/formatter/backtrace_filter.rb +19 -7
- data/lib/cucumber/formatter/console.rb +16 -19
- data/lib/cucumber/formatter/console_counts.rb +8 -21
- data/lib/cucumber/formatter/console_issues.rb +30 -9
- data/lib/cucumber/formatter/duration.rb +1 -1
- data/lib/cucumber/formatter/fail_fast.rb +1 -1
- data/lib/cucumber/formatter/html.rb +168 -242
- data/lib/cucumber/formatter/html_builder.rb +110 -0
- data/lib/cucumber/formatter/inline-js.js +30 -0
- data/lib/cucumber/formatter/interceptor.rb +2 -2
- data/lib/cucumber/formatter/json.rb +12 -12
- data/lib/cucumber/formatter/junit.rb +11 -11
- data/lib/cucumber/formatter/legacy_api/adapter.rb +27 -27
- data/lib/cucumber/formatter/legacy_api/ast.rb +16 -20
- data/lib/cucumber/formatter/legacy_api/results.rb +6 -8
- data/lib/cucumber/formatter/pretty.rb +17 -17
- data/lib/cucumber/formatter/progress.rb +11 -12
- data/lib/cucumber/formatter/rerun.rb +1 -1
- data/lib/cucumber/formatter/steps.rb +1 -1
- data/lib/cucumber/formatter/unicode.rb +1 -1
- data/lib/cucumber/formatter/usage.rb +12 -12
- data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +1 -1
- data/lib/cucumber/gherkin/formatter/escaping.rb +1 -1
- data/lib/cucumber/{rb_support/rb_dsl.rb → glue/dsl.rb} +44 -17
- data/lib/cucumber/glue/hook.rb +43 -0
- data/lib/cucumber/glue/invoke_in_world.rb +70 -0
- data/lib/cucumber/glue/proto_world.rb +225 -0
- data/lib/cucumber/{rb_support/rb_language.rb → glue/registry_and_more.rb} +45 -86
- data/lib/cucumber/{rb_support → glue}/snippet.rb +62 -25
- data/lib/cucumber/glue/step_definition.rb +143 -0
- data/lib/cucumber/glue/world_factory.rb +23 -0
- data/lib/cucumber/hooks.rb +4 -4
- data/lib/cucumber/multiline_argument.rb +2 -2
- data/lib/cucumber/multiline_argument/data_table.rb +40 -178
- data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +158 -0
- data/lib/cucumber/platform.rb +3 -5
- data/lib/cucumber/rake/task.rb +11 -11
- data/lib/cucumber/rspec/disable_option_parser.rb +1 -1
- data/lib/cucumber/rspec/doubles.rb +1 -1
- data/lib/cucumber/running_test_case.rb +2 -2
- data/lib/cucumber/runtime.rb +46 -34
- data/lib/cucumber/runtime/after_hooks.rb +1 -1
- data/lib/cucumber/runtime/for_programming_languages.rb +1 -36
- data/lib/cucumber/runtime/support_code.rb +19 -15
- data/lib/cucumber/runtime/user_interface.rb +4 -11
- data/lib/cucumber/step_argument.rb +0 -2
- data/lib/cucumber/step_definition_light.rb +1 -0
- data/lib/cucumber/step_match.rb +16 -15
- data/lib/cucumber/step_match_search.rb +2 -3
- data/lib/cucumber/term/ansicolor.rb +1 -1
- data/lib/cucumber/version +1 -1
- data/lib/simplecov_setup.rb +1 -1
- data/scripts/invite-collaborator +40 -0
- data/scripts/update-history +83 -0
- data/spec/cucumber/cli/configuration_spec.rb +95 -97
- data/spec/cucumber/cli/main_spec.rb +7 -7
- data/spec/cucumber/cli/options_spec.rb +112 -78
- data/spec/cucumber/cli/profile_loader_spec.rb +24 -5
- data/spec/cucumber/cli/rerun_spec.rb +20 -20
- data/spec/cucumber/configuration_spec.rb +47 -47
- data/spec/cucumber/constantize_spec.rb +2 -2
- data/spec/cucumber/events_spec.rb +9 -0
- data/spec/cucumber/file_specs_spec.rb +25 -25
- data/spec/cucumber/filters/activate_steps_spec.rb +16 -16
- data/spec/cucumber/filters/gated_receiver_spec.rb +6 -6
- data/spec/cucumber/filters/retry_spec.rb +22 -9
- data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +11 -11
- data/spec/cucumber/filters/tag_limits/verifier_spec.rb +14 -14
- data/spec/cucumber/filters/tag_limits_spec.rb +8 -8
- data/spec/cucumber/formatter/ansicolor_spec.rb +9 -9
- data/spec/cucumber/formatter/backtrace_filter_spec.rb +32 -0
- data/spec/cucumber/formatter/console_counts_spec.rb +1 -1
- data/spec/cucumber/formatter/duration_spec.rb +3 -3
- data/spec/cucumber/formatter/fail_fast_spec.rb +21 -21
- data/spec/cucumber/formatter/html_spec.rb +58 -58
- data/spec/cucumber/formatter/json_spec.rb +44 -46
- data/spec/cucumber/formatter/junit_spec.rb +43 -45
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +43 -43
- data/spec/cucumber/formatter/pretty_spec.rb +107 -107
- data/spec/cucumber/formatter/progress_spec.rb +20 -20
- data/spec/cucumber/formatter/rerun_spec.rb +1 -1
- data/spec/cucumber/formatter/spec_helper.rb +6 -5
- data/spec/cucumber/{rb_support/rb_world_spec.rb → glue/proto_world_spec.rb} +20 -5
- data/spec/cucumber/glue/registry_and_more_spec.rb +213 -0
- data/spec/cucumber/{rb_support → glue}/snippet_spec.rb +61 -25
- data/spec/cucumber/glue/step_definition_spec.rb +207 -0
- data/spec/cucumber/hooks_spec.rb +3 -3
- data/spec/cucumber/multiline_argument/data_table_spec.rb +177 -133
- data/spec/cucumber/project_initializer_spec.rb +10 -10
- data/spec/cucumber/rake/forked_spec.rb +10 -10
- data/spec/cucumber/rake/task_spec.rb +20 -20
- data/spec/cucumber/running_test_case_spec.rb +35 -35
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +1 -30
- data/spec/cucumber/runtime_spec.rb +2 -2
- data/spec/cucumber/step_argument_spec.rb +5 -5
- data/spec/cucumber/step_match_search_spec.rb +31 -41
- data/spec/cucumber/step_match_spec.rb +33 -33
- data/spec/cucumber/world/pending_spec.rb +10 -10
- metadata +117 -47
- data/features/docs/formatters/debug_formatter.feature +0 -47
- data/features/docs/writing_support_code/transforms.feature +0 -98
- data/features/lib/step_definitions/wire_steps.rb +0 -59
- data/gem_tasks/cucumber.rake +0 -26
- data/lib/cucumber/core_ext/instance_exec.rb +0 -71
- data/lib/cucumber/formatter/debug.rb +0 -36
- data/lib/cucumber/rb_support/rb_hook.rb +0 -20
- data/lib/cucumber/rb_support/rb_step_definition.rb +0 -132
- data/lib/cucumber/rb_support/rb_transform.rb +0 -60
- data/lib/cucumber/rb_support/rb_world.rb +0 -171
- data/spec/cucumber/core_ext/instance_exec_spec.rb +0 -5
- data/spec/cucumber/formatter/debug_spec.rb +0 -65
- data/spec/cucumber/rb_support/rb_language_spec.rb +0 -321
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +0 -200
- data/spec/cucumber/rb_support/rb_transform_spec.rb +0 -47
@@ -11,7 +11,7 @@ module Cucumber
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def args_from(profile)
|
14
|
-
unless cucumber_yml.
|
14
|
+
unless cucumber_yml.key?(profile)
|
15
15
|
raise(ProfileNotFound, <<-END_OF_ERROR)
|
16
16
|
Could not find profile: '#{profile}'
|
17
17
|
|
@@ -22,34 +22,39 @@ Defined profiles in cucumber.yml:
|
|
22
22
|
|
23
23
|
args_from_yml = cucumber_yml[profile] || ''
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
raise YmlLoadError, "The '#{profile}' profile in cucumber.yml was empty. Please define the command line arguments for the '#{profile}' profile in cucumber.yml.\n" if args_from_yml.empty?
|
25
|
+
require 'shellwords'
|
26
|
+
|
27
|
+
case args_from_yml
|
28
|
+
when String
|
29
|
+
raise YmlLoadError, "The '#{profile}' profile in cucumber.yml was blank. Please define the command line arguments for the '#{profile}' profile in cucumber.yml.\n" if args_from_yml =~ /^\s*$/
|
30
|
+
if Cucumber::WINDOWS
|
31
|
+
# Shellwords treats backslash as an escape character so we have to mask it out temporarily
|
32
|
+
|
33
|
+
placeholder = 'pseudo_unique_backslash_placeholder'
|
34
|
+
sanitized_line = args_from_yml.gsub('\\', placeholder)
|
35
|
+
|
36
|
+
args_from_yml = Shellwords.shellwords(sanitized_line).collect { |argument| argument.gsub(placeholder, '\\') }
|
38
37
|
else
|
39
|
-
|
38
|
+
args_from_yml = Shellwords.shellwords(args_from_yml)
|
39
|
+
end
|
40
|
+
when Array
|
41
|
+
raise YmlLoadError, "The '#{profile}' profile in cucumber.yml was empty. Please define the command line arguments for the '#{profile}' profile in cucumber.yml.\n" if args_from_yml.empty?
|
42
|
+
else
|
43
|
+
raise YmlLoadError, "The '#{profile}' profile in cucumber.yml was a #{args_from_yml.class}. It must be a String or Array"
|
40
44
|
end
|
45
|
+
|
41
46
|
args_from_yml
|
42
47
|
end
|
43
48
|
|
44
49
|
def has_profile?(profile)
|
45
|
-
cucumber_yml.
|
50
|
+
cucumber_yml.key?(profile)
|
46
51
|
end
|
47
52
|
|
48
53
|
def cucumber_yml_defined?
|
49
54
|
cucumber_file && File.exist?(cucumber_file)
|
50
55
|
end
|
51
56
|
|
52
|
-
|
57
|
+
private
|
53
58
|
|
54
59
|
# Loads the profile, processing it through ERB and YAML, and returns it as a hash.
|
55
60
|
def cucumber_yml
|
@@ -62,13 +67,13 @@ Defined profiles in cucumber.yml:
|
|
62
67
|
require 'yaml'
|
63
68
|
begin
|
64
69
|
@cucumber_erb = ERB.new(IO.read(cucumber_file), nil, '%').result(binding)
|
65
|
-
rescue
|
70
|
+
rescue StandardError
|
66
71
|
raise(YmlLoadError,"cucumber.yml was found, but could not be parsed with ERB. Please refer to cucumber's documentation on correct profile usage.\n#{$!.inspect}")
|
67
72
|
end
|
68
73
|
|
69
74
|
begin
|
70
75
|
@cucumber_yml = YAML::load(@cucumber_erb)
|
71
|
-
rescue StandardError
|
76
|
+
rescue StandardError
|
72
77
|
raise(YmlLoadError,"cucumber.yml was found, but could not be parsed. Please refer to cucumber's documentation on correct profile usage.\n")
|
73
78
|
end
|
74
79
|
|
@@ -89,4 +94,3 @@ Defined profiles in cucumber.yml:
|
|
89
94
|
end
|
90
95
|
end
|
91
96
|
end
|
92
|
-
|
@@ -4,7 +4,6 @@ require 'cucumber/cli/rerun_file'
|
|
4
4
|
require 'cucumber/events'
|
5
5
|
require 'cucumber/core/event_bus'
|
6
6
|
require 'forwardable'
|
7
|
-
require 'cucumber/core/gherkin/tag_expression'
|
8
7
|
require 'cucumber'
|
9
8
|
|
10
9
|
module Cucumber
|
@@ -130,13 +129,8 @@ module Cucumber
|
|
130
129
|
with_default_features_path(dirs)
|
131
130
|
end
|
132
131
|
|
133
|
-
# todo: remove
|
134
|
-
def tag_expression
|
135
|
-
Cucumber::Core::Gherkin::TagExpression.new(@options[:tag_expressions])
|
136
|
-
end
|
137
|
-
|
138
132
|
def tag_limits
|
139
|
-
|
133
|
+
@options[:tag_limits]
|
140
134
|
end
|
141
135
|
|
142
136
|
def tag_expressions
|
@@ -153,7 +147,7 @@ module Cucumber
|
|
153
147
|
|
154
148
|
def feature_files
|
155
149
|
potential_feature_files = with_default_features_path(paths).map do |path|
|
156
|
-
path = path.
|
150
|
+
path = path.tr('\\', '/') # In case we're on windows. Globs don't work with backslashes.
|
157
151
|
path = path.chomp('/')
|
158
152
|
|
159
153
|
# TODO: Move to using feature loading strategies stored in
|
@@ -179,7 +173,7 @@ module Cucumber
|
|
179
173
|
|
180
174
|
def all_files_to_load
|
181
175
|
files = require_dirs.map do |path|
|
182
|
-
path = path.
|
176
|
+
path = path.tr('\\', '/') # In case we're on windows. Globs don't work with backslashes.
|
183
177
|
path = path.gsub(/\/$/, '') # Strip trailing slash.
|
184
178
|
File.directory?(path) ? Dir["#{path}/**/*"] : path
|
185
179
|
end.flatten.uniq
|
@@ -195,12 +189,13 @@ module Cucumber
|
|
195
189
|
end
|
196
190
|
|
197
191
|
def formatter_factories
|
198
|
-
|
199
|
-
format = format_and_out[0]
|
200
|
-
path_or_io = format_and_out[1]
|
192
|
+
formats.map do |format, formatter_options, path_or_io|
|
201
193
|
begin
|
202
194
|
factory = formatter_class(format)
|
203
|
-
yield factory,
|
195
|
+
yield factory,
|
196
|
+
formatter_options,
|
197
|
+
path_or_io,
|
198
|
+
Cli::Options.new(STDOUT, STDERR, @options)
|
204
199
|
rescue Exception => e
|
205
200
|
raise e, "#{e.message}\nError creating formatter: #{format}", e.backtrace
|
206
201
|
end
|
@@ -208,7 +203,7 @@ module Cucumber
|
|
208
203
|
end
|
209
204
|
|
210
205
|
def formatter_class(format)
|
211
|
-
if(builtin = Cli::Options::BUILTIN_FORMATS[format])
|
206
|
+
if (builtin = Cli::Options::BUILTIN_FORMATS[format])
|
212
207
|
constantize(builtin[0])
|
213
208
|
else
|
214
209
|
constantize(format)
|
@@ -242,7 +237,7 @@ module Cucumber
|
|
242
237
|
@options[:event_bus]
|
243
238
|
end
|
244
239
|
|
245
|
-
|
240
|
+
private
|
246
241
|
|
247
242
|
def default_options
|
248
243
|
{
|
@@ -261,12 +256,12 @@ module Cucumber
|
|
261
256
|
:snippets => true,
|
262
257
|
:source => true,
|
263
258
|
:duration => true,
|
264
|
-
:event_bus =>
|
259
|
+
:event_bus => Cucumber::Events.make_event_bus
|
265
260
|
}
|
266
261
|
end
|
267
262
|
|
268
263
|
def default_features_paths
|
269
|
-
[
|
264
|
+
['features']
|
270
265
|
end
|
271
266
|
|
272
267
|
def with_default_features_path(paths)
|
data/lib/cucumber/constantize.rb
CHANGED
data/lib/cucumber/deprecate.rb
CHANGED
@@ -13,7 +13,7 @@ module Cucumber
|
|
13
13
|
end
|
14
14
|
|
15
15
|
module ForDevelopers
|
16
|
-
def self.call(
|
16
|
+
def self.call(_message, _method, remove_after_version)
|
17
17
|
if Cucumber::VERSION > remove_after_version
|
18
18
|
raise "This method is due for removal after version #{remove_after_version}"
|
19
19
|
end
|
data/lib/cucumber/events.rb
CHANGED
@@ -18,11 +18,21 @@ module Cucumber
|
|
18
18
|
# end
|
19
19
|
#
|
20
20
|
module Events
|
21
|
+
def self.make_event_bus
|
22
|
+
Core::EventBus.new(registry)
|
23
|
+
end
|
24
|
+
|
21
25
|
def self.registry
|
22
26
|
Core::Events.build_registry(
|
27
|
+
TestCaseStarting,
|
28
|
+
TestCaseFinished,
|
29
|
+
TestStepFinished,
|
30
|
+
TestStepStarting,
|
23
31
|
StepDefinitionRegistered,
|
24
|
-
|
32
|
+
StepActivated,
|
25
33
|
TestRunFinished,
|
34
|
+
GherkinSourceRead,
|
35
|
+
TestRunStarting
|
26
36
|
)
|
27
37
|
end
|
28
38
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'cucumber/core/events'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Events
|
5
|
+
|
6
|
+
# Fired after we've read in the contents of a feature file
|
7
|
+
class GherkinSourceRead < Core::Event.new(:path, :body)
|
8
|
+
|
9
|
+
# The path to the file
|
10
|
+
attr_reader :path
|
11
|
+
|
12
|
+
# The raw Gherkin source
|
13
|
+
attr_reader :body
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -4,8 +4,8 @@ require 'cucumber/core/events'
|
|
4
4
|
module Cucumber
|
5
5
|
module Events
|
6
6
|
|
7
|
-
# Event fired when a step is
|
8
|
-
class
|
7
|
+
# Event fired when a step is activated
|
8
|
+
class StepActivated < Core::Event.new(:test_step, :step_match)
|
9
9
|
|
10
10
|
# The test step that was matched.
|
11
11
|
#
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'cucumber/core/events'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Events
|
5
|
+
|
6
|
+
# Signals that a {Cucumber::Core::Test::Case} has finished executing
|
7
|
+
class TestCaseFinished < Core::Events::TestCaseFinished
|
8
|
+
|
9
|
+
# @return [Cucumber::Core::Test::Case] that was executed
|
10
|
+
attr_reader :test_case
|
11
|
+
|
12
|
+
# @return [Cucumber::Core::Test::Result] the result of running the {Cucumber::Core::Test::Step}
|
13
|
+
attr_reader :result
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'cucumber/core/events'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Events
|
5
|
+
|
6
|
+
# Signals that a {Cucumber::Core::Test::Case} is about to be executed
|
7
|
+
class TestCaseStarting < Core::Events::TestCaseStarting
|
8
|
+
|
9
|
+
# @return [Cucumber::Core::Test::Case] the test case to be executed
|
10
|
+
attr_reader :test_case
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'cucumber/core/events'
|
3
|
+
|
4
|
+
module Cucumber
|
5
|
+
module Events
|
6
|
+
|
7
|
+
# Event fired once all test cases have been filtered before
|
8
|
+
# the first one is executed.
|
9
|
+
class TestRunStarting < Core::Event.new(:test_cases)
|
10
|
+
|
11
|
+
# @return [Array<Cucumber::Core::Test::Case>] the test cases to be executed
|
12
|
+
attr_reader :test_cases
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'cucumber/core/events'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Events
|
5
|
+
|
6
|
+
# Signals that a {Cucumber::Core::Test::Step} has finished executing
|
7
|
+
class TestStepFinished < Core::Events::TestStepFinished
|
8
|
+
|
9
|
+
# @return [Cucumber::Core::Test::Step] the test step that was executed
|
10
|
+
attr_reader :test_step
|
11
|
+
|
12
|
+
# @return [Cucumber::Core::Test::Result] the result of running the {Cucumber::Core::Test::Step}
|
13
|
+
attr_reader :result
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'cucumber/core/events'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Events
|
5
|
+
|
6
|
+
# Signals that a {Cucumber::Core::Test::Step} is about to be executed
|
7
|
+
class TestStepStarting < Core::Events::TestStepStarting
|
8
|
+
|
9
|
+
# @return [Cucumber::Core::Test::Step] the test step to be executed
|
10
|
+
attr_reader :test_step
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
data/lib/cucumber/filters.rb
CHANGED
@@ -4,6 +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/broadcast_test_run_starting_event'
|
7
8
|
require 'cucumber/filters/prepare_world'
|
8
9
|
require 'cucumber/filters/quit'
|
9
10
|
require 'cucumber/filters/randomizer'
|
@@ -44,7 +44,7 @@ module Cucumber
|
|
44
44
|
|
45
45
|
def result
|
46
46
|
return NoStepMatch.new(test_step.source.last, test_step.name) unless matches.any?
|
47
|
-
configuration.notify :
|
47
|
+
configuration.notify :step_activated, test_step, match
|
48
48
|
return SkippingStepMatch.new if configuration.dry_run?
|
49
49
|
match
|
50
50
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Cucumber
|
3
|
+
module Filters
|
4
|
+
# Added at the end of the filter chain to broadcast a list of
|
5
|
+
# all of the test cases that have made it through the filters.
|
6
|
+
class BroadcastTestRunStartingEvent < Core::Filter.new(:config)
|
7
|
+
def initialize(config, receiver=nil)
|
8
|
+
super
|
9
|
+
@test_cases = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_case(test_case)
|
13
|
+
@test_cases << test_case
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
def done
|
18
|
+
config.notify :test_run_starting, @test_cases
|
19
|
+
@test_cases.map do |test_case|
|
20
|
+
test_case.describe_to(@receiver)
|
21
|
+
end
|
22
|
+
super
|
23
|
+
self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
2
|
+
require 'cucumber/filters/gated_receiver'
|
3
|
+
require 'cucumber/filters/tag_limits/test_case_index'
|
4
|
+
require 'cucumber/filters/tag_limits/verifier'
|
5
5
|
|
6
6
|
module Cucumber
|
7
7
|
module Filters
|
@@ -9,7 +9,7 @@ if Cucumber::WINDOWS_MRI
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
Cucumber::Term::ANSIColor.coloring = false if !STDOUT.tty? && !ENV.
|
12
|
+
Cucumber::Term::ANSIColor.coloring = false if !STDOUT.tty? && !ENV.key?('AUTOTEST')
|
13
13
|
|
14
14
|
module Cucumber
|
15
15
|
module Formatter
|
@@ -60,6 +60,7 @@ module Cucumber
|
|
60
60
|
end.merge({
|
61
61
|
'undefined' => 'yellow',
|
62
62
|
'pending' => 'yellow',
|
63
|
+
'flaky' => 'yellow',
|
63
64
|
'failed' => 'red',
|
64
65
|
'passed' => 'green',
|
65
66
|
'outline' => 'cyan',
|
@@ -105,7 +106,7 @@ module Cucumber
|
|
105
106
|
begin
|
106
107
|
gem 'genki-ruby-terminfo'
|
107
108
|
require 'terminfo'
|
108
|
-
case TermInfo.default_object.tigetnum(
|
109
|
+
case TermInfo.default_object.tigetnum('colors')
|
109
110
|
when 0
|
110
111
|
raise "Your terminal doesn't support colours."
|
111
112
|
when 1
|
@@ -118,9 +119,9 @@ module Cucumber
|
|
118
119
|
end
|
119
120
|
rescue Exception => e
|
120
121
|
if e.class.name == 'TermInfo::TermInfoError'
|
121
|
-
STDERR.puts
|
122
|
+
STDERR.puts '*** WARNING ***'
|
122
123
|
STDERR.puts "You have the genki-ruby-terminfo gem installed, but you haven't set your TERM variable."
|
123
|
-
STDERR.puts
|
124
|
+
STDERR.puts 'Try setting it to TERM=xterm-256color to get grey colour in output.'
|
124
125
|
STDERR.puts "\n"
|
125
126
|
alias grey white
|
126
127
|
else
|
@@ -130,19 +131,15 @@ module Cucumber
|
|
130
131
|
end
|
131
132
|
|
132
133
|
def self.define_real_grey #:nodoc:
|
133
|
-
|
134
|
-
|
135
|
-
"\e[90m#{string}\e[0m"
|
136
|
-
else
|
137
|
-
string
|
138
|
-
end
|
134
|
+
define_method :grey do |string|
|
135
|
+
::Cucumber::Term::ANSIColor.coloring? ? "\e[90m#{string}\e[0m" : string
|
139
136
|
end
|
140
137
|
end
|
141
138
|
|
142
139
|
define_grey
|
143
140
|
|
144
141
|
def cukes(n)
|
145
|
-
(
|
142
|
+
('(::) ' * n).strip
|
146
143
|
end
|
147
144
|
|
148
145
|
def green_cukes(n)
|