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,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'forwardable'
|
|
2
3
|
require 'cucumber/gherkin/data_table_parser'
|
|
3
4
|
require 'cucumber/gherkin/formatter/escaping'
|
|
4
5
|
require 'cucumber/core/ast/describes_itself'
|
|
6
|
+
require 'cucumber/multiline_argument/data_table/diff_matrices'
|
|
5
7
|
|
|
6
8
|
module Cucumber
|
|
7
9
|
module MultilineArgument
|
|
@@ -25,38 +27,10 @@ module Cucumber
|
|
|
25
27
|
# This will store <tt>[['a', 'b'], ['c', 'd']]</tt> in the <tt>data</tt> variable.
|
|
26
28
|
#
|
|
27
29
|
class DataTable
|
|
28
|
-
class Different < StandardError
|
|
29
|
-
def initialize(table)
|
|
30
|
-
super("Tables were not identical:\n#{table}")
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
class Builder
|
|
35
|
-
attr_reader :rows
|
|
36
|
-
|
|
37
|
-
def initialize
|
|
38
|
-
@rows = []
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def row(row)
|
|
42
|
-
@rows << row
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def eof
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
include Enumerable
|
|
50
30
|
include Core::Ast::DescribesItself
|
|
51
|
-
extend Forwardable
|
|
52
|
-
|
|
53
|
-
NULL_CONVERSIONS = Hash.new({ :strict => false, :proc => lambda{ |cell_value| cell_value } }).freeze
|
|
54
|
-
|
|
55
|
-
attr_accessor :file
|
|
56
|
-
def_delegator :@ast_table, :location
|
|
57
31
|
|
|
58
32
|
def self.default_arg_name #:nodoc:
|
|
59
|
-
|
|
33
|
+
'table'
|
|
60
34
|
end
|
|
61
35
|
|
|
62
36
|
class << self
|
|
@@ -67,11 +41,12 @@ module Cucumber
|
|
|
67
41
|
when String
|
|
68
42
|
parse(data, location)
|
|
69
43
|
else
|
|
70
|
-
raise ArgumentError,
|
|
44
|
+
raise ArgumentError, 'expected data to be a String or an Array.'
|
|
71
45
|
end
|
|
72
46
|
end
|
|
73
47
|
|
|
74
48
|
private
|
|
49
|
+
|
|
75
50
|
def parse(text, location = Core::Ast::Location.of_caller)
|
|
76
51
|
builder = Builder.new
|
|
77
52
|
parser = Cucumber::Gherkin::DataTableParser.new(builder)
|
|
@@ -84,13 +59,30 @@ module Cucumber
|
|
|
84
59
|
end
|
|
85
60
|
end
|
|
86
61
|
|
|
62
|
+
class Builder
|
|
63
|
+
attr_reader :rows
|
|
64
|
+
|
|
65
|
+
def initialize
|
|
66
|
+
@rows = []
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def row(row)
|
|
70
|
+
@rows << row
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def eof
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
NULL_CONVERSIONS = Hash.new({ :strict => false, :proc => lambda{ |cell_value| cell_value } }).freeze
|
|
87
79
|
|
|
88
80
|
# @param data [Core::Ast::DataTable] the data for the table
|
|
89
81
|
# @param conversion_procs [Hash] see map_columns!
|
|
90
82
|
# @param header_mappings [Hash] see map_headers!
|
|
91
83
|
# @param header_conversion_proc [Proc] see map_headers!
|
|
92
84
|
def initialize(data, conversion_procs = NULL_CONVERSIONS.dup, header_mappings = {}, header_conversion_proc = nil)
|
|
93
|
-
raise ArgumentError,
|
|
85
|
+
raise ArgumentError, 'data must be a Core::Ast::DataTable' unless data.is_a? Core::Ast::DataTable
|
|
94
86
|
ast_table = data
|
|
95
87
|
# Verify that it's square
|
|
96
88
|
ast_table.transpose
|
|
@@ -109,6 +101,12 @@ module Cucumber
|
|
|
109
101
|
dup
|
|
110
102
|
end
|
|
111
103
|
|
|
104
|
+
attr_accessor :file
|
|
105
|
+
|
|
106
|
+
def location
|
|
107
|
+
@ast_table.location
|
|
108
|
+
end
|
|
109
|
+
|
|
112
110
|
# Creates a copy of this table, inheriting any column and header mappings
|
|
113
111
|
# registered with #map_column! and #map_headers!.
|
|
114
112
|
#
|
|
@@ -161,8 +159,10 @@ module Cucumber
|
|
|
161
159
|
# [{:foo => '2', :bar => '3', :foo_bar => '5'}, {:foo => '7', :bar => '9', :foo_bar => '16'}]
|
|
162
160
|
#
|
|
163
161
|
def symbolic_hashes
|
|
164
|
-
@
|
|
165
|
-
|
|
162
|
+
@symbolic_hashes ||=
|
|
163
|
+
self.hashes.map do |string_hash|
|
|
164
|
+
Hash[string_hash.map{ |a,b| [symbolize_key(a), b] }]
|
|
165
|
+
end
|
|
166
166
|
end
|
|
167
167
|
|
|
168
168
|
# Converts this table into a Hash where the first column is
|
|
@@ -336,80 +336,22 @@ module Cucumber
|
|
|
336
336
|
# a Table argument, if you want to compare that table to some actual values.
|
|
337
337
|
#
|
|
338
338
|
def diff!(other_table, options={})
|
|
339
|
-
options = {
|
|
340
|
-
:missing_row => true,
|
|
341
|
-
:surplus_row => true,
|
|
342
|
-
:missing_col => true,
|
|
343
|
-
:surplus_col => false,
|
|
344
|
-
:misplaced_col => false
|
|
345
|
-
}.merge(options)
|
|
346
|
-
|
|
347
339
|
other_table = ensure_table(other_table)
|
|
348
340
|
other_table.convert_headers!
|
|
349
341
|
other_table.convert_columns!
|
|
350
|
-
ensure_green!
|
|
351
342
|
|
|
352
343
|
convert_headers!
|
|
353
344
|
convert_columns!
|
|
354
345
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
padded_width = cell_matrix[0].length
|
|
358
|
-
|
|
359
|
-
missing_col = cell_matrix[0].detect{|cell| cell.status == :undefined}
|
|
360
|
-
surplus_col = padded_width > original_width
|
|
361
|
-
misplaced_col = cell_matrix[0] != other_table.cell_matrix[0]
|
|
362
|
-
|
|
363
|
-
require_diff_lcs
|
|
364
|
-
cell_matrix.extend(Diff::LCS)
|
|
365
|
-
changes = cell_matrix.diff(other_table_cell_matrix).flatten
|
|
366
|
-
|
|
367
|
-
inserted = 0
|
|
368
|
-
missing = 0
|
|
369
|
-
|
|
370
|
-
row_indices = Array.new(other_table_cell_matrix.length) {|n| n}
|
|
371
|
-
|
|
372
|
-
last_change = nil
|
|
373
|
-
missing_row_pos = nil
|
|
374
|
-
insert_row_pos = nil
|
|
375
|
-
|
|
376
|
-
changes.each do |change|
|
|
377
|
-
if(change.action == '-')
|
|
378
|
-
missing_row_pos = change.position + inserted
|
|
379
|
-
cell_matrix[missing_row_pos].each{|cell| cell.status = :undefined}
|
|
380
|
-
row_indices.insert(missing_row_pos, nil)
|
|
381
|
-
missing += 1
|
|
382
|
-
else # '+'
|
|
383
|
-
insert_row_pos = change.position + missing
|
|
384
|
-
inserted_row = change.element
|
|
385
|
-
inserted_row.each{|cell| cell.status = :comment}
|
|
386
|
-
cell_matrix.insert(insert_row_pos, inserted_row)
|
|
387
|
-
row_indices[insert_row_pos] = nil
|
|
388
|
-
inspect_rows(cell_matrix[missing_row_pos], inserted_row) if last_change && last_change.action == '-'
|
|
389
|
-
inserted += 1
|
|
390
|
-
end
|
|
391
|
-
last_change = change
|
|
392
|
-
end
|
|
346
|
+
DiffMatrices.new(cell_matrix, other_table.cell_matrix, options).call
|
|
347
|
+
end
|
|
393
348
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
surplus_cell = other_row[col_index]
|
|
400
|
-
row[col_index].value = surplus_cell.value if row[col_index]
|
|
401
|
-
end
|
|
402
|
-
end
|
|
349
|
+
class Different < StandardError
|
|
350
|
+
attr_reader :table
|
|
351
|
+
def initialize(table)
|
|
352
|
+
@table = table
|
|
353
|
+
super("Tables were not identical:\n#{table}")
|
|
403
354
|
end
|
|
404
|
-
|
|
405
|
-
clear_cache!
|
|
406
|
-
should_raise =
|
|
407
|
-
missing_row_pos && options[:missing_row] ||
|
|
408
|
-
insert_row_pos && options[:surplus_row] ||
|
|
409
|
-
missing_col && options[:missing_col] ||
|
|
410
|
-
surplus_col && options[:surplus_col] ||
|
|
411
|
-
misplaced_col && options[:misplaced_col]
|
|
412
|
-
raise Different.new(self) if should_raise
|
|
413
355
|
end
|
|
414
356
|
|
|
415
357
|
def to_hash(cells) #:nodoc:
|
|
@@ -452,9 +394,7 @@ module Cucumber
|
|
|
452
394
|
cells_rows[0][col]
|
|
453
395
|
end
|
|
454
396
|
|
|
455
|
-
|
|
456
|
-
@cell_matrix
|
|
457
|
-
end
|
|
397
|
+
attr_reader :cell_matrix
|
|
458
398
|
|
|
459
399
|
def col_width(col) #:nodoc:
|
|
460
400
|
columns[col].__send__(:width)
|
|
@@ -469,12 +409,13 @@ module Cucumber
|
|
|
469
409
|
|
|
470
410
|
c = Cucumber::Term::ANSIColor.coloring?
|
|
471
411
|
Cucumber::Term::ANSIColor.coloring = options[:color]
|
|
472
|
-
|
|
412
|
+
runtime = Struct.new(:configuration).new(Configuration.new)
|
|
413
|
+
formatter = Formatter::Pretty.new(runtime, io, options)
|
|
473
414
|
formatter.instance_variable_set('@indent', options[:indent])
|
|
474
415
|
Formatter::LegacyApi::Ast::MultilineArg.for(self).accept(Formatter::Fanout.new([formatter]))
|
|
475
416
|
Cucumber::Term::ANSIColor.coloring = c
|
|
476
417
|
io.rewind
|
|
477
|
-
s = "\n" + io.read + (
|
|
418
|
+
s = "\n" + io.read + (' ' * (options[:indent] - 2))
|
|
478
419
|
s
|
|
479
420
|
end
|
|
480
421
|
|
|
@@ -492,11 +433,10 @@ module Cucumber
|
|
|
492
433
|
raw.to_json(*args)
|
|
493
434
|
end
|
|
494
435
|
|
|
495
|
-
private
|
|
496
|
-
|
|
497
436
|
TO_S_PREFIXES = Hash.new(' ')
|
|
498
437
|
TO_S_PREFIXES[:comment] = '(+) '
|
|
499
438
|
TO_S_PREFIXES[:undefined] = '(-) '
|
|
439
|
+
private_constant :TO_S_PREFIXES
|
|
500
440
|
|
|
501
441
|
protected
|
|
502
442
|
|
|
@@ -508,16 +448,6 @@ module Cucumber
|
|
|
508
448
|
end
|
|
509
449
|
end
|
|
510
450
|
|
|
511
|
-
def inspect_rows(missing_row, inserted_row) #:nodoc:
|
|
512
|
-
missing_row.each_with_index do |missing_cell, col|
|
|
513
|
-
inserted_cell = inserted_row[col]
|
|
514
|
-
if(missing_cell.value != inserted_cell.value && (missing_cell.value.to_s == inserted_cell.value.to_s))
|
|
515
|
-
missing_cell.inspect!
|
|
516
|
-
inserted_cell.inspect!
|
|
517
|
-
end
|
|
518
|
-
end
|
|
519
|
-
end
|
|
520
|
-
|
|
521
451
|
def create_cell_matrix(ast_table) #:nodoc:
|
|
522
452
|
ast_table.raw.map do |raw_row|
|
|
523
453
|
line = raw_row.line rescue -1
|
|
@@ -554,85 +484,21 @@ module Cucumber
|
|
|
554
484
|
raise "No headers matched #{pre.inspect}" if mapped_cells.empty?
|
|
555
485
|
raise "#{mapped_cells.length} headers matched #{pre.inspect}: #{mapped_cells.map { |c| c.value }.inspect}" if mapped_cells.length > 1
|
|
556
486
|
mapped_cells[0].value = post
|
|
557
|
-
if @conversion_procs.
|
|
487
|
+
if @conversion_procs.key?(pre)
|
|
558
488
|
@conversion_procs[post] = @conversion_procs.delete(pre)
|
|
559
489
|
end
|
|
560
490
|
end
|
|
561
491
|
end
|
|
562
492
|
|
|
563
|
-
def require_diff_lcs #:nodoc:
|
|
564
|
-
begin
|
|
565
|
-
require 'diff/lcs'
|
|
566
|
-
rescue LoadError => e
|
|
567
|
-
e.message << "\n Please gem install diff-lcs\n"
|
|
568
|
-
raise e
|
|
569
|
-
end
|
|
570
|
-
end
|
|
571
|
-
|
|
572
493
|
def clear_cache! #:nodoc:
|
|
573
494
|
@hashes = @rows_hash = @col_names = @rows = @columns = nil
|
|
574
495
|
end
|
|
575
496
|
|
|
576
|
-
# Pads two cell matrices to same column width and matches columns according to header value.
|
|
577
|
-
# The first cell matrix is the reference matrix with the second matrix matched against it.
|
|
578
|
-
def pad_and_match(a_cell_matrix, other_cell_matrix) #:nodoc:
|
|
579
|
-
clear_cache!
|
|
580
|
-
cols = a_cell_matrix.transpose
|
|
581
|
-
unmatched_cols = other_cell_matrix.transpose
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
header_values = cols.map(&:first)
|
|
585
|
-
matched_cols = []
|
|
586
|
-
|
|
587
|
-
header_values.each_with_index do |v, i|
|
|
588
|
-
mapped_index = unmatched_cols.index{|unmapped_col| unmapped_col.first == v}
|
|
589
|
-
if (mapped_index)
|
|
590
|
-
matched_cols << unmatched_cols.delete_at(mapped_index)
|
|
591
|
-
else
|
|
592
|
-
mark_as_missing(cols[i])
|
|
593
|
-
empty_col = other_cell_matrix.collect {SurplusCell.new(nil, self, -1)}
|
|
594
|
-
empty_col.first.value = v
|
|
595
|
-
matched_cols << empty_col
|
|
596
|
-
end
|
|
597
|
-
end
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
empty_col = cell_matrix.collect {SurplusCell.new(nil, self, -1)}
|
|
601
|
-
unmatched_cols.each do
|
|
602
|
-
cols << empty_col
|
|
603
|
-
end
|
|
604
|
-
|
|
605
|
-
return cols.transpose, (matched_cols + unmatched_cols).transpose
|
|
606
|
-
end
|
|
607
|
-
|
|
608
497
|
def ensure_table(table_or_array) #:nodoc:
|
|
609
498
|
return table_or_array if DataTable === table_or_array
|
|
610
499
|
DataTable.from(table_or_array)
|
|
611
500
|
end
|
|
612
501
|
|
|
613
|
-
def ensure_array_of_array(array)
|
|
614
|
-
Hash === array[0] ? hashes_to_array(array) : array
|
|
615
|
-
end
|
|
616
|
-
|
|
617
|
-
def hashes_to_array(hashes) #:nodoc:
|
|
618
|
-
header = hashes[0].keys.sort
|
|
619
|
-
[header] + hashes.map{|hash| header.map{|key| hash[key]}}
|
|
620
|
-
end
|
|
621
|
-
|
|
622
|
-
def ensure_green! #:nodoc:
|
|
623
|
-
each_cell{|cell| cell.status = :passed}
|
|
624
|
-
end
|
|
625
|
-
|
|
626
|
-
def each_cell(&proc) #:nodoc:
|
|
627
|
-
cell_matrix.each{|row| row.each(&proc)}
|
|
628
|
-
end
|
|
629
|
-
|
|
630
|
-
def mark_as_missing(col) #:nodoc:
|
|
631
|
-
col.each do |cell|
|
|
632
|
-
cell.status = :undefined
|
|
633
|
-
end
|
|
634
|
-
end
|
|
635
|
-
|
|
636
502
|
def symbolize_key(key)
|
|
637
503
|
key.downcase.tr(' ', '_').to_sym
|
|
638
504
|
end
|
|
@@ -731,7 +597,7 @@ module Cucumber
|
|
|
731
597
|
:comment
|
|
732
598
|
end
|
|
733
599
|
|
|
734
|
-
def ==(
|
|
600
|
+
def ==(_o)
|
|
735
601
|
true
|
|
736
602
|
end
|
|
737
603
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'delegate'
|
|
2
3
|
require 'cucumber/multiline_argument/data_table'
|
|
3
4
|
require 'cucumber/multiline_argument/doc_string'
|
|
@@ -10,14 +11,14 @@ module Cucumber
|
|
|
10
11
|
builder.wrap(node)
|
|
11
12
|
end
|
|
12
13
|
|
|
13
|
-
def from(argument, location=nil)
|
|
14
|
+
def from(argument, location=nil, content_type=nil)
|
|
14
15
|
location ||= Core::Ast::Location.of_caller
|
|
15
16
|
case argument
|
|
16
17
|
when String
|
|
17
|
-
doc_string(argument,
|
|
18
|
+
builder.doc_string(Core::Ast::DocString.new(argument, content_type, location))
|
|
18
19
|
when Array
|
|
19
20
|
location = location.on_line(argument.first.line..argument.last.line)
|
|
20
|
-
data_table(argument.map{ |row| row.cells }, location)
|
|
21
|
+
builder.data_table(argument.map{ |row| row.cells }, location)
|
|
21
22
|
when DataTable, DocString, None
|
|
22
23
|
argument
|
|
23
24
|
when nil
|
|
@@ -27,14 +28,6 @@ module Cucumber
|
|
|
27
28
|
end
|
|
28
29
|
end
|
|
29
30
|
|
|
30
|
-
def doc_string(argument, content_type, location)
|
|
31
|
-
builder.doc_string(Core::Ast::DocString.new(argument, content_type, location))
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def data_table(data, location)
|
|
35
|
-
builder.data_table(Core::Ast::DataTable.new(data, location))
|
|
36
|
-
end
|
|
37
|
-
|
|
38
31
|
private
|
|
39
32
|
|
|
40
33
|
def builder
|
|
@@ -48,11 +41,11 @@ module Cucumber
|
|
|
48
41
|
@result
|
|
49
42
|
end
|
|
50
43
|
|
|
51
|
-
def doc_string(node, *
|
|
44
|
+
def doc_string(node, *_args)
|
|
52
45
|
@result = DocString.new(node)
|
|
53
46
|
end
|
|
54
47
|
|
|
55
|
-
def data_table(node, *
|
|
48
|
+
def data_table(node, *_args)
|
|
56
49
|
@result = DataTable.new(node)
|
|
57
50
|
end
|
|
58
51
|
end
|
|
@@ -67,5 +60,3 @@ module Cucumber
|
|
|
67
60
|
end
|
|
68
61
|
end
|
|
69
62
|
end
|
|
70
|
-
|
|
71
|
-
require 'cucumber/ast'
|
data/lib/cucumber/platform.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# Detect the platform we're running on so we can tweak behaviour
|
|
2
3
|
# in various places.
|
|
3
4
|
require 'rbconfig'
|
|
@@ -5,20 +6,18 @@ require 'cucumber/core/platform'
|
|
|
5
6
|
|
|
6
7
|
module Cucumber
|
|
7
8
|
unless defined?(Cucumber::VERSION)
|
|
8
|
-
VERSION = File.read(File.expand_path(
|
|
9
|
+
VERSION = File.read(File.expand_path('../version', __FILE__))
|
|
9
10
|
BINARY = File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
|
|
10
11
|
LIBDIR = File.expand_path(File.dirname(__FILE__) + '/../../lib')
|
|
11
12
|
RAILS = defined?(Rails)
|
|
12
13
|
RUBY_BINARY = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
|
|
13
|
-
|
|
14
|
-
RUBY_2_1 = RUBY_VERSION =~ /^2\.1/
|
|
15
|
-
RUBY_2_3 = RUBY_VERSION =~ /^2\.3/
|
|
14
|
+
RUBY = defined? RUBY_VERSION
|
|
16
15
|
|
|
17
16
|
class << self
|
|
18
17
|
attr_accessor :use_full_backtrace
|
|
19
18
|
|
|
20
19
|
# @private
|
|
21
|
-
def file_mode(m, encoding=
|
|
20
|
+
def file_mode(m, encoding='UTF-8')
|
|
22
21
|
"#{m}:#{encoding}"
|
|
23
22
|
end
|
|
24
23
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Cucumber
|
|
2
3
|
|
|
3
4
|
# Generates generic file structure for a cucumber project
|
|
@@ -26,7 +27,7 @@ module Cucumber
|
|
|
26
27
|
:touch
|
|
27
28
|
end
|
|
28
29
|
|
|
29
|
-
report_exists(file_name) || return if File.
|
|
30
|
+
report_exists(file_name) || return if File.exist?(file_name)
|
|
30
31
|
|
|
31
32
|
report_creating(file_name)
|
|
32
33
|
FileUtils.send file_type, file_name
|
|
@@ -40,4 +41,4 @@ module Cucumber
|
|
|
40
41
|
puts " create #{file}"
|
|
41
42
|
end
|
|
42
43
|
end
|
|
43
|
-
end
|
|
44
|
+
end
|
data/lib/cucumber/rake/task.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'cucumber/platform'
|
|
2
3
|
require 'cucumber/gherkin/formatter/ansi_escapes'
|
|
3
4
|
begin
|
|
@@ -34,7 +35,7 @@ module Cucumber
|
|
|
34
35
|
attr_reader :args
|
|
35
36
|
|
|
36
37
|
def initialize(libs, cucumber_opts, feature_files)
|
|
37
|
-
raise
|
|
38
|
+
raise 'libs must be an Array when running in-process' unless Array === libs
|
|
38
39
|
libs.reverse.each{|lib| $LOAD_PATH.unshift(lib)}
|
|
39
40
|
@args = (
|
|
40
41
|
cucumber_opts +
|
|
@@ -45,7 +46,7 @@ module Cucumber
|
|
|
45
46
|
def run
|
|
46
47
|
require 'cucumber/cli/main'
|
|
47
48
|
failure = Cucumber::Cli::Main.execute(args)
|
|
48
|
-
raise
|
|
49
|
+
raise 'Cucumber failed' if failure
|
|
49
50
|
end
|
|
50
51
|
end
|
|
51
52
|
|
|
@@ -60,16 +61,16 @@ module Cucumber
|
|
|
60
61
|
@feature_files = feature_files
|
|
61
62
|
end
|
|
62
63
|
|
|
63
|
-
def load_path
|
|
64
|
-
['"%s"'
|
|
64
|
+
def load_path
|
|
65
|
+
[format('"%s"', @libs.join(File::PATH_SEPARATOR))]
|
|
65
66
|
end
|
|
66
67
|
|
|
67
68
|
def quoted_binary(cucumber_bin)
|
|
68
|
-
['"%s"'
|
|
69
|
+
[format('"%s"', cucumber_bin)]
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
def use_bundler
|
|
72
|
-
@bundler.nil? ? File.exist?(
|
|
73
|
+
@bundler.nil? ? File.exist?('./Gemfile') && bundler_gem_available? : @bundler
|
|
73
74
|
end
|
|
74
75
|
|
|
75
76
|
def bundler_gem_available?
|
|
@@ -80,16 +81,20 @@ module Cucumber
|
|
|
80
81
|
|
|
81
82
|
def cmd
|
|
82
83
|
if use_bundler
|
|
83
|
-
[
|
|
84
|
-
|
|
84
|
+
[
|
|
85
|
+
Cucumber::RUBY_BINARY,'-S', 'bundle', 'exec', 'cucumber',
|
|
86
|
+
@cucumber_opts, @feature_files
|
|
87
|
+
].flatten
|
|
85
88
|
else
|
|
86
|
-
[
|
|
87
|
-
|
|
89
|
+
[
|
|
90
|
+
Cucumber::RUBY_BINARY, '-I', load_path,
|
|
91
|
+
quoted_binary(@cucumber_bin), @cucumber_opts, @feature_files
|
|
92
|
+
].flatten
|
|
88
93
|
end
|
|
89
94
|
end
|
|
90
95
|
|
|
91
96
|
def run
|
|
92
|
-
sh cmd.join(
|
|
97
|
+
sh cmd.join(' ') do |ok, res|
|
|
93
98
|
if !ok
|
|
94
99
|
exit res.exitstatus
|
|
95
100
|
end
|
|
@@ -127,7 +132,7 @@ module Cucumber
|
|
|
127
132
|
attr_accessor :bundler
|
|
128
133
|
|
|
129
134
|
# Define Cucumber Rake task
|
|
130
|
-
def initialize(task_name =
|
|
135
|
+
def initialize(task_name = 'cucumber', desc = 'Run Cucumber features')
|
|
131
136
|
@task_name, @desc = task_name, desc
|
|
132
137
|
@fork = true
|
|
133
138
|
@libs = ['lib']
|
|
@@ -144,7 +149,7 @@ module Cucumber
|
|
|
144
149
|
end
|
|
145
150
|
end
|
|
146
151
|
|
|
147
|
-
def runner(
|
|
152
|
+
def runner(_task_args = nil) #:nodoc:
|
|
148
153
|
cucumber_opts = [(ENV['CUCUMBER_OPTS'] ? ENV['CUCUMBER_OPTS'].split(/\s+/) : nil) || cucumber_opts_with_profile]
|
|
149
154
|
if(@fork)
|
|
150
155
|
return ForkedCucumberRunner.new(libs, binary, cucumber_opts, bundler, feature_files)
|
|
@@ -153,7 +158,7 @@ module Cucumber
|
|
|
153
158
|
end
|
|
154
159
|
|
|
155
160
|
def cucumber_opts_with_profile #:nodoc:
|
|
156
|
-
Array(cucumber_opts).concat Array(@profile).flat_map {|p| [
|
|
161
|
+
Array(cucumber_opts).concat Array(@profile).flat_map {|p| ['--profile', p] }
|
|
157
162
|
end
|
|
158
163
|
|
|
159
164
|
def feature_files #:nodoc:
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'optparse'
|
|
2
3
|
|
|
3
4
|
module Spec #:nodoc:
|
|
@@ -7,7 +8,7 @@ module Spec #:nodoc:
|
|
|
7
8
|
# will fail when running cucumber)
|
|
8
9
|
class OptionParser < ::OptionParser #:nodoc:
|
|
9
10
|
NEUTERED_RSPEC = Object.new
|
|
10
|
-
def NEUTERED_RSPEC.method_missing(
|
|
11
|
+
def NEUTERED_RSPEC.method_missing(_m, *_args); self; end
|
|
11
12
|
|
|
12
13
|
def self.method_added(m)
|
|
13
14
|
unless @__neutering_rspec
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'delegate'
|
|
2
|
-
require 'cucumber/deprecate'
|
|
3
3
|
|
|
4
4
|
module Cucumber
|
|
5
5
|
# Represents the current status of a running test case.
|
|
@@ -32,11 +32,11 @@ module Cucumber
|
|
|
32
32
|
def feature(feature)
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
def scenario(
|
|
35
|
+
def scenario(_scenario)
|
|
36
36
|
@factory = Scenario
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
def scenario_outline(
|
|
39
|
+
def scenario_outline(_scenario)
|
|
40
40
|
@factory = ScenarioOutlineExample
|
|
41
41
|
end
|
|
42
42
|
|
|
@@ -80,34 +80,10 @@ module Cucumber
|
|
|
80
80
|
!failed?
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
-
def title
|
|
84
|
-
Cucumber.deprecate(
|
|
85
|
-
"Call #name instead",
|
|
86
|
-
"RunningTestCase#title",
|
|
87
|
-
"2.9.9")
|
|
88
|
-
name
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def source_tags
|
|
92
|
-
Cucumber.deprecate(
|
|
93
|
-
"Call #tags instead",
|
|
94
|
-
"RunningTestCase#source_tags",
|
|
95
|
-
"2.9.9")
|
|
96
|
-
tags
|
|
97
|
-
end
|
|
98
|
-
|
|
99
83
|
def source_tag_names
|
|
100
84
|
tags.map &:name
|
|
101
85
|
end
|
|
102
86
|
|
|
103
|
-
def skip_invoke!
|
|
104
|
-
Cucumber.deprecate(
|
|
105
|
-
"Call #skip_this_scenario directly (not on any object)",
|
|
106
|
-
"RunningTestCase#skip_invoke!",
|
|
107
|
-
"2.9.9")
|
|
108
|
-
raise Cucumber::Core::Test::Result::Skipped
|
|
109
|
-
end
|
|
110
|
-
|
|
111
87
|
def outline?
|
|
112
88
|
false
|
|
113
89
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Cucumber
|
|
2
3
|
class Runtime
|
|
3
4
|
class AfterHooks
|
|
@@ -18,7 +19,7 @@ module Cucumber
|
|
|
18
19
|
@hooks.map do |hook|
|
|
19
20
|
action = ->(result) { hook.invoke('After', @scenario.with_result(result)) }
|
|
20
21
|
Hooks.after_hook(source, hook.location, &action)
|
|
21
|
-
end
|
|
22
|
+
end
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
25
|
end
|