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,43 @@
|
|
|
1
|
+
module Cucumber
|
|
2
|
+
|
|
3
|
+
# Generates generic file structure for a cucumber project
|
|
4
|
+
class ProjectInitializer
|
|
5
|
+
def run
|
|
6
|
+
create_directory('features')
|
|
7
|
+
create_directory('features/step_definitions')
|
|
8
|
+
create_directory('features/support')
|
|
9
|
+
create_file('features/support/env.rb')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def create_directory(dir_name)
|
|
15
|
+
create_directory_or_file dir_name, true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def create_file(file_name)
|
|
19
|
+
create_directory_or_file file_name, false
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create_directory_or_file(file_name, directory)
|
|
23
|
+
file_type = if directory
|
|
24
|
+
:mkdir_p
|
|
25
|
+
else
|
|
26
|
+
:touch
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
report_exists(file_name) || return if File.exists?(file_name)
|
|
30
|
+
|
|
31
|
+
report_creating(file_name)
|
|
32
|
+
FileUtils.send file_type, file_name
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def report_exists(file)
|
|
36
|
+
puts " exist #{file}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def report_creating(file)
|
|
40
|
+
puts " create #{file}"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
data/lib/cucumber/rake/task.rb
CHANGED
|
@@ -23,12 +23,6 @@ module Cucumber
|
|
|
23
23
|
# t.cucumber_opts = %w{--format progress}
|
|
24
24
|
# end
|
|
25
25
|
#
|
|
26
|
-
# This task can also be configured to be run with RCov:
|
|
27
|
-
#
|
|
28
|
-
# Cucumber::Rake::Task.new do |t|
|
|
29
|
-
# t.rcov = true
|
|
30
|
-
# end
|
|
31
|
-
#
|
|
32
26
|
# See the attributes for additional configuration possibilities.
|
|
33
27
|
class Task
|
|
34
28
|
include Gherkin::Formatter::AnsiEscapes
|
|
@@ -103,27 +97,6 @@ module Cucumber
|
|
|
103
97
|
end
|
|
104
98
|
end
|
|
105
99
|
|
|
106
|
-
class RCovCucumberRunner < ForkedCucumberRunner #:nodoc:
|
|
107
|
-
|
|
108
|
-
def initialize(libs, cucumber_bin, cucumber_opts, bundler, feature_files, rcov_opts)
|
|
109
|
-
super( libs, cucumber_bin, cucumber_opts, bundler, feature_files )
|
|
110
|
-
@rcov_opts = rcov_opts
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def cmd
|
|
114
|
-
if use_bundler
|
|
115
|
-
[Cucumber::RUBY_BINARY, '-S', 'bundle', 'exec', 'rcov', @rcov_opts,
|
|
116
|
-
quoted_binary(@cucumber_bin), '--', @cucumber_opts, @feature_files].flatten
|
|
117
|
-
else
|
|
118
|
-
[Cucumber::RUBY_BINARY, '-I', load_path(@libs), '-S', 'rcov', @rcov_opts,
|
|
119
|
-
quoted_binary(@cucumber_bin), '--', @cucumber_opts, @feature_files].flatten
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
LIB = File.expand_path(File.dirname(__FILE__) + '/../..') #:nodoc:
|
|
126
|
-
|
|
127
100
|
# Directories to add to the Ruby $LOAD_PATH
|
|
128
101
|
attr_accessor :libs
|
|
129
102
|
|
|
@@ -137,23 +110,6 @@ module Cucumber
|
|
|
137
110
|
@cucumber_opts = String === opts ? opts.split(' ') : opts
|
|
138
111
|
end
|
|
139
112
|
|
|
140
|
-
# Run cucumber with RCov? Defaults to false. If you set this to
|
|
141
|
-
# true, +fork+ is implicit.
|
|
142
|
-
attr_accessor :rcov
|
|
143
|
-
def rcov=(flag)
|
|
144
|
-
if flag && !Cucumber::RUBY_1_8_7
|
|
145
|
-
raise failed + "RCov only works on Ruby 1.8.x. You may want to use SimpleCov: https://github.com/colszowka/simplecov" + reset
|
|
146
|
-
end
|
|
147
|
-
@rcov = flag
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
# Extra options to pass to rcov.
|
|
151
|
-
# It's recommended to pass an Array, but if it's a String it will be #split by ' '.
|
|
152
|
-
attr_accessor :rcov_opts
|
|
153
|
-
def rcov_opts=(opts) #:nodoc:
|
|
154
|
-
@rcov_opts = String === opts ? opts.split(' ') : opts
|
|
155
|
-
end
|
|
156
|
-
|
|
157
113
|
# Whether or not to fork a new ruby interpreter. Defaults to true. You may gain
|
|
158
114
|
# some startup speed if you set it to false, but this may also cause issues with
|
|
159
115
|
# your load path and gems.
|
|
@@ -176,12 +132,8 @@ module Cucumber
|
|
|
176
132
|
@fork = true
|
|
177
133
|
@libs = ['lib']
|
|
178
134
|
@rcov_opts = %w{--rails --exclude osx\/objc,gems\/}
|
|
179
|
-
|
|
180
135
|
yield self if block_given?
|
|
181
|
-
|
|
182
136
|
@binary = binary.nil? ? Cucumber::BINARY : File.expand_path(binary)
|
|
183
|
-
@libs.insert(0, LIB) if binary == Cucumber::BINARY
|
|
184
|
-
|
|
185
137
|
define_task
|
|
186
138
|
end
|
|
187
139
|
|
|
@@ -194,13 +146,10 @@ module Cucumber
|
|
|
194
146
|
|
|
195
147
|
def runner(task_args = nil) #:nodoc:
|
|
196
148
|
cucumber_opts = [(ENV['CUCUMBER_OPTS'] ? ENV['CUCUMBER_OPTS'].split(/\s+/) : nil) || cucumber_opts_with_profile]
|
|
197
|
-
if(@
|
|
198
|
-
|
|
199
|
-
elsif(@fork)
|
|
200
|
-
ForkedCucumberRunner.new(libs, binary, cucumber_opts, bundler, feature_files)
|
|
201
|
-
else
|
|
202
|
-
InProcessCucumberRunner.new(libs, cucumber_opts, feature_files)
|
|
149
|
+
if(@fork)
|
|
150
|
+
return ForkedCucumberRunner.new(libs, binary, cucumber_opts, bundler, feature_files)
|
|
203
151
|
end
|
|
152
|
+
InProcessCucumberRunner.new(libs, cucumber_opts, feature_files)
|
|
204
153
|
end
|
|
205
154
|
|
|
206
155
|
def cucumber_opts_with_profile #:nodoc:
|
|
@@ -10,8 +10,8 @@ module Cucumber
|
|
|
10
10
|
@proc = proc
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def invoke(
|
|
14
|
-
@rb_language.current_world.cucumber_instance_exec(false,
|
|
13
|
+
def invoke(pseudo_method, arguments, &block)
|
|
14
|
+
@rb_language.current_world.cucumber_instance_exec(false, pseudo_method, *[arguments, block].compact, &@proc)
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -5,18 +5,7 @@ require 'cucumber/rb_support/rb_step_definition'
|
|
|
5
5
|
require 'cucumber/rb_support/rb_hook'
|
|
6
6
|
require 'cucumber/rb_support/rb_transform'
|
|
7
7
|
require 'cucumber/rb_support/snippet'
|
|
8
|
-
|
|
9
|
-
begin
|
|
10
|
-
require 'rspec/expectations'
|
|
11
|
-
rescue LoadError
|
|
12
|
-
begin
|
|
13
|
-
require 'spec/expectations'
|
|
14
|
-
require 'spec/runner/differs/default'
|
|
15
|
-
require 'ostruct'
|
|
16
|
-
rescue LoadError
|
|
17
|
-
require 'test/unit/assertions'
|
|
18
|
-
end
|
|
19
|
-
end
|
|
8
|
+
require 'multi_test'
|
|
20
9
|
|
|
21
10
|
module Cucumber
|
|
22
11
|
module RbSupport
|
|
@@ -48,7 +37,6 @@ module Cucumber
|
|
|
48
37
|
|
|
49
38
|
Gherkin::I18n.code_keywords.each do |adverb|
|
|
50
39
|
RbDsl.alias_adverb(adverb)
|
|
51
|
-
RbWorld.alias_adverb(adverb)
|
|
52
40
|
end
|
|
53
41
|
|
|
54
42
|
def initialize(runtime)
|
|
@@ -56,22 +44,6 @@ module Cucumber
|
|
|
56
44
|
@step_definitions = []
|
|
57
45
|
RbDsl.rb_language = self
|
|
58
46
|
@world_proc = @world_modules = nil
|
|
59
|
-
@assertions_module = find_best_assertions_module
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def find_best_assertions_module
|
|
63
|
-
begin
|
|
64
|
-
::RSpec::Matchers
|
|
65
|
-
rescue NameError
|
|
66
|
-
# RSpec >=1.2.4
|
|
67
|
-
begin
|
|
68
|
-
options = OpenStruct.new(:diff_format => :unified, :context_lines => 3)
|
|
69
|
-
Spec::Expectations.differ = Spec::Expectations::Differs::Default.new(options)
|
|
70
|
-
::Spec::Matchers
|
|
71
|
-
rescue NameError
|
|
72
|
-
::Test::Unit::Assertions
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
47
|
end
|
|
76
48
|
|
|
77
49
|
def step_matches(name_to_match, name_to_format)
|
|
@@ -84,9 +56,9 @@ module Cucumber
|
|
|
84
56
|
end.compact
|
|
85
57
|
end
|
|
86
58
|
|
|
87
|
-
def snippet_text(code_keyword, step_name,
|
|
59
|
+
def snippet_text(code_keyword, step_name, multiline_arg, snippet_type = :regexp)
|
|
88
60
|
snippet_class = typed_snippet_class(snippet_type)
|
|
89
|
-
snippet_class.new(code_keyword, step_name,
|
|
61
|
+
snippet_class.new(code_keyword, step_name, multiline_arg).to_s
|
|
90
62
|
end
|
|
91
63
|
|
|
92
64
|
def begin_rb_scenario(scenario)
|
|
@@ -122,8 +94,6 @@ module Cucumber
|
|
|
122
94
|
load File.expand_path(code_file) # This will cause self.add_step_definition, self.add_hook, and self.add_transform to be called from RbDsl
|
|
123
95
|
end
|
|
124
96
|
|
|
125
|
-
protected
|
|
126
|
-
|
|
127
97
|
def begin_scenario(scenario)
|
|
128
98
|
begin_rb_scenario(scenario)
|
|
129
99
|
end
|
|
@@ -145,7 +115,7 @@ module Cucumber
|
|
|
145
115
|
|
|
146
116
|
def extend_world
|
|
147
117
|
@current_world.extend(RbWorld)
|
|
148
|
-
|
|
118
|
+
MultiTest.extend_with_best_assertion_library(@current_world)
|
|
149
119
|
(@world_modules || []).each do |mod|
|
|
150
120
|
@current_world.extend(mod)
|
|
151
121
|
end
|
|
@@ -44,10 +44,19 @@ module Cucumber
|
|
|
44
44
|
raise ArgumentError unless proc_or_sym.is_a?(Symbol)
|
|
45
45
|
message = proc_or_sym
|
|
46
46
|
target_proc = parse_target_proc_from(options)
|
|
47
|
-
lambda
|
|
47
|
+
patch_location_onto lambda { |*args|
|
|
48
48
|
target = instance_exec(&target_proc)
|
|
49
49
|
target.send(message, *args)
|
|
50
|
-
|
|
50
|
+
}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def patch_location_onto(block)
|
|
54
|
+
file, line = caller[5].split(':')[0..1]
|
|
55
|
+
location = Core::Ast::Location.new(
|
|
56
|
+
Pathname.new(file).relative_path_from(Pathname.new(Dir.pwd)),
|
|
57
|
+
line)
|
|
58
|
+
block.define_singleton_method(:file_colon_line) { location.to_s }
|
|
59
|
+
block
|
|
51
60
|
end
|
|
52
61
|
|
|
53
62
|
def parse_target_proc_from(options)
|
|
@@ -11,13 +11,6 @@ module Cucumber
|
|
|
11
11
|
# @private
|
|
12
12
|
AnsiEscapes = Gherkin::Formatter::AnsiEscapes
|
|
13
13
|
|
|
14
|
-
class << self
|
|
15
|
-
# @private
|
|
16
|
-
def alias_adverb(adverb)
|
|
17
|
-
alias_method adverb, :__cucumber_invoke
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
14
|
# Call a Transform with a string from another Transform definition
|
|
22
15
|
def Transform(arg)
|
|
23
16
|
rb = @__cucumber_runtime.load_programming_language('rb')
|
|
@@ -27,12 +20,6 @@ module Cucumber
|
|
|
27
20
|
# @private
|
|
28
21
|
attr_writer :__cucumber_runtime, :__natural_language
|
|
29
22
|
|
|
30
|
-
# @private
|
|
31
|
-
def __cucumber_invoke(name, multiline_argument=nil) #:nodoc:
|
|
32
|
-
STDERR.puts AnsiEscapes.failed + "WARNING: Using 'Given/When/Then' in step definitions is deprecated, use 'step' to call other steps instead:" + caller[0] + AnsiEscapes.reset
|
|
33
|
-
@__cucumber_runtime.invoke(name, multiline_argument)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
23
|
# Run a single Gherkin step
|
|
37
24
|
# @example Call another step
|
|
38
25
|
# step "I am logged in"
|
|
@@ -48,8 +35,9 @@ module Cucumber
|
|
|
48
35
|
# step "the email should contain:", "Dear sir,\nYou've won a prize!\n"
|
|
49
36
|
# @param [String] name The name of the step
|
|
50
37
|
# @param [String,Cucumber::Ast::DocString,Cucumber::Ast::Table] multiline_argument
|
|
51
|
-
def step(name,
|
|
52
|
-
|
|
38
|
+
def step(name, raw_multiline_arg=nil)
|
|
39
|
+
location = Core::Ast::Location.of_caller
|
|
40
|
+
@__cucumber_runtime.invoke_dynamic_step(name, MultilineArgument.from(raw_multiline_arg, location))
|
|
53
41
|
end
|
|
54
42
|
|
|
55
43
|
# Run a snippet of Gherkin
|
|
@@ -60,7 +48,7 @@ module Cucumber
|
|
|
60
48
|
# }
|
|
61
49
|
# @param [String] steps_text The Gherkin snippet to run
|
|
62
50
|
def steps(steps_text)
|
|
63
|
-
@__cucumber_runtime.
|
|
51
|
+
@__cucumber_runtime.invoke_dynamic_steps(steps_text, @__natural_language, caller[0])
|
|
64
52
|
end
|
|
65
53
|
|
|
66
54
|
# Parse Gherkin into a {Cucumber::Ast::Table} object.
|
|
@@ -102,7 +90,7 @@ module Cucumber
|
|
|
102
90
|
# of sending the output directly to STDOUT, Cucumber will intercept and cache
|
|
103
91
|
# the message until the current step has finished, and then display it.
|
|
104
92
|
#
|
|
105
|
-
# If you'd prefer to see the message immediately, call {Kernel
|
|
93
|
+
# If you'd prefer to see the message immediately, call {Kernel.puts} instead.
|
|
106
94
|
def puts(*messages)
|
|
107
95
|
@__cucumber_runtime.puts(*messages)
|
|
108
96
|
end
|
|
@@ -123,14 +111,19 @@ module Cucumber
|
|
|
123
111
|
begin
|
|
124
112
|
yield
|
|
125
113
|
rescue Exception
|
|
126
|
-
raise Pending
|
|
114
|
+
raise Pending, message
|
|
127
115
|
end
|
|
128
|
-
raise Pending
|
|
116
|
+
raise Pending, "Expected pending '#{message}' to fail. No Error was raised. No longer pending?"
|
|
129
117
|
else
|
|
130
|
-
raise Pending
|
|
118
|
+
raise Pending, message
|
|
131
119
|
end
|
|
132
120
|
end
|
|
133
121
|
|
|
122
|
+
# Skips this step and the remaining steps in the scenario
|
|
123
|
+
def skip_this_scenario(message = "Scenario skipped")
|
|
124
|
+
raise Core::Test::Result::Skipped, message
|
|
125
|
+
end
|
|
126
|
+
|
|
134
127
|
# Prints the list of modules that are included in the World
|
|
135
128
|
def inspect
|
|
136
129
|
modules = [self.class]
|
|
@@ -2,15 +2,15 @@ module Cucumber
|
|
|
2
2
|
module RbSupport
|
|
3
3
|
module Snippet
|
|
4
4
|
|
|
5
|
-
ARGUMENT_PATTERNS = ['"(
|
|
5
|
+
ARGUMENT_PATTERNS = ['"([^"]*)"', '(\d+)']
|
|
6
6
|
|
|
7
7
|
class BaseSnippet
|
|
8
8
|
|
|
9
|
-
def initialize(code_keyword, pattern,
|
|
9
|
+
def initialize(code_keyword, pattern, multiline_argument)
|
|
10
10
|
@number_of_arguments = 0
|
|
11
11
|
@code_keyword = code_keyword
|
|
12
12
|
@pattern = replace_and_count_capturing_groups(pattern)
|
|
13
|
-
@
|
|
13
|
+
@multiline_argument = MultilineArgumentSnippet.new(multiline_argument)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def to_s
|
|
@@ -27,7 +27,7 @@ module Cucumber
|
|
|
27
27
|
|
|
28
28
|
private
|
|
29
29
|
|
|
30
|
-
attr_reader :code_keyword, :pattern, :
|
|
30
|
+
attr_reader :code_keyword, :pattern, :multiline_argument, :number_of_arguments
|
|
31
31
|
|
|
32
32
|
def replace_and_count_capturing_groups(pattern)
|
|
33
33
|
modified_pattern = ::Regexp.escape(pattern).gsub('\ ', ' ').gsub('/', '\/')
|
|
@@ -43,32 +43,20 @@ module Cucumber
|
|
|
43
43
|
def do_block
|
|
44
44
|
do_block = ""
|
|
45
45
|
do_block << "do#{arguments}\n"
|
|
46
|
-
do_block
|
|
47
|
-
do_block << " pending #
|
|
46
|
+
multiline_argument.append_comment_to(do_block)
|
|
47
|
+
do_block << " pending # Write code here that turns the phrase above into concrete actions\n"
|
|
48
48
|
do_block << "end"
|
|
49
49
|
do_block
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def arguments
|
|
53
53
|
block_args = (0...number_of_arguments).map { |n| "arg#{n+1}" }
|
|
54
|
-
|
|
55
|
-
if multiline_argument_class
|
|
56
|
-
block_args << multiline_argument_class.default_arg_name
|
|
57
|
-
end
|
|
58
|
-
|
|
54
|
+
multiline_argument.append_block_argument_to(block_args)
|
|
59
55
|
block_args.empty? ? "" : " |#{block_args.join(", ")}|"
|
|
60
56
|
end
|
|
61
57
|
|
|
62
|
-
def multiline_comment
|
|
63
|
-
" # #{multiline_argument_class.default_arg_name} is a #{multiline_argument_class.to_s}\n"
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def multiline_argument_class?
|
|
67
|
-
multiline_argument_class == Ast::Table
|
|
68
|
-
end
|
|
69
|
-
|
|
70
58
|
def self.example
|
|
71
|
-
new("Given", "missing step",
|
|
59
|
+
new("Given", "missing step", MultilineArgument::None.new).step
|
|
72
60
|
end
|
|
73
61
|
|
|
74
62
|
end
|
|
@@ -103,6 +91,59 @@ module Cucumber
|
|
|
103
91
|
end
|
|
104
92
|
end
|
|
105
93
|
|
|
94
|
+
module MultilineArgumentSnippet
|
|
95
|
+
|
|
96
|
+
def self.new(multiline_argument)
|
|
97
|
+
builder = Builder.new
|
|
98
|
+
multiline_argument.describe_to(builder)
|
|
99
|
+
builder.result
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
class Builder
|
|
103
|
+
def doc_string(*args)
|
|
104
|
+
@result = DocString.new
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def data_table(table, *args)
|
|
108
|
+
@result = DataTable.new(table)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def result
|
|
112
|
+
@result || None.new
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
class DocString
|
|
117
|
+
def append_block_argument_to(array)
|
|
118
|
+
array << 'string'
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def append_comment_to(string)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
class DataTable
|
|
126
|
+
def initialize(table)
|
|
127
|
+
@table = table
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def append_block_argument_to(array)
|
|
131
|
+
array << 'table'
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def append_comment_to(string)
|
|
135
|
+
string << " # table is a #{@table.class.to_s}\n"
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
class None
|
|
140
|
+
def append_block_argument_to(array)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def append_comment_to(string)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
106
147
|
end
|
|
107
148
|
end
|
|
108
149
|
end
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
require 'rspec/
|
|
1
|
+
require 'rspec/mocks'
|
|
2
2
|
|
|
3
|
-
RSpec
|
|
4
|
-
World(RSpec::Core::MockFrameworkAdapter)
|
|
3
|
+
World(RSpec::Mocks::ExampleMethods)
|
|
5
4
|
|
|
6
5
|
Before do
|
|
7
|
-
RSpec::Mocks::
|
|
6
|
+
if RSpec::Mocks::Version::STRING >= "2.9.9"
|
|
7
|
+
RSpec::Mocks.setup
|
|
8
|
+
else
|
|
9
|
+
RSpec::Mocks.setup(self)
|
|
10
|
+
end
|
|
8
11
|
end
|
|
9
12
|
|
|
10
13
|
After do
|
|
11
14
|
begin
|
|
12
|
-
RSpec::Mocks
|
|
15
|
+
RSpec::Mocks.verify
|
|
13
16
|
ensure
|
|
14
|
-
RSpec::Mocks
|
|
17
|
+
RSpec::Mocks.teardown
|
|
15
18
|
end
|
|
16
19
|
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
require 'delegate'
|
|
2
|
+
|
|
3
|
+
module Cucumber
|
|
4
|
+
# Represents the current status of a running test case.
|
|
5
|
+
#
|
|
6
|
+
# This wraps a `Cucumber::Core::Test::Case` and delegates
|
|
7
|
+
# many methods to that object.
|
|
8
|
+
#
|
|
9
|
+
# We decorete the core object with the current result.
|
|
10
|
+
# In the first Before hook of a scenario, this will be an
|
|
11
|
+
# instance of `Cucumber::Core::Test::Result::Unknown`
|
|
12
|
+
# but as the scenario runs, it will be updated to reflect
|
|
13
|
+
# the passed / failed / undefined / skipped status of
|
|
14
|
+
# the test case.
|
|
15
|
+
#
|
|
16
|
+
# The test case might come from a regular Scenario or
|
|
17
|
+
# a Scenario outline. You can call the `#outline?`
|
|
18
|
+
# predicate to find out. If it's from an outline,
|
|
19
|
+
# you get a couple of extra methods.
|
|
20
|
+
module RunningTestCase
|
|
21
|
+
def self.new(test_case)
|
|
22
|
+
Builder.new(test_case).result
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class Builder
|
|
26
|
+
def initialize(test_case)
|
|
27
|
+
@test_case = test_case
|
|
28
|
+
test_case.describe_source_to(self)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def feature(feature)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def scenario(scenario)
|
|
35
|
+
@factory = Scenario
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def scenario_outline(scenario)
|
|
39
|
+
@factory = ScenarioOutlineExample
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def examples_table(examples_table)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def examples_table_row(row)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def result
|
|
49
|
+
@factory.new(@test_case)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
private_constant :Builder
|
|
53
|
+
|
|
54
|
+
class Scenario < SimpleDelegator
|
|
55
|
+
def initialize(test_case, result = Core::Test::Result::Unknown.new)
|
|
56
|
+
@test_case = test_case
|
|
57
|
+
@result = result
|
|
58
|
+
super test_case
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def accept_hook?(hook)
|
|
62
|
+
hook.tag_expressions.all? { |expression| @test_case.match_tags?(expression) }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def failed?
|
|
66
|
+
@result.failed?
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def passed?
|
|
70
|
+
!failed?
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def title
|
|
74
|
+
warn("deprecated: call #name instead")
|
|
75
|
+
name
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def source_tags
|
|
79
|
+
#warn('deprecated: call #tags instead')
|
|
80
|
+
tags
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def source_tag_names
|
|
84
|
+
tags.map &:name
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def skip_invoke!
|
|
88
|
+
Cucumber.deprecate(self.class.name, __method__, "Call #skip_this_scenario on the World directly")
|
|
89
|
+
raise Cucumber::Core::Test::Result::Skipped
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def outline?
|
|
93
|
+
false
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def with_result(result)
|
|
97
|
+
self.class.new(@test_case, result)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
class ScenarioOutlineExample < Scenario
|
|
102
|
+
def outline?
|
|
103
|
+
true
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def scenario_outline
|
|
107
|
+
self
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def cell_values
|
|
111
|
+
source.last.values
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Cucumber
|
|
2
|
+
class Runtime
|
|
3
|
+
class AfterHooks
|
|
4
|
+
def initialize(action_blocks)
|
|
5
|
+
@action_blocks = action_blocks
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def apply_to(test_case)
|
|
9
|
+
test_case.with_steps(
|
|
10
|
+
test_case.test_steps + after_hooks(test_case.source).reverse
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def after_hooks(source)
|
|
17
|
+
@action_blocks.map do |action_block|
|
|
18
|
+
Hooks.after_hook(source, &action_block)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Cucumber
|
|
2
|
+
class Runtime
|
|
3
|
+
class BeforeHooks
|
|
4
|
+
def initialize(action_blocks)
|
|
5
|
+
@action_blocks = action_blocks
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def apply_to(test_case)
|
|
9
|
+
test_case.with_steps(
|
|
10
|
+
before_hooks(test_case.source) + test_case.test_steps
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def before_hooks(source)
|
|
17
|
+
@action_blocks.map do |action_block|
|
|
18
|
+
Hooks.before_hook(source, &action_block)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|