cucumber 1.3.10 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.rspec +1 -1
- data/.travis.yml +4 -3
- data/CONTRIBUTING.md +9 -0
- data/Gemfile +9 -2
- data/History.md +212 -22
- data/LICENSE +2 -2
- data/README.md +4 -4
- data/Rakefile +10 -1
- data/bin/cucumber +1 -5
- data/cucumber.gemspec +10 -13
- data/cucumber.yml +14 -24
- data/examples/{ramaze → i18n/el}/Rakefile +1 -1
- data/examples/i18n/el/features/addition.feature +17 -0
- data/examples/i18n/el/features/division.feature +10 -0
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +24 -0
- data/examples/i18n/el/lib/calculator.rb +14 -0
- data/examples/i18n/fr/Rakefile +3 -1
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +2 -2
- data/examples/i18n/ht/Rakefile +6 -0
- data/examples/i18n/ht/features/adisyon.feature +17 -0
- data/examples/i18n/ht/features/divizyon.feature +10 -0
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +25 -0
- data/examples/i18n/ht/lib/kalkilatris.rb +14 -0
- data/examples/i18n/zh-CN/features/{step_definitons → step_definitions}/calculator_steps.rb +4 -4
- data/examples/tcl/features/step_definitions/fib_steps.rb +1 -1
- data/{legacy_features → features/docs}/api/list_step_defs_as_json.feature +14 -14
- data/{legacy_features → features/docs}/api/run_cli_main_with_existing_runtime.feature +5 -10
- data/features/{backtraces.feature → docs/cli/backtraces.feature} +2 -2
- data/features/docs/cli/dry_run.feature +73 -0
- data/features/docs/cli/exclude_files.feature +18 -0
- data/features/docs/cli/execute_with_tag_filter.feature +117 -0
- data/features/docs/cli/randomize.feature +46 -0
- data/features/docs/cli/require.feature +27 -0
- data/features/docs/cli/run_scenarios_matching_name.feature +104 -0
- data/features/docs/cli/run_specific_scenarios.feature +75 -0
- data/features/docs/cli/showing_differences.feature +43 -0
- data/features/docs/cli/specifying_multiple_formatters.feature +44 -0
- data/features/docs/cli/strict_mode.feature +64 -0
- data/features/{nested_steps.feature → docs/defining_steps/nested_steps.feature} +52 -6
- data/features/{nested_steps_i18n.feature → docs/defining_steps/nested_steps_i18n.feature} +0 -2
- data/features/{step_definitions.feature → docs/defining_steps/one_line_step_definitions.feature} +3 -3
- data/features/docs/defining_steps/printing_messages.feature +148 -0
- data/features/docs/defining_steps/skip_scenario.feature +62 -0
- data/features/docs/defining_steps/snippets.feature +56 -0
- data/{legacy_features → features/docs/defining_steps}/table_diffing.feature +21 -16
- data/features/{transforms.feature → docs/defining_steps/transforms.feature} +2 -2
- data/{legacy_features/exception_in_after_block.feature → features/docs/exception_in_after_hook.feature} +25 -26
- data/{legacy_features/exception_in_after_step_block.feature → features/docs/exception_in_after_step_hook.feature} +22 -24
- data/features/docs/exception_in_around_hook.feature +80 -0
- data/{legacy_features/exception_in_before_block.feature → features/docs/exception_in_before_hook.feature} +18 -20
- data/features/docs/extending_cucumber/custom_filter.feature +29 -0
- data/features/docs/extending_cucumber/custom_formatter.feature +94 -0
- data/features/docs/formatters/debug_formatter.feature +47 -0
- data/features/{formatter_step_file_colon_line.feature → docs/formatters/formatter_step_file_colon_line.feature} +2 -4
- data/features/{html_formatter.feature → docs/formatters/html_formatter.feature} +10 -14
- data/features/docs/formatters/json_formatter.feature +760 -0
- data/features/docs/formatters/junit_formatter.feature +316 -0
- data/features/docs/formatters/pretty_formatter.feature +73 -0
- data/features/{progress_formatter.feature → docs/formatters/progress_formatter.feature} +1 -1
- data/features/docs/formatters/rerun_formatter.feature +136 -0
- data/features/docs/formatters/usage_formatter.feature +102 -0
- data/features/docs/getting_started.feature +27 -0
- data/features/{background.feature → docs/gherkin/background.feature} +149 -91
- data/features/{doc_strings.feature → docs/gherkin/doc_strings.feature} +1 -0
- data/features/docs/gherkin/expand_option_for_outlines.feature +46 -0
- data/features/docs/gherkin/language_from_header.feature +32 -0
- data/features/docs/gherkin/outlines.feature +158 -0
- data/features/docs/gherkin/unicode_table.feature +32 -0
- data/features/docs/gherkin/using_descriptions.feature +88 -0
- data/features/docs/gherkin/using_star_notation.feature +37 -0
- data/{legacy_features → features/docs}/post_configuration_hook.feature +17 -18
- data/{legacy_features → features/docs}/profiles.feature +30 -36
- data/{legacy_features → features/docs}/rake_task.feature +30 -41
- data/features/{raketask.feature → docs/raketask.feature} +6 -13
- data/{legacy_features/wire_protocol_erb.feature → features/docs/wire_protocol/erb_configuration.feature} +7 -8
- data/features/docs/wire_protocol/handle_unexpected_response.feature +30 -0
- data/features/docs/wire_protocol/invoke_message.feature +216 -0
- data/features/docs/wire_protocol/readme.md +26 -0
- data/features/docs/wire_protocol/snippets_message.feature +51 -0
- data/features/docs/wire_protocol/step_matches_message.feature +81 -0
- data/{legacy_features/wire_protocol_table_diffing.feature → features/docs/wire_protocol/table_diffing.feature} +19 -12
- data/{legacy_features/wire_protocol_tags.feature → features/docs/wire_protocol/tags.feature} +7 -7
- data/{legacy_features/wire_protocol_timeouts.feature → features/docs/wire_protocol/timeouts.feature} +7 -6
- data/{legacy_features → features/docs}/work_in_progress.feature +52 -54
- data/features/docs/writing_support_code/after_hooks.feature +80 -0
- data/{legacy_features → features/docs/writing_support_code}/around_hooks.feature +56 -28
- data/features/docs/writing_support_code/before_hook.feature +65 -0
- data/features/docs/writing_support_code/hook_order.feature +61 -0
- data/features/{load_path.feature → docs/writing_support_code/load_path.feature} +3 -0
- data/features/docs/writing_support_code/state.feature +32 -0
- data/features/docs/writing_support_code/tagged_hooks.feature +95 -0
- data/features/lib/step_definitions/aruba_steps.rb +22 -0
- data/features/lib/step_definitions/cucumber_steps.rb +50 -0
- data/features/{step_definitions → lib/step_definitions}/iso-8859-1_steps.rb +3 -15
- data/features/lib/step_definitions/json_steps.rb +7 -0
- data/features/lib/step_definitions/junit_steps.rb +13 -0
- data/features/lib/step_definitions/language_steps.rb +4 -5
- data/features/lib/step_definitions/profile_steps.rb +15 -0
- data/features/lib/step_definitions/ruby_steps.rb +3 -0
- data/features/lib/step_definitions/wire_steps.rb +58 -0
- data/features/lib/support/env.rb +21 -0
- data/{legacy_features → features/lib}/support/fake_wire_server.rb +10 -7
- data/features/{support → lib/support}/feature_factory.rb +1 -1
- data/features/lib/support/normalise_output.rb +33 -0
- data/gem_tasks/cov.rake +5 -0
- data/gem_tasks/cucumber.rake +3 -8
- data/gem_tasks/rspec.rake +0 -2
- data/lib/cucumber/ast.rb +8 -25
- data/lib/cucumber/cli/configuration.rb +33 -37
- data/lib/cucumber/cli/main.rb +14 -27
- data/lib/cucumber/cli/options.rb +22 -60
- data/lib/cucumber/cli/profile_loader.rb +1 -1
- data/lib/cucumber/configuration.rb +4 -0
- data/lib/cucumber/constantize.rb +7 -6
- data/lib/cucumber/core_ext/instance_exec.rb +7 -38
- data/lib/cucumber/core_ext/proc.rb +1 -1
- data/lib/cucumber/encoding.rb +5 -0
- data/lib/cucumber/errors.rb +21 -10
- data/lib/cucumber/file_specs.rb +37 -0
- data/lib/cucumber/filters/activate_steps.rb +33 -0
- data/lib/cucumber/filters/apply_after_hooks.rb +9 -0
- data/lib/cucumber/filters/apply_after_step_hooks.rb +12 -0
- data/lib/cucumber/filters/apply_around_hooks.rb +12 -0
- data/lib/cucumber/filters/apply_before_hooks.rb +9 -0
- data/lib/cucumber/filters/gated_receiver.rb +25 -0
- data/lib/cucumber/filters/prepare_world.rb +45 -0
- data/lib/cucumber/filters/quit.rb +28 -0
- data/lib/cucumber/filters/randomizer.rb +40 -0
- data/lib/cucumber/filters/tag_limits/test_case_index.rb +31 -0
- data/lib/cucumber/filters/tag_limits/verifier.rb +59 -0
- data/lib/cucumber/filters/tag_limits.rb +45 -0
- data/lib/cucumber/filters.rb +9 -0
- data/lib/cucumber/formatter/ansicolor.rb +0 -8
- data/lib/cucumber/formatter/console.rb +66 -36
- data/lib/cucumber/formatter/debug.rb +10 -8
- data/lib/cucumber/formatter/fanout.rb +27 -0
- data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +122 -12
- data/lib/cucumber/formatter/html.rb +67 -18
- data/lib/cucumber/formatter/ignore_missing_messages.rb +20 -0
- data/lib/cucumber/formatter/interceptor.rb +17 -3
- data/lib/cucumber/formatter/json.rb +1 -1
- data/lib/cucumber/formatter/junit.rb +105 -5
- data/lib/cucumber/formatter/legacy_api/adapter.rb +1060 -0
- data/lib/cucumber/formatter/legacy_api/ast.rb +376 -0
- data/lib/cucumber/formatter/legacy_api/results.rb +51 -0
- data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +30 -0
- data/lib/cucumber/formatter/pretty.rb +16 -8
- data/lib/cucumber/formatter/progress.rb +10 -0
- data/lib/cucumber/formatter/rerun.rb +14 -71
- data/lib/cucumber/formatter/unicode.rb +8 -21
- data/lib/cucumber/formatter/usage.rb +7 -1
- data/lib/cucumber/hooks.rb +97 -0
- data/lib/cucumber/language_support/language_methods.rb +0 -54
- data/lib/cucumber/{ast/table.rb → multiline_argument/data_table.rb} +77 -84
- data/lib/cucumber/multiline_argument/doc_string.rb +10 -0
- data/lib/cucumber/multiline_argument.rb +74 -0
- data/lib/cucumber/platform.rb +21 -20
- data/lib/cucumber/project_initializer.rb +43 -0
- data/lib/cucumber/rake/task.rb +3 -54
- data/lib/cucumber/rb_support/rb_hook.rb +2 -2
- data/lib/cucumber/rb_support/rb_language.rb +4 -34
- data/lib/cucumber/rb_support/rb_step_definition.rb +11 -2
- data/lib/cucumber/rb_support/rb_transform.rb +3 -1
- data/lib/cucumber/rb_support/rb_world.rb +13 -20
- data/lib/cucumber/rb_support/snippet.rb +61 -20
- data/lib/cucumber/rspec/doubles.rb +9 -6
- data/lib/cucumber/running_test_case.rb +115 -0
- data/lib/cucumber/runtime/after_hooks.rb +24 -0
- data/lib/cucumber/runtime/before_hooks.rb +23 -0
- data/lib/cucumber/runtime/for_programming_languages.rb +14 -10
- data/lib/cucumber/runtime/step_hooks.rb +22 -0
- data/lib/cucumber/runtime/support_code.rb +78 -21
- data/lib/cucumber/runtime/user_interface.rb +4 -0
- data/lib/cucumber/runtime.rb +153 -98
- data/lib/cucumber/step_match.rb +27 -3
- data/lib/cucumber/term/ansicolor.rb +1 -9
- data/lib/cucumber/wire_support/wire_language.rb +23 -9
- data/lib/cucumber/wire_support/wire_packet.rb +1 -1
- data/lib/cucumber/wire_support/wire_protocol/requests.rb +13 -5
- data/lib/cucumber/wire_support/wire_step_definition.rb +1 -8
- data/lib/cucumber.rb +8 -6
- data/spec/cucumber/cli/configuration_spec.rb +165 -134
- data/spec/cucumber/cli/main_spec.rb +36 -99
- data/spec/cucumber/cli/options_spec.rb +238 -272
- data/spec/cucumber/cli/profile_loader_spec.rb +18 -7
- data/spec/cucumber/configuration_spec.rb +3 -3
- data/spec/cucumber/constantize_spec.rb +2 -1
- data/spec/cucumber/core_ext/instance_exec_spec.rb +4 -0
- data/spec/cucumber/core_ext/proc_spec.rb +32 -43
- data/spec/cucumber/file_specs_spec.rb +60 -0
- data/spec/cucumber/filters/activate_steps_spec.rb +57 -0
- data/spec/cucumber/filters/gated_receiver_spec.rb +47 -0
- data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +38 -0
- data/spec/cucumber/filters/tag_limits/verifier_spec.rb +57 -0
- data/spec/cucumber/filters/tag_limits_spec.rb +59 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +11 -10
- data/spec/cucumber/formatter/debug_spec.rb +64 -0
- data/spec/cucumber/formatter/duration_spec.rb +6 -6
- data/spec/cucumber/formatter/html_spec.rb +233 -39
- data/spec/cucumber/formatter/interceptor_spec.rb +38 -31
- data/spec/cucumber/formatter/junit_spec.rb +213 -151
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +2090 -0
- data/spec/cucumber/formatter/pretty_spec.rb +481 -49
- data/spec/cucumber/formatter/progress_spec.rb +63 -16
- data/spec/cucumber/formatter/rerun_spec.rb +107 -0
- data/spec/cucumber/formatter/spec_helper.rb +32 -17
- data/spec/cucumber/hooks_spec.rb +30 -0
- data/spec/cucumber/{ast/table_spec.rb → multiline_argument/data_table_spec.rb} +128 -208
- data/spec/cucumber/project_initializer_spec.rb +87 -0
- data/spec/cucumber/rake/forked_spec.rb +13 -22
- data/spec/cucumber/rb_support/rb_language_spec.rb +78 -69
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +90 -44
- data/spec/cucumber/rb_support/rb_transform_spec.rb +24 -3
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +6 -4
- data/spec/cucumber/rb_support/snippet_spec.rb +47 -38
- data/spec/cucumber/running_test_case_spec.rb +83 -0
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +18 -13
- data/spec/cucumber/runtime/support_code_spec.rb +29 -29
- data/spec/cucumber/runtime_spec.rb +35 -34
- data/spec/cucumber/step_match_spec.rb +30 -20
- data/spec/cucumber/wire_support/configuration_spec.rb +8 -5
- data/spec/cucumber/wire_support/connection_spec.rb +12 -8
- data/spec/cucumber/wire_support/wire_exception_spec.rb +14 -8
- data/spec/cucumber/wire_support/wire_language_spec.rb +8 -9
- data/spec/cucumber/wire_support/wire_packet_spec.rb +17 -13
- data/spec/cucumber/world/pending_spec.rb +36 -36
- data/spec/simplecov_setup.rb +18 -0
- data/spec/spec_helper.rb +6 -13
- metadata +348 -350
- data/.gitattributes +0 -1
- data/.ruby-version +0 -1
- data/examples/python/README.textile +0 -8
- data/examples/python/Rakefile +0 -4
- data/examples/python/features/fibonacci.feature +0 -19
- data/examples/python/features/step_definitions/fib_steps.py +0 -11
- data/examples/python/lib/fib.py +0 -7
- data/examples/ramaze/README.textile +0 -7
- data/examples/ramaze/app.rb +0 -21
- data/examples/ramaze/features/add.feature +0 -11
- data/examples/ramaze/features/step_definitions/add_steps.rb +0 -15
- data/examples/ramaze/features/support/env.rb +0 -32
- data/examples/ramaze/layout/default.html.erb +0 -8
- data/examples/ramaze/view/index.html.erb +0 -5
- data/examples/ruby2python/README.textile +0 -8
- data/examples/ruby2python/Rakefile +0 -4
- data/examples/ruby2python/features/fibonacci.feature +0 -19
- data/examples/ruby2python/features/step_definitions/fib_steps.rb +0 -7
- data/examples/ruby2python/features/support/env.rb +0 -21
- data/examples/ruby2python/lib/fib.py +0 -7
- data/examples/v8/Rakefile +0 -6
- data/examples/v8/features/fibonacci.feature +0 -43
- data/examples/v8/features/step_definitions/fib_steps.js +0 -49
- data/examples/v8/features/support/env.js +0 -14
- data/examples/v8/lib/fibonacci.js +0 -19
- data/features/.cucumber/stepdefs.json +0 -627
- data/features/assertions.feature +0 -73
- data/features/autoformat_profile_output.feature +0 -23
- data/features/before_hook.feature +0 -43
- data/features/bootstrap.feature +0 -27
- data/features/custom_formatter.feature +0 -41
- data/features/drb_server_integration.feature +0 -63
- data/features/execute_with_tag_filter.feature +0 -63
- data/features/formatter_callbacks.feature +0 -189
- data/features/json_formatter.feature +0 -338
- data/features/parsing.feature +0 -18
- data/features/pretty_formatter.feature +0 -31
- data/features/rerun_formatter.feature +0 -35
- data/features/run_specific_scenarios.feature +0 -47
- data/features/stats_formatters.feature +0 -73
- data/features/step_definitions/cucumber-features/cucumber_ruby_mappings.rb +0 -197
- data/features/step_definitions/cucumber_steps.rb +0 -55
- data/features/step_definitions/drb_steps.rb +0 -3
- data/features/support/env.rb +0 -57
- data/features/tagged_hooks.feature +0 -59
- data/fixtures/json/features/background.feature +0 -7
- data/fixtures/json/features/embed.feature +0 -4
- data/fixtures/json/features/one_passing_one_failing.feature +0 -11
- data/fixtures/json/features/step_definitions/steps.rb +0 -32
- data/fixtures/json/features/tables.feature +0 -13
- data/fixtures/junit/features/one_passing_one_failing.feature +0 -8
- data/fixtures/junit/features/pending.feature +0 -7
- data/fixtures/junit/features/scenario_outline.feature +0 -9
- data/fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature +0 -8
- data/fixtures/junit/features/step_definitions/steps.rb +0 -11
- data/fixtures/self_test/README.textile +0 -6
- data/fixtures/self_test/Rakefile +0 -6
- data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +0 -7
- data/fixtures/self_test/features/failing_expectation.feature +0 -4
- data/fixtures/self_test/features/lots_of_undefined.feature +0 -8
- data/fixtures/self_test/features/multiline_name.feature +0 -27
- data/fixtures/self_test/features/outline_sample.feature +0 -15
- data/fixtures/self_test/features/sample.feature +0 -21
- data/fixtures/self_test/features/search_sample.feature +0 -32
- data/fixtures/self_test/features/step_definitions/sample_steps.rb +0 -84
- data/fixtures/self_test/features/support/bubble_256x256.png +0 -0
- data/fixtures/self_test/features/support/env.rb +0 -26
- data/fixtures/self_test/features/tags_sample.feature +0 -17
- data/fixtures/self_test/features/tons_of_cukes.feature +0 -52
- data/fixtures/self_test/features/undefined_multiline_args.feature +0 -12
- data/fixtures/self_test/list-of-features.txt +0 -1
- data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +0 -8
- data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +0 -8
- data/fixtures/tickets/Rakefile +0 -20
- data/fixtures/tickets/features/172.feature +0 -28
- data/fixtures/tickets/features/177/1.feature +0 -28
- data/fixtures/tickets/features/177/2.feature +0 -20
- data/fixtures/tickets/features/177/3.feature +0 -18
- data/fixtures/tickets/features/180.feature +0 -7
- data/fixtures/tickets/features/229/tagged_hooks.feature +0 -8
- data/fixtures/tickets/features/229/tagged_hooks.rb +0 -14
- data/fixtures/tickets/features/236.feature +0 -13
- data/fixtures/tickets/features/241.feature +0 -12
- data/fixtures/tickets/features/246.feature +0 -4
- data/fixtures/tickets/features/248.feature +0 -11
- data/fixtures/tickets/features/270/back.feature +0 -14
- data/fixtures/tickets/features/270/back.steps.rb +0 -14
- data/fixtures/tickets/features/272/hooks.feature +0 -26
- data/fixtures/tickets/features/272/hooks_steps.rb +0 -53
- data/fixtures/tickets/features/279/py_string_indent.feature +0 -25
- data/fixtures/tickets/features/279/py_string_indent.steps.rb +0 -12
- data/fixtures/tickets/features/279/wrong.feature_ +0 -11
- data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +0 -6
- data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +0 -12
- data/fixtures/tickets/features/306/only_background.feature +0 -4
- data/fixtures/tickets/features/around_timeout.feature +0 -6
- data/fixtures/tickets/features/gherkin_67.feature +0 -12
- data/fixtures/tickets/features/gherkin_68.feature +0 -4
- data/fixtures/tickets/features/half_manual.feature +0 -11
- data/fixtures/tickets/features/lib/eatting_machine.rb +0 -18
- data/fixtures/tickets/features/lib/pantry.rb +0 -20
- data/fixtures/tickets/features/scenario_outline.feature +0 -95
- data/fixtures/tickets/features/step_definitons/246_steps.rb +0 -3
- data/fixtures/tickets/features/step_definitons/248_steps.rb +0 -15
- data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +0 -9
- data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +0 -11
- data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +0 -42
- data/fixtures/tickets/features/step_definitons/tickets_steps.rb +0 -88
- data/fixtures/tickets/features/table_diffing.feature +0 -13
- data/fixtures/tickets/features/tickets.feature +0 -28
- data/fixtures/tickets/features.html +0 -138
- data/gem_tasks/yard/default/layout/html/bubble_32x32.png +0 -0
- data/gem_tasks/yard/default/layout/html/footer.erb +0 -5
- data/gem_tasks/yard/default/layout/html/index.erb +0 -1
- data/gem_tasks/yard/default/layout/html/layout.erb +0 -25
- data/gem_tasks/yard/default/layout/html/logo.erb +0 -1
- data/gem_tasks/yard/default/layout/html/setup.rb +0 -4
- data/gem_tasks/yard.rake +0 -40
- data/legacy_features/README.md +0 -14
- data/legacy_features/announce.feature +0 -152
- data/legacy_features/bug_371.feature +0 -32
- data/legacy_features/bug_464.feature +0 -16
- data/legacy_features/bug_475.feature +0 -42
- data/legacy_features/bug_585_tab_indentation.feature +0 -22
- data/legacy_features/bug_600.feature +0 -73
- data/legacy_features/cucumber_cli.feature +0 -584
- data/legacy_features/cucumber_cli_outlines.feature +0 -117
- data/legacy_features/default_snippets.feature +0 -43
- data/legacy_features/diffing.feature +0 -25
- data/legacy_features/drb_server_integration.feature +0 -174
- data/legacy_features/exclude_files.feature +0 -20
- data/legacy_features/expand.feature +0 -60
- data/legacy_features/junit_formatter.feature +0 -214
- data/legacy_features/language_from_header.feature +0 -30
- data/legacy_features/listener_debugger_formatter.feature +0 -42
- data/legacy_features/multiline_names.feature +0 -44
- data/legacy_features/report_called_undefined_steps.feature +0 -35
- data/legacy_features/rerun_formatter.feature +0 -52
- data/legacy_features/simplest.feature +0 -11
- data/legacy_features/snippet.feature +0 -23
- data/legacy_features/snippets_when_using_star_keyword.feature +0 -38
- data/legacy_features/step_definitions/cucumber_steps.rb +0 -179
- data/legacy_features/step_definitions/extra_steps.rb +0 -2
- data/legacy_features/step_definitions/simplest_steps.rb +0 -3
- data/legacy_features/step_definitions/wire_steps.rb +0 -34
- data/legacy_features/support/env.rb +0 -161
- data/legacy_features/support/env.rb.simplest +0 -7
- data/legacy_features/table_mapping.feature +0 -34
- data/legacy_features/transform.feature +0 -245
- data/legacy_features/unicode_table.feature +0 -35
- data/legacy_features/wire_protocol.feature +0 -332
- data/lib/README.rdoc +0 -12
- data/lib/cucumber/ast/background.rb +0 -116
- data/lib/cucumber/ast/comment.rb +0 -31
- data/lib/cucumber/ast/doc_string.rb +0 -61
- data/lib/cucumber/ast/empty_background.rb +0 -33
- data/lib/cucumber/ast/examples.rb +0 -49
- data/lib/cucumber/ast/feature.rb +0 -99
- data/lib/cucumber/ast/features.rb +0 -38
- data/lib/cucumber/ast/has_steps.rb +0 -74
- data/lib/cucumber/ast/location.rb +0 -41
- data/lib/cucumber/ast/multiline_argument.rb +0 -30
- data/lib/cucumber/ast/names.rb +0 -13
- data/lib/cucumber/ast/outline_table.rb +0 -194
- data/lib/cucumber/ast/scenario.rb +0 -103
- data/lib/cucumber/ast/scenario_outline.rb +0 -146
- data/lib/cucumber/ast/step.rb +0 -122
- data/lib/cucumber/ast/step_collection.rb +0 -92
- data/lib/cucumber/ast/step_invocation.rb +0 -196
- data/lib/cucumber/ast/tags.rb +0 -28
- data/lib/cucumber/ast/tree_walker.rb +0 -191
- data/lib/cucumber/ast/visitor.rb +0 -11
- data/lib/cucumber/broadcaster.rb +0 -13
- data/lib/cucumber/cli/drb_client.rb +0 -43
- data/lib/cucumber/feature_file.rb +0 -94
- data/lib/cucumber/formatter/ordered_xml_markup.rb +0 -24
- data/lib/cucumber/js_support/js_dsl.js +0 -57
- data/lib/cucumber/js_support/js_language.rb +0 -185
- data/lib/cucumber/js_support/js_snippets.rb +0 -27
- data/lib/cucumber/parser/gherkin_builder.rb +0 -284
- data/lib/cucumber/parser.rb +0 -2
- data/lib/cucumber/py_support/py_dsl.py +0 -10
- data/lib/cucumber/py_support/py_language.py +0 -10
- data/lib/cucumber/py_support/py_language.rb +0 -80
- data/lib/cucumber/runtime/features_loader.rb +0 -62
- data/lib/cucumber/runtime/results.rb +0 -64
- data/lib/cucumber/step_mother.rb +0 -10
- data/spec/cucumber/ast/background_spec.rb +0 -122
- data/spec/cucumber/ast/doc_string_spec.rb +0 -40
- data/spec/cucumber/ast/feature_factory.rb +0 -72
- data/spec/cucumber/ast/feature_spec.rb +0 -63
- data/spec/cucumber/ast/features_spec.rb +0 -51
- data/spec/cucumber/ast/outline_table_spec.rb +0 -21
- data/spec/cucumber/ast/scenario_outline_spec.rb +0 -74
- data/spec/cucumber/ast/step_spec.rb +0 -68
- data/spec/cucumber/ast/tree_walker_spec.rb +0 -19
- data/spec/cucumber/broadcaster_spec.rb +0 -15
- data/spec/cucumber/cli/drb_client_spec.rb +0 -76
- data/spec/cucumber/rake/rcov_spec.rb +0 -71
- data/spec/cucumber/runtime/results_spec.rb +0 -81
- data/spec/cucumber/wire_support/wire_step_definition_spec.rb +0 -20
- /data/examples/i18n/ar/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/bg/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ca/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/cs/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/da/features/{step_definitons → step_definitions}/lommeregner_steps.rb +0 -0
- /data/examples/i18n/de/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/en/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/eo/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/es/features/{step_definitons → step_definitions}/calculador_steps.rb +0 -0
- /data/examples/i18n/fi/features/{step_definitons → step_definitions}/laskin_steps.rb +0 -0
- /data/examples/i18n/he/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/hi/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/hu/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/id/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/it/features/{step_definitons → step_definitions}/calcolatrice_steps.rb +0 -0
- /data/examples/i18n/ja/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ko/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/lt/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/lv/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/no/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
- /data/examples/i18n/pl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ro/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ru/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sr-Cyrl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sr-Latn/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sv/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
- /data/examples/i18n/tr/features/{step_definitons → step_definitions}/hesap_makinesi_adimlari.rb +0 -0
- /data/examples/i18n/uk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/uz/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/zh-TW/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/features/{nested_steps_with_second_arg.feature → docs/defining_steps/nested_steps_with_second_arg.feature} +0 -0
- /data/features/{iso-8859-1.feature → docs/iso-8859-1.feature} +0 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
Feature: Run specific scenarios
|
|
2
|
+
|
|
3
|
+
You can choose to run a specific scenario using the file:line format,
|
|
4
|
+
or you can pass in a file with a list of scenarios using @-notation.
|
|
5
|
+
|
|
6
|
+
The line number can fall anywhere within the body of a scenario, including
|
|
7
|
+
steps, tags, comments, description, data tables or doc strings.
|
|
8
|
+
|
|
9
|
+
For scenario outlines, if the line hits one example row, just that one
|
|
10
|
+
will be run. Otherwise all examples in the table or outline will be run.
|
|
11
|
+
|
|
12
|
+
Background:
|
|
13
|
+
Given the standard step definitions
|
|
14
|
+
|
|
15
|
+
Scenario: Two scenarios, run just one of them
|
|
16
|
+
Given a file named "features/test.feature" with:
|
|
17
|
+
"""
|
|
18
|
+
Feature:
|
|
19
|
+
|
|
20
|
+
Scenario: Miss
|
|
21
|
+
Given this step is undefined
|
|
22
|
+
|
|
23
|
+
Scenario: Hit
|
|
24
|
+
Given this step passes
|
|
25
|
+
"""
|
|
26
|
+
When I run `cucumber features/test.feature:7 --format pretty --quiet`
|
|
27
|
+
Then it should pass with:
|
|
28
|
+
"""
|
|
29
|
+
Feature:
|
|
30
|
+
|
|
31
|
+
Scenario: Hit
|
|
32
|
+
Given this step passes
|
|
33
|
+
|
|
34
|
+
1 scenario (1 passed)
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
Scenario: Use @-notation to specify a file containing feature file list
|
|
38
|
+
Given a file named "features/test.feature" with:
|
|
39
|
+
"""
|
|
40
|
+
Feature: Sample
|
|
41
|
+
Scenario: Passing
|
|
42
|
+
Given this step passes
|
|
43
|
+
"""
|
|
44
|
+
And a file named "list-of-features.txt" with:
|
|
45
|
+
"""
|
|
46
|
+
features/test.feature:2
|
|
47
|
+
"""
|
|
48
|
+
When I run `cucumber -q @list-of-features.txt`
|
|
49
|
+
Then it should pass with:
|
|
50
|
+
"""
|
|
51
|
+
Feature: Sample
|
|
52
|
+
|
|
53
|
+
Scenario: Passing
|
|
54
|
+
Given this step passes
|
|
55
|
+
|
|
56
|
+
1 scenario (1 passed)
|
|
57
|
+
1 step (1 passed)
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
Scenario: Specify order of scenarios
|
|
61
|
+
Given a file named "features/test.feature" with:
|
|
62
|
+
"""
|
|
63
|
+
Feature:
|
|
64
|
+
Scenario:
|
|
65
|
+
Given this step passes
|
|
66
|
+
|
|
67
|
+
Scenario:
|
|
68
|
+
Given this step fails
|
|
69
|
+
"""
|
|
70
|
+
When I run `cucumber features/test.feature:5 features/test.feature:3 -f progress`
|
|
71
|
+
Then it should fail with:
|
|
72
|
+
"""
|
|
73
|
+
F.
|
|
74
|
+
"""
|
|
75
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Feature: Showing differences to expected output
|
|
2
|
+
|
|
3
|
+
Cucumber will helpfully show you the expectation error that your
|
|
4
|
+
testing library gives you, in the context of the failing scenario.
|
|
5
|
+
When using RSpec, for example, this will show the difference between
|
|
6
|
+
the expected and the actual output.
|
|
7
|
+
|
|
8
|
+
Scenario: Run single failing scenario with default diff enabled
|
|
9
|
+
Given a file named "features/failing_expectation.feature" with:
|
|
10
|
+
"""
|
|
11
|
+
Feature: Failing expectation
|
|
12
|
+
|
|
13
|
+
Scenario: Failing expectation
|
|
14
|
+
Given failing expectation
|
|
15
|
+
"""
|
|
16
|
+
And a file named "features/step_definitions/steps.rb" with:
|
|
17
|
+
"""
|
|
18
|
+
Given /^failing expectation$/ do x=1
|
|
19
|
+
expect('this').to eq 'that'
|
|
20
|
+
end
|
|
21
|
+
"""
|
|
22
|
+
When I run `cucumber -q features/failing_expectation.feature`
|
|
23
|
+
Then it should fail with:
|
|
24
|
+
"""
|
|
25
|
+
Feature: Failing expectation
|
|
26
|
+
|
|
27
|
+
Scenario: Failing expectation
|
|
28
|
+
Given failing expectation
|
|
29
|
+
|
|
30
|
+
expected: "that"
|
|
31
|
+
got: "this"
|
|
32
|
+
|
|
33
|
+
(compared using ==)
|
|
34
|
+
(RSpec::Expectations::ExpectationNotMetError)
|
|
35
|
+
./features/step_definitions/steps.rb:2:in `/^failing expectation$/'
|
|
36
|
+
features/failing_expectation.feature:4:in `Given failing expectation'
|
|
37
|
+
|
|
38
|
+
Failing Scenarios:
|
|
39
|
+
cucumber features/failing_expectation.feature:3
|
|
40
|
+
|
|
41
|
+
1 scenario (1 failed)
|
|
42
|
+
1 step (1 failed)
|
|
43
|
+
"""
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
@spawn
|
|
2
|
+
Feature: Running multiple formatters
|
|
3
|
+
|
|
4
|
+
When running cucumber, you are able to using multiple different
|
|
5
|
+
formatters and redirect the output to text files.
|
|
6
|
+
|
|
7
|
+
Scenario: Multiple formatters and outputs
|
|
8
|
+
Given a file named "features/test.feature" with:
|
|
9
|
+
"""
|
|
10
|
+
Feature: Lots of undefined
|
|
11
|
+
|
|
12
|
+
Scenario: Implement me
|
|
13
|
+
Given it snows in Sahara
|
|
14
|
+
Given it's 40 degrees in Norway
|
|
15
|
+
And it's 40 degrees in Norway
|
|
16
|
+
When I stop procrastinating
|
|
17
|
+
And there is world peace
|
|
18
|
+
"""
|
|
19
|
+
When I run `cucumber --no-color --format progress --out progress.txt --format pretty --out pretty.txt --no-source --dry-run --no-snippets features/test.feature`
|
|
20
|
+
Then the stderr should not contain anything
|
|
21
|
+
Then the file "progress.txt" should contain:
|
|
22
|
+
"""
|
|
23
|
+
UUUUU
|
|
24
|
+
|
|
25
|
+
1 scenario (1 undefined)
|
|
26
|
+
5 steps (5 undefined)
|
|
27
|
+
|
|
28
|
+
"""
|
|
29
|
+
And the file "pretty.txt" should contain:
|
|
30
|
+
"""
|
|
31
|
+
Feature: Lots of undefined
|
|
32
|
+
|
|
33
|
+
Scenario: Implement me
|
|
34
|
+
Given it snows in Sahara
|
|
35
|
+
Given it's 40 degrees in Norway
|
|
36
|
+
And it's 40 degrees in Norway
|
|
37
|
+
When I stop procrastinating
|
|
38
|
+
And there is world peace
|
|
39
|
+
|
|
40
|
+
1 scenario (1 undefined)
|
|
41
|
+
5 steps (5 undefined)
|
|
42
|
+
|
|
43
|
+
"""
|
|
44
|
+
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
Feature: Strict mode
|
|
2
|
+
|
|
3
|
+
Using the `--strict` flag will cause cucumber to fail unless all the
|
|
4
|
+
step definitions have been defined.
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given a file named "features/missing.feature" with:
|
|
8
|
+
"""
|
|
9
|
+
Feature: Missing
|
|
10
|
+
Scenario: Missing
|
|
11
|
+
Given this step passes
|
|
12
|
+
"""
|
|
13
|
+
And a file named "features/pending.feature" with:
|
|
14
|
+
"""
|
|
15
|
+
Feature: Pending
|
|
16
|
+
Scenario: Pending
|
|
17
|
+
Given this step is pending
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
Scenario: Fail with --strict due to undefined step
|
|
21
|
+
When I run `cucumber -q features/missing.feature --strict`
|
|
22
|
+
Then it should fail with:
|
|
23
|
+
"""
|
|
24
|
+
Feature: Missing
|
|
25
|
+
|
|
26
|
+
Scenario: Missing
|
|
27
|
+
Given this step passes
|
|
28
|
+
Undefined step: "this step passes" (Cucumber::Undefined)
|
|
29
|
+
features/missing.feature:3:in `Given this step passes'
|
|
30
|
+
|
|
31
|
+
1 scenario (1 undefined)
|
|
32
|
+
1 step (1 undefined)
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
Scenario: Fail with --strict due to pending step
|
|
36
|
+
Given the standard step definitions
|
|
37
|
+
When I run `cucumber -q features/pending.feature --strict`
|
|
38
|
+
Then it should fail with:
|
|
39
|
+
"""
|
|
40
|
+
Feature: Pending
|
|
41
|
+
|
|
42
|
+
Scenario: Pending
|
|
43
|
+
Given this step is pending
|
|
44
|
+
TODO (Cucumber::Pending)
|
|
45
|
+
./features/step_definitions/steps.rb:3:in `/^this step is pending$/'
|
|
46
|
+
features/pending.feature:3:in `Given this step is pending'
|
|
47
|
+
|
|
48
|
+
1 scenario (1 pending)
|
|
49
|
+
1 step (1 pending)
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
Scenario: Succeed with --strict
|
|
53
|
+
Given the standard step definitions
|
|
54
|
+
When I run `cucumber -q features/missing.feature --strict`
|
|
55
|
+
Then it should pass with:
|
|
56
|
+
"""
|
|
57
|
+
Feature: Missing
|
|
58
|
+
|
|
59
|
+
Scenario: Missing
|
|
60
|
+
Given this step passes
|
|
61
|
+
|
|
62
|
+
1 scenario (1 passed)
|
|
63
|
+
1 step (1 passed)
|
|
64
|
+
"""
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
Feature: Nested Steps
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
Background:
|
|
5
4
|
Given a scenario with a step that looks like this:
|
|
6
5
|
"""gherkin
|
|
@@ -112,16 +111,14 @@ Feature: Nested Steps
|
|
|
112
111
|
step "I have a couple turtles"
|
|
113
112
|
end
|
|
114
113
|
|
|
115
|
-
When
|
|
116
|
-
raise 'error'
|
|
117
|
-
end
|
|
114
|
+
When(/I have a couple turtles/) { raise 'error' }
|
|
118
115
|
"""
|
|
119
116
|
When I run the feature with the progress formatter
|
|
120
117
|
Then it should fail with:
|
|
121
118
|
"""
|
|
122
119
|
error (RuntimeError)
|
|
123
|
-
./features/step_definitions/
|
|
124
|
-
./features/step_definitions/
|
|
120
|
+
./features/step_definitions/steps2.rb:5:in `/I have a couple turtles/'
|
|
121
|
+
./features/step_definitions/steps2.rb:2:in `/two turtles/'
|
|
125
122
|
features/test_feature_1.feature:3:in `Given two turtles'
|
|
126
123
|
|
|
127
124
|
Failing Scenarios:
|
|
@@ -130,3 +127,52 @@ Feature: Nested Steps
|
|
|
130
127
|
1 scenario (1 failed)
|
|
131
128
|
1 step (1 failed)
|
|
132
129
|
"""
|
|
130
|
+
|
|
131
|
+
Scenario: Undefined nested step
|
|
132
|
+
Given a file named "features/call_undefined_step_from_step_def.feature" with:
|
|
133
|
+
"""
|
|
134
|
+
Feature: Calling undefined step
|
|
135
|
+
|
|
136
|
+
Scenario: Call directly
|
|
137
|
+
Given a step that calls an undefined step
|
|
138
|
+
|
|
139
|
+
Scenario: Call via another
|
|
140
|
+
Given a step that calls a step that calls an undefined step
|
|
141
|
+
"""
|
|
142
|
+
And a file named "features/step_definitions/steps.rb" with:
|
|
143
|
+
"""
|
|
144
|
+
Given /^a step that calls an undefined step$/ do
|
|
145
|
+
step 'this does not exist'
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
Given /^a step that calls a step that calls an undefined step$/ do
|
|
149
|
+
step 'a step that calls an undefined step'
|
|
150
|
+
end
|
|
151
|
+
"""
|
|
152
|
+
When I run `cucumber -q features/call_undefined_step_from_step_def.feature`
|
|
153
|
+
Then it should fail with exactly:
|
|
154
|
+
"""
|
|
155
|
+
Feature: Calling undefined step
|
|
156
|
+
|
|
157
|
+
Scenario: Call directly
|
|
158
|
+
Given a step that calls an undefined step
|
|
159
|
+
Undefined dynamic step: "this does not exist" (Cucumber::UndefinedDynamicStep)
|
|
160
|
+
./features/step_definitions/steps.rb:2:in `/^a step that calls an undefined step$/'
|
|
161
|
+
features/call_undefined_step_from_step_def.feature:4:in `Given a step that calls an undefined step'
|
|
162
|
+
|
|
163
|
+
Scenario: Call via another
|
|
164
|
+
Given a step that calls a step that calls an undefined step
|
|
165
|
+
Undefined dynamic step: "this does not exist" (Cucumber::UndefinedDynamicStep)
|
|
166
|
+
./features/step_definitions/steps.rb:2:in `/^a step that calls an undefined step$/'
|
|
167
|
+
./features/step_definitions/steps.rb:6:in `/^a step that calls a step that calls an undefined step$/'
|
|
168
|
+
features/call_undefined_step_from_step_def.feature:7:in `Given a step that calls a step that calls an undefined step'
|
|
169
|
+
|
|
170
|
+
Failing Scenarios:
|
|
171
|
+
cucumber features/call_undefined_step_from_step_def.feature:3
|
|
172
|
+
cucumber features/call_undefined_step_from_step_def.feature:6
|
|
173
|
+
|
|
174
|
+
2 scenarios (2 failed)
|
|
175
|
+
2 steps (2 failed)
|
|
176
|
+
0m0.012s
|
|
177
|
+
|
|
178
|
+
"""
|
data/features/{step_definitions.feature → docs/defining_steps/one_line_step_definitions.feature}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Feature:
|
|
1
|
+
Feature: One line step definitions
|
|
2
2
|
|
|
3
3
|
Everybody knows you can do step definitions in Cucumber
|
|
4
4
|
but did you know you can do this?
|
|
@@ -12,7 +12,7 @@ Feature: Step Definitions
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def assert_done
|
|
15
|
-
@done.
|
|
15
|
+
expect(@done).to be true
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
World(Driver)
|
|
@@ -39,7 +39,7 @@ Feature: Step Definitions
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def assert_done
|
|
42
|
-
@done.
|
|
42
|
+
expect(@done).to be true
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
Feature: Pretty formatter - Printing messages
|
|
2
|
+
|
|
3
|
+
When you want to print to Cucumber's output, just call `puts` from
|
|
4
|
+
a step definition. Cucumber will grab the output and print it via
|
|
5
|
+
the formatter that you're using.
|
|
6
|
+
|
|
7
|
+
Your message will be printed out after the step has run.
|
|
8
|
+
|
|
9
|
+
Background:
|
|
10
|
+
Given the standard step definitions
|
|
11
|
+
And a file named "features/step_definitions/puts_steps.rb" with:
|
|
12
|
+
"""
|
|
13
|
+
Given /^I use puts with text "(.*)"$/ do |ann|
|
|
14
|
+
puts(ann)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Given /^I use multiple putss$/ do
|
|
18
|
+
puts("Multiple")
|
|
19
|
+
puts("Announce","Me")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Given /^I use message (.+) in line (.+) (?:with result (.+))$/ do |ann, line, result|
|
|
23
|
+
puts("Last message") if line == "3"
|
|
24
|
+
puts("Line: #{line}: #{ann}")
|
|
25
|
+
fail if result =~ /fail/i
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Given /^I use puts and step fails$/ do
|
|
29
|
+
puts("Announce with fail")
|
|
30
|
+
fail
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Given /^I puts the world$/ do
|
|
34
|
+
puts(self)
|
|
35
|
+
end
|
|
36
|
+
"""
|
|
37
|
+
And a file named "features/f.feature" with:
|
|
38
|
+
"""
|
|
39
|
+
Feature:
|
|
40
|
+
|
|
41
|
+
Scenario:
|
|
42
|
+
Given I use puts with text "Ann"
|
|
43
|
+
And this step passes
|
|
44
|
+
|
|
45
|
+
Scenario:
|
|
46
|
+
Given I use multiple putss
|
|
47
|
+
And this step passes
|
|
48
|
+
|
|
49
|
+
Scenario Outline:
|
|
50
|
+
Given I use message <ann> in line <line>
|
|
51
|
+
|
|
52
|
+
Examples:
|
|
53
|
+
| line | ann |
|
|
54
|
+
| 1 | anno1 |
|
|
55
|
+
| 2 | anno2 |
|
|
56
|
+
| 3 | anno3 |
|
|
57
|
+
|
|
58
|
+
Scenario:
|
|
59
|
+
Given I use puts and step fails
|
|
60
|
+
And this step passes
|
|
61
|
+
|
|
62
|
+
Scenario Outline:
|
|
63
|
+
Given I use message <ann> in line <line> with result <result>
|
|
64
|
+
|
|
65
|
+
Examples:
|
|
66
|
+
| line | ann | result |
|
|
67
|
+
| 1 | anno1 | fail |
|
|
68
|
+
| 2 | anno2 | pass |
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
And a file named "features/puts_world.feature" with:
|
|
72
|
+
"""
|
|
73
|
+
Feature: puts_world
|
|
74
|
+
Scenario: puts_world
|
|
75
|
+
Given I puts the world
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
# Don't know why, but we need to spawn this for JRuby otherwise it gives wierd errors
|
|
79
|
+
@spawn
|
|
80
|
+
Scenario: Delayed messages feature
|
|
81
|
+
When I run `cucumber --quiet --format pretty features/f.feature`
|
|
82
|
+
Then the stderr should not contain anything
|
|
83
|
+
And the output should contain:
|
|
84
|
+
"""
|
|
85
|
+
Feature:
|
|
86
|
+
|
|
87
|
+
Scenario:
|
|
88
|
+
Given I use puts with text "Ann"
|
|
89
|
+
Ann
|
|
90
|
+
And this step passes
|
|
91
|
+
|
|
92
|
+
Scenario:
|
|
93
|
+
Given I use multiple putss
|
|
94
|
+
Multiple
|
|
95
|
+
Announce
|
|
96
|
+
Me
|
|
97
|
+
And this step passes
|
|
98
|
+
|
|
99
|
+
Scenario Outline:
|
|
100
|
+
Given I use message <ann> in line <line>
|
|
101
|
+
|
|
102
|
+
Examples:
|
|
103
|
+
| line | ann |
|
|
104
|
+
| 1 | anno1 |
|
|
105
|
+
| 2 | anno2 |
|
|
106
|
+
| 3 | anno3 |
|
|
107
|
+
|
|
108
|
+
Scenario:
|
|
109
|
+
Given I use puts and step fails
|
|
110
|
+
Announce with fail
|
|
111
|
+
(RuntimeError)
|
|
112
|
+
./features/step_definitions/puts_steps.rb:18:in `/^I use puts and step fails$/'
|
|
113
|
+
features/f.feature:21:in `Given I use puts and step fails'
|
|
114
|
+
And this step passes
|
|
115
|
+
|
|
116
|
+
Scenario Outline:
|
|
117
|
+
Given I use message <ann> in line <line> with result <result>
|
|
118
|
+
|
|
119
|
+
Examples:
|
|
120
|
+
| line | ann | result |
|
|
121
|
+
| 1 | anno1 | fail | Line: 1: anno1
|
|
122
|
+
(RuntimeError)
|
|
123
|
+
./features/step_definitions/puts_steps.rb:13:in `/^I use message (.+) in line (.+) (?:with result (.+))$/'
|
|
124
|
+
features/f.feature:29:in `Given I use message anno1 in line 1 with result fail'
|
|
125
|
+
features/f.feature:25:in `Given I use message <ann> in line <line> with result <result>'
|
|
126
|
+
| 2 | anno2 | pass | Line: 2: anno2
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
Scenario: Non-delayed messages feature (progress formatter)
|
|
130
|
+
When I run `cucumber --format progress features/f.feature`
|
|
131
|
+
Then the output should contain:
|
|
132
|
+
"""
|
|
133
|
+
Ann
|
|
134
|
+
..
|
|
135
|
+
Multiple
|
|
136
|
+
|
|
137
|
+
Announce
|
|
138
|
+
|
|
139
|
+
Me
|
|
140
|
+
..-UUUUUU
|
|
141
|
+
Announce with fail
|
|
142
|
+
F--
|
|
143
|
+
Line: 1: anno1
|
|
144
|
+
FFF
|
|
145
|
+
Line: 2: anno2
|
|
146
|
+
...
|
|
147
|
+
"""
|
|
148
|
+
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
Feature: Skip Scenario
|
|
2
|
+
|
|
3
|
+
Scenario: With a passing step
|
|
4
|
+
Given a file named "features/test.feature" with:
|
|
5
|
+
"""
|
|
6
|
+
Feature: test
|
|
7
|
+
Scenario: test
|
|
8
|
+
Given this step says to skip
|
|
9
|
+
And this step passes
|
|
10
|
+
"""
|
|
11
|
+
And the standard step definitions
|
|
12
|
+
And a file named "features/step_definitions/skippy.rb" with:
|
|
13
|
+
"""
|
|
14
|
+
Given /skip/ do
|
|
15
|
+
skip_this_scenario
|
|
16
|
+
end
|
|
17
|
+
"""
|
|
18
|
+
When I run `cucumber -q`
|
|
19
|
+
Then it should pass with exactly:
|
|
20
|
+
"""
|
|
21
|
+
Feature: test
|
|
22
|
+
|
|
23
|
+
Scenario: test
|
|
24
|
+
Given this step says to skip
|
|
25
|
+
And this step passes
|
|
26
|
+
|
|
27
|
+
1 scenario (1 skipped)
|
|
28
|
+
2 steps (2 skipped)
|
|
29
|
+
0m0.012s
|
|
30
|
+
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
Scenario: Use legacy API from a hook
|
|
34
|
+
Given a file named "features/test.feature" with:
|
|
35
|
+
"""
|
|
36
|
+
Feature: test
|
|
37
|
+
Scenario: test
|
|
38
|
+
Given this step passes
|
|
39
|
+
And this step passes
|
|
40
|
+
"""
|
|
41
|
+
And the standard step definitions
|
|
42
|
+
And a file named "features/support/hook.rb" with:
|
|
43
|
+
"""
|
|
44
|
+
Before do |scenario|
|
|
45
|
+
scenario.skip_invoke!
|
|
46
|
+
end
|
|
47
|
+
"""
|
|
48
|
+
When I run `cucumber -q`
|
|
49
|
+
Then it should pass with:
|
|
50
|
+
"""
|
|
51
|
+
Feature: test
|
|
52
|
+
|
|
53
|
+
Scenario: test
|
|
54
|
+
Given this step passes
|
|
55
|
+
And this step passes
|
|
56
|
+
|
|
57
|
+
1 scenario (1 skipped)
|
|
58
|
+
2 steps (2 skipped)
|
|
59
|
+
0m0.012s
|
|
60
|
+
|
|
61
|
+
"""
|
|
62
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Feature: Snippets
|
|
2
|
+
|
|
3
|
+
Cucumber helpfully prints out any undefined step definitions as a code
|
|
4
|
+
snippet suggestion, which you can then paste into a step definitions
|
|
5
|
+
file of your choosing.
|
|
6
|
+
|
|
7
|
+
Scenario: Snippet for undefined step with a pystring
|
|
8
|
+
Given a file named "features/undefined_steps.feature" with:
|
|
9
|
+
"""
|
|
10
|
+
Feature:
|
|
11
|
+
Scenario: pystring
|
|
12
|
+
Given a pystring
|
|
13
|
+
\"\"\"
|
|
14
|
+
example with <html> entities
|
|
15
|
+
\"\"\"
|
|
16
|
+
When a simple when step
|
|
17
|
+
And another when step
|
|
18
|
+
Then a simple then step
|
|
19
|
+
"""
|
|
20
|
+
When I run `cucumber features/undefined_steps.feature -s`
|
|
21
|
+
Then the output should contain:
|
|
22
|
+
"""
|
|
23
|
+
Given(/^a pystring$/) do |string|
|
|
24
|
+
pending # Write code here that turns the phrase above into concrete actions
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
When(/^a simple when step$/) do
|
|
28
|
+
pending # Write code here that turns the phrase above into concrete actions
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
When(/^another when step$/) do
|
|
32
|
+
pending # Write code here that turns the phrase above into concrete actions
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
Then(/^a simple then step$/) do
|
|
36
|
+
pending # Write code here that turns the phrase above into concrete actions
|
|
37
|
+
end
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
Scenario: Snippet for undefined step with a step table
|
|
41
|
+
Given a file named "features/undefined_steps.feature" with:
|
|
42
|
+
"""
|
|
43
|
+
Feature:
|
|
44
|
+
Scenario: table
|
|
45
|
+
Given a table
|
|
46
|
+
| table |
|
|
47
|
+
|example|
|
|
48
|
+
"""
|
|
49
|
+
When I run `cucumber features/undefined_steps.feature -s`
|
|
50
|
+
Then the output should contain:
|
|
51
|
+
"""
|
|
52
|
+
Given(/^a table$/) do |table|
|
|
53
|
+
# table is a Cucumber::Core::Ast::DataTable
|
|
54
|
+
pending # Write code here that turns the phrase above into concrete actions
|
|
55
|
+
end
|
|
56
|
+
"""
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Feature: Table diffing
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
a table with expected data and see the diff
|
|
5
|
-
|
|
2
|
+
|
|
3
|
+
To allow you to more easily compare data in tables, you are able
|
|
4
|
+
to easily diff a table with expected data and see the diff in your
|
|
5
|
+
output.
|
|
6
|
+
|
|
6
7
|
Scenario: Extra row
|
|
7
|
-
Given a
|
|
8
|
-
And a file named "features/tables.feature" with:
|
|
8
|
+
Given a file named "features/tables.feature" with:
|
|
9
9
|
"""
|
|
10
10
|
Feature: Tables
|
|
11
11
|
Scenario: Extra row
|
|
@@ -13,33 +13,38 @@ Feature: Table diffing
|
|
|
13
13
|
| x | y |
|
|
14
14
|
| a | b |
|
|
15
15
|
"""
|
|
16
|
-
And a file named "features/step_definitions/
|
|
16
|
+
And a file named "features/step_definitions/steps.rb" with:
|
|
17
17
|
"""
|
|
18
18
|
Then /the table should be:/ do |expected| x=1
|
|
19
19
|
expected.diff!(table(%{
|
|
20
|
-
| x | y |
|
|
20
|
+
| x | y |
|
|
21
21
|
| a | c |
|
|
22
22
|
}))
|
|
23
23
|
end
|
|
24
24
|
"""
|
|
25
|
-
When I run cucumber
|
|
26
|
-
Then it should fail with
|
|
25
|
+
When I run `cucumber features/tables.feature`
|
|
26
|
+
Then it should fail with exactly:
|
|
27
27
|
"""
|
|
28
28
|
Feature: Tables
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
Scenario: Extra row # features/tables.feature:2
|
|
31
|
-
Then the table should be: # features/step_definitions/
|
|
31
|
+
Then the table should be: # features/step_definitions/steps.rb:1
|
|
32
32
|
| x | y |
|
|
33
33
|
| a | b |
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
Tables were not identical:
|
|
35
|
+
|
|
36
|
+
| x | y |
|
|
37
|
+
| (-) a | (-) b |
|
|
38
|
+
| (+) a | (+) c |
|
|
39
|
+
(Cucumber::MultilineArgument::DataTable::Different)
|
|
40
|
+
./features/step_definitions/steps.rb:2:in `/the table should be:/'
|
|
37
41
|
features/tables.feature:3:in `Then the table should be:'
|
|
38
|
-
|
|
42
|
+
|
|
39
43
|
Failing Scenarios:
|
|
40
44
|
cucumber features/tables.feature:2 # Scenario: Extra row
|
|
41
45
|
|
|
42
46
|
1 scenario (1 failed)
|
|
43
47
|
1 step (1 failed)
|
|
48
|
+
0m0.012s
|
|
44
49
|
|
|
45
50
|
"""
|
|
@@ -37,7 +37,7 @@ Feature: Transforms
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
Given /^(a Person aged \d+) with blonde hair$/ do |person|
|
|
40
|
-
person.age.
|
|
40
|
+
expect(person.age).to eq 15
|
|
41
41
|
end
|
|
42
42
|
"""
|
|
43
43
|
When I run `cucumber features/foo.feature`
|
|
@@ -56,7 +56,7 @@ Feature: Transforms
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
Given /^(#{A_PERSON}) with blonde hair$/ do |person|
|
|
59
|
-
person.age.
|
|
59
|
+
expect(person.age).to eq 15
|
|
60
60
|
end
|
|
61
61
|
"""
|
|
62
62
|
When I run `cucumber features/foo.feature`
|