cucumber 3.0.0.pre.2 → 4.0.0.rc.5
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 +5 -5
- data/{History.md → CHANGELOG.md} +267 -14
- data/CONTRIBUTING.md +4 -21
- data/README.md +14 -15
- data/bin/cucumber +2 -1
- data/lib/autotest/cucumber.rb +1 -0
- data/lib/autotest/cucumber_mixin.rb +36 -40
- 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 +1 -0
- data/lib/cucumber.rb +2 -1
- data/lib/cucumber/cli/configuration.rb +8 -7
- data/lib/cucumber/cli/main.rb +14 -14
- data/lib/cucumber/cli/options.rb +141 -120
- data/lib/cucumber/cli/profile_loader.rb +50 -29
- data/lib/cucumber/cli/rerun_file.rb +1 -0
- data/lib/cucumber/configuration.rb +40 -30
- data/lib/cucumber/constantize.rb +8 -10
- data/lib/cucumber/core_ext/string.rb +1 -0
- data/lib/cucumber/deprecate.rb +33 -9
- data/lib/cucumber/encoding.rb +2 -1
- data/lib/cucumber/errors.rb +10 -8
- data/lib/cucumber/events.rb +14 -9
- data/lib/cucumber/events/envelope.rb +9 -0
- data/lib/cucumber/events/gherkin_source_parsed.rb +11 -0
- data/lib/cucumber/events/gherkin_source_read.rb +1 -4
- data/lib/cucumber/events/hook_test_step_created.rb +13 -0
- data/lib/cucumber/events/step_activated.rb +6 -6
- data/lib/cucumber/events/step_definition_registered.rb +4 -8
- data/lib/cucumber/events/test_case_created.rb +13 -0
- data/lib/cucumber/events/test_case_finished.rb +1 -5
- data/lib/cucumber/events/test_case_ready.rb +12 -0
- data/lib/cucumber/events/{test_case_starting.rb → test_case_started.rb} +1 -5
- data/lib/cucumber/events/test_run_finished.rb +2 -3
- data/lib/cucumber/events/{test_run_starting.rb → test_run_started.rb} +3 -5
- data/lib/cucumber/events/test_step_created.rb +13 -0
- data/lib/cucumber/events/test_step_finished.rb +0 -6
- data/lib/cucumber/events/{test_step_starting.rb → test_step_started.rb} +2 -8
- data/lib/cucumber/file_specs.rb +7 -6
- data/lib/cucumber/filters.rb +3 -1
- data/lib/cucumber/filters/activate_steps.rb +11 -5
- 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_case_ready_event.rb +12 -0
- data/lib/cucumber/filters/{broadcast_test_run_starting_event.rb → broadcast_test_run_started_event.rb} +4 -3
- data/lib/cucumber/filters/gated_receiver.rb +1 -2
- data/lib/cucumber/filters/prepare_world.rb +6 -13
- data/lib/cucumber/filters/quit.rb +3 -7
- data/lib/cucumber/filters/randomizer.rb +6 -7
- data/lib/cucumber/filters/retry.rb +2 -2
- data/lib/cucumber/filters/tag_limits.rb +2 -2
- data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -2
- data/lib/cucumber/filters/tag_limits/verifier.rb +3 -6
- data/lib/cucumber/formatter/ansicolor.rb +33 -37
- data/lib/cucumber/formatter/ast_lookup.rb +165 -0
- data/lib/cucumber/formatter/backtrace_filter.rb +10 -10
- data/lib/cucumber/formatter/console.rb +37 -74
- data/lib/cucumber/formatter/console_counts.rb +4 -9
- data/lib/cucumber/formatter/console_issues.rb +10 -7
- data/lib/cucumber/formatter/duration.rb +2 -1
- data/lib/cucumber/formatter/duration_extractor.rb +4 -2
- data/lib/cucumber/formatter/errors.rb +6 -0
- data/lib/cucumber/formatter/fail_fast.rb +9 -6
- data/lib/cucumber/formatter/fanout.rb +3 -3
- data/lib/cucumber/formatter/html.rb +11 -603
- data/lib/cucumber/formatter/http_io.rb +93 -0
- data/lib/cucumber/formatter/ignore_missing_messages.rb +2 -4
- data/lib/cucumber/formatter/interceptor.rb +10 -12
- data/lib/cucumber/formatter/io.rb +19 -12
- data/lib/cucumber/formatter/json.rb +106 -112
- data/lib/cucumber/formatter/junit.rb +81 -76
- data/lib/cucumber/formatter/message.rb +22 -0
- data/lib/cucumber/formatter/message_builder.rb +241 -0
- data/lib/cucumber/formatter/pretty.rb +353 -153
- data/lib/cucumber/formatter/progress.rb +30 -33
- data/lib/cucumber/formatter/query/hook_by_test_step.rb +31 -0
- data/lib/cucumber/formatter/query/pickle_by_test.rb +26 -0
- data/lib/cucumber/formatter/query/pickle_step_by_test_step.rb +26 -0
- data/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +40 -0
- data/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +40 -0
- data/lib/cucumber/formatter/rerun.rb +24 -5
- data/lib/cucumber/formatter/stepdefs.rb +2 -2
- data/lib/cucumber/formatter/steps.rb +4 -5
- data/lib/cucumber/formatter/summary.rb +18 -11
- data/lib/cucumber/formatter/unicode.rb +16 -18
- data/lib/cucumber/formatter/usage.rb +30 -26
- data/lib/cucumber/gherkin/data_table_parser.rb +18 -6
- data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +83 -86
- data/lib/cucumber/gherkin/formatter/escaping.rb +13 -12
- data/lib/cucumber/gherkin/i18n.rb +1 -0
- data/lib/cucumber/gherkin/steps_parser.rb +18 -8
- data/lib/cucumber/glue/dsl.rb +13 -26
- data/lib/cucumber/glue/hook.rb +35 -11
- data/lib/cucumber/glue/invoke_in_world.rb +15 -20
- data/lib/cucumber/glue/proto_world.rb +48 -42
- data/lib/cucumber/glue/registry_and_more.rb +58 -23
- data/lib/cucumber/glue/snippet.rb +23 -26
- data/lib/cucumber/glue/step_definition.rb +51 -28
- data/lib/cucumber/glue/world_factory.rb +2 -4
- data/lib/cucumber/hooks.rb +27 -17
- data/lib/cucumber/load_path.rb +1 -0
- data/lib/cucumber/multiline_argument.rb +7 -17
- data/lib/cucumber/multiline_argument/data_table.rb +113 -82
- data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +8 -12
- data/lib/cucumber/multiline_argument/doc_string.rb +2 -1
- data/lib/cucumber/platform.rb +4 -3
- data/lib/cucumber/project_initializer.rb +2 -2
- data/lib/cucumber/rake/task.rb +28 -21
- data/lib/cucumber/rspec/disable_option_parser.rb +10 -8
- data/lib/cucumber/rspec/doubles.rb +1 -0
- data/lib/cucumber/running_test_case.rb +4 -54
- data/lib/cucumber/runtime.rb +32 -63
- data/lib/cucumber/runtime/after_hooks.rb +9 -4
- data/lib/cucumber/runtime/before_hooks.rb +9 -4
- data/lib/cucumber/runtime/for_programming_languages.rb +12 -9
- data/lib/cucumber/runtime/step_hooks.rb +5 -2
- data/lib/cucumber/runtime/support_code.rb +16 -22
- data/lib/cucumber/runtime/user_interface.rb +12 -23
- data/lib/cucumber/step_definition_light.rb +6 -4
- data/lib/cucumber/step_definitions.rb +3 -2
- data/lib/cucumber/step_match.rb +29 -14
- data/lib/cucumber/step_match_search.rb +10 -10
- data/lib/cucumber/term/ansicolor.rb +39 -39
- data/lib/cucumber/unit.rb +1 -0
- data/lib/cucumber/version +1 -1
- data/lib/simplecov_setup.rb +1 -0
- metadata +206 -678
- data/.coveralls.yml +0 -1
- data/.cucumberproignore +0 -6
- data/.github/ISSUE_TEMPLATE.md +0 -48
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -39
- data/.rspec +0 -1
- data/.rubocop.yml +0 -13
- data/.rubocop_todo.yml +0 -1075
- data/.ruby-gemset +0 -1
- data/.travis.yml +0 -69
- data/.yardopts +0 -1
- data/Gemfile +0 -28
- data/Rakefile +0 -32
- data/appveyor.yml +0 -26
- data/cucumber.gemspec +0 -52
- data/cucumber.yml +0 -19
- data/examples/i18n/README.textile +0 -3
- data/examples/i18n/Rakefile +0 -33
- data/examples/i18n/ar/Rakefile +0 -6
- data/examples/i18n/ar/features/addition.feature +0 -17
- data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/ar/lib/calculator.rb +0 -11
- data/examples/i18n/bg/Rakefile +0 -6
- data/examples/i18n/bg/features/addition.feature +0 -12
- data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
- data/examples/i18n/bg/features/division.feature +0 -17
- data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/bg/features/support/env.rb +0 -5
- data/examples/i18n/bg/features/support/world.rb +0 -8
- data/examples/i18n/bg/lib/calculator.rb +0 -24
- data/examples/i18n/ca/Rakefile +0 -6
- data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -21
- data/examples/i18n/ca/features/suma.feature +0 -17
- data/examples/i18n/ca/lib/calculadora.rb +0 -16
- data/examples/i18n/cs/Rakefile +0 -6
- data/examples/i18n/cs/features/addition.feature +0 -17
- data/examples/i18n/cs/features/division.feature +0 -11
- data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/cs/lib/calculator.rb +0 -14
- data/examples/i18n/da/Rakefile +0 -6
- data/examples/i18n/da/features/sammenlaegning.feature +0 -18
- data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -24
- data/examples/i18n/da/lib/lommeregner.rb +0 -11
- data/examples/i18n/de/Rakefile +0 -6
- data/examples/i18n/de/features/addition.feature +0 -17
- data/examples/i18n/de/features/division.feature +0 -10
- data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/de/lib/calculator.rb +0 -14
- data/examples/i18n/el/Rakefile +0 -6
- data/examples/i18n/el/features/addition.feature +0 -17
- data/examples/i18n/el/features/division.feature +0 -10
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/el/lib/calculator.rb +0 -14
- data/examples/i18n/en-lol/Rakefile +0 -4
- data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
- data/examples/i18n/en-lol/features/stuffing.feature +0 -8
- data/examples/i18n/en-lol/features/support/env.rb +0 -7
- data/examples/i18n/en-lol/lib/basket.rb +0 -12
- data/examples/i18n/en-lol/lib/belly.rb +0 -11
- data/examples/i18n/en/Rakefile +0 -6
- data/examples/i18n/en/features/addition.feature +0 -17
- data/examples/i18n/en/features/division.feature +0 -10
- data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/en/lib/calculator.rb +0 -14
- data/examples/i18n/eo/Rakefile +0 -6
- data/examples/i18n/eo/features/adicio.feature +0 -17
- data/examples/i18n/eo/features/divido.feature +0 -10
- data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/eo/lib/calculator.rb +0 -14
- data/examples/i18n/es/Rakefile +0 -6
- data/examples/i18n/es/features/adicion.feature +0 -17
- data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -21
- data/examples/i18n/es/lib/calculador.rb +0 -14
- data/examples/i18n/et/Rakefile +0 -6
- data/examples/i18n/et/features/jagamine.feature +0 -10
- data/examples/i18n/et/features/liitmine.feature +0 -17
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -24
- data/examples/i18n/et/lib/kalkulaator.rb +0 -14
- data/examples/i18n/fi/Rakefile +0 -6
- data/examples/i18n/fi/features/jakolasku.feature +0 -10
- data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -24
- data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
- data/examples/i18n/fi/lib/laskin.rb +0 -14
- data/examples/i18n/fr/Rakefile +0 -8
- data/examples/i18n/fr/features/addition.feature +0 -18
- data/examples/i18n/fr/features/addition2.feature +0 -17
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
- data/examples/i18n/fr/features/support/env.rb +0 -5
- data/examples/i18n/fr/lib/calculatrice.rb +0 -10
- data/examples/i18n/he/Rakefile +0 -6
- data/examples/i18n/he/features/addition.feature +0 -17
- data/examples/i18n/he/features/division.feature +0 -10
- data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/he/lib/calculator.rb +0 -15
- data/examples/i18n/hi/Rakefile +0 -6
- data/examples/i18n/hi/features/addition.feature +0 -16
- data/examples/i18n/hi/features/division.feature +0 -10
- data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/hi/lib/calculator.rb +0 -15
- data/examples/i18n/ht/Rakefile +0 -6
- data/examples/i18n/ht/features/adisyon.feature +0 -17
- data/examples/i18n/ht/features/divizyon.feature +0 -10
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +0 -25
- data/examples/i18n/ht/lib/kalkilatris.rb +0 -14
- data/examples/i18n/hu/Rakefile +0 -6
- data/examples/i18n/hu/features/osszeadas.feature +0 -17
- data/examples/i18n/hu/features/osztas.feature +0 -10
- data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -25
- data/examples/i18n/hu/lib/calculator.rb +0 -14
- data/examples/i18n/id/Rakefile +0 -6
- data/examples/i18n/id/features/addition.feature +0 -17
- data/examples/i18n/id/features/division.feature +0 -10
- data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/id/lib/calculator.rb +0 -14
- data/examples/i18n/it/Rakefile +0 -6
- data/examples/i18n/it/features/somma.feature +0 -11
- data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -24
- data/examples/i18n/it/lib/calcolatrice.rb +0 -11
- data/examples/i18n/ja/Rakefile +0 -6
- data/examples/i18n/ja/features/addition.feature +0 -17
- data/examples/i18n/ja/features/division.feature +0 -10
- data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
- data/examples/i18n/ja/features/support/env.rb +0 -5
- data/examples/i18n/ja/lib/calculator.rb +0 -14
- data/examples/i18n/ko/Rakefile +0 -6
- data/examples/i18n/ko/features/addition.feature +0 -17
- data/examples/i18n/ko/features/division.feature +0 -11
- data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/ko/lib/calculator.rb +0 -14
- data/examples/i18n/lt/Rakefile +0 -6
- data/examples/i18n/lt/features/addition.feature +0 -17
- data/examples/i18n/lt/features/division.feature +0 -10
- data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/lt/lib/calculator.rb +0 -14
- data/examples/i18n/lv/Rakefile +0 -6
- data/examples/i18n/lv/features/addition.feature +0 -17
- data/examples/i18n/lv/features/division.feature +0 -10
- data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/lv/lib/calculator.rb +0 -14
- data/examples/i18n/no/Rakefile +0 -6
- data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
- data/examples/i18n/no/features/summering.feature +0 -19
- data/examples/i18n/no/features/support/env.rb +0 -6
- data/examples/i18n/no/lib/kalkulator.rb +0 -11
- data/examples/i18n/pl/Rakefile +0 -6
- data/examples/i18n/pl/features/addition.feature +0 -17
- data/examples/i18n/pl/features/division.feature +0 -10
- data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/pl/features/support/env.rb +0 -5
- data/examples/i18n/pl/lib/calculator.rb +0 -14
- data/examples/i18n/pt/Rakefile +0 -6
- data/examples/i18n/pt/features/adicao.feature +0 -11
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
- data/examples/i18n/pt/features/support/env.rb +0 -5
- data/examples/i18n/pt/lib/calculadora.rb +0 -10
- data/examples/i18n/ro/Rakefile +0 -6
- data/examples/i18n/ro/features/adunare.feature +0 -12
- data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -21
- data/examples/i18n/ro/lib/calculator.rb +0 -11
- data/examples/i18n/ru/Rakefile +0 -6
- data/examples/i18n/ru/features/addition.feature +0 -11
- data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
- data/examples/i18n/ru/features/division.feature +0 -16
- data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
- data/examples/i18n/ru/features/support/env.rb +0 -5
- data/examples/i18n/ru/features/support/world.rb +0 -8
- data/examples/i18n/ru/lib/calculator.rb +0 -24
- data/examples/i18n/sk/Rakefile +0 -6
- data/examples/i18n/sk/features/addition.feature +0 -17
- data/examples/i18n/sk/features/division.feature +0 -10
- data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/sk/lib/calculator.rb +0 -14
- data/examples/i18n/sr-Cyrl/Rakefile +0 -6
- data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
- data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
- data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -5
- data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
- data/examples/i18n/sr-Latn/Rakefile +0 -6
- data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
- data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
- data/examples/i18n/sv/Rakefile +0 -6
- data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -24
- data/examples/i18n/sv/features/summering.feature +0 -18
- data/examples/i18n/sv/lib/kalkulator.rb +0 -11
- data/examples/i18n/tr/Rakefile +0 -6
- data/examples/i18n/tr/features/bolme.feature +0 -10
- data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -24
- data/examples/i18n/tr/features/toplama.feature +0 -18
- data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
- data/examples/i18n/uk/Rakefile +0 -6
- data/examples/i18n/uk/features/addition.feature +0 -11
- data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
- data/examples/i18n/uk/features/division.feature +0 -16
- data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
- data/examples/i18n/uk/features/support/env.rb +0 -5
- data/examples/i18n/uk/features/support/world.rb +0 -8
- data/examples/i18n/uk/lib/calculator.rb +0 -24
- data/examples/i18n/uz/Rakefile +0 -6
- data/examples/i18n/uz/features/addition.feature +0 -10
- data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
- data/examples/i18n/uz/features/division.feature +0 -17
- data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
- data/examples/i18n/uz/features/support/env.rb +0 -5
- data/examples/i18n/uz/features/support/world.rb +0 -8
- data/examples/i18n/uz/lib/calculator.rb +0 -24
- data/examples/i18n/zh-CN/Rakefile +0 -4
- data/examples/i18n/zh-CN/features/addition.feature +0 -18
- data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -26
- data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
- data/examples/i18n/zh-TW/Rakefile +0 -4
- data/examples/i18n/zh-TW/features/addition.feature +0 -17
- data/examples/i18n/zh-TW/features/division.feature +0 -11
- data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
- data/examples/rspec_doubles/Rakefile +0 -4
- data/examples/rspec_doubles/features/mocking.feature +0 -9
- data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
- data/examples/rspec_doubles/features/support/env.rb +0 -12
- data/examples/sinatra/README.textile +0 -13
- data/examples/sinatra/Rakefile +0 -6
- data/examples/sinatra/app.rb +0 -14
- data/examples/sinatra/features/add.feature +0 -11
- data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
- data/examples/sinatra/features/support/env.rb +0 -10
- data/examples/sinatra/views/add.erb +0 -7
- data/examples/sinatra/views/layout.erb +0 -8
- data/examples/tcl/README.textile +0 -11
- data/examples/tcl/Rakefile +0 -6
- data/examples/tcl/features/fibonnacci.feature +0 -17
- data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
- data/examples/tcl/features/support/env.rb +0 -6
- data/examples/tcl/src/fib.tcl +0 -3
- data/examples/test_unit/Gemfile +0 -4
- data/examples/test_unit/Rakefile +0 -6
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
- data/examples/test_unit/features/test_unit.feature +0 -9
- data/examples/watir/README.textile +0 -16
- data/examples/watir/Rakefile +0 -12
- data/examples/watir/cucumber.yml +0 -1
- data/examples/watir/features/search.feature +0 -12
- data/examples/watir/features/step_definitions/search_steps.rb +0 -26
- data/examples/watir/features/support/env.rb +0 -35
- data/examples/watir/features/support/screenshots.rb +0 -47
- data/features/docs/api/list_step_defs_as_json.feature +0 -64
- data/features/docs/api/listen_for_events.feature +0 -59
- data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -27
- data/features/docs/cli/backtraces.feature +0 -36
- data/features/docs/cli/dry_run.feature +0 -73
- data/features/docs/cli/exclude_files.feature +0 -18
- data/features/docs/cli/execute_with_tag_filter.feature +0 -117
- data/features/docs/cli/fail_fast.feature +0 -48
- data/features/docs/cli/finding_steps.feature +0 -28
- data/features/docs/cli/help.feature +0 -8
- data/features/docs/cli/i18n.feature +0 -42
- data/features/docs/cli/randomize.feature +0 -140
- data/features/docs/cli/require.feature +0 -27
- data/features/docs/cli/retry_failing_tests.feature +0 -92
- data/features/docs/cli/run_scenarios_matching_name.feature +0 -105
- data/features/docs/cli/run_specific_scenarios.feature +0 -77
- data/features/docs/cli/showing_differences.feature +0 -43
- data/features/docs/cli/specifying_multiple_formatters.feature +0 -68
- data/features/docs/cli/strict_mode.feature +0 -70
- data/features/docs/defining_steps/nested_steps.feature +0 -181
- data/features/docs/defining_steps/nested_steps_i18n.feature +0 -37
- data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -56
- data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
- data/features/docs/defining_steps/printing_messages.feature +0 -147
- data/features/docs/defining_steps/skip_scenario.feature +0 -31
- data/features/docs/defining_steps/snippets.feature +0 -56
- data/features/docs/defining_steps/table_diffing.feature +0 -50
- data/features/docs/events/gherkin_source_read_event.feature +0 -43
- data/features/docs/events/step_activated_event.feature +0 -36
- data/features/docs/events/step_definition_registered_event.feature +0 -29
- data/features/docs/events/test_case_finished_event.feature +0 -35
- data/features/docs/events/test_case_starting_event.feature +0 -54
- data/features/docs/events/test_run_finished_event.feature +0 -40
- data/features/docs/events/test_run_starting_event.feature +0 -41
- data/features/docs/events/test_step_finished_event.feature +0 -47
- data/features/docs/events/test_step_starting_event.feature +0 -43
- data/features/docs/exception_in_after_hook.feature +0 -127
- data/features/docs/exception_in_after_step_hook.feature +0 -104
- data/features/docs/exception_in_around_hook.feature +0 -80
- data/features/docs/exception_in_before_hook.feature +0 -98
- data/features/docs/extending_cucumber/custom_filter.feature +0 -29
- data/features/docs/extending_cucumber/custom_formatter.feature +0 -122
- data/features/docs/formatters/api_methods.feature +0 -37
- data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
- data/features/docs/formatters/html_formatter.feature +0 -91
- data/features/docs/formatters/json_formatter.feature +0 -767
- data/features/docs/formatters/junit_formatter.feature +0 -455
- data/features/docs/formatters/pretty_formatter.feature +0 -74
- data/features/docs/formatters/progress_formatter.feature +0 -32
- data/features/docs/formatters/rerun_formatter.feature +0 -190
- data/features/docs/formatters/summary_formatter.feature +0 -35
- data/features/docs/formatters/usage_formatter.feature +0 -101
- data/features/docs/getting_started.feature +0 -28
- data/features/docs/gherkin/background.feature +0 -548
- data/features/docs/gherkin/doc_strings.feature +0 -76
- data/features/docs/gherkin/expand_option_for_outlines.feature +0 -47
- data/features/docs/gherkin/language_from_header.feature +0 -32
- data/features/docs/gherkin/outlines.feature +0 -160
- data/features/docs/gherkin/unicode_table.feature +0 -33
- data/features/docs/gherkin/using_descriptions.feature +0 -83
- data/features/docs/gherkin/using_star_notation.feature +0 -37
- data/features/docs/iso-8859-1.feature +0 -6
- data/features/docs/post_configuration_hook.feature +0 -33
- data/features/docs/profiles.feature +0 -120
- data/features/docs/rake_task.feature +0 -146
- data/features/docs/raketask.feature +0 -46
- data/features/docs/work_in_progress.feature +0 -157
- data/features/docs/writing_support_code/after_hooks.feature +0 -102
- data/features/docs/writing_support_code/after_step_hooks.feature +0 -55
- data/features/docs/writing_support_code/around_hooks.feature +0 -266
- data/features/docs/writing_support_code/before_hook.feature +0 -66
- data/features/docs/writing_support_code/hook_order.feature +0 -63
- data/features/docs/writing_support_code/load_path.feature +0 -17
- data/features/docs/writing_support_code/parameter_types.feature +0 -75
- data/features/docs/writing_support_code/state.feature +0 -32
- data/features/docs/writing_support_code/tagged_hooks.feature +0 -95
- data/features/docs/writing_support_code/world.feature +0 -129
- data/features/lib/step_definitions/aruba_steps.rb +0 -21
- data/features/lib/step_definitions/cli_steps.rb +0 -4
- data/features/lib/step_definitions/cucumber_steps.rb +0 -75
- data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -13
- data/features/lib/step_definitions/json_steps.rb +0 -8
- data/features/lib/step_definitions/junit_steps.rb +0 -14
- data/features/lib/step_definitions/language_steps.rb +0 -9
- data/features/lib/step_definitions/profile_steps.rb +0 -16
- data/features/lib/step_definitions/retry_steps.rb +0 -55
- data/features/lib/step_definitions/ruby_steps.rb +0 -4
- data/features/lib/support/env.rb +0 -22
- data/features/lib/support/fake_wire_server.rb +0 -86
- data/features/lib/support/feature_factory.rb +0 -68
- data/features/lib/support/normalise_output.rb +0 -52
- data/features/lib/support/parameter_types.rb +0 -8
- data/gem_tasks/contributors.rake +0 -19
- data/gem_tasks/cov.rake +0 -6
- data/gem_tasks/downloads.rb +0 -8
- data/gem_tasks/environment.rake +0 -4
- data/gem_tasks/examples.rake +0 -12
- data/gem_tasks/fix_cr_lf.rake +0 -11
- data/gem_tasks/flog.rake +0 -5
- data/gem_tasks/rspec.rake +0 -7
- data/gem_tasks/sass.rake +0 -5
- data/gem_tasks/stats +0 -16
- data/gem_tasks/versions.txt +0 -74
- data/lib/cucumber/formatter/cucumber.css +0 -286
- data/lib/cucumber/formatter/cucumber.sass +0 -247
- data/lib/cucumber/formatter/hook_query_visitor.rb +0 -41
- data/lib/cucumber/formatter/html_builder.rb +0 -110
- data/lib/cucumber/formatter/inline-js.js +0 -30
- data/lib/cucumber/formatter/jquery-min.js +0 -154
- data/lib/cucumber/formatter/json_pretty.rb +0 -11
- data/lib/cucumber/formatter/legacy_api/adapter.rb +0 -1012
- data/lib/cucumber/formatter/legacy_api/ast.rb +0 -386
- data/lib/cucumber/formatter/legacy_api/results.rb +0 -50
- data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +0 -32
- data/lib/cucumber/step_argument.rb +0 -24
- data/scripts/invite-collaborator +0 -40
- data/scripts/update-history +0 -83
- data/spec/cucumber/cli/configuration_spec.rb +0 -434
- data/spec/cucumber/cli/main_spec.rb +0 -84
- data/spec/cucumber/cli/options_spec.rb +0 -445
- data/spec/cucumber/cli/profile_loader_spec.rb +0 -66
- data/spec/cucumber/cli/rerun_spec.rb +0 -86
- data/spec/cucumber/configuration_spec.rb +0 -148
- data/spec/cucumber/constantize_spec.rb +0 -20
- data/spec/cucumber/events_spec.rb +0 -9
- data/spec/cucumber/file_specs_spec.rb +0 -61
- data/spec/cucumber/filters/activate_steps_spec.rb +0 -152
- data/spec/cucumber/filters/gated_receiver_spec.rb +0 -48
- data/spec/cucumber/filters/retry_spec.rb +0 -98
- data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -39
- data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -58
- data/spec/cucumber/filters/tag_limits_spec.rb +0 -60
- data/spec/cucumber/formatter/ansicolor_spec.rb +0 -33
- data/spec/cucumber/formatter/backtrace_filter_spec.rb +0 -32
- data/spec/cucumber/formatter/console_counts_spec.rb +0 -14
- data/spec/cucumber/formatter/duration_spec.rb +0 -23
- data/spec/cucumber/formatter/fail_fast_spec.rb +0 -88
- data/spec/cucumber/formatter/html_spec.rb +0 -543
- data/spec/cucumber/formatter/interceptor_spec.rb +0 -137
- data/spec/cucumber/formatter/json_spec.rb +0 -840
- data/spec/cucumber/formatter/junit_spec.rb +0 -251
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2187
- data/spec/cucumber/formatter/pretty_spec.rb +0 -920
- data/spec/cucumber/formatter/progress_spec.rb +0 -170
- data/spec/cucumber/formatter/rerun_spec.rb +0 -97
- data/spec/cucumber/formatter/spec_helper.rb +0 -84
- data/spec/cucumber/glue/proto_world_spec.rb +0 -63
- data/spec/cucumber/glue/registry_and_more_spec.rb +0 -213
- data/spec/cucumber/glue/snippet_spec.rb +0 -174
- data/spec/cucumber/glue/step_definition_spec.rb +0 -207
- data/spec/cucumber/hooks_spec.rb +0 -31
- data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -648
- data/spec/cucumber/project_initializer_spec.rb +0 -88
- data/spec/cucumber/rake/forked_spec.rb +0 -54
- data/spec/cucumber/rake/task_spec.rb +0 -86
- data/spec/cucumber/running_test_case_spec.rb +0 -140
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -8
- data/spec/cucumber/runtime/support_code_spec.rb +0 -17
- data/spec/cucumber/runtime_spec.rb +0 -21
- data/spec/cucumber/sell_cucumbers.feature +0 -19
- data/spec/cucumber/step_argument_spec.rb +0 -19
- data/spec/cucumber/step_match_search_spec.rb +0 -113
- data/spec/cucumber/step_match_spec.rb +0 -86
- data/spec/cucumber/world/pending_spec.rb +0 -48
- data/spec/spec_helper.rb +0 -30
- data/spec/support/standard_step_actions.rb +0 -19
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'gherkin
|
4
|
-
require 'gherkin/parser'
|
2
|
+
|
3
|
+
require 'gherkin'
|
5
4
|
require 'gherkin/dialect'
|
6
5
|
|
7
6
|
module Cucumber
|
@@ -14,12 +13,23 @@ module Cucumber
|
|
14
13
|
|
15
14
|
def parse(text)
|
16
15
|
dialect = ::Gherkin::Dialect.for(@language)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
gherkin_document = nil
|
17
|
+
messages = ::Gherkin.from_source('dummy', feature_header(dialect) + text, gherkin_options)
|
18
|
+
|
19
|
+
messages.each do |message|
|
20
|
+
gherkin_document = message.gherkin_document.to_hash unless message.gherkin_document.nil?
|
21
|
+
end
|
22
|
+
|
23
|
+
@builder.steps(gherkin_document[:feature][:children][0][:scenario][:steps])
|
24
|
+
end
|
21
25
|
|
22
|
-
|
26
|
+
def gherkin_options
|
27
|
+
{
|
28
|
+
default_dialect: @language,
|
29
|
+
include_source: false,
|
30
|
+
include_gherkin_document: true,
|
31
|
+
include_pickles: false
|
32
|
+
}
|
23
33
|
end
|
24
34
|
|
25
35
|
def feature_header(dialect)
|
data/lib/cucumber/glue/dsl.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/cucumber_expressions/parameter_type'
|
3
4
|
require 'cucumber/deprecate'
|
4
5
|
|
@@ -86,40 +87,26 @@ module Cucumber
|
|
86
87
|
Dsl.register_rb_hook('after_step', tag_expressions, proc)
|
87
88
|
end
|
88
89
|
|
89
|
-
# Registers a proc that will be called with a step definition argument if it
|
90
|
-
# matches the pattern passed as the first argument to Transform. Alternatively, if
|
91
|
-
# the pattern contains captures then they will be yielded as arguments to the
|
92
|
-
# provided proc. The return value of the proc is consequently yielded to the
|
93
|
-
# step definition.
|
94
|
-
def Transform(regexp, &proc)
|
95
|
-
Cucumber.deprecate(
|
96
|
-
'Use ParameterType(...) instead',
|
97
|
-
'Transform',
|
98
|
-
'2.6.0'
|
99
|
-
)
|
100
|
-
parameter_type = CucumberExpressions::ParameterType.new(
|
101
|
-
regexp.to_s,
|
102
|
-
regexp,
|
103
|
-
Object,
|
104
|
-
proc,
|
105
|
-
false,
|
106
|
-
true
|
107
|
-
)
|
108
|
-
Dsl.define_parameter_type(parameter_type)
|
109
|
-
end
|
110
|
-
|
111
90
|
def ParameterType(options)
|
91
|
+
type = options[:type] || Object
|
92
|
+
use_for_snippets = if_nil(options[:use_for_snippets], true)
|
93
|
+
prefer_for_regexp_match = if_nil(options[:prefer_for_regexp_match], false)
|
94
|
+
|
112
95
|
parameter_type = CucumberExpressions::ParameterType.new(
|
113
96
|
options[:name],
|
114
97
|
options[:regexp],
|
115
|
-
|
98
|
+
type,
|
116
99
|
options[:transformer],
|
117
|
-
|
118
|
-
|
100
|
+
use_for_snippets,
|
101
|
+
prefer_for_regexp_match
|
119
102
|
)
|
120
103
|
Dsl.define_parameter_type(parameter_type)
|
121
104
|
end
|
122
105
|
|
106
|
+
def if_nil(value, default)
|
107
|
+
value.nil? ? default : value
|
108
|
+
end
|
109
|
+
|
123
110
|
# Registers a proc that will run after Cucumber is configured. You can register as
|
124
111
|
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
125
112
|
def AfterConfiguration(&proc)
|
@@ -150,4 +137,4 @@ module Cucumber
|
|
150
137
|
end
|
151
138
|
|
152
139
|
# TODO: can we avoid adding methods to the global namespace (Kernel)
|
153
|
-
extend(Cucumber::Glue::Dsl)
|
140
|
+
extend(Cucumber::Glue::Dsl) # rubocop:disable Style/MixinUsage
|
data/lib/cucumber/glue/hook.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/glue/invoke_in_world'
|
3
4
|
|
4
5
|
module Cucumber
|
5
6
|
module Glue
|
6
7
|
# TODO: Kill pointless wrapper for Before, After and AfterStep hooks with fire
|
7
8
|
class Hook
|
8
|
-
attr_reader :tag_expressions, :location
|
9
|
+
attr_reader :id, :tag_expressions, :location
|
9
10
|
|
10
|
-
def initialize(registry, tag_expressions, proc)
|
11
|
+
def initialize(id, registry, tag_expressions, proc)
|
12
|
+
@id = id
|
11
13
|
@registry = registry
|
12
|
-
@tag_expressions = tag_expressions
|
14
|
+
@tag_expressions = sanitize_tag_expressions(tag_expressions)
|
13
15
|
@proc = proc
|
14
|
-
@location = Cucumber::Core::
|
15
|
-
|
16
|
+
@location = Cucumber::Core::Test::Location.from_source_location(*@proc.source_location)
|
17
|
+
fail_for_old_style_tag_expressions(@tag_expressions)
|
16
18
|
end
|
17
19
|
|
18
20
|
def invoke(pseudo_method, arguments, &block)
|
@@ -26,16 +28,38 @@ module Cucumber
|
|
26
28
|
)
|
27
29
|
end
|
28
30
|
|
31
|
+
def to_envelope
|
32
|
+
Cucumber::Messages::Envelope.new(
|
33
|
+
hook: Cucumber::Messages::Hook.new(
|
34
|
+
id: id,
|
35
|
+
tag_expression: tag_expressions.join(' '),
|
36
|
+
source_reference: Cucumber::Messages::SourceReference.new(
|
37
|
+
uri: location.file,
|
38
|
+
location: Cucumber::Messages::Location.new(
|
39
|
+
line: location.lines.first
|
40
|
+
)
|
41
|
+
)
|
42
|
+
)
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
29
46
|
private
|
30
47
|
|
31
|
-
def
|
48
|
+
def sanitize_tag_expressions(tag_expressions)
|
49
|
+
# TODO: remove when '~@no-clobber' has been changed to 'not @no-clobber' in aruba
|
50
|
+
tag_expressions.map { |tag_expression| tag_expression == '~@no-clobber' ? 'not @no-clobber' : tag_expression }
|
51
|
+
end
|
52
|
+
|
53
|
+
def fail_for_old_style_tag_expressions(tag_expressions)
|
32
54
|
tag_expressions.each do |tag_expression|
|
33
|
-
if tag_expression.include?('~')
|
34
|
-
|
35
|
-
|
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.")
|
55
|
+
if tag_expression.include?('~')
|
56
|
+
raise("Found tagged hook with '#{tag_expression}'." \
|
57
|
+
"'~@tag' is no longer supported, use 'not @tag' instead.")
|
38
58
|
end
|
59
|
+
|
60
|
+
next unless tag_expression.include?(',')
|
61
|
+
warn("Found tagged hook with '#{tag_expression}'." \
|
62
|
+
"'@tag1,@tag2' is no longer supported, use '@tag or @tag2' instead.")
|
39
63
|
end
|
40
64
|
end
|
41
65
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/platform'
|
3
4
|
module Cucumber
|
4
5
|
module Glue
|
@@ -10,16 +11,15 @@ module Cucumber
|
|
10
11
|
return if Cucumber.use_full_backtrace
|
11
12
|
|
12
13
|
instance_exec_pos = backtrace.index(instance_exec_invocation_line)
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
return unless instance_exec_pos
|
15
|
+
replacement_line = instance_exec_pos + INSTANCE_EXEC_OFFSET
|
16
|
+
backtrace[replacement_line].gsub!(/`.*'/, "`#{pseudo_method}'") if pseudo_method
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
depth = backtrace.count { |line| line == instance_exec_invocation_line }
|
19
|
+
end_pos = depth > 1 ? instance_exec_pos : -1
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
end
|
21
|
+
backtrace[replacement_line + 1..end_pos] = nil
|
22
|
+
backtrace.compact!
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.cucumber_instance_exec_in(world, check_arity, pseudo_method, *args, &block)
|
@@ -27,12 +27,10 @@ module Cucumber
|
|
27
27
|
if check_arity && !cucumber_compatible_arity?(args, block)
|
28
28
|
world.instance_exec do
|
29
29
|
ari = block.arity
|
30
|
-
ari = ari < 0 ? (ari.abs-1).to_s+'+' : ari
|
30
|
+
ari = ari < 0 ? (ari.abs - 1).to_s + '+' : ari
|
31
31
|
s1 = ari == 1 ? '' : 's'
|
32
32
|
s2 = args.length == 1 ? '' : 's'
|
33
|
-
raise ArityMismatchError.
|
34
|
-
"Your block takes #{ari} argument#{s1}, but the Regexp matched #{args.length} argument#{s2}."
|
35
|
-
)
|
33
|
+
raise ArityMismatchError, "Your block takes #{ari} argument#{s1}, but the Regexp matched #{args.length} argument#{s2}."
|
36
34
|
end
|
37
35
|
else
|
38
36
|
world.instance_exec(*args, &block)
|
@@ -49,13 +47,11 @@ module Cucumber
|
|
49
47
|
end
|
50
48
|
|
51
49
|
def self.cucumber_run_with_backtrace_filtering(pseudo_method)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
raise e
|
58
|
-
end
|
50
|
+
yield
|
51
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
52
|
+
instance_exec_invocation_line = "#{__FILE__}:#{__LINE__ - 2}:in `cucumber_run_with_backtrace_filtering'"
|
53
|
+
replace_instance_exec_invocation_line!((e.backtrace || []), instance_exec_invocation_line, pseudo_method)
|
54
|
+
raise e
|
59
55
|
end
|
60
56
|
|
61
57
|
INSTANCE_EXEC_OFFSET = -3
|
@@ -65,6 +61,5 @@ module Cucumber
|
|
65
61
|
# is different from the number of Proc arguments.
|
66
62
|
class ArityMismatchError < StandardError
|
67
63
|
end
|
68
|
-
|
69
64
|
end
|
70
65
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/gherkin/formatter/ansi_escapes'
|
3
|
-
require 'cucumber/core/
|
4
|
+
require 'cucumber/core/test/data_table'
|
5
|
+
require 'cucumber/deprecate'
|
4
6
|
|
5
7
|
module Cucumber
|
6
8
|
module Glue
|
@@ -9,12 +11,6 @@ module Cucumber
|
|
9
11
|
# You can, and probably should, extend this API with your own methods that
|
10
12
|
# make sense in your domain. For more on that, see {Cucumber::Glue::Dsl#World}
|
11
13
|
module ProtoWorld
|
12
|
-
|
13
|
-
# Call a Transform with a string from another Transform definition
|
14
|
-
def Transform(arg)
|
15
|
-
super
|
16
|
-
end
|
17
|
-
|
18
14
|
# Run a single Gherkin step
|
19
15
|
# @example Call another step
|
20
16
|
# step "I am logged in"
|
@@ -29,8 +25,8 @@ module Cucumber
|
|
29
25
|
# @example Passing a multiline string
|
30
26
|
# step "the email should contain:", "Dear sir,\nYou've won a prize!\n"
|
31
27
|
# @param [String] name The name of the step
|
32
|
-
# @param [String,Cucumber::
|
33
|
-
def step(name, raw_multiline_arg=nil)
|
28
|
+
# @param [String,Cucumber::Test::DocString,Cucumber::Ast::Table] multiline_argument
|
29
|
+
def step(name, raw_multiline_arg = nil)
|
34
30
|
super
|
35
31
|
end
|
36
32
|
|
@@ -72,9 +68,8 @@ module Cucumber
|
|
72
68
|
# %w{ CUC-101 Peeler 22 }
|
73
69
|
# ])
|
74
70
|
#
|
75
|
-
def table(text_or_table
|
76
|
-
|
77
|
-
MultilineArgument::DataTable.from(text_or_table, location)
|
71
|
+
def table(text_or_table)
|
72
|
+
MultilineArgument::DataTable.from(text_or_table)
|
78
73
|
end
|
79
74
|
|
80
75
|
# Print a message to the output.
|
@@ -85,31 +80,52 @@ module Cucumber
|
|
85
80
|
#
|
86
81
|
# If you'd prefer to see the message immediately, call {Kernel.puts} instead.
|
87
82
|
def puts(*messages)
|
88
|
-
|
83
|
+
Cucumber.deprecate(
|
84
|
+
'Messages emitted with "puts" will no longer be caught by Cucumber ' \
|
85
|
+
'and sent to the formatter. If you want message to be in the formatted output, ' \
|
86
|
+
"please use log(message) instead.\n" \
|
87
|
+
'If you simply want it in the console, '\
|
88
|
+
'keep using "puts" (or Kernel.puts to avoid this message)',
|
89
|
+
'puts(message)',
|
90
|
+
'5.0.0'
|
91
|
+
)
|
92
|
+
messages.each { |message| log(message.to_s) }
|
89
93
|
end
|
90
94
|
|
91
95
|
# Pause the tests and ask the operator for input
|
92
|
-
def ask(question, timeout_seconds=60)
|
96
|
+
def ask(question, timeout_seconds = 60)
|
93
97
|
super
|
94
98
|
end
|
95
99
|
|
96
100
|
# Embed an image in the output
|
97
|
-
def embed(file, mime_type,
|
101
|
+
def embed(file, mime_type, _label = 'Screenshot')
|
102
|
+
Cucumber.deprecate(
|
103
|
+
'Please use attach(file, media_type) instead',
|
104
|
+
'embed(file, mime_type, label)',
|
105
|
+
'5.0.0'
|
106
|
+
)
|
107
|
+
attach(file, mime_type)
|
108
|
+
end
|
109
|
+
|
110
|
+
def log(message)
|
111
|
+
raise Cucumber::LogTypeInvalid unless message.is_a?(String)
|
112
|
+
attach(message.dup, 'text/x.cucumber.log+plain')
|
113
|
+
end
|
114
|
+
|
115
|
+
def attach(file, media_type)
|
98
116
|
super
|
99
117
|
end
|
100
118
|
|
101
119
|
# Mark the matched step as pending.
|
102
120
|
def pending(message = 'TODO')
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
109
|
-
raise Pending, "Expected pending '#{message}' to fail. No Error was raised. No longer pending?"
|
110
|
-
else
|
121
|
+
raise Pending, message unless block_given?
|
122
|
+
|
123
|
+
begin
|
124
|
+
yield
|
125
|
+
rescue Exception # rubocop:disable Lint/RescueException
|
111
126
|
raise Pending, message
|
112
127
|
end
|
128
|
+
raise Pending, "Expected pending '#{message}' to fail. No Error was raised. No longer pending?"
|
113
129
|
end
|
114
130
|
|
115
131
|
# Skips this step and the remaining steps in the scenario
|
@@ -128,8 +144,8 @@ module Cucumber
|
|
128
144
|
end
|
129
145
|
|
130
146
|
# Dynamially generate the API module, closuring the dependencies
|
131
|
-
def self.for(runtime, language)
|
132
|
-
Module.new do
|
147
|
+
def self.for(runtime, language) # rubocop:disable Metrics/MethodLength
|
148
|
+
Module.new do # rubocop:disable Metrics/BlockLength
|
133
149
|
def self.extended(object)
|
134
150
|
# wrap the dynamically generated module so that we can document the methods
|
135
151
|
# for yardoc, which doesn't like define_method.
|
@@ -143,31 +159,22 @@ module Cucumber
|
|
143
159
|
add_namespaced_modules!(namespaced_world_modules)
|
144
160
|
end
|
145
161
|
|
146
|
-
define_method(:step) do |name, raw_multiline_arg=nil|
|
147
|
-
location = Core::
|
162
|
+
define_method(:step) do |name, raw_multiline_arg = nil|
|
163
|
+
location = Core::Test::Location.of_caller
|
148
164
|
runtime.invoke_dynamic_step(name, MultilineArgument.from(raw_multiline_arg, location))
|
149
165
|
end
|
150
166
|
|
151
167
|
define_method(:steps) do |steps_text|
|
152
|
-
location = Core::
|
168
|
+
location = Core::Test::Location.of_caller
|
153
169
|
runtime.invoke_dynamic_steps(steps_text, language, location)
|
154
170
|
end
|
155
171
|
|
156
|
-
define_method(:
|
157
|
-
# Even though they won't be output until later, converting the messages to
|
158
|
-
# strings right away will protect them from modifications to their original
|
159
|
-
# objects in the mean time
|
160
|
-
messages.collect! { |message| "#{message}" }
|
161
|
-
|
162
|
-
runtime.puts(*messages)
|
163
|
-
end
|
164
|
-
|
165
|
-
define_method(:ask) do |question, timeout_seconds=60|
|
172
|
+
define_method(:ask) do |question, timeout_seconds = 60|
|
166
173
|
runtime.ask(question, timeout_seconds)
|
167
174
|
end
|
168
175
|
|
169
|
-
define_method(:
|
170
|
-
runtime.
|
176
|
+
define_method(:attach) do |file, media_type|
|
177
|
+
runtime.attach(file, media_type)
|
171
178
|
end
|
172
179
|
|
173
180
|
# Prints the list of modules that are included in the World
|
@@ -177,7 +184,7 @@ module Cucumber
|
|
177
184
|
modules += included_modules
|
178
185
|
end
|
179
186
|
modules << stringify_namespaced_modules
|
180
|
-
format('
|
187
|
+
format('#<%<modules>s:0x%<object_id>x>', modules: modules.join('+'), object_id: object_id)
|
181
188
|
end
|
182
189
|
|
183
190
|
private
|
@@ -214,7 +221,6 @@ module Cucumber
|
|
214
221
|
def stringify_namespaced_modules
|
215
222
|
@__namespaced_modules.map { |k, v| "#{v.join(',')} (as #{k})" }.join('+')
|
216
223
|
end
|
217
|
-
|
218
224
|
end
|
219
225
|
end
|
220
226
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/cucumber_expressions/parameter_type_registry'
|
3
4
|
require 'cucumber/cucumber_expressions/cucumber_expression'
|
4
5
|
require 'cucumber/cucumber_expressions/regular_expression'
|
@@ -27,7 +28,7 @@ module Cucumber
|
|
27
28
|
# Raised if there are 2 or more World blocks.
|
28
29
|
class MultipleWorld < StandardError
|
29
30
|
def initialize(first_proc, second_proc)
|
30
|
-
message = String.new
|
31
|
+
message = String.new # rubocop:disable Style/EmptyLiteral
|
31
32
|
message << "You can only pass a proc to #World once, but it's happening\n"
|
32
33
|
message << "in 2 places:\n\n"
|
33
34
|
message << Glue.backtrace_line(first_proc, 'World') << "\n"
|
@@ -52,7 +53,8 @@ module Cucumber
|
|
52
53
|
end
|
53
54
|
|
54
55
|
def initialize(runtime, configuration)
|
55
|
-
@runtime
|
56
|
+
@runtime = runtime
|
57
|
+
@configuration = configuration
|
56
58
|
@step_definitions = []
|
57
59
|
Glue::Dsl.rb_language = self
|
58
60
|
@world_proc = @world_modules = nil
|
@@ -62,27 +64,41 @@ module Cucumber
|
|
62
64
|
end
|
63
65
|
|
64
66
|
def step_matches(name_to_match)
|
65
|
-
@step_definitions.
|
67
|
+
@step_definitions.each_with_object([]) do |step_definition, result|
|
66
68
|
if (arguments = step_definition.arguments_from(name_to_match))
|
67
69
|
result << StepMatch.new(step_definition, name_to_match, arguments)
|
68
70
|
end
|
69
|
-
|
70
|
-
}
|
71
|
+
end
|
71
72
|
end
|
72
73
|
|
73
74
|
def register_rb_hook(phase, tag_expressions, proc)
|
74
|
-
add_hook(phase, Hook.new(self, tag_expressions, proc))
|
75
|
+
hook = add_hook(phase, Hook.new(@configuration.id_generator.new_id, self, tag_expressions, proc))
|
76
|
+
@configuration.notify :envelope, hook.to_envelope
|
77
|
+
hook
|
75
78
|
end
|
76
79
|
|
77
80
|
def define_parameter_type(parameter_type)
|
81
|
+
@configuration.notify :envelope, parameter_type_envelope(parameter_type)
|
82
|
+
|
78
83
|
@parameter_type_registry.define_parameter_type(parameter_type)
|
79
84
|
end
|
80
85
|
|
81
86
|
def register_rb_step_definition(string_or_regexp, proc_or_sym, options)
|
82
|
-
step_definition = StepDefinition.new(self, string_or_regexp, proc_or_sym, options)
|
87
|
+
step_definition = StepDefinition.new(@configuration.id_generator.new_id, self, string_or_regexp, proc_or_sym, options)
|
83
88
|
@step_definitions << step_definition
|
84
89
|
@configuration.notify :step_definition_registered, step_definition
|
90
|
+
@configuration.notify :envelope, step_definition.to_envelope
|
85
91
|
step_definition
|
92
|
+
rescue Cucumber::CucumberExpressions::UndefinedParameterTypeError => e
|
93
|
+
# TODO: add a way to extract the parameter type directly from the error.
|
94
|
+
type_name = e.message.match(/^Undefined parameter type \{(.*)\}$/)[1]
|
95
|
+
|
96
|
+
@configuration.notify :envelope, Cucumber::Messages::Envelope.new(
|
97
|
+
undefined_parameter_type: Cucumber::Messages::UndefinedParameterType.new(
|
98
|
+
name: type_name,
|
99
|
+
expression: string_or_regexp
|
100
|
+
)
|
101
|
+
)
|
86
102
|
end
|
87
103
|
|
88
104
|
def build_rb_world_factory(world_modules, namespaced_world_modules, proc)
|
@@ -95,15 +111,20 @@ module Cucumber
|
|
95
111
|
|
96
112
|
@namespaced_world_modules ||= Hash.new { |h, k| h[k] = [] }
|
97
113
|
namespaced_world_modules.each do |namespace, world_module|
|
98
|
-
unless @namespaced_world_modules[namespace].include?(world_module)
|
99
|
-
@namespaced_world_modules[namespace] << world_module
|
100
|
-
end
|
114
|
+
@namespaced_world_modules[namespace] << world_module unless @namespaced_world_modules[namespace].include?(world_module)
|
101
115
|
end
|
102
116
|
end
|
103
117
|
|
104
118
|
def load_code_file(code_file)
|
105
119
|
return unless File.extname(code_file) == '.rb'
|
106
|
-
|
120
|
+
|
121
|
+
# This will cause self.add_step_definition, self.add_hook, and self.define_parameter_type to be called from Glue::Dsl
|
122
|
+
|
123
|
+
if Cucumber.use_legacy_autoloader
|
124
|
+
load File.expand_path(code_file)
|
125
|
+
else
|
126
|
+
require File.expand_path(code_file)
|
127
|
+
end
|
107
128
|
end
|
108
129
|
|
109
130
|
def begin_scenario(test_case)
|
@@ -134,7 +155,7 @@ module Cucumber
|
|
134
155
|
end
|
135
156
|
|
136
157
|
def hooks_for(phase, scenario) #:nodoc:
|
137
|
-
hooks[phase.to_sym].select{|hook| scenario.accept_hook?(hook)}
|
158
|
+
hooks[phase.to_sym].select { |hook| scenario.accept_hook?(hook) }
|
138
159
|
end
|
139
160
|
|
140
161
|
def unmatched_step_definitions
|
@@ -152,11 +173,33 @@ module Cucumber
|
|
152
173
|
def create_expression(string_or_regexp)
|
153
174
|
return CucumberExpressions::CucumberExpression.new(string_or_regexp, @parameter_type_registry) if string_or_regexp.is_a?(String)
|
154
175
|
return CucumberExpressions::RegularExpression.new(string_or_regexp, @parameter_type_registry) if string_or_regexp.is_a?(Regexp)
|
155
|
-
raise ArgumentError
|
176
|
+
raise ArgumentError, 'Expression must be a String or Regexp'
|
177
|
+
end
|
178
|
+
|
179
|
+
def self.cli_snippet_type_options
|
180
|
+
registry = CucumberExpressions::ParameterTypeRegistry.new
|
181
|
+
cucumber_expression_generator = CucumberExpressions::CucumberExpressionGenerator.new(registry)
|
182
|
+
Snippet::SNIPPET_TYPES.keys.sort_by(&:to_s).map do |type|
|
183
|
+
Snippet::SNIPPET_TYPES[type].cli_option_string(type, cucumber_expression_generator)
|
184
|
+
end
|
156
185
|
end
|
157
186
|
|
158
187
|
private
|
159
188
|
|
189
|
+
def parameter_type_envelope(parameter_type)
|
190
|
+
# TODO: should me moved to Cucumber::Expression::ParameterType#to_envelope ?
|
191
|
+
# Note: that would mean that cucumber-expression would depend on cucumber-messages
|
192
|
+
|
193
|
+
Cucumber::Messages::Envelope.new(
|
194
|
+
parameter_type: Cucumber::Messages::ParameterType.new(
|
195
|
+
name: parameter_type.name,
|
196
|
+
regular_expressions: parameter_type.regexps.map(&:to_s),
|
197
|
+
prefer_for_regular_expression_match: parameter_type.prefer_for_regexp_match?,
|
198
|
+
use_for_snippets: parameter_type.use_for_snippets?
|
199
|
+
)
|
200
|
+
)
|
201
|
+
end
|
202
|
+
|
160
203
|
def available_step_definition_hash
|
161
204
|
@available_step_definition_hash ||= {}
|
162
205
|
end
|
@@ -166,20 +209,12 @@ module Cucumber
|
|
166
209
|
end
|
167
210
|
|
168
211
|
def hooks
|
169
|
-
@hooks ||= Hash.new{|h,k| h[k] = []}
|
170
|
-
end
|
171
|
-
|
172
|
-
def self.cli_snippet_type_options
|
173
|
-
registry = CucumberExpressions::ParameterTypeRegistry.new
|
174
|
-
cucumber_expression_generator = CucumberExpressions::CucumberExpressionGenerator.new(registry)
|
175
|
-
Snippet::SNIPPET_TYPES.keys.sort_by(&:to_s).map do |type|
|
176
|
-
Snippet::SNIPPET_TYPES[type].cli_option_string(type, cucumber_expression_generator)
|
177
|
-
end
|
212
|
+
@hooks ||= Hash.new { |h, k| h[k] = [] }
|
178
213
|
end
|
179
214
|
end
|
180
215
|
|
181
216
|
def self.backtrace_line(proc, name)
|
182
|
-
location = Cucumber::Core::
|
217
|
+
location = Cucumber::Core::Test::Location.from_source_location(*proc.source_location)
|
183
218
|
"#{location}:in `#{name}'"
|
184
219
|
end
|
185
220
|
end
|