cucumber 2.99.0 → 3.0.0
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/.gitattributes +32 -0
- data/.github/ISSUE_TEMPLATE.md +1 -1
- data/.github/PULL_REQUEST_TEMPLATE.md +1 -0
- data/.rubocop.yml +13 -0
- data/.rubocop_todo.yml +991 -0
- data/.travis.yml +56 -10
- data/{History.md → CHANGELOG.md} +166 -32
- data/CONTRIBUTING.md +21 -1
- data/Gemfile +18 -5
- data/README.md +13 -4
- data/Rakefile +12 -2
- data/appveyor.yml +27 -0
- data/bin/cucumber +2 -1
- data/cucumber.gemspec +15 -10
- data/cucumber.yml +10 -11
- data/examples/i18n/Rakefile +1 -1
- data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +8 -3
- data/examples/i18n/ar/lib/calculator.rb +2 -2
- data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +6 -6
- 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 +10 -5
- data/examples/i18n/ca/lib/calculadora.rb +2 -2
- data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/cs/lib/calculator.rb +3 -3
- data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +10 -5
- data/examples/i18n/da/lib/lommeregner.rb +2 -2
- data/examples/i18n/de/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/de/lib/calculator.rb +2 -2
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/el/lib/calculator.rb +2 -2
- data/examples/i18n/en/features/step_definitions/calculator_steps.rb +9 -4
- data/examples/i18n/en/lib/calculator.rb +2 -2
- data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +4 -4
- data/examples/i18n/en-lol/features/support/env.rb +6 -2
- data/examples/i18n/en-lol/lib/basket.rb +2 -2
- data/examples/i18n/en-lol/lib/belly.rb +2 -2
- data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +9 -4
- data/examples/i18n/eo/lib/calculator.rb +2 -2
- data/examples/i18n/es/features/step_definitions/calculador_steps.rb +10 -5
- data/examples/i18n/es/lib/calculador.rb +2 -2
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +10 -5
- data/examples/i18n/et/lib/kalkulaator.rb +3 -3
- data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +9 -4
- 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 +7 -2
- data/examples/i18n/fr/lib/calculatrice.rb +2 -2
- data/examples/i18n/he/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/he/lib/calculator.rb +1 -1
- data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +9 -4
- data/examples/i18n/hi/lib/calculator.rb +1 -1
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +9 -5
- data/examples/i18n/ht/lib/kalkilatris.rb +2 -2
- data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/hu/lib/calculator.rb +1 -1
- data/examples/i18n/id/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/id/lib/calculator.rb +2 -2
- data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +10 -5
- 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 +7 -2
- data/examples/i18n/ja/lib/calculator.rb +2 -2
- data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/ko/lib/calculator.rb +2 -2
- data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/lt/lib/calculator.rb +2 -2
- data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +10 -5
- 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 +7 -2
- data/examples/i18n/no/lib/kalkulator.rb +2 -2
- data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/pl/features/support/env.rb +6 -1
- 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 +7 -2
- data/examples/i18n/pt/lib/calculadora.rb +1 -1
- data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +11 -6
- data/examples/i18n/ro/lib/calculator.rb +1 -1
- data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +5 -5
- 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 +10 -5
- 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 +7 -2
- data/examples/i18n/sr-Cyrl/lib/calculator.rb +2 -2
- data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +10 -5
- data/examples/i18n/sr-Latn/lib/calculator.rb +2 -2
- data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +9 -4
- data/examples/i18n/sv/lib/kalkulator.rb +2 -2
- data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +10 -5
- 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/uk/features/support/env.rb +6 -1
- data/examples/i18n/uk/lib/calculator.rb +2 -1
- data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +4 -4
- 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 +11 -6
- data/examples/i18n/zh-CN/lib/calculator.rb +2 -2
- data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +10 -5
- 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/sinatra/features/support/env.rb +6 -1
- data/examples/tcl/features/step_definitions/fib_steps.rb +2 -2
- data/examples/tcl/features/support/env.rb +2 -1
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +4 -4
- data/examples/watir/features/step_definitions/search_steps.rb +6 -5
- data/examples/watir/features/support/env.rb +5 -1
- 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 +9 -8
- 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 +8 -6
- data/features/docs/cli/fail_fast.feature +2 -0
- data/features/docs/cli/help.feature +8 -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 +75 -15
- 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/ambiguous_steps.feature +89 -0
- data/features/docs/defining_steps/nested_steps.feature +5 -1
- data/features/docs/defining_steps/nested_steps_i18n.feature +3 -0
- data/features/docs/defining_steps/nested_steps_with_second_arg.feature +2 -0
- data/features/docs/defining_steps/printing_messages.feature +1 -2
- data/features/docs/defining_steps/skip_scenario.feature +1 -34
- 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_started_event.feature +54 -0
- data/features/docs/events/test_run_finished_event.feature +40 -0
- data/features/docs/events/test_run_started_event.feature +41 -0
- data/features/docs/events/test_step_finished_event.feature +47 -0
- data/features/docs/events/test_step_started_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 +12 -48
- 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 +35 -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 +6 -4
- data/features/docs/gherkin/unicode_table.feature +2 -1
- 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 -17
- 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 +53 -0
- data/features/docs/writing_support_code/tagged_hooks.feature +1 -1
- data/features/docs/writing_support_code/world.feature +129 -0
- data/features/lib/step_definitions/aruba_steps.rb +5 -10
- data/features/lib/step_definitions/cli_steps.rb +4 -0
- data/features/lib/step_definitions/cucumber_steps.rb +9 -12
- data/features/lib/step_definitions/iso-8859-1_steps.rb +9 -5
- data/features/lib/step_definitions/json_steps.rb +2 -1
- data/features/lib/step_definitions/junit_steps.rb +2 -1
- data/features/lib/step_definitions/language_steps.rb +3 -2
- data/features/lib/step_definitions/profile_steps.rb +7 -6
- data/features/lib/step_definitions/retry_steps.rb +33 -13
- data/features/lib/step_definitions/ruby_steps.rb +2 -1
- data/features/lib/support/env.rb +3 -2
- data/features/lib/support/fake_wire_server.rb +17 -3
- data/features/lib/support/feature_factory.rb +2 -1
- data/features/lib/support/normalise_output.rb +14 -12
- data/features/lib/support/parameter_types.rb +5 -0
- data/gem_tasks/contributors.rake +10 -6
- data/gem_tasks/cov.rake +1 -0
- data/gem_tasks/downloads.rb +1 -0
- data/gem_tasks/environment.rake +2 -5
- data/gem_tasks/examples.rake +3 -2
- data/gem_tasks/fix_cr_lf.rake +19 -7
- data/gem_tasks/flog.rake +4 -3
- data/gem_tasks/rspec.rake +2 -1
- data/gem_tasks/sass.rake +2 -1
- data/lib/autotest/cucumber.rb +1 -0
- data/lib/autotest/cucumber_mixin.rb +17 -16
- data/lib/autotest/cucumber_rails.rb +1 -0
- data/lib/autotest/cucumber_rails_rspec.rb +1 -0
- data/lib/autotest/cucumber_rails_rspec2.rb +1 -0
- data/lib/autotest/cucumber_rspec.rb +1 -0
- data/lib/autotest/cucumber_rspec2.rb +1 -0
- data/lib/autotest/discover.rb +3 -2
- data/lib/cucumber/cli/configuration.rb +12 -21
- data/lib/cucumber/cli/main.rb +8 -7
- data/lib/cucumber/cli/options.rb +341 -217
- data/lib/cucumber/cli/profile_loader.rb +26 -21
- data/lib/cucumber/cli/rerun_file.rb +1 -0
- data/lib/cucumber/configuration.rb +54 -37
- data/lib/cucumber/constantize.rb +2 -1
- data/lib/cucumber/core_ext/string.rb +2 -1
- data/lib/cucumber/deprecate.rb +4 -3
- data/lib/cucumber/encoding.rb +1 -0
- data/lib/cucumber/errors.rb +3 -1
- data/lib/cucumber/events/gherkin_source_read.rb +17 -0
- data/lib/cucumber/events/{step_match.rb → step_activated.rb} +5 -2
- data/lib/cucumber/events/step_definition_registered.rb +24 -0
- data/lib/cucumber/events/test_case_finished.rb +18 -0
- data/lib/cucumber/events/test_case_started.rb +15 -0
- data/lib/cucumber/events/test_run_finished.rb +12 -0
- data/lib/cucumber/events/test_run_started.rb +16 -0
- data/lib/cucumber/events/test_step_finished.rb +20 -0
- data/lib/cucumber/events/test_step_started.rb +17 -0
- data/lib/cucumber/events.rb +23 -3
- data/lib/cucumber/file_specs.rb +1 -0
- data/lib/cucumber/filters/activate_steps.rb +8 -3
- data/lib/cucumber/filters/apply_after_hooks.rb +1 -0
- data/lib/cucumber/filters/apply_after_step_hooks.rb +1 -0
- data/lib/cucumber/filters/apply_around_hooks.rb +1 -0
- data/lib/cucumber/filters/apply_before_hooks.rb +1 -0
- data/lib/cucumber/filters/broadcast_test_run_started_event.rb +27 -0
- data/lib/cucumber/filters/gated_receiver.rb +1 -0
- data/lib/cucumber/filters/prepare_world.rb +1 -0
- data/lib/cucumber/filters/quit.rb +1 -0
- data/lib/cucumber/filters/randomizer.rb +1 -0
- data/lib/cucumber/filters/retry.rb +4 -4
- data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -0
- data/lib/cucumber/filters/tag_limits/verifier.rb +2 -1
- data/lib/cucumber/filters/tag_limits.rb +4 -3
- data/lib/cucumber/filters.rb +3 -0
- data/lib/cucumber/formatter/ansicolor.rb +9 -11
- data/lib/cucumber/formatter/backtrace_filter.rb +21 -8
- data/lib/cucumber/formatter/console.rb +72 -66
- data/lib/cucumber/formatter/console_counts.rb +44 -0
- data/lib/cucumber/formatter/console_issues.rb +58 -0
- data/lib/cucumber/formatter/duration.rb +2 -1
- data/lib/cucumber/formatter/duration_extractor.rb +1 -0
- data/lib/cucumber/formatter/fail_fast.rb +4 -2
- data/lib/cucumber/formatter/fanout.rb +1 -0
- data/lib/cucumber/formatter/hook_query_visitor.rb +1 -0
- data/lib/cucumber/formatter/html.rb +175 -249
- data/lib/cucumber/formatter/html_builder.rb +120 -0
- data/lib/cucumber/formatter/ignore_missing_messages.rb +1 -0
- data/lib/cucumber/formatter/inline-js.js +30 -0
- data/lib/cucumber/formatter/interceptor.rb +3 -2
- data/lib/cucumber/formatter/io.rb +2 -1
- data/lib/cucumber/formatter/json.rb +33 -30
- data/lib/cucumber/formatter/json_pretty.rb +1 -0
- data/lib/cucumber/formatter/junit.rb +26 -24
- data/lib/cucumber/formatter/legacy_api/adapter.rb +81 -69
- data/lib/cucumber/formatter/legacy_api/ast.rb +27 -22
- data/lib/cucumber/formatter/legacy_api/results.rb +7 -8
- data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +1 -0
- data/lib/cucumber/formatter/pretty.rb +24 -18
- data/lib/cucumber/formatter/progress.rb +55 -13
- data/lib/cucumber/formatter/rerun.rb +15 -18
- data/lib/cucumber/formatter/stepdefs.rb +1 -0
- data/lib/cucumber/formatter/steps.rb +2 -1
- data/lib/cucumber/formatter/summary.rb +43 -20
- data/lib/cucumber/formatter/unicode.rb +2 -1
- data/lib/cucumber/formatter/usage.rb +33 -28
- data/lib/cucumber/gherkin/data_table_parser.rb +1 -0
- data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +2 -1
- data/lib/cucumber/gherkin/formatter/escaping.rb +2 -1
- data/lib/cucumber/gherkin/i18n.rb +1 -0
- data/lib/cucumber/gherkin/steps_parser.rb +1 -0
- data/lib/cucumber/{rb_support/rb_dsl.rb → glue/dsl.rb} +41 -30
- 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 +220 -0
- data/lib/cucumber/{rb_support/rb_language.rb → glue/registry_and_more.rb} +60 -90
- data/lib/cucumber/{rb_support → glue}/snippet.rb +64 -26
- data/lib/cucumber/glue/step_definition.rb +143 -0
- data/lib/cucumber/glue/world_factory.rb +23 -0
- data/lib/cucumber/hooks.rb +9 -8
- data/lib/cucumber/load_path.rb +1 -0
- data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +158 -0
- data/lib/cucumber/multiline_argument/data_table.rb +47 -181
- data/lib/cucumber/multiline_argument/doc_string.rb +1 -0
- data/lib/cucumber/multiline_argument.rb +6 -15
- data/lib/cucumber/platform.rb +4 -5
- data/lib/cucumber/project_initializer.rb +3 -2
- data/lib/cucumber/rake/task.rb +19 -14
- data/lib/cucumber/rspec/disable_option_parser.rb +2 -1
- data/lib/cucumber/rspec/doubles.rb +2 -1
- data/lib/cucumber/running_test_case.rb +3 -27
- data/lib/cucumber/runtime/after_hooks.rb +2 -1
- data/lib/cucumber/runtime/before_hooks.rb +1 -0
- data/lib/cucumber/runtime/for_programming_languages.rb +2 -36
- data/lib/cucumber/runtime/step_hooks.rb +1 -0
- data/lib/cucumber/runtime/support_code.rb +21 -16
- data/lib/cucumber/runtime/user_interface.rb +10 -16
- data/lib/cucumber/runtime.rb +49 -32
- data/lib/cucumber/step_argument.rb +1 -2
- data/lib/cucumber/step_definition_light.rb +2 -0
- data/lib/cucumber/step_definitions.rb +1 -0
- data/lib/cucumber/step_match.rb +30 -15
- data/lib/cucumber/step_match_search.rb +3 -3
- data/lib/cucumber/term/ansicolor.rb +2 -1
- data/lib/cucumber/unit.rb +1 -0
- data/lib/cucumber/version +1 -1
- data/lib/cucumber.rb +1 -13
- data/lib/simplecov_setup.rb +2 -1
- data/scripts/invite-collaborator +40 -0
- data/scripts/update-changelog +86 -0
- data/spec/cucumber/cli/configuration_spec.rb +109 -98
- data/spec/cucumber/cli/main_spec.rb +8 -7
- data/spec/cucumber/cli/options_spec.rb +114 -79
- data/spec/cucumber/cli/profile_loader_spec.rb +25 -5
- data/spec/cucumber/cli/rerun_spec.rb +21 -20
- data/spec/cucumber/configuration_spec.rb +48 -47
- data/spec/cucumber/constantize_spec.rb +3 -2
- data/spec/cucumber/events_spec.rb +9 -0
- data/spec/cucumber/file_specs_spec.rb +26 -25
- data/spec/cucumber/filters/activate_steps_spec.rb +25 -22
- data/spec/cucumber/filters/gated_receiver_spec.rb +7 -6
- data/spec/cucumber/filters/retry_spec.rb +42 -23
- data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +12 -11
- data/spec/cucumber/filters/tag_limits/verifier_spec.rb +15 -14
- data/spec/cucumber/filters/tag_limits_spec.rb +9 -8
- data/spec/cucumber/formatter/ansicolor_spec.rb +10 -9
- data/spec/cucumber/formatter/backtrace_filter_spec.rb +32 -0
- data/spec/cucumber/formatter/console_counts_spec.rb +14 -0
- data/spec/cucumber/formatter/duration_spec.rb +4 -3
- data/spec/cucumber/formatter/fail_fast_spec.rb +27 -27
- data/spec/cucumber/formatter/html_spec.rb +65 -60
- data/spec/cucumber/formatter/interceptor_spec.rb +1 -0
- data/spec/cucumber/formatter/json_spec.rb +71 -97
- data/spec/cucumber/formatter/junit_spec.rb +46 -47
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +134 -141
- data/spec/cucumber/formatter/pretty_spec.rb +105 -117
- data/spec/cucumber/formatter/progress_spec.rb +22 -21
- data/spec/cucumber/formatter/rerun_spec.rb +70 -64
- data/spec/cucumber/formatter/spec_helper.rb +14 -12
- data/spec/cucumber/{rb_support/rb_world_spec.rb → glue/proto_world_spec.rb} +22 -6
- data/spec/cucumber/glue/registry_and_more_spec.rb +213 -0
- data/spec/cucumber/{rb_support → glue}/snippet_spec.rb +62 -25
- data/spec/cucumber/glue/step_definition_spec.rb +207 -0
- data/spec/cucumber/hooks_spec.rb +5 -4
- data/spec/cucumber/multiline_argument/data_table_spec.rb +179 -129
- data/spec/cucumber/project_initializer_spec.rb +12 -11
- data/spec/cucumber/rake/forked_spec.rb +22 -17
- data/spec/cucumber/rake/task_spec.rb +21 -20
- data/spec/cucumber/running_test_case_spec.rb +36 -35
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +2 -30
- data/spec/cucumber/runtime/support_code_spec.rb +1 -0
- data/spec/cucumber/runtime_spec.rb +3 -2
- data/spec/cucumber/step_argument_spec.rb +6 -5
- data/spec/cucumber/step_match_search_spec.rb +32 -41
- data/spec/cucumber/step_match_spec.rb +34 -33
- data/spec/cucumber/world/pending_spec.rb +12 -11
- data/spec/spec_helper.rb +1 -0
- data/spec/support/standard_step_actions.rb +2 -1
- metadata +132 -61
- data/features/docs/formatters/debug_formatter.feature +0 -47
- data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
- data/features/docs/writing_support_code/transforms.feature +0 -98
- data/features/lib/step_definitions/wire_steps.rb +0 -58
- data/gem_tasks/cucumber.rake +0 -25
- data/lib/cucumber/ast.rb +0 -13
- data/lib/cucumber/core_ext/instance_exec.rb +0 -70
- data/lib/cucumber/events/after_test_case.rb +0 -25
- data/lib/cucumber/events/after_test_step.rb +0 -30
- data/lib/cucumber/events/before_test_case.rb +0 -18
- data/lib/cucumber/events/before_test_step.rb +0 -23
- data/lib/cucumber/events/bus.rb +0 -86
- data/lib/cucumber/events/finished_testing.rb +0 -9
- data/lib/cucumber/formatter/debug.rb +0 -35
- data/lib/cucumber/formatter/event_bus_report.rb +0 -38
- data/lib/cucumber/rb_support/rb_hook.rb +0 -19
- data/lib/cucumber/rb_support/rb_step_definition.rb +0 -131
- data/lib/cucumber/rb_support/rb_transform.rb +0 -59
- data/lib/cucumber/rb_support/rb_world.rb +0 -149
- data/spec/cucumber/core_ext/instance_exec_spec.rb +0 -4
- data/spec/cucumber/events/bus_spec.rb +0 -94
- data/spec/cucumber/formatter/debug_spec.rb +0 -64
- data/spec/cucumber/formatter/event_bus_report_spec.rb +0 -88
- data/spec/cucumber/rb_support/rb_language_spec.rb +0 -243
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +0 -199
- data/spec/cucumber/rb_support/rb_transform_spec.rb +0 -46
- data/spec/cucumber_spec.rb +0 -39
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'cucumber/core/report/summary'
|
|
3
|
+
require 'cucumber/formatter/backtrace_filter'
|
|
1
4
|
require 'cucumber/formatter/console'
|
|
5
|
+
require 'cucumber/formatter/console_counts'
|
|
6
|
+
require 'cucumber/formatter/console_issues'
|
|
2
7
|
require 'cucumber/formatter/io'
|
|
3
8
|
require 'cucumber/formatter/duration_extractor'
|
|
4
9
|
require 'cucumber/formatter/hook_query_visitor'
|
|
@@ -10,32 +15,60 @@ module Cucumber
|
|
|
10
15
|
include Console
|
|
11
16
|
include Io
|
|
12
17
|
attr_reader :runtime
|
|
18
|
+
attr_reader :config, :summary
|
|
13
19
|
|
|
14
|
-
def initialize(
|
|
15
|
-
@
|
|
20
|
+
def initialize(config)
|
|
21
|
+
@config, @io = config, ensure_io(config.out_stream)
|
|
16
22
|
@previous_step_keyword = nil
|
|
17
23
|
@snippets_input = []
|
|
18
24
|
@total_duration = 0
|
|
25
|
+
@summary = Cucumber::Core::Report::Summary.new(config.event_bus)
|
|
26
|
+
@matches = {}
|
|
27
|
+
@pending_step_matches = []
|
|
28
|
+
@failed_results = []
|
|
29
|
+
@failed_test_cases = []
|
|
30
|
+
@passed_test_cases = []
|
|
31
|
+
@counts = ConsoleCounts.new(config)
|
|
32
|
+
@issues = ConsoleIssues.new(config)
|
|
33
|
+
config.on_event :step_activated, &method(:on_step_activated)
|
|
34
|
+
config.on_event :test_case_started, &method(:on_test_case_started)
|
|
35
|
+
config.on_event :test_step_finished, &method(:on_test_step_finished)
|
|
36
|
+
config.on_event :test_case_finished, &method(:on_test_case_finished)
|
|
37
|
+
config.on_event :test_run_finished, &method(:on_test_run_finished)
|
|
19
38
|
end
|
|
20
39
|
|
|
21
|
-
def
|
|
40
|
+
def on_step_activated(event)
|
|
41
|
+
@matches[event.test_step.source] = event.step_match
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def on_test_case_started(_event)
|
|
22
45
|
unless @profile_information_printed
|
|
23
|
-
|
|
46
|
+
do_print_profile_information(config.profiles) unless config.skip_profile_information? || config.profiles.nil? || config.profiles.empty?
|
|
24
47
|
@profile_information_printed = true
|
|
25
48
|
end
|
|
26
49
|
@previous_step_keyword = nil
|
|
27
50
|
end
|
|
28
51
|
|
|
29
|
-
def
|
|
52
|
+
def on_test_step_finished(event)
|
|
53
|
+
test_step = event.test_step
|
|
54
|
+
result = event.result.with_filtered_backtrace(Cucumber::Formatter::BacktraceFilter)
|
|
30
55
|
progress(result.to_sym) if !HookQueryVisitor.new(test_step).hook? || result.failed?
|
|
31
|
-
|
|
56
|
+
|
|
57
|
+
return if HookQueryVisitor.new(test_step).hook?
|
|
58
|
+
collect_snippet_data(test_step, result)
|
|
59
|
+
@pending_step_matches << @matches[test_step.source] if result.pending?
|
|
60
|
+
@failed_results << result if result.failed?
|
|
32
61
|
end
|
|
33
62
|
|
|
34
|
-
def
|
|
63
|
+
def on_test_case_finished(event)
|
|
64
|
+
test_case = event.test_case
|
|
65
|
+
result = event.result.with_filtered_backtrace(Cucumber::Formatter::BacktraceFilter)
|
|
66
|
+
@failed_test_cases << test_case if result.failed?
|
|
67
|
+
@passed_test_cases << test_case if result.passed?
|
|
35
68
|
@total_duration += DurationExtractor.new(result).result_duration
|
|
36
69
|
end
|
|
37
70
|
|
|
38
|
-
def
|
|
71
|
+
def on_test_run_finished(_event)
|
|
39
72
|
@io.puts
|
|
40
73
|
@io.puts
|
|
41
74
|
print_summary
|
|
@@ -44,11 +77,18 @@ module Cucumber
|
|
|
44
77
|
private
|
|
45
78
|
|
|
46
79
|
def print_summary
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
print_statistics(@total_duration, @
|
|
50
|
-
|
|
51
|
-
|
|
80
|
+
print_elements(@pending_step_matches, :pending, 'steps')
|
|
81
|
+
print_elements(@failed_results, :failed, 'steps')
|
|
82
|
+
print_statistics(@total_duration, @config, @counts, @issues)
|
|
83
|
+
snippet_text_proc = lambda { |step_keyword, step_name, multiline_arg|
|
|
84
|
+
snippet_text(step_keyword, step_name, multiline_arg)
|
|
85
|
+
}
|
|
86
|
+
do_print_snippets(snippet_text_proc) if config.snippets? && summary.test_steps.total(:undefined) > 0
|
|
87
|
+
return unless config.wip?
|
|
88
|
+
messages = @passed_test_cases.map do |test_case|
|
|
89
|
+
linebreaks("#{test_case.location.on_line(test_case.location.line)}:in `#{test_case.name}'", ENV['CUCUMBER_TRUNCATE_OUTPUT'].to_i)
|
|
90
|
+
end
|
|
91
|
+
do_print_passing_wip(messages)
|
|
52
92
|
end
|
|
53
93
|
|
|
54
94
|
CHARS = {
|
|
@@ -68,6 +108,8 @@ module Cucumber
|
|
|
68
108
|
def table_header_cell?(status)
|
|
69
109
|
status == :skipped_param
|
|
70
110
|
end
|
|
111
|
+
|
|
112
|
+
TestCaseData = Struct.new(:name, :location)
|
|
71
113
|
end
|
|
72
114
|
end
|
|
73
115
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'cucumber/formatter/io'
|
|
2
3
|
|
|
3
4
|
module Cucumber
|
|
@@ -5,28 +6,24 @@ module Cucumber
|
|
|
5
6
|
class Rerun
|
|
6
7
|
include Formatter::Io
|
|
7
8
|
|
|
8
|
-
def initialize(
|
|
9
|
-
@io = ensure_io(
|
|
9
|
+
def initialize(config)
|
|
10
|
+
@io = ensure_io(config.out_stream)
|
|
11
|
+
@config = config
|
|
10
12
|
@failures = {}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return if @failures.empty?
|
|
22
|
-
@io.print file_failures.join(' ')
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
[:before_test_case, :before_test_step, :after_test_step].each do |method|
|
|
26
|
-
define_method(method) { |*| }
|
|
13
|
+
config.on_event :test_case_finished do |event|
|
|
14
|
+
test_case, result = *event.attributes
|
|
15
|
+
next if result.ok?(@config.strict)
|
|
16
|
+
@failures[test_case.location.file] ||= []
|
|
17
|
+
@failures[test_case.location.file] << test_case.location.line
|
|
18
|
+
end
|
|
19
|
+
config.on_event :test_run_finished do
|
|
20
|
+
next if @failures.empty?
|
|
21
|
+
@io.print file_failures.join('\n')
|
|
22
|
+
end
|
|
27
23
|
end
|
|
28
24
|
|
|
29
25
|
private
|
|
26
|
+
|
|
30
27
|
def file_failures
|
|
31
28
|
@failures.map { |file, lines| [file, lines].join(':') }
|
|
32
29
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Cucumber
|
|
2
3
|
module Formatter
|
|
3
4
|
# The formatter used for <tt>--format steps</tt>
|
|
@@ -9,7 +10,7 @@ module Cucumber
|
|
|
9
10
|
@step_definition_files = collect_steps(runtime)
|
|
10
11
|
end
|
|
11
12
|
|
|
12
|
-
def after_features(
|
|
13
|
+
def after_features(_features)
|
|
13
14
|
print_summary
|
|
14
15
|
end
|
|
15
16
|
|
|
@@ -1,35 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'cucumber/formatter/io'
|
|
3
|
+
require 'cucumber/formatter/console'
|
|
4
|
+
require 'cucumber/formatter/console_counts'
|
|
5
|
+
require 'cucumber/formatter/console_issues'
|
|
6
|
+
require 'cucumber/core/test/result'
|
|
7
|
+
|
|
1
8
|
module Cucumber
|
|
2
9
|
module Formatter
|
|
3
|
-
module Summary
|
|
4
10
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
# Summary formatter, outputting only feature / scenario titles
|
|
12
|
+
class Summary
|
|
13
|
+
include Io
|
|
14
|
+
include Console
|
|
15
|
+
|
|
16
|
+
def initialize(config)
|
|
17
|
+
@config, @io = config, ensure_io(config.out_stream)
|
|
18
|
+
@counts = ConsoleCounts.new(@config)
|
|
19
|
+
@issues = ConsoleIssues.new(@config)
|
|
20
|
+
@start_time = Time.now
|
|
9
21
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
22
|
+
@config.on_event :test_case_started do |event|
|
|
23
|
+
print_feature event.test_case
|
|
24
|
+
print_test_case event.test_case
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
@config.on_event :test_case_finished do |event|
|
|
28
|
+
print_result event.result
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
@config.on_event :test_run_finished do |event|
|
|
32
|
+
duration = Time.now - @start_time
|
|
33
|
+
@io.puts
|
|
34
|
+
print_statistics(duration, @config, @counts, @issues)
|
|
35
|
+
end
|
|
13
36
|
end
|
|
14
37
|
|
|
15
38
|
private
|
|
16
39
|
|
|
17
|
-
def
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
" (#{counts.join(', ')})"
|
|
24
|
-
else
|
|
25
|
-
""
|
|
26
|
-
end
|
|
40
|
+
def print_feature(test_case)
|
|
41
|
+
feature = test_case.feature
|
|
42
|
+
return if @current_feature == feature
|
|
43
|
+
@io.puts unless @current_feature.nil?
|
|
44
|
+
@io.puts feature
|
|
45
|
+
@current_feature = feature
|
|
27
46
|
end
|
|
28
47
|
|
|
29
|
-
def
|
|
30
|
-
|
|
48
|
+
def print_test_case(test_case)
|
|
49
|
+
@io.print " #{test_case.name} "
|
|
31
50
|
end
|
|
32
51
|
|
|
52
|
+
def print_result(result)
|
|
53
|
+
@io.puts format_string(result, result.to_sym)
|
|
54
|
+
end
|
|
33
55
|
end
|
|
34
56
|
end
|
|
35
57
|
end
|
|
58
|
+
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# Require this file if you need Unicode support.
|
|
2
3
|
# Tips for improvement - esp. ruby 1.9: http://www.ruby-forum.com/topic/184730
|
|
3
4
|
require 'cucumber/platform'
|
|
@@ -14,7 +15,7 @@ if Cucumber::WINDOWS
|
|
|
14
15
|
Cucumber::CODEPAGE = "cp#{$1.to_i}"
|
|
15
16
|
end
|
|
16
17
|
else
|
|
17
|
-
Cucumber::CODEPAGE =
|
|
18
|
+
Cucumber::CODEPAGE = 'cp1252'
|
|
18
19
|
STDERR.puts("WARNING: Couldn't detect your output codepage. Assuming it is 1252. You may have to chcp 1252 or SET CUCUMBER_OUTPUT_ENCODING=cp1252.")
|
|
19
20
|
end
|
|
20
21
|
|
|
@@ -1,33 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'cucumber/formatter/progress'
|
|
2
3
|
require 'cucumber/step_definition_light'
|
|
3
4
|
|
|
4
5
|
module Cucumber
|
|
5
6
|
module Formatter
|
|
6
7
|
class Usage < Progress
|
|
7
|
-
include Console
|
|
8
8
|
|
|
9
9
|
class StepDefKey < StepDefinitionLight
|
|
10
10
|
attr_accessor :mean_duration, :status
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def initialize(
|
|
14
|
-
|
|
15
|
-
@io = ensure_io(path_or_io)
|
|
16
|
-
@options = options
|
|
13
|
+
def initialize(config)
|
|
14
|
+
super
|
|
17
15
|
@stepdef_to_match = Hash.new { |h, stepdef_key| h[stepdef_key] = [] }
|
|
18
16
|
@total_duration = 0
|
|
19
17
|
@matches = {}
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
config.on_event :step_activated do |event|
|
|
19
|
+
test_step, step_match = *event.attributes
|
|
20
|
+
@matches[test_step.source] = step_match
|
|
22
21
|
end
|
|
22
|
+
config.on_event :step_definition_registered, &method(:on_step_definition_registered)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def on_step_definition_registered(event)
|
|
26
|
+
stepdef_key = StepDefKey.new(event.step_definition.expression.to_s, event.step_definition.location)
|
|
27
|
+
@stepdef_to_match[stepdef_key] = []
|
|
23
28
|
end
|
|
24
29
|
|
|
25
|
-
def
|
|
26
|
-
|
|
30
|
+
def on_step_match(event)
|
|
31
|
+
@matches[event.test_step.source] = event.step_match
|
|
32
|
+
super
|
|
33
|
+
end
|
|
27
34
|
|
|
35
|
+
def on_test_step_finished(event)
|
|
36
|
+
return if HookQueryVisitor.new(event.test_step).hook?
|
|
37
|
+
|
|
38
|
+
test_step = event.test_step
|
|
39
|
+
result = event.result.with_filtered_backtrace(Cucumber::Formatter::BacktraceFilter)
|
|
28
40
|
step_match = @matches[test_step.source]
|
|
29
41
|
step_definition = step_match.step_definition
|
|
30
|
-
stepdef_key = StepDefKey.new(step_definition.
|
|
42
|
+
stepdef_key = StepDefKey.new(step_definition.expression.to_s, step_definition.location)
|
|
31
43
|
unless @stepdef_to_match[stepdef_key].map { |key| key[:location] }.include? test_step.location
|
|
32
44
|
duration = DurationExtractor.new(result).result_duration
|
|
33
45
|
|
|
@@ -45,14 +57,13 @@ module Cucumber
|
|
|
45
57
|
private
|
|
46
58
|
|
|
47
59
|
def print_summary
|
|
48
|
-
add_unused_stepdefs
|
|
49
60
|
aggregate_info
|
|
50
61
|
|
|
51
|
-
if
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
62
|
+
keys = if config.dry_run?
|
|
63
|
+
@stepdef_to_match.keys.sort {|a,b| a.regexp_source <=> b.regexp_source}
|
|
64
|
+
else
|
|
65
|
+
@stepdef_to_match.keys.sort {|a,b| a.mean_duration <=> b.mean_duration}.reverse
|
|
66
|
+
end
|
|
56
67
|
|
|
57
68
|
keys.each do |stepdef_key|
|
|
58
69
|
print_step_definition(stepdef_key)
|
|
@@ -60,7 +71,7 @@ module Cucumber
|
|
|
60
71
|
if @stepdef_to_match[stepdef_key].any?
|
|
61
72
|
print_steps(stepdef_key)
|
|
62
73
|
else
|
|
63
|
-
@io.puts(
|
|
74
|
+
@io.puts(' ' + format_string('NOT MATCHED BY ANY STEPS', :failed))
|
|
64
75
|
end
|
|
65
76
|
end
|
|
66
77
|
@io.puts
|
|
@@ -68,9 +79,9 @@ module Cucumber
|
|
|
68
79
|
end
|
|
69
80
|
|
|
70
81
|
def print_step_definition(stepdef_key)
|
|
71
|
-
@io.print format_string(
|
|
82
|
+
@io.print format_string(format('%.7f', stepdef_key.mean_duration), :skipped) + ' ' unless config.dry_run?
|
|
72
83
|
@io.print format_string(stepdef_key.regexp_source, stepdef_key.status)
|
|
73
|
-
if
|
|
84
|
+
if config.source?
|
|
74
85
|
indent = max_length - stepdef_key.regexp_source.unpack('U*').length
|
|
75
86
|
line_comment = " # #{stepdef_key.location}".indent(indent)
|
|
76
87
|
@io.print(format_string(line_comment, :comment))
|
|
@@ -80,10 +91,10 @@ module Cucumber
|
|
|
80
91
|
|
|
81
92
|
def print_steps(stepdef_key)
|
|
82
93
|
@stepdef_to_match[stepdef_key].each do |step|
|
|
83
|
-
@io.print
|
|
84
|
-
@io.print format_string(
|
|
94
|
+
@io.print ' '
|
|
95
|
+
@io.print format_string(format('%.7f', step[:duration]), :skipped) + ' ' unless config.dry_run?
|
|
85
96
|
@io.print format_step(step[:keyword], step[:step_match], step[:status], nil)
|
|
86
|
-
if
|
|
97
|
+
if config.source?
|
|
87
98
|
indent = max_length - (step[:keyword].unpack('U*').length + step[:step_match].format_args.unpack('U*').length)
|
|
88
99
|
line_comment = " # #{step[:location]}".indent(indent)
|
|
89
100
|
@io.print(format_string(line_comment, :comment))
|
|
@@ -125,12 +136,6 @@ module Cucumber
|
|
|
125
136
|
end
|
|
126
137
|
end
|
|
127
138
|
|
|
128
|
-
def add_unused_stepdefs
|
|
129
|
-
@runtime.unmatched_step_definitions.each do |step_definition|
|
|
130
|
-
stepdef_key = StepDefKey.new(step_definition.regexp_source, step_definition.location)
|
|
131
|
-
@stepdef_to_match[stepdef_key] = []
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
139
|
end
|
|
135
140
|
end
|
|
136
141
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Cucumber
|
|
2
3
|
module Gherkin
|
|
3
4
|
module Formatter
|
|
@@ -9,7 +10,7 @@ module Gherkin
|
|
|
9
10
|
#
|
|
10
11
|
# This is used in the pretty formatter.
|
|
11
12
|
def escape_cell(s)
|
|
12
|
-
s.gsub(/\\(?!\|)/,
|
|
13
|
+
s.gsub(/\\(?!\|)/, '\\\\\\\\').gsub(/\n/, '\\n').gsub(/\|/, '\\|')
|
|
13
14
|
end
|
|
14
15
|
end
|
|
15
16
|
end
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'cucumber/cucumber_expressions/parameter_type'
|
|
3
|
+
require 'cucumber/deprecate'
|
|
4
|
+
|
|
1
5
|
module Cucumber
|
|
2
|
-
module
|
|
3
|
-
# This module
|
|
4
|
-
#
|
|
5
|
-
|
|
6
|
-
module RbDsl
|
|
6
|
+
module Glue
|
|
7
|
+
# This module provides the methods the DSL you can use to define
|
|
8
|
+
# steps, hooks, transforms etc.
|
|
9
|
+
module Dsl
|
|
7
10
|
class << self
|
|
8
11
|
attr_writer :rb_language
|
|
9
12
|
|
|
@@ -11,16 +14,16 @@ module Cucumber
|
|
|
11
14
|
alias_method adverb, :register_rb_step_definition
|
|
12
15
|
end
|
|
13
16
|
|
|
14
|
-
def build_rb_world_factory(world_modules, proc)
|
|
15
|
-
@rb_language.build_rb_world_factory(world_modules, proc)
|
|
17
|
+
def build_rb_world_factory(world_modules, namespaced_world_modules, proc)
|
|
18
|
+
@rb_language.build_rb_world_factory(world_modules, namespaced_world_modules, proc)
|
|
16
19
|
end
|
|
17
20
|
|
|
18
21
|
def register_rb_hook(phase, tag_names, proc)
|
|
19
22
|
@rb_language.register_rb_hook(phase, tag_names, proc)
|
|
20
23
|
end
|
|
21
24
|
|
|
22
|
-
def
|
|
23
|
-
@rb_language.
|
|
25
|
+
def define_parameter_type(parameter_type)
|
|
26
|
+
@rb_language.define_parameter_type(parameter_type)
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
def register_rb_step_definition(regexp, proc_or_sym, options = {})
|
|
@@ -33,6 +36,10 @@ module Cucumber
|
|
|
33
36
|
# Object that the scenario's steps will run within. Any +world_modules+
|
|
34
37
|
# will be mixed into this Object (via Object#extend).
|
|
35
38
|
#
|
|
39
|
+
# By default the +world modules+ are added to a global namespace. It is
|
|
40
|
+
# possible to create a namespaced World by using an hash, where the
|
|
41
|
+
# symbols are the namespaces.
|
|
42
|
+
#
|
|
36
43
|
# This method is typically called from one or more Ruby scripts under
|
|
37
44
|
# <tt>features/support</tt>. You can call this method as many times as you
|
|
38
45
|
# like (to register more modules), but if you try to register more than
|
|
@@ -46,20 +53,22 @@ module Cucumber
|
|
|
46
53
|
#
|
|
47
54
|
# World(MyModule)
|
|
48
55
|
#
|
|
49
|
-
|
|
50
|
-
|
|
56
|
+
# World(my_module: MyModule)
|
|
57
|
+
#
|
|
58
|
+
def World(*world_modules, **namespaced_world_modules, &proc)
|
|
59
|
+
Dsl.build_rb_world_factory(world_modules, namespaced_world_modules, proc)
|
|
51
60
|
end
|
|
52
61
|
|
|
53
62
|
# Registers a proc that will run before each Scenario. You can register as many
|
|
54
63
|
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
55
64
|
def Before(*tag_expressions, &proc)
|
|
56
|
-
|
|
65
|
+
Dsl.register_rb_hook('before', tag_expressions, proc)
|
|
57
66
|
end
|
|
58
67
|
|
|
59
68
|
# Registers a proc that will run after each Scenario. You can register as many
|
|
60
69
|
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
61
70
|
def After(*tag_expressions, &proc)
|
|
62
|
-
|
|
71
|
+
Dsl.register_rb_hook('after', tag_expressions, proc)
|
|
63
72
|
end
|
|
64
73
|
|
|
65
74
|
# Registers a proc that will be wrapped around each scenario. The proc
|
|
@@ -68,34 +77,35 @@ module Cucumber
|
|
|
68
77
|
# blocks in 1.8), on which it should call the .call method. You can register
|
|
69
78
|
# as many as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
70
79
|
def Around(*tag_expressions, &proc)
|
|
71
|
-
|
|
80
|
+
Dsl.register_rb_hook('around', tag_expressions, proc)
|
|
72
81
|
end
|
|
73
82
|
|
|
74
83
|
# Registers a proc that will run after each Step. You can register as
|
|
75
84
|
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
76
85
|
def AfterStep(*tag_expressions, &proc)
|
|
77
|
-
|
|
86
|
+
Dsl.register_rb_hook('after_step', tag_expressions, proc)
|
|
78
87
|
end
|
|
79
88
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
def ParameterType(options)
|
|
90
|
+
type = options[:type] || Object
|
|
91
|
+
use_for_snippets = true if options[:use_for_snippets].nil?
|
|
92
|
+
prefer_for_regexp_match = false if options[:prefer_for_regexp_match].nil?
|
|
93
|
+
|
|
94
|
+
parameter_type = CucumberExpressions::ParameterType.new(
|
|
95
|
+
options[:name],
|
|
96
|
+
options[:regexp],
|
|
97
|
+
type,
|
|
98
|
+
options[:transformer],
|
|
99
|
+
use_for_snippets,
|
|
100
|
+
prefer_for_regexp_match
|
|
90
101
|
)
|
|
91
|
-
|
|
102
|
+
Dsl.define_parameter_type(parameter_type)
|
|
92
103
|
end
|
|
93
104
|
|
|
94
105
|
# Registers a proc that will run after Cucumber is configured. You can register as
|
|
95
106
|
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
96
|
-
# TODO: Deprecate this
|
|
97
107
|
def AfterConfiguration(&proc)
|
|
98
|
-
|
|
108
|
+
Dsl.register_rb_hook('after_configuration', [], proc)
|
|
99
109
|
end
|
|
100
110
|
|
|
101
111
|
# Registers a new Ruby StepDefinition. This method is aliased
|
|
@@ -115,10 +125,11 @@ module Cucumber
|
|
|
115
125
|
# the context of the <tt>World</tt> object.
|
|
116
126
|
def register_rb_step_definition(regexp, symbol = nil, options = {}, &proc)
|
|
117
127
|
proc_or_sym = symbol || proc
|
|
118
|
-
|
|
128
|
+
Dsl.register_rb_step_definition(regexp, proc_or_sym, options)
|
|
119
129
|
end
|
|
120
130
|
end
|
|
121
131
|
end
|
|
122
132
|
end
|
|
123
133
|
|
|
124
|
-
|
|
134
|
+
# TODO: can we avoid adding methods to the global namespace (Kernel)
|
|
135
|
+
extend(Cucumber::Glue::Dsl)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'cucumber/glue/invoke_in_world'
|
|
3
|
+
|
|
4
|
+
module Cucumber
|
|
5
|
+
module Glue
|
|
6
|
+
# TODO: Kill pointless wrapper for Before, After and AfterStep hooks with fire
|
|
7
|
+
class Hook
|
|
8
|
+
attr_reader :tag_expressions, :location
|
|
9
|
+
|
|
10
|
+
def initialize(registry, tag_expressions, proc)
|
|
11
|
+
@registry = registry
|
|
12
|
+
@tag_expressions = tag_expressions
|
|
13
|
+
@proc = proc
|
|
14
|
+
@location = Cucumber::Core::Ast::Location.from_source_location(*@proc.source_location)
|
|
15
|
+
warn_for_old_style_tag_expressions(tag_expressions)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def invoke(pseudo_method, arguments, &block)
|
|
19
|
+
check_arity = false
|
|
20
|
+
InvokeInWorld.cucumber_instance_exec_in(
|
|
21
|
+
@registry.current_world,
|
|
22
|
+
check_arity,
|
|
23
|
+
pseudo_method,
|
|
24
|
+
*[arguments, block].flatten.compact,
|
|
25
|
+
&@proc
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def warn_for_old_style_tag_expressions(tag_expressions)
|
|
32
|
+
tag_expressions.each do |tag_expression|
|
|
33
|
+
if tag_expression.include?('~') && tag_expression != '~@no-clobber' # ~@no-clobber is used in aruba
|
|
34
|
+
warn("Deprecated: Found tagged hook with '#{tag_expression}'. Support for '~@tag' will be removed from the next release of Cucumber. Please use 'not @tag' instead.")
|
|
35
|
+
end
|
|
36
|
+
if tag_expression.include?(',')
|
|
37
|
+
warn("Deprecated: Found tagged hook with '#{tag_expression}'. Support for '@tag1,@tag2' will be removed from the next release of Cucumber. Please use '@tag or @tag2' instead.")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|