cucumber 3.0.0.pre.1 → 4.0.0.rc.4
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} +339 -37
- data/CONTRIBUTING.md +11 -21
- data/README.md +20 -12
- data/bin/cucumber +2 -1
- data/lib/autotest/cucumber.rb +1 -0
- data/lib/autotest/cucumber_mixin.rb +44 -48
- 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.rb +2 -1
- data/lib/cucumber/cli/configuration.rb +15 -20
- data/lib/cucumber/cli/main.rb +15 -15
- data/lib/cucumber/cli/options.rb +249 -197
- data/lib/cucumber/cli/profile_loader.rb +63 -38
- data/lib/cucumber/cli/rerun_file.rb +1 -0
- data/lib/cucumber/configuration.rb +49 -44
- data/lib/cucumber/constantize.rb +8 -10
- data/lib/cucumber/core_ext/string.rb +2 -1
- data/lib/cucumber/deprecate.rb +34 -10
- data/lib/cucumber/encoding.rb +2 -1
- data/lib/cucumber/errors.rb +10 -8
- data/lib/cucumber/events.rb +18 -3
- 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 +14 -0
- data/lib/cucumber/events/hook_test_step_created.rb +13 -0
- data/lib/cucumber/events/{step_match.rb → step_activated.rb} +8 -8
- data/lib/cucumber/events/step_definition_registered.rb +5 -9
- data/lib/cucumber/events/test_case_created.rb +13 -0
- data/lib/cucumber/events/test_case_finished.rb +14 -0
- data/lib/cucumber/events/test_case_ready.rb +12 -0
- data/lib/cucumber/events/test_case_started.rb +11 -0
- data/lib/cucumber/events/test_run_finished.rb +2 -3
- data/lib/cucumber/events/test_run_started.rb +14 -0
- data/lib/cucumber/events/test_step_created.rb +13 -0
- data/lib/cucumber/events/test_step_finished.rb +14 -0
- data/lib/cucumber/events/test_step_started.rb +11 -0
- data/lib/cucumber/file_specs.rb +7 -6
- data/lib/cucumber/filters.rb +3 -0
- data/lib/cucumber/filters/activate_steps.rb +12 -6
- 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_started_event.rb +28 -0
- 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 +3 -3
- data/lib/cucumber/filters/tag_limits.rb +5 -5
- data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -2
- data/lib/cucumber/filters/tag_limits/verifier.rb +4 -7
- data/lib/cucumber/formatter/ansicolor.rb +38 -45
- data/lib/cucumber/formatter/ast_lookup.rb +165 -0
- data/lib/cucumber/formatter/backtrace_filter.rb +24 -12
- data/lib/cucumber/formatter/console.rb +48 -88
- data/lib/cucumber/formatter/console_counts.rb +11 -29
- data/lib/cucumber/formatter/console_issues.rb +34 -10
- 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 +8 -5
- data/lib/cucumber/formatter/fanout.rb +3 -3
- data/lib/cucumber/formatter/ignore_missing_messages.rb +2 -4
- data/lib/cucumber/formatter/interceptor.rb +12 -14
- data/lib/cucumber/formatter/io.rb +5 -4
- data/lib/cucumber/formatter/json.rb +109 -115
- data/lib/cucumber/formatter/junit.rb +85 -80
- data/lib/cucumber/formatter/message.rb +246 -0
- data/lib/cucumber/formatter/pretty.rb +353 -153
- data/lib/cucumber/formatter/progress.rb +34 -38
- 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 +5 -6
- data/lib/cucumber/formatter/summary.rb +18 -11
- data/lib/cucumber/formatter/unicode.rb +16 -18
- data/lib/cucumber/formatter/usage.rb +37 -33
- 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/{rb_support/rb_dsl.rb → glue/dsl.rb} +37 -23
- data/lib/cucumber/glue/hook.rb +67 -0
- data/lib/cucumber/glue/invoke_in_world.rb +65 -0
- data/lib/cucumber/glue/proto_world.rb +231 -0
- data/lib/cucumber/glue/registry_and_more.rb +221 -0
- data/lib/cucumber/glue/snippet.rb +205 -0
- data/lib/cucumber/glue/step_definition.rb +166 -0
- data/lib/cucumber/glue/world_factory.rb +21 -0
- data/lib/cucumber/hooks.rb +30 -20
- data/lib/cucumber/load_path.rb +1 -0
- data/lib/cucumber/multiline_argument.rb +9 -19
- data/lib/cucumber/multiline_argument/data_table.rb +143 -250
- data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +154 -0
- data/lib/cucumber/multiline_argument/doc_string.rb +2 -1
- data/lib/cucumber/platform.rb +5 -6
- data/lib/cucumber/project_initializer.rb +2 -2
- data/lib/cucumber/rake/task.rb +34 -27
- data/lib/cucumber/rspec/disable_option_parser.rb +10 -8
- data/lib/cucumber/rspec/doubles.rb +2 -1
- data/lib/cucumber/running_test_case.rb +4 -54
- data/lib/cucumber/runtime.rb +54 -72
- data/lib/cucumber/runtime/after_hooks.rb +10 -5
- data/lib/cucumber/runtime/before_hooks.rb +9 -4
- data/lib/cucumber/runtime/for_programming_languages.rb +12 -44
- data/lib/cucumber/runtime/step_hooks.rb +5 -2
- data/lib/cucumber/runtime/support_code.rb +30 -32
- data/lib/cucumber/runtime/user_interface.rb +16 -34
- data/lib/cucumber/step_definition_light.rb +7 -4
- data/lib/cucumber/step_definitions.rb +3 -2
- data/lib/cucumber/step_match.rb +42 -26
- data/lib/cucumber/step_match_search.rb +11 -12
- 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 +2 -1
- metadata +238 -623
- data/.coveralls.yml +0 -1
- data/.github/ISSUE_TEMPLATE.md +0 -48
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -39
- data/.rspec +0 -1
- data/.ruby-gemset +0 -1
- data/.travis.yml +0 -35
- data/.yardopts +0 -1
- data/Gemfile +0 -22
- data/Rakefile +0 -22
- data/cucumber.gemspec +0 -47
- data/cucumber.yml +0 -20
- 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 -50
- data/features/docs/api/listen_for_events.feature +0 -59
- data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -26
- data/features/docs/cli/backtraces.feature +0 -36
- data/features/docs/cli/dry_run.feature +0 -70
- 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 -46
- data/features/docs/cli/finding_steps.feature +0 -28
- data/features/docs/cli/help.feature +0 -8
- 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 -67
- data/features/docs/cli/run_scenarios_matching_name.feature +0 -104
- 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 -65
- data/features/docs/cli/strict_mode.feature +0 -64
- data/features/docs/defining_steps/nested_steps.feature +0 -177
- data/features/docs/defining_steps/nested_steps_i18n.feature +0 -36
- data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -54
- 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 -30
- data/features/docs/defining_steps/snippets.feature +0 -56
- data/features/docs/defining_steps/table_diffing.feature +0 -50
- data/features/docs/exception_in_after_hook.feature +0 -126
- data/features/docs/exception_in_after_step_hook.feature +0 -102
- data/features/docs/exception_in_around_hook.feature +0 -78
- data/features/docs/exception_in_before_hook.feature +0 -96
- data/features/docs/extending_cucumber/custom_filter.feature +0 -29
- data/features/docs/extending_cucumber/custom_formatter.feature +0 -102
- data/features/docs/formatters/api_methods.feature +0 -37
- data/features/docs/formatters/debug_formatter.feature +0 -47
- 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 -454
- data/features/docs/formatters/pretty_formatter.feature +0 -73
- data/features/docs/formatters/progress_formatter.feature +0 -31
- data/features/docs/formatters/rerun_formatter.feature +0 -188
- data/features/docs/formatters/summary_formatter.feature +0 -34
- data/features/docs/formatters/usage_formatter.feature +0 -98
- data/features/docs/getting_started.feature +0 -27
- data/features/docs/gherkin/background.feature +0 -548
- data/features/docs/gherkin/doc_strings.feature +0 -74
- data/features/docs/gherkin/expand_option_for_outlines.feature +0 -46
- data/features/docs/gherkin/language_from_header.feature +0 -32
- data/features/docs/gherkin/language_help.feature +0 -42
- data/features/docs/gherkin/outlines.feature +0 -156
- data/features/docs/gherkin/unicode_table.feature +0 -32
- data/features/docs/gherkin/using_descriptions.feature +0 -82
- 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 -141
- data/features/docs/raketask.feature +0 -44
- data/features/docs/work_in_progress.feature +0 -154
- data/features/docs/writing_support_code/after_hooks.feature +0 -102
- data/features/docs/writing_support_code/after_step_hooks.feature +0 -53
- data/features/docs/writing_support_code/around_hooks.feature +0 -260
- data/features/docs/writing_support_code/before_hook.feature +0 -65
- data/features/docs/writing_support_code/hook_order.feature +0 -61
- data/features/docs/writing_support_code/load_path.feature +0 -17
- 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/transforms.feature +0 -98
- data/features/docs/writing_support_code/world.feature +0 -129
- data/features/lib/step_definitions/aruba_steps.rb +0 -27
- data/features/lib/step_definitions/cli_steps.rb +0 -4
- data/features/lib/step_definitions/cucumber_steps.rb +0 -79
- 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/step_definitions/wire_steps.rb +0 -59
- data/features/lib/support/env.rb +0 -22
- data/features/lib/support/fake_wire_server.rb +0 -81
- data/features/lib/support/feature_factory.rb +0 -68
- data/features/lib/support/normalise_output.rb +0 -51
- data/gem_tasks/contributors.rake +0 -16
- data/gem_tasks/cov.rake +0 -6
- data/gem_tasks/cucumber.rake +0 -26
- data/gem_tasks/downloads.rb +0 -8
- data/gem_tasks/environment.rake +0 -8
- 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/core_ext/instance_exec.rb +0 -71
- data/lib/cucumber/formatter/cucumber.css +0 -286
- data/lib/cucumber/formatter/cucumber.sass +0 -247
- data/lib/cucumber/formatter/debug.rb +0 -36
- data/lib/cucumber/formatter/hook_query_visitor.rb +0 -41
- data/lib/cucumber/formatter/html.rb +0 -690
- 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 -390
- data/lib/cucumber/formatter/legacy_api/results.rb +0 -52
- data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +0 -32
- data/lib/cucumber/rb_support/rb_hook.rb +0 -20
- data/lib/cucumber/rb_support/rb_language.rb +0 -227
- data/lib/cucumber/rb_support/rb_step_definition.rb +0 -132
- data/lib/cucumber/rb_support/rb_transform.rb +0 -60
- data/lib/cucumber/rb_support/rb_world.rb +0 -171
- data/lib/cucumber/rb_support/snippet.rb +0 -171
- data/lib/cucumber/step_argument.rb +0 -26
- data/spec/cucumber/cli/configuration_spec.rb +0 -436
- data/spec/cucumber/cli/main_spec.rb +0 -84
- data/spec/cucumber/cli/options_spec.rb +0 -411
- data/spec/cucumber/cli/profile_loader_spec.rb +0 -47
- 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/core_ext/instance_exec_spec.rb +0 -5
- 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 -85
- 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/console_counts_spec.rb +0 -14
- data/spec/cucumber/formatter/debug_spec.rb +0 -65
- 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 -842
- data/spec/cucumber/formatter/junit_spec.rb +0 -253
- 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 -83
- data/spec/cucumber/hooks_spec.rb +0 -31
- data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -604
- 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/rb_support/rb_language_spec.rb +0 -321
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +0 -200
- data/spec/cucumber/rb_support/rb_transform_spec.rb +0 -47
- data/spec/cucumber/rb_support/rb_world_spec.rb +0 -48
- data/spec/cucumber/rb_support/snippet_spec.rb +0 -138
- data/spec/cucumber/running_test_case_spec.rb +0 -140
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -37
- 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 -123
- 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
data/lib/cucumber/cli/main.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'optparse'
|
3
4
|
require 'cucumber'
|
4
5
|
require 'logger'
|
@@ -13,7 +14,7 @@ module Cucumber
|
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
|
-
def initialize(args, _=nil, out=STDOUT, err=STDERR, kernel=Kernel)
|
17
|
+
def initialize(args, _ = nil, out = STDOUT, err = STDERR, kernel = Kernel)
|
17
18
|
@args = args
|
18
19
|
@out = out
|
19
20
|
@err = err
|
@@ -23,22 +24,15 @@ module Cucumber
|
|
23
24
|
def execute!(existing_runtime = nil)
|
24
25
|
trap_interrupt
|
25
26
|
|
26
|
-
runtime =
|
27
|
-
existing_runtime.configure(configuration)
|
28
|
-
existing_runtime
|
29
|
-
else
|
30
|
-
Runtime.new(configuration)
|
31
|
-
end
|
27
|
+
runtime = runtime(existing_runtime)
|
32
28
|
|
33
29
|
runtime.run!
|
34
30
|
if Cucumber.wants_to_quit
|
35
31
|
exit_unable_to_finish
|
32
|
+
elsif runtime.failure?
|
33
|
+
exit_tests_failed
|
36
34
|
else
|
37
|
-
|
38
|
-
exit_tests_failed
|
39
|
-
else
|
40
|
-
exit_ok
|
41
|
-
end
|
35
|
+
exit_ok
|
42
36
|
end
|
43
37
|
rescue SystemExit => e
|
44
38
|
@kernel.exit(e.status)
|
@@ -47,7 +41,7 @@ module Cucumber
|
|
47
41
|
@err.puts("Couldn't open #{e.path}")
|
48
42
|
exit_unable_to_finish
|
49
43
|
rescue FeatureFolderNotFoundException => e
|
50
|
-
@err.puts(e.message +
|
44
|
+
@err.puts(e.message + '. You can use `cucumber --init` to get started.')
|
51
45
|
exit_unable_to_finish
|
52
46
|
rescue ProfilesNotDefinedError, YmlLoadError, ProfileNotFound => e
|
53
47
|
@err.puts(e.message)
|
@@ -55,7 +49,7 @@ module Cucumber
|
|
55
49
|
rescue Errno::EACCES, Errno::ENOENT => e
|
56
50
|
@err.puts("#{e.message} (#{e.class})")
|
57
51
|
exit_unable_to_finish
|
58
|
-
rescue Exception => e
|
52
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
59
53
|
@err.puts("#{e.message} (#{e.class})")
|
60
54
|
@err.puts(e.backtrace.join("\n"))
|
61
55
|
exit_unable_to_finish
|
@@ -70,7 +64,6 @@ module Cucumber
|
|
70
64
|
|
71
65
|
private
|
72
66
|
|
73
|
-
|
74
67
|
def exit_ok
|
75
68
|
@kernel.exit 0
|
76
69
|
end
|
@@ -93,8 +86,15 @@ module Cucumber
|
|
93
86
|
exit_unable_to_finish! if Cucumber.wants_to_quit
|
94
87
|
Cucumber.wants_to_quit = true
|
95
88
|
STDERR.puts "\nExiting... Interrupt again to exit immediately."
|
89
|
+
exit_unable_to_finish
|
96
90
|
end
|
97
91
|
end
|
92
|
+
|
93
|
+
def runtime(existing_runtime)
|
94
|
+
return Runtime.new(configuration) unless existing_runtime
|
95
|
+
existing_runtime.configure(configuration)
|
96
|
+
existing_runtime
|
97
|
+
end
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
data/lib/cucumber/cli/options.rb
CHANGED
@@ -1,60 +1,62 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/cli/profile_loader'
|
3
4
|
require 'cucumber/formatter/ansicolor'
|
4
|
-
require 'cucumber/
|
5
|
+
require 'cucumber/glue/registry_and_more'
|
5
6
|
require 'cucumber/project_initializer'
|
7
|
+
require 'cucumber/core/test/result'
|
6
8
|
|
7
9
|
module Cucumber
|
8
10
|
module Cli
|
9
|
-
|
10
11
|
class Options
|
11
12
|
INDENT = ' ' * 53
|
12
13
|
BUILTIN_FORMATS = {
|
13
|
-
'html' => ['Cucumber::Formatter::Html', 'Generates a nice looking HTML report.'],
|
14
14
|
'pretty' => ['Cucumber::Formatter::Pretty', 'Prints the feature as is - in colours.'],
|
15
15
|
'progress' => ['Cucumber::Formatter::Progress', 'Prints one character per scenario.'],
|
16
16
|
'rerun' => ['Cucumber::Formatter::Rerun', 'Prints failing files with line numbers.'],
|
17
|
-
'usage' => ['Cucumber::Formatter::Usage', "Prints where step definitions are used.\n"
|
18
|
-
"#{INDENT}The slowest step definitions (with duration) are\n"
|
19
|
-
"#{INDENT}listed first. If --dry-run is used the duration\n"
|
20
|
-
"#{INDENT}is not shown, and step definitions are sorted by\n"
|
17
|
+
'usage' => ['Cucumber::Formatter::Usage', "Prints where step definitions are used.\n" \
|
18
|
+
"#{INDENT}The slowest step definitions (with duration) are\n" \
|
19
|
+
"#{INDENT}listed first. If --dry-run is used the duration\n" \
|
20
|
+
"#{INDENT}is not shown, and step definitions are sorted by\n" \
|
21
21
|
"#{INDENT}filename instead."],
|
22
|
-
'stepdefs' => ['Cucumber::Formatter::Stepdefs', "Prints All step definitions with their locations. Same as\n"
|
22
|
+
'stepdefs' => ['Cucumber::Formatter::Stepdefs', "Prints All step definitions with their locations. Same as\n" \
|
23
23
|
"#{INDENT}the usage formatter, except that steps are not printed."],
|
24
24
|
'junit' => ['Cucumber::Formatter::Junit', 'Generates a report similar to Ant+JUnit.'],
|
25
|
-
'json' => ['Cucumber::Formatter::Json', 'Prints the feature as JSON'],
|
26
|
-
'
|
27
|
-
'
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
25
|
+
'json' => ['Cucumber::Formatter::Json', '[DEPRECATED] Prints the feature as JSON'],
|
26
|
+
'message' => ['Cucumber::Formatter::Message', 'Outputs protobuf messages'],
|
27
|
+
'summary' => ['Cucumber::Formatter::Summary', 'Summary output of feature and scenarios']
|
28
|
+
}.freeze
|
29
|
+
max = BUILTIN_FORMATS.keys.map(&:length).max
|
30
|
+
FORMAT_HELP_MSG = [
|
31
|
+
'Use --format rerun --out rerun.txt to write out failing',
|
32
|
+
'features. You can rerun them with cucumber @rerun.txt.',
|
33
|
+
'FORMAT can also be the fully qualified class name of',
|
34
34
|
"your own custom formatter. If the class isn't loaded,",
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
'Cucumber will attempt to require a file with a relative',
|
36
|
+
'file name that is the underscore name of the class name.',
|
37
|
+
'Example: --format Foo::BarZap -> Cucumber will look for',
|
38
|
+
'foo/bar_zap.rb. You can place the file with this relative',
|
39
|
+
'path underneath your features/support directory or anywhere',
|
40
40
|
"on Ruby's LOAD_PATH, for example in a Ruby gem."
|
41
|
-
]
|
41
|
+
].freeze
|
42
42
|
|
43
43
|
FORMAT_HELP = (BUILTIN_FORMATS.keys.sort.map do |key|
|
44
44
|
" #{key}#{' ' * (max - key.length)} : #{BUILTIN_FORMATS[key][1]}"
|
45
45
|
end) + FORMAT_HELP_MSG
|
46
|
-
PROFILE_SHORT_FLAG = '-p'
|
47
|
-
NO_PROFILE_SHORT_FLAG = '-P'
|
48
|
-
PROFILE_LONG_FLAG = '--profile'
|
49
|
-
NO_PROFILE_LONG_FLAG = '--no-profile'
|
50
|
-
FAIL_FAST_FLAG = '--fail-fast'
|
51
|
-
RETRY_FLAG = '--retry'
|
52
|
-
OPTIONS_WITH_ARGS = [
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
46
|
+
PROFILE_SHORT_FLAG = '-p'.freeze
|
47
|
+
NO_PROFILE_SHORT_FLAG = '-P'.freeze
|
48
|
+
PROFILE_LONG_FLAG = '--profile'.freeze
|
49
|
+
NO_PROFILE_LONG_FLAG = '--no-profile'.freeze
|
50
|
+
FAIL_FAST_FLAG = '--fail-fast'.freeze
|
51
|
+
RETRY_FLAG = '--retry'.freeze
|
52
|
+
OPTIONS_WITH_ARGS = [
|
53
|
+
'-r', '--require', '--i18n-keywords', '-f', '--format', '-o',
|
54
|
+
'--out', '-t', '--tags', '-n', '--name', '-e', '--exclude',
|
55
|
+
PROFILE_SHORT_FLAG, PROFILE_LONG_FLAG, RETRY_FLAG, '-l',
|
56
|
+
'--lines', '--port', '-I', '--snippet-type'
|
57
|
+
].freeze
|
58
|
+
ORDER_TYPES = %w[defined random].freeze
|
59
|
+
TAG_LIMIT_MATCHER = /(?<tag_name>\@\w+):(?<limit>\d+)/x
|
58
60
|
|
59
61
|
def self.parse(args, out_stream, error_stream, options = {})
|
60
62
|
new(out_stream, error_stream, options).parse!(args)
|
@@ -82,70 +84,72 @@ module Cucumber
|
|
82
84
|
@options[key] = value
|
83
85
|
end
|
84
86
|
|
85
|
-
def parse!(args)
|
87
|
+
def parse!(args) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
86
88
|
@args = args
|
87
89
|
@expanded_args = @args.dup
|
88
90
|
|
89
91
|
@args.extend(::OptionParser::Arguable)
|
90
92
|
|
91
|
-
@args.options do |opts|
|
93
|
+
@args.options do |opts| # rubocop:disable Metrics/BlockLength
|
92
94
|
opts.banner = banner
|
93
|
-
opts.on(
|
95
|
+
opts.on('-r LIBRARY|DIR', '--require LIBRARY|DIR', *require_files_msg) { |lib| require_files(lib) }
|
94
96
|
|
95
|
-
if
|
96
|
-
opts.on("-j DIR", "--jars DIR", "Load all the jars under DIR") {|jars| load_jars(jars) }
|
97
|
-
end
|
97
|
+
opts.on('-j DIR', '--jars DIR', 'Load all the jars under DIR') { |jars| load_jars(jars) } if Cucumber::JRUBY
|
98
98
|
|
99
|
-
opts.on("#{RETRY_FLAG} ATTEMPTS", *retry_msg) {|v| set_option :retry, v.to_i }
|
100
|
-
opts.on(
|
101
|
-
opts.on(
|
102
|
-
opts.on(
|
103
|
-
opts.on('--
|
104
|
-
|
105
|
-
|
106
|
-
opts.on(
|
107
|
-
opts.on(
|
108
|
-
opts.on(
|
109
|
-
opts.on(
|
110
|
-
opts.on(
|
111
|
-
opts.on(
|
112
|
-
opts.on(
|
113
|
-
opts.on(
|
114
|
-
opts.on(
|
115
|
-
opts.on(
|
116
|
-
opts.on(
|
117
|
-
opts.on(
|
118
|
-
opts.on(
|
119
|
-
opts.on(
|
120
|
-
opts.on(
|
121
|
-
opts.on(
|
122
|
-
opts.on(
|
123
|
-
opts.on(
|
124
|
-
opts.on(
|
125
|
-
|
126
|
-
opts.on(
|
127
|
-
|
99
|
+
opts.on("#{RETRY_FLAG} ATTEMPTS", *retry_msg) { |v| set_option :retry, v.to_i }
|
100
|
+
opts.on('--i18n-languages', *i18n_languages_msg) { list_languages_and_exit }
|
101
|
+
opts.on('--i18n-keywords LANG', *i18n_keywords_msg) { |lang| language lang }
|
102
|
+
opts.on(FAIL_FAST_FLAG, 'Exit immediately following the first failing scenario') { set_option :fail_fast }
|
103
|
+
opts.on('-f FORMAT', '--format FORMAT', *format_msg, *FORMAT_HELP) do |v|
|
104
|
+
add_option :formats, [*parse_formats(v), @out_stream]
|
105
|
+
end
|
106
|
+
opts.on('--init', *init_msg) { |_v| initialize_project }
|
107
|
+
opts.on('-o', '--out [FILE|DIR]', *out_msg) { |v| out_stream v }
|
108
|
+
opts.on('-t TAG_EXPRESSION', '--tags TAG_EXPRESSION', *tags_msg) { |v| add_tag v }
|
109
|
+
opts.on('-n NAME', '--name NAME', *name_msg) { |v| add_option :name_regexps, /#{v}/ }
|
110
|
+
opts.on('-e', '--exclude PATTERN', *exclude_msg) { |v| add_option :excludes, Regexp.new(v) }
|
111
|
+
opts.on(PROFILE_SHORT_FLAG, "#{PROFILE_LONG_FLAG} PROFILE", *profile_short_flag_msg) { |v| add_profile v }
|
112
|
+
opts.on(NO_PROFILE_SHORT_FLAG, NO_PROFILE_LONG_FLAG, *no_profile_short_flag_msg) { |_v| disable_profile_loading }
|
113
|
+
opts.on('-c', '--[no-]color', *color_msg) { |v| color v }
|
114
|
+
opts.on('-d', '--dry-run', *dry_run_msg) { set_dry_run_and_duration }
|
115
|
+
opts.on('-m', '--no-multiline', "Don't print multiline strings and tables under steps.") { set_option :no_multiline }
|
116
|
+
opts.on('-s', '--no-source', "Don't print the file and line of the step definition with the steps.") { set_option :source, false }
|
117
|
+
opts.on('-i', '--no-snippets', "Don't print snippets for pending steps.") { set_option :snippets, false }
|
118
|
+
opts.on('-I', '--snippet-type TYPE', *snippet_type_msg) { |v| set_option :snippet_type, v.to_sym }
|
119
|
+
opts.on('-q', '--quiet', 'Alias for --no-snippets --no-source.') { shut_up }
|
120
|
+
opts.on('--no-duration', "Don't print the duration at the end of the summary") { set_option :duration, false }
|
121
|
+
opts.on('-b', '--backtrace', 'Show full backtrace for all errors.') { Cucumber.use_full_backtrace = true }
|
122
|
+
opts.on('-S', '--[no-]strict', *strict_msg) { |setting| set_strict(setting) }
|
123
|
+
opts.on('--[no-]strict-undefined', 'Fail if there are any undefined results.') { |setting| set_strict(setting, :undefined) }
|
124
|
+
opts.on('--[no-]strict-pending', 'Fail if there are any pending results.') { |setting| set_strict(setting, :pending) }
|
125
|
+
opts.on('--[no-]strict-flaky', 'Fail if there are any flaky results.') { |setting| set_strict(setting, :flaky) }
|
126
|
+
opts.on('-w', '--wip', 'Fail if there are any passing scenarios.') { set_option :wip }
|
127
|
+
opts.on('-v', '--verbose', 'Show the files and features loaded.') { set_option :verbose }
|
128
|
+
opts.on('-g', '--guess', 'Guess best match for Ambiguous steps.') { set_option :guess }
|
129
|
+
opts.on('-l', '--lines LINES', *lines_msg) { |lines| set_option :lines, lines }
|
130
|
+
opts.on('-x', '--expand', 'Expand Scenario Outline Tables in output.') { set_option :expand }
|
131
|
+
|
132
|
+
opts.on('--order TYPE[:SEED]', 'Run examples in the specified order. Available types:',
|
133
|
+
*<<-TEXT.split("\n")) do |order|
|
128
134
|
[defined] Run scenarios in the order they were defined (default).
|
129
135
|
[random] Shuffle scenarios before running.
|
130
136
|
Specify SEED to reproduce the shuffling from a previous run.
|
131
137
|
e.g. --order random:5738
|
132
|
-
TEXT
|
133
|
-
@options[:order], @options[:seed] = *order.split(
|
134
|
-
unless ORDER_TYPES.include?(@options[:order])
|
135
|
-
fail "'#{@options[:order]}' is not a recognised order type. Please use one of #{ORDER_TYPES.join(", ")}."
|
136
|
-
end
|
138
|
+
TEXT
|
139
|
+
@options[:order], @options[:seed] = *order.split(':')
|
140
|
+
raise "'#{@options[:order]}' is not a recognised order type. Please use one of #{ORDER_TYPES.join(', ')}." unless ORDER_TYPES.include?(@options[:order])
|
137
141
|
end
|
138
142
|
|
139
|
-
opts.on_tail(
|
140
|
-
opts.on_tail(
|
143
|
+
opts.on_tail('--version', 'Show version.') { exit_ok(Cucumber::VERSION) }
|
144
|
+
opts.on_tail('-h', '--help', "You're looking at it.") { exit_ok(opts.help) }
|
141
145
|
end.parse!
|
142
146
|
|
143
147
|
@args.map! { |a| "#{a}:#{@options[:lines]}" } if @options[:lines]
|
144
148
|
|
145
149
|
extract_environment_variables
|
146
|
-
@options[:paths] = @args.dup #whatver is left over
|
150
|
+
@options[:paths] = @args.dup # whatver is left over
|
147
151
|
|
148
|
-
check_formatter_stream_conflicts
|
152
|
+
check_formatter_stream_conflicts
|
149
153
|
|
150
154
|
merge_profiles
|
151
155
|
|
@@ -160,50 +164,52 @@ TEXT
|
|
160
164
|
@options[:filters] ||= []
|
161
165
|
end
|
162
166
|
|
163
|
-
def check_formatter_stream_conflicts
|
164
|
-
streams = @options[:formats].uniq.map { |(_, stream)| stream }
|
165
|
-
if streams
|
166
|
-
|
167
|
-
end
|
167
|
+
def check_formatter_stream_conflicts
|
168
|
+
streams = @options[:formats].uniq.map { |(_, _, stream)| stream }
|
169
|
+
return if streams == streams.uniq
|
170
|
+
raise 'All but one formatter must use --out, only one can print to each stream (or STDOUT)'
|
168
171
|
end
|
169
172
|
|
170
173
|
def to_hash
|
171
174
|
Hash(@options)
|
172
175
|
end
|
173
176
|
|
174
|
-
|
177
|
+
protected
|
175
178
|
|
176
179
|
attr_reader :options, :profiles, :expanded_args
|
177
180
|
protected :options, :profiles, :expanded_args
|
178
181
|
|
179
|
-
|
182
|
+
private
|
180
183
|
|
181
184
|
def color_msg
|
182
185
|
[
|
183
|
-
|
184
|
-
|
186
|
+
'Whether or not to use ANSI color in the output. Cucumber decides',
|
187
|
+
'based on your platform and the output destination if not specified.'
|
185
188
|
]
|
186
189
|
end
|
187
190
|
|
188
191
|
def dry_run_msg
|
189
|
-
[
|
190
|
-
"Invokes formatters without executing the steps.",
|
191
|
-
"This also omits the loading of your support/env.rb file if it exists."
|
192
|
-
]
|
192
|
+
['Invokes formatters without executing the steps.']
|
193
193
|
end
|
194
194
|
|
195
195
|
def exclude_msg
|
196
|
-
[
|
196
|
+
["Don't run feature files or require ruby files matching PATTERN"]
|
197
197
|
end
|
198
198
|
|
199
199
|
def format_msg
|
200
|
-
[
|
200
|
+
['How to format features (Default: pretty). Available formats:']
|
201
201
|
end
|
202
202
|
|
203
|
-
def
|
203
|
+
def i18n_languages_msg
|
204
204
|
[
|
205
|
-
|
206
|
-
|
205
|
+
'List all available languages'
|
206
|
+
]
|
207
|
+
end
|
208
|
+
|
209
|
+
def i18n_keywords_msg
|
210
|
+
[
|
211
|
+
'List keywords for in a particular language',
|
212
|
+
%(Run with "--i18n help" to see all languages)
|
207
213
|
]
|
208
214
|
end
|
209
215
|
|
@@ -215,7 +221,7 @@ TEXT
|
|
215
221
|
end
|
216
222
|
|
217
223
|
def lines_msg
|
218
|
-
[
|
224
|
+
['Run given line numbers. Equivalent to FILE:LINE syntax']
|
219
225
|
end
|
220
226
|
|
221
227
|
def no_profile_short_flag_msg
|
@@ -226,112 +232,125 @@ TEXT
|
|
226
232
|
|
227
233
|
def profile_short_flag_msg
|
228
234
|
[
|
229
|
-
|
235
|
+
'Pull commandline arguments from cucumber.yml which can be defined as',
|
230
236
|
"strings or arrays. When a 'default' profile is defined and no profile",
|
231
|
-
|
232
|
-
|
233
|
-
|
237
|
+
'is specified it is always used. (Unless disabled, see -P below.)',
|
238
|
+
'When feature files are defined in a profile and on the command line',
|
239
|
+
'then only the ones from the command line are used.'
|
234
240
|
]
|
235
241
|
end
|
236
242
|
|
237
243
|
def retry_msg
|
238
|
-
[
|
244
|
+
['Specify the number of times to retry failing tests (default: 0)']
|
239
245
|
end
|
240
246
|
|
241
247
|
def name_msg
|
242
248
|
[
|
243
|
-
|
244
|
-
|
245
|
-
|
249
|
+
'Only execute the feature elements which match part of the given name.',
|
250
|
+
'If this option is given more than once, it will match against all the',
|
251
|
+
'given names.'
|
252
|
+
]
|
253
|
+
end
|
254
|
+
|
255
|
+
def strict_msg
|
256
|
+
[
|
257
|
+
'Fail if there are any strict affected results ',
|
258
|
+
'(that is undefined, pending or flaky results).'
|
246
259
|
]
|
247
260
|
end
|
248
261
|
|
249
|
-
def
|
250
|
-
|
251
|
-
|
262
|
+
def parse_formats(v)
|
263
|
+
formatter, *formatter_options = v.split(',')
|
264
|
+
options_hash = Hash[formatter_options.map { |s| s.split('=') }]
|
265
|
+
[formatter, options_hash]
|
266
|
+
end
|
267
|
+
|
268
|
+
def out_stream(v)
|
269
|
+
@options[:formats] << ['pretty', {}, nil] if @options[:formats].empty?
|
270
|
+
@options[:formats][-1][2] = v
|
252
271
|
end
|
253
272
|
|
254
273
|
def tags_msg
|
255
274
|
[
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
"
|
260
|
-
|
261
|
-
"logical OR. Example: --tags @dev
|
262
|
-
|
263
|
-
"
|
275
|
+
'Only execute the features or scenarios with tags matching TAG_EXPRESSION.',
|
276
|
+
'Scenarios inherit tags declared on the Feature level. The simplest',
|
277
|
+
'TAG_EXPRESSION is simply a tag. Example: --tags @dev. To represent',
|
278
|
+
"boolean NOT preceed the tag with 'not '. Example: --tags 'not @dev'.",
|
279
|
+
'A tag expression can have several tags separated by an or which represents',
|
280
|
+
"logical OR. Example: --tags '@dev or @wip'. The --tags option can be specified",
|
281
|
+
'A tag expression can have several tags separated by an and which represents',
|
282
|
+
"logical AND. Example: --tags '@dev and @wip'. The --tags option can be specified",
|
283
|
+
'several times, and this also represents logical AND.',
|
284
|
+
"Example: --tags '@foo or not @bar' --tags @zap. This represents the boolean",
|
285
|
+
'expression (@foo || !@bar) && @zap.',
|
264
286
|
"\n",
|
265
|
-
|
266
|
-
"you have to use logical AND: --tags
|
287
|
+
'Beware that if you want to use several negative tags to exclude several tags',
|
288
|
+
"you have to use logical AND: --tags 'not @fixme and not @buggy'.",
|
267
289
|
"\n",
|
268
|
-
|
269
|
-
|
270
|
-
|
290
|
+
'Tags can be given a threshold to limit the number of occurrences.',
|
291
|
+
'Example: --tags @qa:3 will fail if there are more than 3 occurrences of the @qa tag.',
|
292
|
+
'This can be practical if you are practicing Kanban or CONWIP.'
|
271
293
|
]
|
272
294
|
end
|
273
295
|
|
274
296
|
def out_msg
|
275
297
|
[
|
276
|
-
|
277
|
-
|
278
|
-
|
298
|
+
'Write output to a file/directory instead of STDOUT. This option',
|
299
|
+
'applies to the previously specified --format, or the',
|
300
|
+
'default format if no format is specified. Check the specific',
|
279
301
|
"formatter's docs to see whether to pass a file or a dir."
|
280
302
|
]
|
281
303
|
end
|
282
304
|
|
283
305
|
def require_files_msg
|
284
306
|
[
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
307
|
+
'Require files before executing the features. If this',
|
308
|
+
'option is not specified, all *.rb files that are',
|
309
|
+
'siblings of or below the features will be loaded auto-',
|
310
|
+
'matically. Automatic loading is disabled when this',
|
311
|
+
'option is specified; all loading becomes explicit.',
|
312
|
+
'Files in directories named "support" are still always',
|
313
|
+
'loaded first when their parent directories are',
|
314
|
+
'required or if the "support" directoires themselves are',
|
315
|
+
'explicitly required.',
|
316
|
+
'This option can be specified multiple times.'
|
293
317
|
]
|
294
318
|
end
|
295
319
|
|
296
320
|
def snippet_type_msg
|
297
321
|
[
|
298
|
-
|
299
|
-
Cucumber::
|
322
|
+
'Use different snippet type (Default: cucumber_expression). Available types:',
|
323
|
+
Cucumber::Glue::RegistryAndMore.cli_snippet_type_options
|
300
324
|
].flatten
|
301
325
|
end
|
302
326
|
|
303
327
|
def banner
|
304
|
-
[
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
328
|
+
[
|
329
|
+
'Usage: cucumber [options] [ [FILE|DIR|URL][:LINE[:LINE]*] ]+', '',
|
330
|
+
'Examples:',
|
331
|
+
'cucumber examples/i18n/en/features',
|
332
|
+
'cucumber @rerun.txt (See --format rerun)',
|
333
|
+
'cucumber examples/i18n/it/features/somma.feature:6:98:113',
|
334
|
+
'cucumber -s -i http://rubyurl.com/eeCl', '', ''
|
310
335
|
].join("\n")
|
311
336
|
end
|
312
337
|
|
313
338
|
def require_files(v)
|
314
339
|
@options[:require] << v
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
end
|
340
|
+
return unless Cucumber::JRUBY && File.directory?(v)
|
341
|
+
require 'java'
|
342
|
+
$CLASSPATH << v
|
319
343
|
end
|
320
344
|
|
321
345
|
def require_jars(jars)
|
322
|
-
Dir["#{jars}/**/*.jar"].each {|jar| require jar}
|
346
|
+
Dir["#{jars}/**/*.jar"].each { |jar| require jar }
|
323
347
|
end
|
324
348
|
|
325
|
-
def
|
349
|
+
def language(lang)
|
326
350
|
require 'gherkin/dialect'
|
327
351
|
|
328
|
-
|
329
|
-
|
330
|
-
elsif !::Gherkin::DIALECTS.keys.include? lang
|
331
|
-
indicate_invalid_language_and_exit(lang)
|
332
|
-
else
|
333
|
-
list_keywords_and_exit(lang)
|
334
|
-
end
|
352
|
+
return indicate_invalid_language_and_exit(lang) unless ::Gherkin::DIALECTS.key?(lang)
|
353
|
+
list_keywords_and_exit(lang)
|
335
354
|
end
|
336
355
|
|
337
356
|
def disable_profile_loading
|
@@ -339,14 +358,32 @@ TEXT
|
|
339
358
|
end
|
340
359
|
|
341
360
|
def non_stdout_formats
|
342
|
-
@options[:formats].
|
361
|
+
@options[:formats].reject { |_, _, output| output == @out_stream }
|
343
362
|
end
|
344
363
|
|
345
364
|
def add_option(option, value)
|
346
365
|
@options[option] << value
|
347
366
|
end
|
348
367
|
|
349
|
-
def
|
368
|
+
def add_tag(value)
|
369
|
+
raise("Found tags option '#{value}'. '~@tag' is no longer supported, use 'not @tag' instead.") if value.include?('~')
|
370
|
+
raise("Found tags option '#{value}'. '@tag1,@tag2' is no longer supported, use '@tag or @tag2' instead.") if value.include?(',')
|
371
|
+
@options[:tag_expressions] << value.gsub(/(@\w+)(:\d+)?/, '\1')
|
372
|
+
add_tag_limits(value)
|
373
|
+
end
|
374
|
+
|
375
|
+
def add_tag_limits(value)
|
376
|
+
value.split(/[, ]/).map { |part| TAG_LIMIT_MATCHER.match(part) }.compact.each do |matchdata|
|
377
|
+
add_tag_limit(@options[:tag_limits], matchdata[:tag_name], matchdata[:limit].to_i)
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
def add_tag_limit(tag_limits, tag_name, limit)
|
382
|
+
raise "Inconsistent tag limits for #{tag_name}: #{tag_limits[tag_name]} and #{limit}" if tag_limits[tag_name] && tag_limits[tag_name] != limit
|
383
|
+
tag_limits[tag_name] = limit
|
384
|
+
end
|
385
|
+
|
386
|
+
def color(color)
|
350
387
|
Cucumber::Term::ANSIColor.coloring = color
|
351
388
|
end
|
352
389
|
|
@@ -358,7 +395,7 @@ TEXT
|
|
358
395
|
@profiles << p
|
359
396
|
end
|
360
397
|
|
361
|
-
def set_option(option, value=nil)
|
398
|
+
def set_option(option, value = nil)
|
362
399
|
@options[option] = value.nil? ? true : value
|
363
400
|
end
|
364
401
|
|
@@ -378,14 +415,18 @@ TEXT
|
|
378
415
|
@options[:duration] = false
|
379
416
|
end
|
380
417
|
|
418
|
+
def set_strict(setting, type = nil)
|
419
|
+
@options[:strict].set_strict(setting, type)
|
420
|
+
end
|
421
|
+
|
381
422
|
def stdout_formats
|
382
|
-
@options[:formats].select {|
|
423
|
+
@options[:formats].select { |_, _, output| output == @out_stream }
|
383
424
|
end
|
384
425
|
|
385
426
|
def extract_environment_variables
|
386
427
|
@args.delete_if do |arg|
|
387
428
|
if arg =~ /^(\w+)=(.*)$/
|
388
|
-
@options[:env_vars][
|
429
|
+
@options[:env_vars][Regexp.last_match(1)] = Regexp.last_match(2)
|
389
430
|
true
|
390
431
|
end
|
391
432
|
end
|
@@ -397,7 +438,7 @@ TEXT
|
|
397
438
|
|
398
439
|
def merge_profiles
|
399
440
|
if @disable_profile_loading
|
400
|
-
@out_stream.puts
|
441
|
+
@out_stream.puts 'Disabling profiles...'
|
401
442
|
return
|
402
443
|
end
|
403
444
|
|
@@ -414,8 +455,8 @@ TEXT
|
|
414
455
|
profile_args = profile_loader.args_from(profile)
|
415
456
|
profile_options = Options.parse(
|
416
457
|
profile_args, @out_stream, @error_stream,
|
417
|
-
:
|
418
|
-
:
|
458
|
+
skip_profile_information: true,
|
459
|
+
profile_loader: profile_loader
|
419
460
|
)
|
420
461
|
reverse_merge(profile_options)
|
421
462
|
end
|
@@ -423,19 +464,20 @@ TEXT
|
|
423
464
|
def default_profile_should_be_used?
|
424
465
|
@profiles.empty? &&
|
425
466
|
profile_loader.cucumber_yml_defined? &&
|
426
|
-
profile_loader.
|
467
|
+
profile_loader.profile?(@default_profile)
|
427
468
|
end
|
428
469
|
|
429
470
|
def profile_loader
|
430
471
|
@profile_loader ||= ProfileLoader.new
|
431
472
|
end
|
432
473
|
|
433
|
-
def reverse_merge(other_options)
|
474
|
+
def reverse_merge(other_options) # rubocop:disable Metrics/AbcSize
|
434
475
|
@options = other_options.options.merge(@options)
|
435
476
|
@options[:require] += other_options[:require]
|
436
477
|
@options[:excludes] += other_options[:excludes]
|
437
478
|
@options[:name_regexps] += other_options[:name_regexps]
|
438
479
|
@options[:tag_expressions] += other_options[:tag_expressions]
|
480
|
+
merge_tag_limits(@options[:tag_limits], other_options[:tag_limits])
|
439
481
|
@options[:env_vars] = other_options[:env_vars].merge(@options[:env_vars])
|
440
482
|
if @options[:paths].empty?
|
441
483
|
@options[:paths] = other_options[:paths]
|
@@ -445,7 +487,7 @@ TEXT
|
|
445
487
|
@options[:source] &= other_options[:source]
|
446
488
|
@options[:snippets] &= other_options[:snippets]
|
447
489
|
@options[:duration] &= other_options[:duration]
|
448
|
-
@options[:strict]
|
490
|
+
@options[:strict] = other_options[:strict].merge!(@options[:strict])
|
449
491
|
@options[:dry_run] |= other_options[:dry_run]
|
450
492
|
|
451
493
|
@profiles += other_options.profiles
|
@@ -458,9 +500,15 @@ TEXT
|
|
458
500
|
@options[:formats] = stdout_formats[0..0] + non_stdout_formats
|
459
501
|
end
|
460
502
|
|
503
|
+
@options[:retry] = other_options[:retry] if @options[:retry].zero?
|
504
|
+
|
461
505
|
self
|
462
506
|
end
|
463
507
|
|
508
|
+
def merge_tag_limits(option_limits, other_limits)
|
509
|
+
other_limits.each { |key, value| add_tag_limit(option_limits, key, value) }
|
510
|
+
end
|
511
|
+
|
464
512
|
def indicate_invalid_language_and_exit(lang)
|
465
513
|
@out_stream.write("Invalid language '#{lang}'. Available languages are:\n")
|
466
514
|
list_languages_and_exit
|
@@ -470,22 +518,25 @@ TEXT
|
|
470
518
|
require 'gherkin/dialect'
|
471
519
|
language = ::Gherkin::Dialect.for(lang)
|
472
520
|
data = Cucumber::MultilineArgument::DataTable.from(
|
473
|
-
[
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
521
|
+
[
|
522
|
+
['feature', to_keywords_string(language.feature_keywords)],
|
523
|
+
['background', to_keywords_string(language.background_keywords)],
|
524
|
+
['scenario', to_keywords_string(language.scenario_keywords)],
|
525
|
+
['scenario_outline', to_keywords_string(language.scenario_outline_keywords)],
|
526
|
+
['examples', to_keywords_string(language.examples_keywords)],
|
527
|
+
['given', to_keywords_string(language.given_keywords)],
|
528
|
+
['when', to_keywords_string(language.when_keywords)],
|
529
|
+
['then', to_keywords_string(language.then_keywords)],
|
530
|
+
['and', to_keywords_string(language.and_keywords)],
|
531
|
+
['but', to_keywords_string(language.but_keywords)],
|
532
|
+
['given (code)', to_code_keywords_string(language.given_keywords)],
|
533
|
+
['when (code)', to_code_keywords_string(language.when_keywords)],
|
534
|
+
['then (code)', to_code_keywords_string(language.then_keywords)],
|
535
|
+
['and (code)', to_code_keywords_string(language.and_keywords)],
|
536
|
+
['but (code)', to_code_keywords_string(language.but_keywords)]
|
537
|
+
]
|
538
|
+
)
|
539
|
+
@out_stream.write(data.to_s(color: false, prefixes: Hash.new('')))
|
489
540
|
Kernel.exit(0)
|
490
541
|
end
|
491
542
|
|
@@ -494,8 +545,9 @@ TEXT
|
|
494
545
|
data = Cucumber::MultilineArgument::DataTable.from(
|
495
546
|
::Gherkin::DIALECTS.keys.map do |key|
|
496
547
|
[key, ::Gherkin::DIALECTS[key].fetch('name'), ::Gherkin::DIALECTS[key].fetch('native')]
|
497
|
-
end
|
498
|
-
|
548
|
+
end
|
549
|
+
)
|
550
|
+
@out_stream.write(data.to_s(color: false, prefixes: Hash.new('')))
|
499
551
|
Kernel.exit(0)
|
500
552
|
end
|
501
553
|
|
@@ -509,22 +561,22 @@ TEXT
|
|
509
561
|
|
510
562
|
def default_options
|
511
563
|
{
|
512
|
-
:
|
513
|
-
:
|
514
|
-
:
|
515
|
-
:
|
516
|
-
:
|
517
|
-
:
|
518
|
-
:
|
519
|
-
:
|
520
|
-
:
|
521
|
-
:
|
522
|
-
:
|
523
|
-
:
|
524
|
-
:
|
564
|
+
strict: Cucumber::Core::Test::Result::StrictConfiguration.new,
|
565
|
+
require: [],
|
566
|
+
dry_run: false,
|
567
|
+
formats: [],
|
568
|
+
excludes: [],
|
569
|
+
tag_expressions: [],
|
570
|
+
tag_limits: {},
|
571
|
+
name_regexps: [],
|
572
|
+
env_vars: {},
|
573
|
+
diff_enabled: true,
|
574
|
+
snippets: true,
|
575
|
+
source: true,
|
576
|
+
duration: true,
|
577
|
+
retry: 0
|
525
578
|
}
|
526
579
|
end
|
527
580
|
end
|
528
|
-
|
529
581
|
end
|
530
582
|
end
|