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,8 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'spec_helper'
|
|
2
3
|
require 'cucumber/formatter/spec_helper'
|
|
3
4
|
require 'cucumber/formatter/html'
|
|
4
5
|
require 'nokogiri'
|
|
5
|
-
require 'cucumber/
|
|
6
|
+
require 'cucumber/glue/registry_and_more'
|
|
6
7
|
require 'rspec/mocks'
|
|
7
8
|
|
|
8
9
|
module Cucumber
|
|
@@ -23,22 +24,21 @@ module Cucumber
|
|
|
23
24
|
@formatter = Html.new(runtime, @out, {})
|
|
24
25
|
end
|
|
25
26
|
|
|
26
|
-
it
|
|
27
|
+
it 'does not raise an error when visiting a blank feature name' do
|
|
27
28
|
expect(-> {
|
|
28
|
-
@formatter.feature_name(
|
|
29
|
+
@formatter.feature_name('Feature', '')
|
|
29
30
|
}).not_to raise_error
|
|
30
31
|
end
|
|
31
32
|
|
|
32
|
-
describe
|
|
33
|
+
describe 'when writing the report to a file' do
|
|
33
34
|
before(:each) do
|
|
34
|
-
allow(@out).to receive(:respond_to?).with(:path, false).and_return(true)
|
|
35
35
|
allow(@out).to receive(:respond_to?).with(:path).and_return(true)
|
|
36
36
|
expect(@out).to receive(:path).and_return('out/file.html')
|
|
37
37
|
run_defined_feature
|
|
38
38
|
@doc = Nokogiri.HTML(@out.string)
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
describe
|
|
41
|
+
describe 'with a step that embeds a snapshot' do
|
|
42
42
|
define_steps do
|
|
43
43
|
Given(/snap/) {
|
|
44
44
|
RSpec::Mocks.allow_message(File, :file?) { true }
|
|
@@ -52,19 +52,19 @@ module Cucumber
|
|
|
52
52
|
Given snap
|
|
53
53
|
FEATURE
|
|
54
54
|
|
|
55
|
-
it
|
|
56
|
-
expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq
|
|
55
|
+
it 'converts the snapshot path to a relative path' do
|
|
56
|
+
expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq 'snapshot.jpeg'
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
-
describe
|
|
61
|
+
describe 'given a single feature' do
|
|
62
62
|
before(:each) do
|
|
63
63
|
run_defined_feature
|
|
64
64
|
@doc = Nokogiri.HTML(@out.string)
|
|
65
65
|
end
|
|
66
66
|
|
|
67
|
-
describe
|
|
67
|
+
describe 'basic feature' do
|
|
68
68
|
define_feature <<-FEATURE
|
|
69
69
|
Feature: Bananas
|
|
70
70
|
In order to find my inner monkey
|
|
@@ -72,12 +72,12 @@ module Cucumber
|
|
|
72
72
|
I must eat bananas
|
|
73
73
|
FEATURE
|
|
74
74
|
|
|
75
|
-
it
|
|
75
|
+
it 'should output a main container div' do
|
|
76
76
|
expect(@out.string).to match(/\<div class="cucumber"\>/)
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
-
describe
|
|
80
|
+
describe 'with a comment' do
|
|
81
81
|
define_feature <<-FEATURE
|
|
82
82
|
# Healthy
|
|
83
83
|
Feature: Foo
|
|
@@ -88,16 +88,16 @@ module Cucumber
|
|
|
88
88
|
it { expect(@out.string).to match(/^\<!DOCTYPE/) }
|
|
89
89
|
it { expect(@out.string).to match(/\<\/html\>$/) }
|
|
90
90
|
|
|
91
|
-
it
|
|
91
|
+
it 'nests the comment within the feature' do
|
|
92
92
|
expect(@doc).to have_css_node('.feature .comment', /Healthy/)
|
|
93
93
|
end
|
|
94
94
|
|
|
95
|
-
it
|
|
95
|
+
it 'properly closes the comment' do
|
|
96
96
|
expect(@out.string).to match(%r{<pre class="comment"># Healthy<br/></pre>})
|
|
97
97
|
end
|
|
98
98
|
end
|
|
99
99
|
|
|
100
|
-
describe
|
|
100
|
+
describe 'with a comment at scenario level' do
|
|
101
101
|
define_feature <<-FEATURE
|
|
102
102
|
Feature: Foo
|
|
103
103
|
# Healthy Scenario
|
|
@@ -108,7 +108,7 @@ module Cucumber
|
|
|
108
108
|
it { expect(@doc).to have_css_node('.scenario .comment', /Healthy Scenario/) }
|
|
109
109
|
end
|
|
110
110
|
|
|
111
|
-
describe
|
|
111
|
+
describe 'with a tag' do
|
|
112
112
|
define_feature <<-FEATURE
|
|
113
113
|
@foo
|
|
114
114
|
Feature: can't have standalone tag :)
|
|
@@ -119,7 +119,7 @@ module Cucumber
|
|
|
119
119
|
it { expect(@doc).to have_css_node('.feature .tag', /foo/) }
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
-
describe
|
|
122
|
+
describe 'with a narrative' do
|
|
123
123
|
define_feature <<-FEATURE
|
|
124
124
|
Feature: Bananas
|
|
125
125
|
In order to find my inner monkey
|
|
@@ -134,7 +134,7 @@ module Cucumber
|
|
|
134
134
|
it { expect(@doc).to have_css_node('.feature .narrative', /must eat bananas/) }
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
describe
|
|
137
|
+
describe 'with a background' do
|
|
138
138
|
define_feature <<-FEATURE
|
|
139
139
|
Feature: Bananas
|
|
140
140
|
|
|
@@ -148,7 +148,7 @@ module Cucumber
|
|
|
148
148
|
it { expect(@doc).to have_css_node('.feature .background', /there are bananas/) }
|
|
149
149
|
end
|
|
150
150
|
|
|
151
|
-
describe
|
|
151
|
+
describe 'with a scenario' do
|
|
152
152
|
define_feature <<-FEATURE
|
|
153
153
|
Feature: Banana party
|
|
154
154
|
|
|
@@ -160,7 +160,7 @@ module Cucumber
|
|
|
160
160
|
it { expect(@doc).to have_css_node('.feature .scenario .step', /there are bananas/) }
|
|
161
161
|
end
|
|
162
162
|
|
|
163
|
-
describe
|
|
163
|
+
describe 'with a scenario outline' do
|
|
164
164
|
define_feature <<-FEATURE
|
|
165
165
|
Feature: Fud Pyramid
|
|
166
166
|
|
|
@@ -184,7 +184,7 @@ module Cucumber
|
|
|
184
184
|
it { expect(@doc).to have_css_node('.feature .scenario.outline table td', /carrots/) }
|
|
185
185
|
end
|
|
186
186
|
|
|
187
|
-
describe
|
|
187
|
+
describe 'with a step with a py string' do
|
|
188
188
|
define_feature <<-FEATURE
|
|
189
189
|
Feature: Traveling circus
|
|
190
190
|
|
|
@@ -198,7 +198,7 @@ module Cucumber
|
|
|
198
198
|
it { expect(@doc).to have_css_node('.feature .scenario .val', /foo/) }
|
|
199
199
|
end
|
|
200
200
|
|
|
201
|
-
describe
|
|
201
|
+
describe 'with a multiline step arg' do
|
|
202
202
|
define_steps do
|
|
203
203
|
Given(/there are monkeys:/) { |table| }
|
|
204
204
|
end
|
|
@@ -216,7 +216,7 @@ module Cucumber
|
|
|
216
216
|
it { expect(@out.string.include?('makeYellow(\'scenario_1\')')).to be false }
|
|
217
217
|
end
|
|
218
218
|
|
|
219
|
-
describe
|
|
219
|
+
describe 'with a table in the background and the scenario' do
|
|
220
220
|
define_feature <<-FEATURE
|
|
221
221
|
Feature: accountant monkey
|
|
222
222
|
|
|
@@ -233,7 +233,7 @@ module Cucumber
|
|
|
233
233
|
it { expect(@doc.css('td').length).to eq 8 }
|
|
234
234
|
end
|
|
235
235
|
|
|
236
|
-
describe
|
|
236
|
+
describe 'with a py string in the background and the scenario' do
|
|
237
237
|
define_feature <<-FEATURE
|
|
238
238
|
Feature: py strings
|
|
239
239
|
|
|
@@ -253,7 +253,7 @@ module Cucumber
|
|
|
253
253
|
it { expect(@doc.css('.feature .scenario pre.val').length).to eq 1 }
|
|
254
254
|
end
|
|
255
255
|
|
|
256
|
-
describe
|
|
256
|
+
describe 'with a step that fails in the scenario' do
|
|
257
257
|
define_steps do
|
|
258
258
|
Given(/boo/) { raise StandardError, 'eek'.freeze }
|
|
259
259
|
end
|
|
@@ -267,9 +267,14 @@ module Cucumber
|
|
|
267
267
|
|
|
268
268
|
it { expect(@doc).to have_css_node('.feature .scenario .step.failed .message', /eek/) }
|
|
269
269
|
it { expect(@doc).to have_css_node('.feature .scenario .step.failed .message', /StandardError/) }
|
|
270
|
+
it 'has the backtrace embeded in the output once and only once' do
|
|
271
|
+
html_str = @doc.to_s
|
|
272
|
+
expect(html_str).not_to match(%r{<pre\b.*html_spec.rb:.*html_spec.rb:.*</pre>}m)
|
|
273
|
+
expect(html_str).to match(%r{<pre\b.*html_spec.rb:.*</pre>}m)
|
|
274
|
+
end
|
|
270
275
|
end
|
|
271
276
|
|
|
272
|
-
describe
|
|
277
|
+
describe 'with a step that fails in the background' do
|
|
273
278
|
define_steps do
|
|
274
279
|
Given(/boo/) { raise 'eek' }
|
|
275
280
|
end
|
|
@@ -291,8 +296,8 @@ module Cucumber
|
|
|
291
296
|
it { expect(@doc).not_to have_css_node('.feature .scenario .backtrace', //) }
|
|
292
297
|
end
|
|
293
298
|
|
|
294
|
-
context
|
|
295
|
-
describe
|
|
299
|
+
context 'with a before hook that fails' do
|
|
300
|
+
describe 'in a scenario' do
|
|
296
301
|
define_steps do
|
|
297
302
|
Before { raise 'eek' }
|
|
298
303
|
Given(/yay/) {}
|
|
@@ -309,7 +314,7 @@ module Cucumber
|
|
|
309
314
|
it { expect(@doc).to have_css_node('.feature .scenario .step.skipped', /yay/) }
|
|
310
315
|
end
|
|
311
316
|
|
|
312
|
-
describe
|
|
317
|
+
describe 'in a scenario outline' do
|
|
313
318
|
define_steps do
|
|
314
319
|
Before { raise 'eek' }
|
|
315
320
|
Given(/yay/) {}
|
|
@@ -331,7 +336,7 @@ module Cucumber
|
|
|
331
336
|
|
|
332
337
|
end
|
|
333
338
|
|
|
334
|
-
describe
|
|
339
|
+
describe 'with a step that embeds a snapshot' do
|
|
335
340
|
define_steps do
|
|
336
341
|
Given(/snap/) {
|
|
337
342
|
RSpec::Mocks.allow_message(File, :file?) { true }
|
|
@@ -345,12 +350,12 @@ module Cucumber
|
|
|
345
350
|
Given snap
|
|
346
351
|
FEATURE
|
|
347
352
|
|
|
348
|
-
it { expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq
|
|
353
|
+
it { expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq 'snapshot.jpeg' }
|
|
349
354
|
end
|
|
350
355
|
|
|
351
|
-
describe
|
|
356
|
+
describe 'with a step that embeds a text' do
|
|
352
357
|
define_steps do
|
|
353
|
-
Given(/log/) { embed('log.txt', 'text/plain') }
|
|
358
|
+
Given(/log/) { embed('log.txt', 'text/plain', 'foo') }
|
|
354
359
|
end
|
|
355
360
|
|
|
356
361
|
define_feature(<<-FEATURE)
|
|
@@ -359,10 +364,10 @@ module Cucumber
|
|
|
359
364
|
Given log
|
|
360
365
|
FEATURE
|
|
361
366
|
|
|
362
|
-
it { expect(@doc.at('a#text_0')['href'].to_s).to eq
|
|
367
|
+
it { expect(@doc.at('a#text_0')['href'].to_s).to eq 'log.txt' }
|
|
363
368
|
end
|
|
364
369
|
|
|
365
|
-
describe
|
|
370
|
+
describe 'with a step that embeds a snapshot content manually' do
|
|
366
371
|
define_steps do
|
|
367
372
|
Given(/snap/) { embed('data:image/png;base64,YWJj', 'image/png') }
|
|
368
373
|
end
|
|
@@ -373,10 +378,10 @@ module Cucumber
|
|
|
373
378
|
Given snap
|
|
374
379
|
FEATURE
|
|
375
380
|
|
|
376
|
-
it { expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq
|
|
381
|
+
it { expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq 'data:image/png;base64,YWJj' }
|
|
377
382
|
end
|
|
378
383
|
|
|
379
|
-
describe
|
|
384
|
+
describe 'with a step that embeds a snapshot content' do
|
|
380
385
|
define_steps do
|
|
381
386
|
Given(/snap/) { embed('YWJj', 'image/png;base64') }
|
|
382
387
|
end
|
|
@@ -387,10 +392,10 @@ module Cucumber
|
|
|
387
392
|
Given snap
|
|
388
393
|
FEATURE
|
|
389
394
|
|
|
390
|
-
it { expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq
|
|
395
|
+
it { expect(@doc.css('.embed img').first.attributes['src'].to_s).to eq 'data:image/png;base64,YWJj' }
|
|
391
396
|
end
|
|
392
397
|
|
|
393
|
-
describe
|
|
398
|
+
describe 'with an undefined Given step then an undefined And step' do
|
|
394
399
|
define_feature(<<-FEATURE)
|
|
395
400
|
Feature:
|
|
396
401
|
Scenario:
|
|
@@ -398,10 +403,10 @@ module Cucumber
|
|
|
398
403
|
And another undefined step
|
|
399
404
|
FEATURE
|
|
400
405
|
|
|
401
|
-
it { expect(@doc.css('pre').map { |pre| /^(Given|And)/.match(pre.text)[1] }).to eq
|
|
406
|
+
it { expect(@doc.css('pre').map { |pre| /^(Given|And)/.match(pre.text)[1] }).to eq %w(Given Given) }
|
|
402
407
|
end
|
|
403
408
|
|
|
404
|
-
describe
|
|
409
|
+
describe 'with an undefined When step then an undefined And step' do
|
|
405
410
|
define_feature(<<-FEATURE)
|
|
406
411
|
Feature:
|
|
407
412
|
Scenario:
|
|
@@ -410,10 +415,10 @@ module Cucumber
|
|
|
410
415
|
And another undefined step
|
|
411
416
|
FEATURE
|
|
412
417
|
|
|
413
|
-
it { expect(@doc.css('pre').map { |pre| /^(Given|When|And)/.match(pre.text)[1] }).to eq
|
|
418
|
+
it { expect(@doc.css('pre').map { |pre| /^(Given|When|And)/.match(pre.text)[1] }).to eq %w(Given When When) }
|
|
414
419
|
end
|
|
415
420
|
|
|
416
|
-
describe
|
|
421
|
+
describe 'with an passing Then step and an undefined And step' do
|
|
417
422
|
define_feature <<-FEATURE
|
|
418
423
|
Feature:
|
|
419
424
|
Scenario:
|
|
@@ -426,11 +431,11 @@ module Cucumber
|
|
|
426
431
|
Given(/^this step passes$/) {}
|
|
427
432
|
end
|
|
428
433
|
|
|
429
|
-
it { expect(@doc.css('pre').map { |pre| /^(Given|Then)/.match(pre.text)[1] }).to eq [
|
|
434
|
+
it { expect(@doc.css('pre').map { |pre| /^(Given|Then)/.match(pre.text)[1] }).to eq ['Then'] }
|
|
430
435
|
end
|
|
431
436
|
|
|
432
|
-
describe
|
|
433
|
-
describe
|
|
437
|
+
describe 'with a output from hooks' do
|
|
438
|
+
describe 'in a scenario' do
|
|
434
439
|
define_feature <<-FEATURE
|
|
435
440
|
Feature:
|
|
436
441
|
Scenario:
|
|
@@ -439,26 +444,26 @@ module Cucumber
|
|
|
439
444
|
|
|
440
445
|
define_steps do
|
|
441
446
|
Before do
|
|
442
|
-
puts
|
|
447
|
+
puts 'Before hook'
|
|
443
448
|
end
|
|
444
449
|
AfterStep do
|
|
445
|
-
puts
|
|
450
|
+
puts 'AfterStep hook'
|
|
446
451
|
end
|
|
447
452
|
After do
|
|
448
|
-
puts
|
|
453
|
+
puts 'After hook'
|
|
449
454
|
end
|
|
450
455
|
Given(/^this step passes$/) {}
|
|
451
456
|
end
|
|
452
457
|
|
|
453
458
|
it 'should have ccs nodes ".step.message" for all the hooks' do
|
|
454
459
|
expect(@doc.css('.step.message').length).to eq 3
|
|
455
|
-
expect(@doc.css('.step.message')[0].text).to eq
|
|
456
|
-
expect(@doc.css('.step.message')[1].text).to eq
|
|
457
|
-
expect(@doc.css('.step.message')[2].text).to eq
|
|
460
|
+
expect(@doc.css('.step.message')[0].text).to eq 'Before hook'
|
|
461
|
+
expect(@doc.css('.step.message')[1].text).to eq 'AfterStep hook'
|
|
462
|
+
expect(@doc.css('.step.message')[2].text).to eq 'After hook'
|
|
458
463
|
end
|
|
459
464
|
end
|
|
460
465
|
|
|
461
|
-
describe
|
|
466
|
+
describe 'in a scenario outline' do
|
|
462
467
|
define_feature <<-FEATURE
|
|
463
468
|
Feature:
|
|
464
469
|
Scenario Outline:
|
|
@@ -470,13 +475,13 @@ module Cucumber
|
|
|
470
475
|
|
|
471
476
|
define_steps do
|
|
472
477
|
Before do
|
|
473
|
-
puts
|
|
478
|
+
puts 'Before hook'
|
|
474
479
|
end
|
|
475
480
|
AfterStep do
|
|
476
|
-
puts
|
|
481
|
+
puts 'AfterStep hook'
|
|
477
482
|
end
|
|
478
483
|
After do
|
|
479
|
-
puts
|
|
484
|
+
puts 'After hook'
|
|
480
485
|
end
|
|
481
486
|
Given(/^this step passes$/) {}
|
|
482
487
|
end
|
|
@@ -485,7 +490,7 @@ module Cucumber
|
|
|
485
490
|
end
|
|
486
491
|
end
|
|
487
492
|
end
|
|
488
|
-
context
|
|
493
|
+
context 'in --expand mode' do
|
|
489
494
|
let(:options) { { expand: true } }
|
|
490
495
|
before(:each) do
|
|
491
496
|
@out = StringIO.new
|
|
@@ -493,7 +498,7 @@ module Cucumber
|
|
|
493
498
|
run_defined_feature
|
|
494
499
|
@doc = Nokogiri.HTML(@out.string)
|
|
495
500
|
end
|
|
496
|
-
describe
|
|
501
|
+
describe 'with undefined * steps in a Scenario Outline' do
|
|
497
502
|
define_feature <<-FEATURE
|
|
498
503
|
Feature:
|
|
499
504
|
Scenario Outline:
|
|
@@ -509,10 +514,10 @@ module Cucumber
|
|
|
509
514
|
Given(/^this step passes$/) {}
|
|
510
515
|
end
|
|
511
516
|
|
|
512
|
-
it { expect(@doc.css('pre').map { |pre| /^(Given|Then|When)/.match(pre.text)[1] }).to eq
|
|
517
|
+
it { expect(@doc.css('pre').map { |pre| /^(Given|Then|When)/.match(pre.text)[1] }).to eq %w(Given Given) }
|
|
513
518
|
end
|
|
514
519
|
|
|
515
|
-
describe
|
|
520
|
+
describe 'with a scenario outline and a before hook that fails' do
|
|
516
521
|
define_steps do
|
|
517
522
|
Before { raise 'eek' }
|
|
518
523
|
Given(/yay/) {}
|