cucumber 3.0.0.pre.1 → 3.0.0.pre.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.cucumberproignore +6 -0
- data/.rubocop.yml +13 -0
- data/.rubocop_todo.yml +1075 -0
- data/.travis.yml +42 -8
- data/CONTRIBUTING.md +8 -1
- data/Gemfile +16 -10
- data/History.md +96 -36
- data/README.md +12 -3
- data/Rakefile +12 -2
- data/appveyor.yml +26 -0
- data/cucumber.gemspec +15 -10
- data/cucumber.yml +9 -10
- data/examples/i18n/Rakefile +1 -1
- data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +2 -2
- data/examples/i18n/ar/lib/calculator.rb +2 -2
- data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +6 -6
- data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/ca/lib/calculadora.rb +2 -2
- data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/cs/lib/calculator.rb +3 -3
- data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +4 -4
- data/examples/i18n/da/lib/lommeregner.rb +2 -2
- data/examples/i18n/de/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/de/lib/calculator.rb +2 -2
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/el/lib/calculator.rb +2 -2
- data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +4 -4
- data/examples/i18n/en-lol/lib/basket.rb +2 -2
- data/examples/i18n/en-lol/lib/belly.rb +2 -2
- data/examples/i18n/en/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/en/lib/calculator.rb +2 -2
- data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/eo/lib/calculator.rb +2 -2
- data/examples/i18n/es/features/step_definitions/calculador_steps.rb +5 -5
- data/examples/i18n/es/lib/calculador.rb +2 -2
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +4 -4
- data/examples/i18n/et/lib/kalkulaator.rb +3 -3
- data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +3 -3
- data/examples/i18n/fi/lib/laskin.rb +1 -1
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +8 -8
- data/examples/i18n/fr/features/support/env.rb +1 -1
- data/examples/i18n/fr/lib/calculatrice.rb +2 -2
- data/examples/i18n/he/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/he/lib/calculator.rb +1 -1
- data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +3 -3
- data/examples/i18n/hi/lib/calculator.rb +1 -1
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +4 -4
- data/examples/i18n/ht/lib/kalkilatris.rb +2 -2
- data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/hu/lib/calculator.rb +1 -1
- data/examples/i18n/id/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/id/lib/calculator.rb +2 -2
- data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +4 -4
- data/examples/i18n/it/lib/calcolatrice.rb +3 -3
- data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +3 -3
- data/examples/i18n/ja/features/support/env.rb +1 -1
- data/examples/i18n/ja/lib/calculator.rb +2 -2
- data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/ko/lib/calculator.rb +2 -2
- data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/lt/lib/calculator.rb +2 -2
- data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/lv/lib/calculator.rb +2 -2
- data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +3 -3
- data/examples/i18n/no/features/support/env.rb +1 -1
- data/examples/i18n/no/lib/kalkulator.rb +2 -2
- data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/pl/lib/calculator.rb +2 -2
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +3 -3
- data/examples/i18n/pt/features/support/env.rb +1 -1
- data/examples/i18n/pt/lib/calculadora.rb +1 -1
- data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/ro/lib/calculator.rb +1 -1
- data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/sk/lib/calculator.rb +2 -2
- data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +3 -3
- data/examples/i18n/sr-Cyrl/features/support/env.rb +1 -1
- data/examples/i18n/sr-Cyrl/lib/calculator.rb +2 -2
- data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/sr-Latn/lib/calculator.rb +2 -2
- data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +3 -3
- data/examples/i18n/sv/lib/kalkulator.rb +2 -2
- data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +4 -4
- data/examples/i18n/tr/lib/hesap_makinesi.rb +2 -2
- data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/zh-CN/lib/calculator.rb +2 -2
- data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/zh-TW/lib/calculator.rb +2 -2
- data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +3 -3
- data/examples/sinatra/features/step_definitions/add_steps.rb +4 -4
- data/examples/tcl/features/step_definitions/fib_steps.rb +2 -2
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +4 -4
- data/examples/watir/features/step_definitions/search_steps.rb +3 -3
- data/examples/watir/features/support/screenshots.rb +5 -5
- data/features/docs/api/list_step_defs_as_json.feature +21 -7
- data/features/docs/api/listen_for_events.feature +1 -1
- data/features/docs/api/run_cli_main_with_existing_runtime.feature +1 -0
- data/features/docs/cli/dry_run.feature +3 -0
- data/features/docs/cli/execute_with_tag_filter.feature +4 -4
- data/features/docs/cli/fail_fast.feature +2 -0
- data/features/docs/{gherkin/language_help.feature → cli/i18n.feature} +6 -6
- data/features/docs/cli/randomize.feature +2 -2
- data/features/docs/cli/retry_failing_tests.feature +28 -3
- data/features/docs/cli/run_scenarios_matching_name.feature +1 -0
- data/features/docs/cli/specifying_multiple_formatters.feature +3 -0
- data/features/docs/cli/strict_mode.feature +6 -0
- data/features/docs/defining_steps/nested_steps.feature +5 -1
- data/features/docs/defining_steps/nested_steps_i18n.feature +1 -0
- data/features/docs/defining_steps/nested_steps_with_second_arg.feature +2 -0
- data/features/docs/defining_steps/printing_messages.feature +1 -1
- data/features/docs/defining_steps/skip_scenario.feature +1 -0
- data/features/docs/defining_steps/snippets.feature +18 -18
- data/features/docs/events/gherkin_source_read_event.feature +43 -0
- data/features/docs/events/step_activated_event.feature +36 -0
- data/features/docs/events/step_definition_registered_event.feature +29 -0
- data/features/docs/events/test_case_finished_event.feature +35 -0
- data/features/docs/events/test_case_starting_event.feature +54 -0
- data/features/docs/events/test_run_finished_event.feature +40 -0
- data/features/docs/events/test_run_starting_event.feature +41 -0
- data/features/docs/events/test_step_finished_event.feature +47 -0
- data/features/docs/events/test_step_starting_event.feature +43 -0
- data/features/docs/exception_in_after_hook.feature +3 -2
- data/features/docs/exception_in_after_step_hook.feature +2 -0
- data/features/docs/exception_in_around_hook.feature +2 -0
- data/features/docs/exception_in_before_hook.feature +3 -1
- data/features/docs/extending_cucumber/custom_formatter.feature +21 -1
- data/features/docs/formatters/json_formatter.feature +4 -4
- data/features/docs/formatters/junit_formatter.feature +7 -6
- data/features/docs/formatters/pretty_formatter.feature +1 -0
- data/features/docs/formatters/progress_formatter.feature +1 -0
- data/features/docs/formatters/rerun_formatter.feature +2 -0
- data/features/docs/formatters/summary_formatter.feature +1 -0
- data/features/docs/formatters/usage_formatter.feature +3 -0
- data/features/docs/getting_started.feature +2 -1
- data/features/docs/gherkin/background.feature +5 -5
- data/features/docs/gherkin/doc_strings.feature +2 -0
- data/features/docs/gherkin/expand_option_for_outlines.feature +1 -0
- data/features/docs/gherkin/outlines.feature +4 -0
- data/features/docs/gherkin/unicode_table.feature +1 -0
- data/features/docs/gherkin/using_descriptions.feature +1 -0
- data/features/docs/gherkin/using_star_notation.feature +1 -1
- data/features/docs/post_configuration_hook.feature +1 -1
- data/features/docs/rake_task.feature +5 -0
- data/features/docs/raketask.feature +3 -1
- data/features/docs/work_in_progress.feature +5 -2
- data/features/docs/writing_support_code/after_step_hooks.feature +3 -1
- data/features/docs/writing_support_code/around_hooks.feature +6 -0
- data/features/docs/writing_support_code/before_hook.feature +1 -0
- data/features/docs/writing_support_code/hook_order.feature +3 -1
- data/features/docs/writing_support_code/parameter_types.feature +75 -0
- data/features/docs/writing_support_code/tagged_hooks.feature +1 -1
- data/features/lib/step_definitions/aruba_steps.rb +4 -10
- data/features/lib/step_definitions/cli_steps.rb +2 -2
- data/features/lib/step_definitions/cucumber_steps.rb +8 -12
- data/features/lib/step_definitions/iso-8859-1_steps.rb +2 -2
- data/features/lib/step_definitions/json_steps.rb +1 -1
- data/features/lib/step_definitions/junit_steps.rb +1 -1
- data/features/lib/step_definitions/language_steps.rb +2 -2
- data/features/lib/step_definitions/profile_steps.rb +6 -6
- data/features/lib/step_definitions/retry_steps.rb +3 -3
- data/features/lib/step_definitions/ruby_steps.rb +1 -1
- data/features/lib/support/env.rb +1 -1
- data/features/lib/support/fake_wire_server.rb +7 -2
- data/features/lib/support/feature_factory.rb +1 -1
- data/features/lib/support/normalise_output.rb +13 -12
- data/features/lib/support/parameter_types.rb +8 -0
- data/gem_tasks/contributors.rake +9 -6
- data/gem_tasks/environment.rake +1 -5
- data/gem_tasks/examples.rake +1 -1
- data/gem_tasks/fix_cr_lf.rake +1 -1
- data/gem_tasks/flog.rake +2 -2
- data/gem_tasks/rspec.rake +1 -1
- data/lib/autotest/cucumber_mixin.rb +15 -15
- data/lib/autotest/discover.rb +2 -2
- data/lib/cucumber/cli/configuration.rb +7 -13
- data/lib/cucumber/cli/main.rb +6 -6
- data/lib/cucumber/cli/options.rb +163 -126
- data/lib/cucumber/cli/profile_loader.rb +24 -20
- data/lib/cucumber/configuration.rb +12 -17
- data/lib/cucumber/constantize.rb +1 -1
- data/lib/cucumber/core_ext/string.rb +1 -1
- data/lib/cucumber/deprecate.rb +1 -1
- data/lib/cucumber/events.rb +11 -1
- data/lib/cucumber/events/gherkin_source_read.rb +17 -0
- data/lib/cucumber/events/{step_match.rb → step_activated.rb} +2 -2
- data/lib/cucumber/events/step_definition_registered.rb +1 -1
- data/lib/cucumber/events/test_case_finished.rb +18 -0
- data/lib/cucumber/events/test_case_starting.rb +15 -0
- data/lib/cucumber/events/test_run_starting.rb +16 -0
- data/lib/cucumber/events/test_step_finished.rb +20 -0
- data/lib/cucumber/events/test_step_starting.rb +17 -0
- data/lib/cucumber/filters.rb +1 -0
- data/lib/cucumber/filters/activate_steps.rb +1 -1
- data/lib/cucumber/filters/broadcast_test_run_starting_event.rb +27 -0
- data/lib/cucumber/filters/retry.rb +1 -1
- data/lib/cucumber/filters/tag_limits.rb +3 -3
- data/lib/cucumber/filters/tag_limits/verifier.rb +1 -1
- data/lib/cucumber/formatter/ansicolor.rb +8 -11
- data/lib/cucumber/formatter/backtrace_filter.rb +19 -7
- data/lib/cucumber/formatter/console.rb +16 -19
- data/lib/cucumber/formatter/console_counts.rb +8 -21
- data/lib/cucumber/formatter/console_issues.rb +30 -9
- data/lib/cucumber/formatter/duration.rb +1 -1
- data/lib/cucumber/formatter/fail_fast.rb +1 -1
- data/lib/cucumber/formatter/html.rb +168 -242
- data/lib/cucumber/formatter/html_builder.rb +110 -0
- data/lib/cucumber/formatter/inline-js.js +30 -0
- data/lib/cucumber/formatter/interceptor.rb +2 -2
- data/lib/cucumber/formatter/json.rb +12 -12
- data/lib/cucumber/formatter/junit.rb +11 -11
- data/lib/cucumber/formatter/legacy_api/adapter.rb +27 -27
- data/lib/cucumber/formatter/legacy_api/ast.rb +16 -20
- data/lib/cucumber/formatter/legacy_api/results.rb +6 -8
- data/lib/cucumber/formatter/pretty.rb +17 -17
- data/lib/cucumber/formatter/progress.rb +11 -12
- data/lib/cucumber/formatter/rerun.rb +1 -1
- data/lib/cucumber/formatter/steps.rb +1 -1
- data/lib/cucumber/formatter/unicode.rb +1 -1
- data/lib/cucumber/formatter/usage.rb +12 -12
- data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +1 -1
- data/lib/cucumber/gherkin/formatter/escaping.rb +1 -1
- data/lib/cucumber/{rb_support/rb_dsl.rb → glue/dsl.rb} +44 -17
- data/lib/cucumber/glue/hook.rb +43 -0
- data/lib/cucumber/glue/invoke_in_world.rb +70 -0
- data/lib/cucumber/glue/proto_world.rb +225 -0
- data/lib/cucumber/{rb_support/rb_language.rb → glue/registry_and_more.rb} +45 -86
- data/lib/cucumber/{rb_support → glue}/snippet.rb +62 -25
- data/lib/cucumber/glue/step_definition.rb +143 -0
- data/lib/cucumber/glue/world_factory.rb +23 -0
- data/lib/cucumber/hooks.rb +4 -4
- data/lib/cucumber/multiline_argument.rb +2 -2
- data/lib/cucumber/multiline_argument/data_table.rb +40 -178
- data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +158 -0
- data/lib/cucumber/platform.rb +3 -5
- data/lib/cucumber/rake/task.rb +11 -11
- data/lib/cucumber/rspec/disable_option_parser.rb +1 -1
- data/lib/cucumber/rspec/doubles.rb +1 -1
- data/lib/cucumber/running_test_case.rb +2 -2
- data/lib/cucumber/runtime.rb +46 -34
- data/lib/cucumber/runtime/after_hooks.rb +1 -1
- data/lib/cucumber/runtime/for_programming_languages.rb +1 -36
- data/lib/cucumber/runtime/support_code.rb +19 -15
- data/lib/cucumber/runtime/user_interface.rb +4 -11
- data/lib/cucumber/step_argument.rb +0 -2
- data/lib/cucumber/step_definition_light.rb +1 -0
- data/lib/cucumber/step_match.rb +16 -15
- data/lib/cucumber/step_match_search.rb +2 -3
- data/lib/cucumber/term/ansicolor.rb +1 -1
- data/lib/cucumber/version +1 -1
- data/lib/simplecov_setup.rb +1 -1
- data/scripts/invite-collaborator +40 -0
- data/scripts/update-history +83 -0
- data/spec/cucumber/cli/configuration_spec.rb +95 -97
- data/spec/cucumber/cli/main_spec.rb +7 -7
- data/spec/cucumber/cli/options_spec.rb +112 -78
- data/spec/cucumber/cli/profile_loader_spec.rb +24 -5
- data/spec/cucumber/cli/rerun_spec.rb +20 -20
- data/spec/cucumber/configuration_spec.rb +47 -47
- data/spec/cucumber/constantize_spec.rb +2 -2
- data/spec/cucumber/events_spec.rb +9 -0
- data/spec/cucumber/file_specs_spec.rb +25 -25
- data/spec/cucumber/filters/activate_steps_spec.rb +16 -16
- data/spec/cucumber/filters/gated_receiver_spec.rb +6 -6
- data/spec/cucumber/filters/retry_spec.rb +22 -9
- data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +11 -11
- data/spec/cucumber/filters/tag_limits/verifier_spec.rb +14 -14
- data/spec/cucumber/filters/tag_limits_spec.rb +8 -8
- data/spec/cucumber/formatter/ansicolor_spec.rb +9 -9
- data/spec/cucumber/formatter/backtrace_filter_spec.rb +32 -0
- data/spec/cucumber/formatter/console_counts_spec.rb +1 -1
- data/spec/cucumber/formatter/duration_spec.rb +3 -3
- data/spec/cucumber/formatter/fail_fast_spec.rb +21 -21
- data/spec/cucumber/formatter/html_spec.rb +58 -58
- data/spec/cucumber/formatter/json_spec.rb +44 -46
- data/spec/cucumber/formatter/junit_spec.rb +43 -45
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +43 -43
- data/spec/cucumber/formatter/pretty_spec.rb +107 -107
- data/spec/cucumber/formatter/progress_spec.rb +20 -20
- data/spec/cucumber/formatter/rerun_spec.rb +1 -1
- data/spec/cucumber/formatter/spec_helper.rb +6 -5
- data/spec/cucumber/{rb_support/rb_world_spec.rb → glue/proto_world_spec.rb} +20 -5
- data/spec/cucumber/glue/registry_and_more_spec.rb +213 -0
- data/spec/cucumber/{rb_support → glue}/snippet_spec.rb +61 -25
- data/spec/cucumber/glue/step_definition_spec.rb +207 -0
- data/spec/cucumber/hooks_spec.rb +3 -3
- data/spec/cucumber/multiline_argument/data_table_spec.rb +177 -133
- data/spec/cucumber/project_initializer_spec.rb +10 -10
- data/spec/cucumber/rake/forked_spec.rb +10 -10
- data/spec/cucumber/rake/task_spec.rb +20 -20
- data/spec/cucumber/running_test_case_spec.rb +35 -35
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +1 -30
- data/spec/cucumber/runtime_spec.rb +2 -2
- data/spec/cucumber/step_argument_spec.rb +5 -5
- data/spec/cucumber/step_match_search_spec.rb +31 -41
- data/spec/cucumber/step_match_spec.rb +33 -33
- data/spec/cucumber/world/pending_spec.rb +10 -10
- metadata +117 -47
- data/features/docs/formatters/debug_formatter.feature +0 -47
- data/features/docs/writing_support_code/transforms.feature +0 -98
- data/features/lib/step_definitions/wire_steps.rb +0 -59
- data/gem_tasks/cucumber.rake +0 -26
- data/lib/cucumber/core_ext/instance_exec.rb +0 -71
- data/lib/cucumber/formatter/debug.rb +0 -36
- data/lib/cucumber/rb_support/rb_hook.rb +0 -20
- 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/spec/cucumber/core_ext/instance_exec_spec.rb +0 -5
- data/spec/cucumber/formatter/debug_spec.rb +0 -65
- 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
@@ -17,15 +17,15 @@ module Cucumber
|
|
17
17
|
let(:kernel) { double(:kernel) }
|
18
18
|
subject { Main.new(args, stdin, stdout, stderr, kernel)}
|
19
19
|
|
20
|
-
describe
|
21
|
-
context
|
20
|
+
describe '#execute!' do
|
21
|
+
context 'passed an existing runtime' do
|
22
22
|
let(:existing_runtime) { double('runtime').as_null_object }
|
23
23
|
|
24
24
|
def do_execute
|
25
25
|
subject.execute!(existing_runtime)
|
26
26
|
end
|
27
27
|
|
28
|
-
it
|
28
|
+
it 'configures that runtime' do
|
29
29
|
expected_configuration = double('Configuration').as_null_object
|
30
30
|
|
31
31
|
allow(Configuration).to receive(:new) { expected_configuration }
|
@@ -35,7 +35,7 @@ module Cucumber
|
|
35
35
|
do_execute
|
36
36
|
end
|
37
37
|
|
38
|
-
it
|
38
|
+
it 'uses that runtime for running and reporting results' do
|
39
39
|
expected_results = double('results', :failure? => true)
|
40
40
|
|
41
41
|
expect(existing_runtime).to receive(:run!)
|
@@ -46,12 +46,12 @@ module Cucumber
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
context
|
49
|
+
context 'interrupted with ctrl-c' do
|
50
50
|
after do
|
51
51
|
Cucumber.wants_to_quit = false
|
52
52
|
end
|
53
53
|
|
54
|
-
it
|
54
|
+
it 'exits with error code' do
|
55
55
|
results = double('results', :failure? => false)
|
56
56
|
|
57
57
|
allow_any_instance_of(Runtime).to receive(:run!)
|
@@ -71,7 +71,7 @@ module Cucumber
|
|
71
71
|
configuration = double('configuration')
|
72
72
|
|
73
73
|
allow(Configuration).to receive(:new) { configuration }
|
74
|
-
allow(configuration).to receive(:parse!).and_raise(exception_klass.new(
|
74
|
+
allow(configuration).to receive(:parse!).and_raise(exception_klass.new('error message'))
|
75
75
|
allow(kernel).to receive(:exit).with(2)
|
76
76
|
|
77
77
|
subject.execute!
|
@@ -49,47 +49,49 @@ module Cucumber
|
|
49
49
|
end
|
50
50
|
|
51
51
|
context '-r or --require' do
|
52
|
-
it
|
52
|
+
it 'collects all specified files into an array' do
|
53
53
|
after_parsing('--require some_file.rb -r another_file.rb') do
|
54
54
|
expect(options[:require]).to eq ['some_file.rb', 'another_file.rb']
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
context '--i18n' do
|
60
|
-
|
61
|
-
include RSpec::WorkInProgress
|
59
|
+
context '--i18n-languages' do
|
60
|
+
include RSpec::WorkInProgress
|
62
61
|
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
it 'lists all known languages' do
|
63
|
+
after_parsing '--i18n-languages' do
|
64
|
+
::Gherkin::DIALECTS.keys.map do |key|
|
65
|
+
expect(@output_stream.string).to include(key.to_s);
|
66
66
|
end
|
67
67
|
end
|
68
|
+
end
|
68
69
|
|
69
|
-
|
70
|
-
|
71
|
-
end
|
70
|
+
it 'exits the program' do
|
71
|
+
when_parsing('--i18n-languages') { expect(Kernel).to receive(:exit) }
|
72
72
|
end
|
73
|
+
end
|
73
74
|
|
74
|
-
|
75
|
+
context '--i18n-keywords' do
|
76
|
+
context 'with invalid LANG' do
|
75
77
|
include RSpec::WorkInProgress
|
76
78
|
|
77
|
-
it
|
78
|
-
when_parsing '--i18n foo' do
|
79
|
+
it 'exits' do
|
80
|
+
when_parsing '--i18n-keywords foo' do
|
79
81
|
expect(Kernel).to receive(:exit)
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
83
|
-
it
|
84
|
-
after_parsing '--i18n foo' do
|
85
|
+
it 'says the language was invalid' do
|
86
|
+
after_parsing '--i18n-keywords foo' do
|
85
87
|
expect(@output_stream.string).to include("Invalid language 'foo'. Available languages are:")
|
86
88
|
end
|
87
89
|
end
|
88
90
|
|
89
|
-
it
|
90
|
-
after_parsing '--i18n foo' do
|
91
|
+
it 'displays the language table' do
|
92
|
+
after_parsing '--i18n-keywords foo' do
|
91
93
|
::Gherkin::DIALECTS.keys.map do |key|
|
92
|
-
expect(@output_stream.string).to include(
|
94
|
+
expect(@output_stream.string).to include(key.to_s);
|
93
95
|
end
|
94
96
|
end
|
95
97
|
end
|
@@ -97,75 +99,94 @@ module Cucumber
|
|
97
99
|
end
|
98
100
|
|
99
101
|
context '-f FORMAT or --format FORMAT' do
|
100
|
-
it
|
101
|
-
after_parsing('-f pretty') { expect(options[:formats]).to eq [['pretty', output_stream]] }
|
102
|
+
it 'defaults the output for the formatter to the output stream (STDOUT)' do
|
103
|
+
after_parsing('-f pretty') { expect(options[:formats]).to eq [['pretty', {}, output_stream]] }
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'extracts per-formatter options' do
|
107
|
+
after_parsing('-f pretty,foo=bar,foo2=bar2') do
|
108
|
+
expect(options[:formats]).to eq [['pretty', { 'foo' => 'bar', 'foo2' => 'bar2' }, output_stream]]
|
109
|
+
end
|
102
110
|
end
|
103
111
|
end
|
104
112
|
|
105
113
|
context '-o [FILE|DIR] or --out [FILE|DIR]' do
|
106
114
|
it "defaults the formatter to 'pretty' when not specified earlier" do
|
107
|
-
after_parsing('-o file.txt') { expect(options[:formats]).to eq [['pretty', 'file.txt']] }
|
115
|
+
after_parsing('-o file.txt') { expect(options[:formats]).to eq [['pretty', {}, 'file.txt']] }
|
108
116
|
end
|
109
|
-
it
|
117
|
+
it 'sets the output for the formatter defined immediatly before it' do
|
110
118
|
after_parsing('-f profile --out file.txt -f pretty -o file2.txt') do
|
111
|
-
expect(options[:formats]).to eq [['profile', 'file.txt'], ['pretty', 'file2.txt']]
|
119
|
+
expect(options[:formats]).to eq [['profile', {}, 'file.txt'], ['pretty', {}, 'file2.txt']]
|
112
120
|
end
|
113
121
|
end
|
114
122
|
end
|
115
123
|
|
116
124
|
context 'handling multiple formatters' do
|
117
|
-
it
|
118
|
-
expect{ options.parse!(prepare_args('-f pretty -f progress')) }.to raise_error(
|
125
|
+
it 'catches multiple command line formatters using the same stream' do
|
126
|
+
expect{ options.parse!(prepare_args('-f pretty -f progress')) }.to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
|
119
127
|
end
|
120
128
|
|
121
|
-
it
|
129
|
+
it 'catches multiple profile formatters using the same stream' do
|
122
130
|
given_cucumber_yml_defined_as({'default' => '-f progress -f pretty'})
|
123
131
|
options = Options.new(output_stream, error_stream, :default_profile => 'default')
|
124
132
|
|
125
|
-
expect{ options.parse!(%w{}) }.to raise_error(
|
133
|
+
expect{ options.parse!(%w{}) }.to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
|
126
134
|
end
|
127
135
|
|
128
|
-
it
|
136
|
+
it 'profiles does not affect the catching of multiple command line formatters using the same stream' do
|
129
137
|
given_cucumber_yml_defined_as({'default' => '-q'})
|
130
138
|
options = Options.new(output_stream, error_stream, :default_profile => 'default')
|
131
139
|
|
132
|
-
expect{ options.parse!(%w{-f progress -f pretty}) }.to raise_error(
|
140
|
+
expect{ options.parse!(%w{-f progress -f pretty}) }.to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
|
133
141
|
end
|
134
142
|
|
135
|
-
it
|
143
|
+
it 'merges profile formatters and command line formatters' do
|
136
144
|
given_cucumber_yml_defined_as({'default' => '-f junit -o result.xml'})
|
137
145
|
options = Options.new(output_stream, error_stream, :default_profile => 'default')
|
138
146
|
|
139
147
|
options.parse!(%w{-f pretty})
|
140
|
-
|
141
|
-
expect(options[:formats]).to eq [['pretty', output_stream], [
|
148
|
+
|
149
|
+
expect(options[:formats]).to eq [['pretty', {}, output_stream], ['junit', {}, 'result.xml']]
|
142
150
|
end
|
143
151
|
end
|
144
152
|
|
145
153
|
context '-t TAGS --tags TAGS' do
|
146
|
-
it
|
147
|
-
after_parsing('--tags
|
154
|
+
it 'handles tag expressions as argument' do
|
155
|
+
after_parsing(['--tags', 'not @foo or @bar']) { expect(options[:tag_expressions]).to eq ['not @foo or @bar'] }
|
148
156
|
end
|
149
157
|
|
150
|
-
it
|
158
|
+
it 'stores tags passed with different --tags seperately' do
|
151
159
|
after_parsing('--tags @foo --tags @bar') { expect(options[:tag_expressions]).to eq ['@foo', '@bar'] }
|
152
160
|
end
|
161
|
+
|
162
|
+
it 'strips tag limits from the tag expressions stored' do
|
163
|
+
after_parsing(['--tags', 'not @foo:2 or @bar:3']) { expect(options[:tag_expressions]).to eq ['not @foo or @bar'] }
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'stores tag limits separately' do
|
167
|
+
after_parsing(['--tags', 'not @foo:2 or @bar:3']) { expect(options[:tag_limits]).to eq Hash('@foo' => 2, '@bar' => 3) }
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'raise exception for inconsistent tag limits' do
|
171
|
+
expect{ after_parsing('--tags @foo:2 --tags @foo:3') }.to raise_error(RuntimeError, 'Inconsistent tag limits for @foo: 2 and 3')
|
172
|
+
|
173
|
+
end
|
153
174
|
end
|
154
175
|
|
155
176
|
context '-n NAME or --name NAME' do
|
156
|
-
it
|
177
|
+
it 'stores the provided names as regular expressions' do
|
157
178
|
after_parsing('-n foo --name bar') { expect(options[:name_regexps]).to eq [/foo/,/bar/] }
|
158
179
|
end
|
159
180
|
end
|
160
181
|
|
161
182
|
context '-e PATTERN or --exclude PATTERN' do
|
162
|
-
it
|
183
|
+
it 'stores the provided exclusions as regular expressions' do
|
163
184
|
after_parsing('-e foo --exclude bar') { expect(options[:excludes]).to eq [/foo/,/bar/] }
|
164
185
|
end
|
165
186
|
end
|
166
187
|
|
167
188
|
context '-l LINES or --lines LINES' do
|
168
|
-
it
|
189
|
+
it 'adds line numbers to args' do
|
169
190
|
options.parse!(%w{-l24 FILE})
|
170
191
|
|
171
192
|
expect(options.instance_variable_get(:@args)).to eq ['FILE:24']
|
@@ -173,7 +194,7 @@ module Cucumber
|
|
173
194
|
end
|
174
195
|
|
175
196
|
context '-p PROFILE or --profile PROFILE' do
|
176
|
-
it
|
197
|
+
it 'uses the default profile passed in during initialization if none are specified by the user' do
|
177
198
|
given_cucumber_yml_defined_as({'default' => '--require some_file'})
|
178
199
|
|
179
200
|
options = Options.new(output_stream, error_stream, :default_profile => 'default')
|
@@ -182,7 +203,7 @@ module Cucumber
|
|
182
203
|
expect(options[:require]).to include('some_file')
|
183
204
|
end
|
184
205
|
|
185
|
-
it
|
206
|
+
it 'merges all uniq values from both cmd line and the profile' do
|
186
207
|
given_cucumber_yml_defined_as('foo' => %w[--verbose])
|
187
208
|
options.parse!(%w[--wip --profile foo])
|
188
209
|
|
@@ -197,77 +218,90 @@ module Cucumber
|
|
197
218
|
expect(options[:paths]).to eq %w[my.feature]
|
198
219
|
end
|
199
220
|
|
200
|
-
it
|
221
|
+
it 'combines the require files of both' do
|
201
222
|
given_cucumber_yml_defined_as('bar' => %w[--require features -r dog.rb])
|
202
223
|
options.parse!(%w[--require foo.rb -p bar])
|
203
224
|
|
204
225
|
expect(options[:require]).to eq %w[foo.rb features dog.rb]
|
205
226
|
end
|
206
227
|
|
207
|
-
it
|
228
|
+
it 'combines the tag names of both' do
|
208
229
|
given_cucumber_yml_defined_as('baz' => %w[-t @bar])
|
209
230
|
options.parse!(%w[--tags @foo -p baz])
|
210
231
|
|
211
|
-
expect(options[:tag_expressions]).to eq [
|
232
|
+
expect(options[:tag_expressions]).to eq ['@foo', '@bar']
|
212
233
|
end
|
213
234
|
|
214
|
-
it
|
235
|
+
it 'combines the tag limits of both' do
|
236
|
+
given_cucumber_yml_defined_as('baz' => %w[-t @bar:2])
|
237
|
+
options.parse!(%w[--tags @foo:3 -p baz])
|
238
|
+
|
239
|
+
expect(options[:tag_limits]).to eq Hash('@foo' => 3, '@bar' => 2)
|
240
|
+
end
|
241
|
+
|
242
|
+
it 'raise exceptions for inconsistent tag limits' do
|
243
|
+
given_cucumber_yml_defined_as('baz' => %w[-t @bar:2])
|
244
|
+
|
245
|
+
expect{ options.parse!(%w[--tags @bar:3 -p baz]) }.to raise_error(RuntimeError, 'Inconsistent tag limits for @bar: 3 and 2')
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'only takes the paths from the original options, and disgregards the profiles' do
|
215
249
|
given_cucumber_yml_defined_as('baz' => %w[features])
|
216
250
|
options.parse!(%w[my.feature -p baz])
|
217
251
|
|
218
252
|
expect(options[:paths]).to eq ['my.feature']
|
219
253
|
end
|
220
254
|
|
221
|
-
it
|
255
|
+
it 'uses the paths from the profile when none are specified originally' do
|
222
256
|
given_cucumber_yml_defined_as('baz' => %w[some.feature])
|
223
257
|
options.parse!(%w[-p baz])
|
224
258
|
|
225
259
|
expect(options[:paths]).to eq ['some.feature']
|
226
260
|
end
|
227
261
|
|
228
|
-
it
|
262
|
+
it 'combines environment variables from the profile but gives precendene to cmd line args' do
|
229
263
|
given_cucumber_yml_defined_as('baz' => %w[FOO=bar CHEESE=swiss])
|
230
264
|
options.parse!(%w[-p baz CHEESE=cheddar BAR=foo])
|
231
265
|
|
232
266
|
expect(options[:env_vars]).to eq({ 'BAR' => 'foo', 'FOO' => 'bar', 'CHEESE' => 'cheddar' })
|
233
267
|
end
|
234
268
|
|
235
|
-
it
|
269
|
+
it 'disregards STDOUT formatter defined in profile when another is passed in (via cmd line)' do
|
236
270
|
given_cucumber_yml_defined_as({'foo' => %w[--format pretty]})
|
237
271
|
options.parse!(%w{--format progress --profile foo})
|
238
272
|
|
239
|
-
expect(options[:formats]).to eq [['progress', output_stream]]
|
273
|
+
expect(options[:formats]).to eq [['progress', {}, output_stream]]
|
240
274
|
end
|
241
275
|
|
242
|
-
it
|
276
|
+
it 'includes any non-STDOUT formatters from the profile' do
|
243
277
|
given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html]})
|
244
278
|
options.parse!(%w{--format progress --profile html})
|
245
279
|
|
246
|
-
expect(options[:formats]).to eq [['progress', output_stream], ['html', 'features.html']]
|
280
|
+
expect(options[:formats]).to eq [['progress', {}, output_stream], ['html', {}, 'features.html']]
|
247
281
|
end
|
248
282
|
|
249
|
-
it
|
283
|
+
it 'does not include STDOUT formatters from the profile if there is a STDOUT formatter in command line' do
|
250
284
|
given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html --format pretty]})
|
251
285
|
options.parse!(%w{--format progress --profile html})
|
252
286
|
|
253
|
-
expect(options[:formats]).to eq [['progress', output_stream], ['html', 'features.html']]
|
287
|
+
expect(options[:formats]).to eq [['progress', {}, output_stream], ['html', {}, 'features.html']]
|
254
288
|
end
|
255
289
|
|
256
|
-
it
|
290
|
+
it 'includes any STDOUT formatters from the profile if no STDOUT formatter was specified in command line' do
|
257
291
|
given_cucumber_yml_defined_as({'html' => %w[--format html]})
|
258
292
|
options.parse!(%w{--format rerun -o rerun.txt --profile html})
|
259
293
|
|
260
|
-
expect(options[:formats]).to eq [['html', output_stream], ['rerun', 'rerun.txt']]
|
294
|
+
expect(options[:formats]).to eq [['html', {}, output_stream], ['rerun', {}, 'rerun.txt']]
|
261
295
|
end
|
262
296
|
|
263
|
-
it
|
297
|
+
it 'assumes all of the formatters defined in the profile when none are specified on cmd line' do
|
264
298
|
given_cucumber_yml_defined_as({'html' => %w[--format progress --format html -o features.html]})
|
265
299
|
options.parse!(%w{--profile html})
|
266
300
|
|
267
|
-
expect(options[:formats]).to eq [['progress', output_stream], ['html', 'features.html']]
|
301
|
+
expect(options[:formats]).to eq [['progress', {}, output_stream], ['html', {}, 'features.html']]
|
268
302
|
end
|
269
303
|
|
270
|
-
it
|
304
|
+
it 'only reads cucumber.yml once' do
|
271
305
|
original_parse_count = $cucumber_yml_read_count
|
272
306
|
$cucumber_yml_read_count = 0
|
273
307
|
|
@@ -286,7 +320,7 @@ module Cucumber
|
|
286
320
|
end
|
287
321
|
end
|
288
322
|
|
289
|
-
it
|
323
|
+
it 'respects --quiet when defined in the profile' do
|
290
324
|
given_cucumber_yml_defined_as('foo' => '-q')
|
291
325
|
options.parse!(%w[-p foo])
|
292
326
|
|
@@ -294,8 +328,8 @@ module Cucumber
|
|
294
328
|
expect(options[:source]).to be false
|
295
329
|
expect(options[:duration]).to be false
|
296
330
|
end
|
297
|
-
|
298
|
-
it
|
331
|
+
|
332
|
+
it 'uses --no-duration when defined in the profile' do
|
299
333
|
given_cucumber_yml_defined_as('foo' => '--no-duration')
|
300
334
|
options.parse!(%w[-p foo])
|
301
335
|
|
@@ -304,18 +338,18 @@ module Cucumber
|
|
304
338
|
end
|
305
339
|
|
306
340
|
context '-P or --no-profile' do
|
307
|
-
it
|
341
|
+
it 'disables profiles' do
|
308
342
|
given_cucumber_yml_defined_as({'default' => '-v --require file_specified_in_default_profile.rb'})
|
309
343
|
|
310
|
-
after_parsing(
|
344
|
+
after_parsing('-P --require some_file.rb') do
|
311
345
|
expect(options[:require]).to eq ['some_file.rb']
|
312
346
|
end
|
313
347
|
end
|
314
348
|
|
315
|
-
it
|
349
|
+
it 'notifies the user that the profiles are being disabled' do
|
316
350
|
given_cucumber_yml_defined_as({'default' => '-v'})
|
317
351
|
|
318
|
-
after_parsing(
|
352
|
+
after_parsing('--no-profile --require some_file.rb') do
|
319
353
|
expect(output_stream.string).to match(/Disabling profiles.../)
|
320
354
|
end
|
321
355
|
end
|
@@ -323,7 +357,7 @@ module Cucumber
|
|
323
357
|
|
324
358
|
context '-b or --backtrace' do
|
325
359
|
it "turns on cucumber's full backtrace" do
|
326
|
-
when_parsing(
|
360
|
+
when_parsing('-b') do
|
327
361
|
expect(Cucumber).to receive(:use_full_backtrace=).with(true)
|
328
362
|
end
|
329
363
|
end
|
@@ -336,13 +370,13 @@ module Cucumber
|
|
336
370
|
end
|
337
371
|
end
|
338
372
|
|
339
|
-
it
|
373
|
+
it 'exits the program' do
|
340
374
|
when_parsing('--version') { expect(Kernel).to receive(:exit) }
|
341
375
|
end
|
342
376
|
end
|
343
377
|
|
344
378
|
context 'environment variables (i.e. MODE=webrat)' do
|
345
|
-
it
|
379
|
+
it 'places all of the environment variables into a hash' do
|
346
380
|
after_parsing('MODE=webrat FOO=bar') do
|
347
381
|
expect(options[:env_vars]).to eq({ 'MODE' => 'webrat', 'FOO' => 'bar' })
|
348
382
|
end
|
@@ -350,33 +384,33 @@ module Cucumber
|
|
350
384
|
end
|
351
385
|
|
352
386
|
context '--retry ATTEMPTS' do
|
353
|
-
it 'is 0 by default' do
|
354
|
-
after_parsing(
|
387
|
+
it 'is 0 by default' do
|
388
|
+
after_parsing('') do
|
355
389
|
expect(options[:retry]).to eql 0
|
356
390
|
end
|
357
391
|
end
|
358
392
|
|
359
|
-
it 'sets the options[:retry] value' do
|
360
|
-
after_parsing(
|
393
|
+
it 'sets the options[:retry] value' do
|
394
|
+
after_parsing('--retry 4') do
|
361
395
|
expect(options[:retry]).to eql 4
|
362
396
|
end
|
363
397
|
end
|
364
398
|
end
|
365
399
|
|
366
|
-
it
|
400
|
+
it 'assigns any extra arguments as paths to features' do
|
367
401
|
after_parsing('-f pretty my_feature.feature my_other_features') do
|
368
402
|
expect(options[:paths]).to eq ['my_feature.feature', 'my_other_features']
|
369
403
|
end
|
370
404
|
end
|
371
405
|
|
372
|
-
it
|
406
|
+
it 'does not mistake environment variables as feature paths' do
|
373
407
|
after_parsing('my_feature.feature FOO=bar') do
|
374
408
|
expect(options[:paths]).to eq ['my_feature.feature']
|
375
409
|
end
|
376
410
|
end
|
377
411
|
|
378
412
|
context '--snippet-type' do
|
379
|
-
it
|
413
|
+
it 'parses the snippet type argument' do
|
380
414
|
after_parsing('--snippet-type classic') do
|
381
415
|
expect(options[:snippet_type]).to eq :classic
|
382
416
|
end
|
@@ -384,22 +418,22 @@ module Cucumber
|
|
384
418
|
end
|
385
419
|
end
|
386
420
|
|
387
|
-
describe
|
388
|
-
it
|
421
|
+
describe 'dry-run' do
|
422
|
+
it 'has the default value for snippets' do
|
389
423
|
given_cucumber_yml_defined_as({'foo' => %w[--dry-run]})
|
390
424
|
options.parse!(%w{--dry-run})
|
391
425
|
|
392
426
|
expect(options[:snippets]).to be true
|
393
427
|
end
|
394
428
|
|
395
|
-
it
|
429
|
+
it 'sets snippets to false when no-snippets provided after dry-run' do
|
396
430
|
given_cucumber_yml_defined_as({'foo' => %w[--dry-run --no-snippets]})
|
397
431
|
options.parse!(%w{--dry-run --no-snippets})
|
398
432
|
|
399
433
|
expect(options[:snippets]).to be false
|
400
434
|
end
|
401
435
|
|
402
|
-
it
|
436
|
+
it 'sets snippets to false when no-snippets provided before dry-run' do
|
403
437
|
given_cucumber_yml_defined_as({'foo' => %w[--no-snippet --dry-run]})
|
404
438
|
options.parse!(%w{--no-snippets --dry-run})
|
405
439
|
|