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
data/lib/autotest/discover.rb
CHANGED
data/lib/cucumber.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'yaml'
|
3
4
|
require 'cucumber/encoding'
|
4
5
|
require 'cucumber/platform'
|
@@ -9,7 +10,7 @@ require 'cucumber/term/ansicolor'
|
|
9
10
|
|
10
11
|
module Cucumber
|
11
12
|
class << self
|
12
|
-
attr_accessor :wants_to_quit
|
13
|
+
attr_accessor :wants_to_quit, :use_legacy_autoloader
|
13
14
|
|
14
15
|
def logger
|
15
16
|
return @log if @log
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'logger'
|
3
4
|
require 'cucumber/cli/options'
|
4
5
|
require 'cucumber/cli/rerun_file'
|
@@ -19,14 +20,14 @@ module Cucumber
|
|
19
20
|
def initialize(out_stream = STDOUT, error_stream = STDERR)
|
20
21
|
@out_stream = out_stream
|
21
22
|
@error_stream = error_stream
|
22
|
-
@options = Options.new(@out_stream, @error_stream, :
|
23
|
+
@options = Options.new(@out_stream, @error_stream, default_profile: 'default')
|
23
24
|
end
|
24
25
|
|
25
26
|
def parse!(args)
|
26
27
|
@args = args
|
27
28
|
@options.parse!(args)
|
28
29
|
arrange_formats
|
29
|
-
raise("You can't use both --strict and --wip") if strict? && wip?
|
30
|
+
raise("You can't use both --strict and --wip") if strict.strict? && wip?
|
30
31
|
set_environment_variables
|
31
32
|
end
|
32
33
|
|
@@ -42,7 +43,7 @@ module Cucumber
|
|
42
43
|
Integer(@options[:seed] || rand(0xFFFF))
|
43
44
|
end
|
44
45
|
|
45
|
-
def strict
|
46
|
+
def strict
|
46
47
|
@options[:strict]
|
47
48
|
end
|
48
49
|
|
@@ -63,7 +64,7 @@ module Cucumber
|
|
63
64
|
end
|
64
65
|
|
65
66
|
def fail_fast?
|
66
|
-
|
67
|
+
@options[:fail_fast]
|
67
68
|
end
|
68
69
|
|
69
70
|
def retry_attempts
|
@@ -78,7 +79,7 @@ module Cucumber
|
|
78
79
|
logger = Logger.new(@out_stream)
|
79
80
|
logger.formatter = LogFormatter.new
|
80
81
|
logger.level = Logger::INFO
|
81
|
-
logger.level = Logger::DEBUG if
|
82
|
+
logger.level = Logger::DEBUG if verbose?
|
82
83
|
logger
|
83
84
|
end
|
84
85
|
|
@@ -107,7 +108,7 @@ module Cucumber
|
|
107
108
|
end
|
108
109
|
|
109
110
|
def to_hash
|
110
|
-
Hash(@options).merge(out_stream: @out_stream, error_stream: @error_stream)
|
111
|
+
Hash(@options).merge(out_stream: @out_stream, error_stream: @error_stream, seed: seed)
|
111
112
|
end
|
112
113
|
|
113
114
|
private
|
@@ -130,7 +131,7 @@ module Cucumber
|
|
130
131
|
f[2] == @out_stream ? -1 : 1
|
131
132
|
end
|
132
133
|
@options[:formats].uniq!
|
133
|
-
@options.check_formatter_stream_conflicts
|
134
|
+
@options.check_formatter_stream_conflicts
|
134
135
|
end
|
135
136
|
end
|
136
137
|
end
|
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)
|
@@ -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,33 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/cli/profile_loader'
|
3
4
|
require 'cucumber/formatter/ansicolor'
|
4
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
|
-
|
25
|
+
'json' => ['Cucumber::Formatter::Json', '[DEPRECATED] Prints the feature as JSON'],
|
26
|
+
'message' => ['Cucumber::Formatter::Message', 'Outputs protobuf messages'],
|
27
|
+
'html' => ['Cucumber::Formatter::HTML', 'Outputs HTML report'],
|
28
|
+
'summary' => ['Cucumber::Formatter::Summary', 'Summary output of feature and scenarios']
|
29
|
+
}.freeze
|
30
|
+
max = BUILTIN_FORMATS.keys.map(&:length).max
|
31
|
+
FORMAT_HELP_MSG = [
|
32
|
+
'Use --format rerun --out rerun.txt to write out failing',
|
31
33
|
'features. You can rerun them with cucumber @rerun.txt.',
|
32
34
|
'FORMAT can also be the fully qualified class name of',
|
33
35
|
"your own custom formatter. If the class isn't loaded,",
|
@@ -37,23 +39,24 @@ module Cucumber
|
|
37
39
|
'foo/bar_zap.rb. You can place the file with this relative',
|
38
40
|
'path underneath your features/support directory or anywhere',
|
39
41
|
"on Ruby's LOAD_PATH, for example in a Ruby gem."
|
40
|
-
]
|
42
|
+
].freeze
|
41
43
|
|
42
44
|
FORMAT_HELP = (BUILTIN_FORMATS.keys.sort.map do |key|
|
43
45
|
" #{key}#{' ' * (max - key.length)} : #{BUILTIN_FORMATS[key][1]}"
|
44
46
|
end) + FORMAT_HELP_MSG
|
45
|
-
PROFILE_SHORT_FLAG = '-p'
|
46
|
-
NO_PROFILE_SHORT_FLAG = '-P'
|
47
|
-
PROFILE_LONG_FLAG = '--profile'
|
48
|
-
NO_PROFILE_LONG_FLAG = '--no-profile'
|
49
|
-
FAIL_FAST_FLAG = '--fail-fast'
|
50
|
-
RETRY_FLAG = '--retry'
|
51
|
-
OPTIONS_WITH_ARGS = [
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
47
|
+
PROFILE_SHORT_FLAG = '-p'.freeze
|
48
|
+
NO_PROFILE_SHORT_FLAG = '-P'.freeze
|
49
|
+
PROFILE_LONG_FLAG = '--profile'.freeze
|
50
|
+
NO_PROFILE_LONG_FLAG = '--no-profile'.freeze
|
51
|
+
FAIL_FAST_FLAG = '--fail-fast'.freeze
|
52
|
+
RETRY_FLAG = '--retry'.freeze
|
53
|
+
OPTIONS_WITH_ARGS = [
|
54
|
+
'-r', '--require', '--i18n-keywords', '-f', '--format', '-o',
|
55
|
+
'--out', '-t', '--tags', '-n', '--name', '-e', '--exclude',
|
56
|
+
PROFILE_SHORT_FLAG, PROFILE_LONG_FLAG, RETRY_FLAG, '-l',
|
57
|
+
'--lines', '--port', '-I', '--snippet-type'
|
58
|
+
].freeze
|
59
|
+
ORDER_TYPES = %w[defined random].freeze
|
57
60
|
TAG_LIMIT_MATCHER = /(?<tag_name>\@\w+):(?<limit>\d+)/x
|
58
61
|
|
59
62
|
def self.parse(args, out_stream, error_stream, options = {})
|
@@ -82,61 +85,60 @@ module Cucumber
|
|
82
85
|
@options[key] = value
|
83
86
|
end
|
84
87
|
|
85
|
-
def parse!(args) # rubocop:disable Metrics/AbcSize
|
88
|
+
def parse!(args) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
86
89
|
@args = args
|
87
90
|
@expanded_args = @args.dup
|
88
91
|
|
89
92
|
@args.extend(::OptionParser::Arguable)
|
90
93
|
|
91
|
-
@args.options do |opts|
|
94
|
+
@args.options do |opts| # rubocop:disable Metrics/BlockLength
|
92
95
|
opts.banner = banner
|
93
|
-
opts.on('-r LIBRARY|DIR', '--require LIBRARY|DIR', *require_files_msg) {|lib| require_files(lib) }
|
96
|
+
opts.on('-r LIBRARY|DIR', '--require LIBRARY|DIR', *require_files_msg) { |lib| require_files(lib) }
|
94
97
|
|
95
|
-
if
|
96
|
-
opts.on('-j DIR', '--jars DIR', 'Load all the jars under DIR') {|jars| load_jars(jars) }
|
97
|
-
end
|
98
|
+
opts.on('-j DIR', '--jars DIR', 'Load all the jars under DIR') { |jars| load_jars(jars) } if Cucumber::JRUBY
|
98
99
|
|
99
|
-
opts.on("#{RETRY_FLAG} ATTEMPTS", *retry_msg) {|v| set_option :retry, v.to_i }
|
100
|
+
opts.on("#{RETRY_FLAG} ATTEMPTS", *retry_msg) { |v| set_option :retry, v.to_i }
|
100
101
|
opts.on('--i18n-languages', *i18n_languages_msg) { list_languages_and_exit }
|
101
|
-
opts.on('--i18n-keywords LANG', *i18n_keywords_msg) {|lang|
|
102
|
+
opts.on('--i18n-keywords LANG', *i18n_keywords_msg) { |lang| language lang }
|
102
103
|
opts.on(FAIL_FAST_FLAG, 'Exit immediately following the first failing scenario') { set_option :fail_fast }
|
103
104
|
opts.on('-f FORMAT', '--format FORMAT', *format_msg, *FORMAT_HELP) do |v|
|
104
105
|
add_option :formats, [*parse_formats(v), @out_stream]
|
105
106
|
end
|
106
|
-
opts.on('--init', *init_msg) {|
|
107
|
-
opts.on('-o', '--out [FILE|DIR]', *out_msg) {|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) {|
|
113
|
-
opts.on('-c', '--[no-]color', *color_msg) {|v|
|
107
|
+
opts.on('--init', *init_msg) { |_v| initialize_project }
|
108
|
+
opts.on('-o', '--out [FILE|DIR|URL]', *out_msg) { |v| out_stream v }
|
109
|
+
opts.on('-t TAG_EXPRESSION', '--tags TAG_EXPRESSION', *tags_msg) { |v| add_tag v }
|
110
|
+
opts.on('-n NAME', '--name NAME', *name_msg) { |v| add_option :name_regexps, /#{v}/ }
|
111
|
+
opts.on('-e', '--exclude PATTERN', *exclude_msg) { |v| add_option :excludes, Regexp.new(v) }
|
112
|
+
opts.on(PROFILE_SHORT_FLAG, "#{PROFILE_LONG_FLAG} PROFILE", *profile_short_flag_msg) { |v| add_profile v }
|
113
|
+
opts.on(NO_PROFILE_SHORT_FLAG, NO_PROFILE_LONG_FLAG, *no_profile_short_flag_msg) { |_v| disable_profile_loading }
|
114
|
+
opts.on('-c', '--[no-]color', *color_msg) { |v| color v }
|
114
115
|
opts.on('-d', '--dry-run', *dry_run_msg) { set_dry_run_and_duration }
|
115
116
|
opts.on('-m', '--no-multiline', "Don't print multiline strings and tables under steps.") { set_option :no_multiline }
|
116
117
|
opts.on('-s', '--no-source', "Don't print the file and line of the step definition with the steps.") { set_option :source, false }
|
117
118
|
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('-I', '--snippet-type TYPE', *snippet_type_msg) { |v| set_option :snippet_type, v.to_sym }
|
119
120
|
opts.on('-q', '--quiet', 'Alias for --no-snippets --no-source.') { shut_up }
|
120
121
|
opts.on('--no-duration', "Don't print the duration at the end of the summary") { set_option :duration, false }
|
121
122
|
opts.on('-b', '--backtrace', 'Show full backtrace for all errors.') { Cucumber.use_full_backtrace = true }
|
122
|
-
opts.on('-S', '--strict',
|
123
|
+
opts.on('-S', '--[no-]strict', *strict_msg) { |setting| set_strict(setting) }
|
124
|
+
opts.on('--[no-]strict-undefined', 'Fail if there are any undefined results.') { |setting| set_strict(setting, :undefined) }
|
125
|
+
opts.on('--[no-]strict-pending', 'Fail if there are any pending results.') { |setting| set_strict(setting, :pending) }
|
126
|
+
opts.on('--[no-]strict-flaky', 'Fail if there are any flaky results.') { |setting| set_strict(setting, :flaky) }
|
123
127
|
opts.on('-w', '--wip', 'Fail if there are any passing scenarios.') { set_option :wip }
|
124
128
|
opts.on('-v', '--verbose', 'Show the files and features loaded.') { set_option :verbose }
|
125
129
|
opts.on('-g', '--guess', 'Guess best match for Ambiguous steps.') { set_option :guess }
|
126
|
-
opts.on('-l', '--lines LINES', *lines_msg) {|lines| set_option :lines, lines }
|
130
|
+
opts.on('-l', '--lines LINES', *lines_msg) { |lines| set_option :lines, lines }
|
127
131
|
opts.on('-x', '--expand', 'Expand Scenario Outline Tables in output.') { set_option :expand }
|
128
132
|
|
129
133
|
opts.on('--order TYPE[:SEED]', 'Run examples in the specified order. Available types:',
|
130
|
-
|
134
|
+
*<<-TEXT.split("\n")) do |order|
|
131
135
|
[defined] Run scenarios in the order they were defined (default).
|
132
136
|
[random] Shuffle scenarios before running.
|
133
137
|
Specify SEED to reproduce the shuffling from a previous run.
|
134
138
|
e.g. --order random:5738
|
135
|
-
TEXT
|
139
|
+
TEXT
|
136
140
|
@options[:order], @options[:seed] = *order.split(':')
|
137
|
-
unless ORDER_TYPES.include?(@options[:order])
|
138
|
-
fail "'#{@options[:order]}' is not a recognised order type. Please use one of #{ORDER_TYPES.join(", ")}."
|
139
|
-
end
|
141
|
+
raise "'#{@options[:order]}' is not a recognised order type. Please use one of #{ORDER_TYPES.join(', ')}." unless ORDER_TYPES.include?(@options[:order])
|
140
142
|
end
|
141
143
|
|
142
144
|
opts.on_tail('--version', 'Show version.') { exit_ok(Cucumber::VERSION) }
|
@@ -146,9 +148,9 @@ TEXT
|
|
146
148
|
@args.map! { |a| "#{a}:#{@options[:lines]}" } if @options[:lines]
|
147
149
|
|
148
150
|
extract_environment_variables
|
149
|
-
@options[:paths] = @args.dup #whatver is left over
|
151
|
+
@options[:paths] = @args.dup # whatver is left over
|
150
152
|
|
151
|
-
check_formatter_stream_conflicts
|
153
|
+
check_formatter_stream_conflicts
|
152
154
|
|
153
155
|
merge_profiles
|
154
156
|
|
@@ -163,7 +165,7 @@ TEXT
|
|
163
165
|
@options[:filters] ||= []
|
164
166
|
end
|
165
167
|
|
166
|
-
def check_formatter_stream_conflicts
|
168
|
+
def check_formatter_stream_conflicts
|
167
169
|
streams = @options[:formats].uniq.map { |(_, _, stream)| stream }
|
168
170
|
return if streams == streams.uniq
|
169
171
|
raise 'All but one formatter must use --out, only one can print to each stream (or STDOUT)'
|
@@ -188,18 +190,15 @@ TEXT
|
|
188
190
|
end
|
189
191
|
|
190
192
|
def dry_run_msg
|
191
|
-
[
|
192
|
-
'Invokes formatters without executing the steps.',
|
193
|
-
'This also omits the loading of your support/env.rb file if it exists.'
|
194
|
-
]
|
193
|
+
['Invokes formatters without executing the steps.']
|
195
194
|
end
|
196
195
|
|
197
196
|
def exclude_msg
|
198
|
-
[
|
197
|
+
["Don't run feature files or require ruby files matching PATTERN"]
|
199
198
|
end
|
200
199
|
|
201
200
|
def format_msg
|
202
|
-
[
|
201
|
+
['How to format features (Default: pretty). Available formats:']
|
203
202
|
end
|
204
203
|
|
205
204
|
def i18n_languages_msg
|
@@ -211,7 +210,7 @@ TEXT
|
|
211
210
|
def i18n_keywords_msg
|
212
211
|
[
|
213
212
|
'List keywords for in a particular language',
|
214
|
-
%
|
213
|
+
%(Run with "--i18n help" to see all languages)
|
215
214
|
]
|
216
215
|
end
|
217
216
|
|
@@ -223,7 +222,7 @@ TEXT
|
|
223
222
|
end
|
224
223
|
|
225
224
|
def lines_msg
|
226
|
-
[
|
225
|
+
['Run given line numbers. Equivalent to FILE:LINE syntax']
|
227
226
|
end
|
228
227
|
|
229
228
|
def no_profile_short_flag_msg
|
@@ -243,7 +242,7 @@ TEXT
|
|
243
242
|
end
|
244
243
|
|
245
244
|
def retry_msg
|
246
|
-
[
|
245
|
+
['Specify the number of times to retry failing tests (default: 0)']
|
247
246
|
end
|
248
247
|
|
249
248
|
def name_msg
|
@@ -254,13 +253,20 @@ TEXT
|
|
254
253
|
]
|
255
254
|
end
|
256
255
|
|
256
|
+
def strict_msg
|
257
|
+
[
|
258
|
+
'Fail if there are any strict affected results ',
|
259
|
+
'(that is undefined, pending or flaky results).'
|
260
|
+
]
|
261
|
+
end
|
262
|
+
|
257
263
|
def parse_formats(v)
|
258
264
|
formatter, *formatter_options = v.split(',')
|
259
265
|
options_hash = Hash[formatter_options.map { |s| s.split('=') }]
|
260
266
|
[formatter, options_hash]
|
261
267
|
end
|
262
268
|
|
263
|
-
def
|
269
|
+
def out_stream(v)
|
264
270
|
@options[:formats] << ['pretty', {}, nil] if @options[:formats].empty?
|
265
271
|
@options[:formats][-1][2] = v
|
266
272
|
end
|
@@ -290,10 +296,15 @@ TEXT
|
|
290
296
|
|
291
297
|
def out_msg
|
292
298
|
[
|
293
|
-
'Write output to a file/directory instead of STDOUT. This option',
|
299
|
+
'Write output to a file/directory/URL instead of STDOUT. This option',
|
294
300
|
'applies to the previously specified --format, or the',
|
295
301
|
'default format if no format is specified. Check the specific',
|
296
|
-
"formatter's docs to see whether to pass a file or
|
302
|
+
"formatter's docs to see whether to pass a file, dir or URL.",
|
303
|
+
"\n",
|
304
|
+
'When using a URL, the output of the formatter will be sent as the HTTP request body.',
|
305
|
+
'HTTP headers and request method can be set with http- prefixed query parameters,',
|
306
|
+
'for example ?http-content-type=application/json&http-method=PUT.',
|
307
|
+
'All http- prefixed query parameters will be removed from the sent query parameters.'
|
297
308
|
]
|
298
309
|
end
|
299
310
|
|
@@ -301,11 +312,13 @@ TEXT
|
|
301
312
|
[
|
302
313
|
'Require files before executing the features. If this',
|
303
314
|
'option is not specified, all *.rb files that are',
|
304
|
-
'siblings or below the features will be loaded auto-',
|
315
|
+
'siblings of or below the features will be loaded auto-',
|
305
316
|
'matically. Automatic loading is disabled when this',
|
306
|
-
'option is specified
|
307
|
-
'Files
|
308
|
-
'loaded first
|
317
|
+
'option is specified; all loading becomes explicit.',
|
318
|
+
'Files in directories named "support" are still always',
|
319
|
+
'loaded first when their parent directories are',
|
320
|
+
'required or if the "support" directoires themselves are',
|
321
|
+
'explicitly required.',
|
309
322
|
'This option can be specified multiple times.'
|
310
323
|
]
|
311
324
|
end
|
@@ -318,7 +331,8 @@ TEXT
|
|
318
331
|
end
|
319
332
|
|
320
333
|
def banner
|
321
|
-
[
|
334
|
+
[
|
335
|
+
'Usage: cucumber [options] [ [FILE|DIR|URL][:LINE[:LINE]*] ]+', '',
|
322
336
|
'Examples:',
|
323
337
|
'cucumber examples/i18n/en/features',
|
324
338
|
'cucumber @rerun.txt (See --format rerun)',
|
@@ -335,13 +349,13 @@ TEXT
|
|
335
349
|
end
|
336
350
|
|
337
351
|
def require_jars(jars)
|
338
|
-
Dir["#{jars}/**/*.jar"].each {|jar| require jar}
|
352
|
+
Dir["#{jars}/**/*.jar"].each { |jar| require jar }
|
339
353
|
end
|
340
354
|
|
341
|
-
def
|
355
|
+
def language(lang)
|
342
356
|
require 'gherkin/dialect'
|
343
357
|
|
344
|
-
return indicate_invalid_language_and_exit(lang) unless ::Gherkin::DIALECTS.
|
358
|
+
return indicate_invalid_language_and_exit(lang) unless ::Gherkin::DIALECTS.key?(lang)
|
345
359
|
list_keywords_and_exit(lang)
|
346
360
|
end
|
347
361
|
|
@@ -350,7 +364,7 @@ TEXT
|
|
350
364
|
end
|
351
365
|
|
352
366
|
def non_stdout_formats
|
353
|
-
@options[:formats].
|
367
|
+
@options[:formats].reject { |_, _, output| output == @out_stream }
|
354
368
|
end
|
355
369
|
|
356
370
|
def add_option(option, value)
|
@@ -358,8 +372,8 @@ TEXT
|
|
358
372
|
end
|
359
373
|
|
360
374
|
def add_tag(value)
|
361
|
-
|
362
|
-
|
375
|
+
raise("Found tags option '#{value}'. '~@tag' is no longer supported, use 'not @tag' instead.") if value.include?('~')
|
376
|
+
raise("Found tags option '#{value}'. '@tag1,@tag2' is no longer supported, use '@tag or @tag2' instead.") if value.include?(',')
|
363
377
|
@options[:tag_expressions] << value.gsub(/(@\w+)(:\d+)?/, '\1')
|
364
378
|
add_tag_limits(value)
|
365
379
|
end
|
@@ -371,13 +385,11 @@ TEXT
|
|
371
385
|
end
|
372
386
|
|
373
387
|
def add_tag_limit(tag_limits, tag_name, limit)
|
374
|
-
if tag_limits[tag_name] && tag_limits[tag_name] != limit
|
375
|
-
raise "Inconsistent tag limits for #{tag_name}: #{tag_limits[tag_name]} and #{limit}"
|
376
|
-
end
|
388
|
+
raise "Inconsistent tag limits for #{tag_name}: #{tag_limits[tag_name]} and #{limit}" if tag_limits[tag_name] && tag_limits[tag_name] != limit
|
377
389
|
tag_limits[tag_name] = limit
|
378
390
|
end
|
379
391
|
|
380
|
-
def
|
392
|
+
def color(color)
|
381
393
|
Cucumber::Term::ANSIColor.coloring = color
|
382
394
|
end
|
383
395
|
|
@@ -389,7 +401,7 @@ TEXT
|
|
389
401
|
@profiles << p
|
390
402
|
end
|
391
403
|
|
392
|
-
def set_option(option, value=nil)
|
404
|
+
def set_option(option, value = nil)
|
393
405
|
@options[option] = value.nil? ? true : value
|
394
406
|
end
|
395
407
|
|
@@ -409,6 +421,10 @@ TEXT
|
|
409
421
|
@options[:duration] = false
|
410
422
|
end
|
411
423
|
|
424
|
+
def set_strict(setting, type = nil)
|
425
|
+
@options[:strict].set_strict(setting, type)
|
426
|
+
end
|
427
|
+
|
412
428
|
def stdout_formats
|
413
429
|
@options[:formats].select { |_, _, output| output == @out_stream }
|
414
430
|
end
|
@@ -416,7 +432,7 @@ TEXT
|
|
416
432
|
def extract_environment_variables
|
417
433
|
@args.delete_if do |arg|
|
418
434
|
if arg =~ /^(\w+)=(.*)$/
|
419
|
-
@options[:env_vars][
|
435
|
+
@options[:env_vars][Regexp.last_match(1)] = Regexp.last_match(2)
|
420
436
|
true
|
421
437
|
end
|
422
438
|
end
|
@@ -445,8 +461,8 @@ TEXT
|
|
445
461
|
profile_args = profile_loader.args_from(profile)
|
446
462
|
profile_options = Options.parse(
|
447
463
|
profile_args, @out_stream, @error_stream,
|
448
|
-
:
|
449
|
-
:
|
464
|
+
skip_profile_information: true,
|
465
|
+
profile_loader: profile_loader
|
450
466
|
)
|
451
467
|
reverse_merge(profile_options)
|
452
468
|
end
|
@@ -454,14 +470,14 @@ TEXT
|
|
454
470
|
def default_profile_should_be_used?
|
455
471
|
@profiles.empty? &&
|
456
472
|
profile_loader.cucumber_yml_defined? &&
|
457
|
-
profile_loader.
|
473
|
+
profile_loader.profile?(@default_profile)
|
458
474
|
end
|
459
475
|
|
460
476
|
def profile_loader
|
461
477
|
@profile_loader ||= ProfileLoader.new
|
462
478
|
end
|
463
479
|
|
464
|
-
def reverse_merge(other_options)
|
480
|
+
def reverse_merge(other_options) # rubocop:disable Metrics/AbcSize
|
465
481
|
@options = other_options.options.merge(@options)
|
466
482
|
@options[:require] += other_options[:require]
|
467
483
|
@options[:excludes] += other_options[:excludes]
|
@@ -477,7 +493,7 @@ TEXT
|
|
477
493
|
@options[:source] &= other_options[:source]
|
478
494
|
@options[:snippets] &= other_options[:snippets]
|
479
495
|
@options[:duration] &= other_options[:duration]
|
480
|
-
@options[:strict]
|
496
|
+
@options[:strict] = other_options[:strict].merge!(@options[:strict])
|
481
497
|
@options[:dry_run] |= other_options[:dry_run]
|
482
498
|
|
483
499
|
@profiles += other_options.profiles
|
@@ -490,6 +506,8 @@ TEXT
|
|
490
506
|
@options[:formats] = stdout_formats[0..0] + non_stdout_formats
|
491
507
|
end
|
492
508
|
|
509
|
+
@options[:retry] = other_options[:retry] if @options[:retry].zero?
|
510
|
+
|
493
511
|
self
|
494
512
|
end
|
495
513
|
|
@@ -506,22 +524,25 @@ TEXT
|
|
506
524
|
require 'gherkin/dialect'
|
507
525
|
language = ::Gherkin::Dialect.for(lang)
|
508
526
|
data = Cucumber::MultilineArgument::DataTable.from(
|
509
|
-
[
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
527
|
+
[
|
528
|
+
['feature', to_keywords_string(language.feature_keywords)],
|
529
|
+
['background', to_keywords_string(language.background_keywords)],
|
530
|
+
['scenario', to_keywords_string(language.scenario_keywords)],
|
531
|
+
['scenario_outline', to_keywords_string(language.scenario_outline_keywords)],
|
532
|
+
['examples', to_keywords_string(language.examples_keywords)],
|
533
|
+
['given', to_keywords_string(language.given_keywords)],
|
534
|
+
['when', to_keywords_string(language.when_keywords)],
|
535
|
+
['then', to_keywords_string(language.then_keywords)],
|
536
|
+
['and', to_keywords_string(language.and_keywords)],
|
537
|
+
['but', to_keywords_string(language.but_keywords)],
|
538
|
+
['given (code)', to_code_keywords_string(language.given_keywords)],
|
539
|
+
['when (code)', to_code_keywords_string(language.when_keywords)],
|
540
|
+
['then (code)', to_code_keywords_string(language.then_keywords)],
|
541
|
+
['and (code)', to_code_keywords_string(language.and_keywords)],
|
542
|
+
['but (code)', to_code_keywords_string(language.but_keywords)]
|
543
|
+
]
|
544
|
+
)
|
545
|
+
@out_stream.write(data.to_s(color: false, prefixes: Hash.new('')))
|
525
546
|
Kernel.exit(0)
|
526
547
|
end
|
527
548
|
|
@@ -530,8 +551,9 @@ TEXT
|
|
530
551
|
data = Cucumber::MultilineArgument::DataTable.from(
|
531
552
|
::Gherkin::DIALECTS.keys.map do |key|
|
532
553
|
[key, ::Gherkin::DIALECTS[key].fetch('name'), ::Gherkin::DIALECTS[key].fetch('native')]
|
533
|
-
end
|
534
|
-
|
554
|
+
end
|
555
|
+
)
|
556
|
+
@out_stream.write(data.to_s(color: false, prefixes: Hash.new('')))
|
535
557
|
Kernel.exit(0)
|
536
558
|
end
|
537
559
|
|
@@ -545,23 +567,22 @@ TEXT
|
|
545
567
|
|
546
568
|
def default_options
|
547
569
|
{
|
548
|
-
:
|
549
|
-
:
|
550
|
-
:
|
551
|
-
:
|
552
|
-
:
|
553
|
-
:
|
554
|
-
:
|
555
|
-
:
|
556
|
-
:
|
557
|
-
:
|
558
|
-
:
|
559
|
-
:
|
560
|
-
:
|
561
|
-
:
|
570
|
+
strict: Cucumber::Core::Test::Result::StrictConfiguration.new,
|
571
|
+
require: [],
|
572
|
+
dry_run: false,
|
573
|
+
formats: [],
|
574
|
+
excludes: [],
|
575
|
+
tag_expressions: [],
|
576
|
+
tag_limits: {},
|
577
|
+
name_regexps: [],
|
578
|
+
env_vars: {},
|
579
|
+
diff_enabled: true,
|
580
|
+
snippets: true,
|
581
|
+
source: true,
|
582
|
+
duration: true,
|
583
|
+
retry: 0
|
562
584
|
}
|
563
585
|
end
|
564
586
|
end
|
565
|
-
|
566
587
|
end
|
567
588
|
end
|