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
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
Feature: Cucumber command line
|
|
2
|
-
In order to find out what step definitions need to be implemented
|
|
3
|
-
Developers should always see what step definition is missing
|
|
4
|
-
|
|
5
|
-
Scenario: Get info at arbitrary levels of nesting
|
|
6
|
-
When I run cucumber features/call_undefined_step_from_step_def.feature
|
|
7
|
-
Then it should pass with
|
|
8
|
-
"""
|
|
9
|
-
Feature: Calling undefined step
|
|
10
|
-
|
|
11
|
-
Scenario: Call directly # features/call_undefined_step_from_step_def.feature:3
|
|
12
|
-
Given a step definition that calls an undefined step # features/step_definitions/sample_steps.rb:19
|
|
13
|
-
Undefined step: "this does not exist" (Cucumber::Undefined)
|
|
14
|
-
./features/step_definitions/sample_steps.rb:19:in `/^a step definition that calls an undefined step$/'
|
|
15
|
-
features/call_undefined_step_from_step_def.feature:4:in `Given a step definition that calls an undefined step'
|
|
16
|
-
|
|
17
|
-
Scenario: Call via another # features/call_undefined_step_from_step_def.feature:6
|
|
18
|
-
Given call step "a step definition that calls an undefined step" # features/step_definitions/sample_steps.rb:23
|
|
19
|
-
Undefined step: "this does not exist" (Cucumber::Undefined)
|
|
20
|
-
./features/step_definitions/sample_steps.rb:19:in `/^a step definition that calls an undefined step$/'
|
|
21
|
-
./features/step_definitions/sample_steps.rb:24:in `/^call step "(.*)"$/'
|
|
22
|
-
features/call_undefined_step_from_step_def.feature:7:in `Given call step "a step definition that calls an undefined step"'
|
|
23
|
-
|
|
24
|
-
2 scenarios (2 undefined)
|
|
25
|
-
2 steps (2 undefined)
|
|
26
|
-
|
|
27
|
-
You can implement step definitions for undefined steps with these snippets:
|
|
28
|
-
|
|
29
|
-
Given(/^this does not exist$/) do
|
|
30
|
-
pending # express the regexp above with the code you wish you had
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"""
|
|
35
|
-
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
Feature: Rerun Debugger
|
|
2
|
-
In order to save time
|
|
3
|
-
I want to run *only* failed, pending and missing features from previous runs
|
|
4
|
-
(with the help of a smart cucumber.yml)
|
|
5
|
-
|
|
6
|
-
Background:
|
|
7
|
-
Given a standard Cucumber project directory structure
|
|
8
|
-
|
|
9
|
-
Scenario: title
|
|
10
|
-
Given a file named "features/sample.feature" with:
|
|
11
|
-
"""
|
|
12
|
-
Feature: Rerun
|
|
13
|
-
|
|
14
|
-
Scenario: Failing
|
|
15
|
-
Given failing
|
|
16
|
-
|
|
17
|
-
Scenario: Missing
|
|
18
|
-
Given missing
|
|
19
|
-
|
|
20
|
-
Scenario: Pending
|
|
21
|
-
Given pending
|
|
22
|
-
|
|
23
|
-
Scenario: Passing
|
|
24
|
-
Given passing
|
|
25
|
-
"""
|
|
26
|
-
And a file named "features/all_good.feature" with:
|
|
27
|
-
"""
|
|
28
|
-
Feature: Rerun
|
|
29
|
-
|
|
30
|
-
Scenario: Passing
|
|
31
|
-
Given passing
|
|
32
|
-
"""
|
|
33
|
-
And a file named "features/step_definitions/steps.rb" with:
|
|
34
|
-
"""
|
|
35
|
-
Given /failing/ do
|
|
36
|
-
raise 'FAIL'
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
Given /pending/ do
|
|
40
|
-
pending
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
Given /passing/ do
|
|
44
|
-
end
|
|
45
|
-
"""
|
|
46
|
-
|
|
47
|
-
When I run cucumber -f rerun features/sample.feature features/all_good.feature
|
|
48
|
-
Then it should fail with
|
|
49
|
-
"""
|
|
50
|
-
features/sample.feature:3:6:9
|
|
51
|
-
|
|
52
|
-
"""
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
Feature: Snippets
|
|
2
|
-
In order to help speed up writing step definitions
|
|
3
|
-
As a feature editor
|
|
4
|
-
I want snippet suggestions for undefined step definitions
|
|
5
|
-
|
|
6
|
-
Scenario: Snippet for undefined step with a pystring
|
|
7
|
-
When I run cucumber features/undefined_multiline_args.feature:3 -s
|
|
8
|
-
Then the output should contain
|
|
9
|
-
"""
|
|
10
|
-
Given(/^a pystring$/) do |string|
|
|
11
|
-
pending # express the regexp above with the code you wish you had
|
|
12
|
-
end
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
Scenario: Snippet for undefined step with a step table
|
|
16
|
-
When I run cucumber features/undefined_multiline_args.feature:9 -s
|
|
17
|
-
Then the output should contain
|
|
18
|
-
"""
|
|
19
|
-
Given(/^a table$/) do |table|
|
|
20
|
-
# table is a Cucumber::Ast::Table
|
|
21
|
-
pending # express the regexp above with the code you wish you had
|
|
22
|
-
end
|
|
23
|
-
"""
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
Feature: Use * keywords and still get snippets
|
|
2
|
-
In order to make it possible to use * instead of
|
|
3
|
-
Given/When/Then, I should not get an exception
|
|
4
|
-
when I have undefined steps
|
|
5
|
-
|
|
6
|
-
@wip-jruby
|
|
7
|
-
Scenario: Use some *
|
|
8
|
-
Given a standard Cucumber project directory structure
|
|
9
|
-
And a file named "features/f.feature" with:
|
|
10
|
-
"""
|
|
11
|
-
Feature: F
|
|
12
|
-
Scenario: S
|
|
13
|
-
* I have some cukes
|
|
14
|
-
"""
|
|
15
|
-
When I run cucumber features/f.feature
|
|
16
|
-
Then STDERR should be empty
|
|
17
|
-
And it should pass with
|
|
18
|
-
"""
|
|
19
|
-
Feature: F
|
|
20
|
-
|
|
21
|
-
Scenario: S # features/f.feature:2
|
|
22
|
-
* I have some cukes # features/f.feature:3
|
|
23
|
-
|
|
24
|
-
1 scenario (1 undefined)
|
|
25
|
-
1 step (1 undefined)
|
|
26
|
-
|
|
27
|
-
You can implement step definitions for undefined steps with these snippets:
|
|
28
|
-
|
|
29
|
-
Given(/^I have some cukes$/) do
|
|
30
|
-
pending # express the regexp above with the code you wish you had
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
If you want snippets in a different programming language,
|
|
34
|
-
just make sure a file with the appropriate file extension
|
|
35
|
-
exists where cucumber looks for step definitions.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"""
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
require 'multi_json'
|
|
3
|
-
require 'tempfile'
|
|
4
|
-
|
|
5
|
-
Given /^I am in (.*)$/ do |example_dir_relative_path|
|
|
6
|
-
@current_dir = fixtures_dir(example_dir_relative_path)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
Given /^a standard Cucumber project directory structure$/ do
|
|
10
|
-
@current_dir = working_dir
|
|
11
|
-
in_current_dir do
|
|
12
|
-
FileUtils.rm_rf 'features' if File.directory?('features')
|
|
13
|
-
FileUtils.mkdir_p 'features/support'
|
|
14
|
-
FileUtils.mkdir 'features/step_definitions'
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
Given /^the (.*) directory is empty$/ do |directory|
|
|
19
|
-
in_current_dir do
|
|
20
|
-
FileUtils.remove_dir(directory) rescue nil
|
|
21
|
-
FileUtils.mkdir 'tmp'
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
Given /^a file named "([^"]*)"$/ do |file_name|
|
|
26
|
-
create_file(file_name, '')
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
Given /^a file named "([^"]*)" with:$/ do |file_name, file_content|
|
|
30
|
-
create_file(file_name, file_content)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
Given /^the following profiles? (?:are|is) defined:$/ do |profiles|
|
|
34
|
-
create_file('cucumber.yml', profiles)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
Given /^I am running spork in the background$/ do
|
|
38
|
-
run_spork_in_background
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
Given /^I am running spork in the background on port (\d+)$/ do |port|
|
|
42
|
-
run_spork_in_background(port.to_i)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
Given /^I am not running (?:.*) in the background$/ do
|
|
46
|
-
# no-op
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
Given /^I have environment variable (\w+) set to "([^"]*)"$/ do |variable, value|
|
|
50
|
-
set_env_var(variable, value)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
When /^I run cucumber (.*)$/ do |cucumber_opts|
|
|
54
|
-
run "#{Cucumber::RUBY_BINARY} -I rubygems #{cucumber_bin} --no-color #{cucumber_opts} CUCUMBER_OUTPUT_ENCODING=UTF-8"
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
When /^I run rake (.*)$/ do |rake_opts|
|
|
58
|
-
run "rake #{rake_opts} --trace"
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
When /^I run the following Ruby code:$/ do |code|
|
|
62
|
-
run %{#{Cucumber::RUBY_BINARY} -r rubygems -I #{cucumber_lib_dir} -e "#{code}"}
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
Then /^it should (fail|pass)$/ do |success|
|
|
66
|
-
if success == 'fail'
|
|
67
|
-
if last_exit_status == 0
|
|
68
|
-
raise "Passed when expected to fail\nSTDOUT:\n#{last_stdout}\nSTDERR:\n#{last_stderr}"
|
|
69
|
-
end
|
|
70
|
-
else
|
|
71
|
-
if last_exit_status != 0
|
|
72
|
-
raise "Failed with exit status #{last_exit_status}\nSTDOUT:\n#{last_stdout}\nSTDERR:\n#{last_stderr}"
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
Then /^it should (fail|pass) with$/ do |success, output|
|
|
78
|
-
unless combined_output.index(output)
|
|
79
|
-
combined_output.should == output
|
|
80
|
-
end
|
|
81
|
-
step("it should #{success}")
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
Then /^the output should contain "([^"]*)"$/ do |text|
|
|
85
|
-
last_stdout.should include(text)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
Then /^the output should contain:?$/ do |text|
|
|
89
|
-
last_stdout.should include(text)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
Then /^the output should not contain$/ do |text|
|
|
93
|
-
last_stdout.should_not include(text)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
Then /^the output should be$/ do |text|
|
|
97
|
-
last_stdout.should == text
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
Then /^it should (fail|pass) with JSON$/ do |success, text|
|
|
101
|
-
MultiJson.load(last_stdout).should == MultiJson.load(text)
|
|
102
|
-
Then("it should #{success}")
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
Then /^"([^"]*)" should contain$/ do |file, text|
|
|
106
|
-
strip_duration(IO.read(file)).should == text
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
Then /^"([^"]*)" with junit duration "([^"]*)" should contain$/ do |actual_file, duration_replacement, text|
|
|
110
|
-
actual = IO.read(actual_file)
|
|
111
|
-
actual = replace_junit_duration(actual, duration_replacement)
|
|
112
|
-
actual = strip_ruby186_extra_trace(actual)
|
|
113
|
-
actual.should == text
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
Then /^"([^"]*)" should match "(.+?)"$/ do |file, text|
|
|
117
|
-
File.open(file, Cucumber.file_mode('r')).read.should =~ Regexp.new(text)
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
Then /^"([^"]*)" should have the same contents as "([^"]*)"$/ do |actual_file, expected_file|
|
|
121
|
-
actual = IO.read(actual_file)
|
|
122
|
-
actual = replace_duration(actual, '0m30.005s')
|
|
123
|
-
# Comment out to replace expected file. Use with care!
|
|
124
|
-
# File.open(expected_file, "w") {|io| io.write(actual)}
|
|
125
|
-
actual.should == IO.read(expected_file)
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
Then /^STDERR should match$/ do |text|
|
|
129
|
-
last_stderr.should =~ /#{text}/
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
Then /^STDERR should not match$/ do |text|
|
|
133
|
-
last_stderr.should_not =~ /#{text}/
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
Then /^STDERR should be$/ do |text|
|
|
137
|
-
last_stderr.should == text
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
Then /^STDERR should be empty$/ do
|
|
141
|
-
last_stderr.should == ""
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
Then /^STDERR should have warning message$/ do
|
|
145
|
-
last_stderr.should include("[warning]")
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
Then /^"([^"]*)" should exist$/ do |file|
|
|
149
|
-
File.exists?(file).should be_true
|
|
150
|
-
FileUtils.rm(file)
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
Then /^"([^"]*)" should not be required$/ do |file_name|
|
|
154
|
-
last_stdout.should_not include("* #{file_name}")
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
Then /^"([^"]*)" should be required$/ do |file_name|
|
|
158
|
-
last_stdout.should include("* #{file_name}")
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
Then /^exactly these files should be loaded:\s*(.*)$/ do |files|
|
|
162
|
-
last_stdout.scan(/^ \* (.*\.rb)$/).flatten.should == files.split(/,\s+/)
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
Then /^exactly these features should be ran:\s*(.*)$/ do |files|
|
|
166
|
-
last_stdout.scan(/^ \* (.*\.feature)$/).flatten.should == files.split(/,\s+/)
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
Then /^the (.*) profile should be used$/ do |profile|
|
|
170
|
-
last_stdout.should =~ /Using the #{profile} profile/
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
Then /^print output$/ do
|
|
174
|
-
puts last_stdout
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
Then /^the output should contain the following JSON:$/ do |json_string|
|
|
178
|
-
MultiJson.load(last_stdout).should == MultiJson.load(json_string)
|
|
179
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
Given /^there is a wire server (running |)on port (\d+) which understands the following protocol:$/ do |running, port, table|
|
|
2
|
-
table.map_column!('response') {|cell| cell.gsub(/\n/, '\n')}
|
|
3
|
-
protocol = table.hashes
|
|
4
|
-
@server = FakeWireServer.new(port.to_i, protocol)
|
|
5
|
-
start_wire_server if running.strip == "running"
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
Given /^the wire server takes (.*) seconds to respond to the invoke message$/ do |timeout|
|
|
9
|
-
@server.delay_response(:invoke, timeout.to_f)
|
|
10
|
-
start_wire_server
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
module WireHelper
|
|
14
|
-
def start_wire_server
|
|
15
|
-
@wire_pid = fork do
|
|
16
|
-
at_exit { stop_wire_server }
|
|
17
|
-
@server.run
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def stop_wire_server
|
|
22
|
-
return unless @wire_pid
|
|
23
|
-
Process.kill('KILL', @wire_pid)
|
|
24
|
-
Process.wait
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
Before('@wire') do
|
|
29
|
-
extend(WireHelper)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
After('@wire') do
|
|
33
|
-
stop_wire_server
|
|
34
|
-
end
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
|
|
3
|
-
require 'tempfile'
|
|
4
|
-
require 'rspec/expectations'
|
|
5
|
-
require 'fileutils'
|
|
6
|
-
require 'forwardable'
|
|
7
|
-
require 'cucumber/formatter/unicode'
|
|
8
|
-
# This is to force miniunit to be loaded on 1.9.2, and verify that we can still run with --profile. See:
|
|
9
|
-
# * disable_mini_test_autorun.rb and
|
|
10
|
-
# * http://groups.google.com/group/cukes/browse_thread/thread/5682d41436e235d7
|
|
11
|
-
# * https://rspec.lighthouseapp.com/projects/16211/tickets/677-cucumber-093-prevents-testunit-from-running
|
|
12
|
-
require 'test/unit'
|
|
13
|
-
|
|
14
|
-
class CucumberWorld
|
|
15
|
-
extend Forwardable
|
|
16
|
-
def_delegators CucumberWorld, :fixtures_dir, :self_test_dir, :working_dir, :cucumber_lib_dir
|
|
17
|
-
|
|
18
|
-
def self.fixtures_dir(subdir=nil)
|
|
19
|
-
@fixtures_dir ||= File.expand_path(File.join(File.dirname(__FILE__), '../../fixtures'))
|
|
20
|
-
subdir ? File.join(@fixtures_dir, subdir) : @fixtures_dir
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.self_test_dir
|
|
24
|
-
@self_test_dir ||= fixtures_dir('self_test')
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def self.working_dir
|
|
28
|
-
@working_dir ||= fixtures_dir('self_test/tmp')
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def cucumber_lib_dir
|
|
32
|
-
@cucumber_lib_dir ||= File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Don't use Cucumber::BINARY (which is the binary used to start the "outer" cucumber)
|
|
36
|
-
# Instead we force the use of this codebase's cucumber bin script.
|
|
37
|
-
# This allows us to run cucumber's cukes with an older, stable cucumber.
|
|
38
|
-
def cucumber_bin
|
|
39
|
-
File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def initialize
|
|
43
|
-
@current_dir = self_test_dir
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
private
|
|
47
|
-
attr_reader :last_exit_status, :last_stderr
|
|
48
|
-
|
|
49
|
-
# The last standard out, with the duration line taken out (unpredictable)
|
|
50
|
-
def last_stdout
|
|
51
|
-
strip_1_9_paths(strip_duration(@last_stdout))
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def combined_output
|
|
55
|
-
last_stdout + "\n" + last_stderr
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def strip_duration(s)
|
|
59
|
-
s.gsub(/^\d+m\d+\.\d+s\n/m, "")
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def strip_1_9_paths(s)
|
|
63
|
-
s.gsub(/#{Dir.pwd}\/fixtures\/self_test\/tmp/m, ".").gsub(/#{Dir.pwd}\/fixtures\/self_test/m, ".")
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def replace_duration(s, replacement)
|
|
67
|
-
s.gsub(/\d+m\d+\.\d+s/m, replacement)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def replace_junit_duration(s, replacement)
|
|
71
|
-
s.gsub(/\d+\.\d\d+/m, replacement)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def strip_ruby186_extra_trace(s)
|
|
75
|
-
s.gsub(/^.*\.\/features\/step_definitions(.*)\n/, "")
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def create_file(file_name, file_content)
|
|
79
|
-
file_content.gsub!("CUCUMBER_LIB", "'#{cucumber_lib_dir}'") # Some files, such as Rakefiles need to use the lib dir
|
|
80
|
-
in_current_dir do
|
|
81
|
-
FileUtils.mkdir_p(File.dirname(file_name)) unless File.directory?(File.dirname(file_name))
|
|
82
|
-
File.open(file_name, 'w') { |f| f << file_content }
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def set_env_var(variable, value)
|
|
87
|
-
@original_env_vars ||= {}
|
|
88
|
-
@original_env_vars[variable] = ENV[variable]
|
|
89
|
-
ENV[variable] = value
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def background_jobs
|
|
93
|
-
@background_jobs ||= []
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def in_current_dir(&block)
|
|
97
|
-
Dir.chdir(@current_dir, &block)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def run(command)
|
|
101
|
-
stderr_file = Tempfile.new('cucumber')
|
|
102
|
-
stderr_file.close
|
|
103
|
-
in_current_dir do
|
|
104
|
-
mode = Cucumber::RUBY_1_8_7 ? 'r' : {:external_encoding=>"UTF-8"}
|
|
105
|
-
IO.popen("#{command} 2> #{stderr_file.path}", mode) do |io|
|
|
106
|
-
@last_stdout = io.read
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
@last_exit_status = $?.exitstatus
|
|
110
|
-
end
|
|
111
|
-
@last_stderr = IO.read(stderr_file.path)
|
|
112
|
-
if Cucumber::JRUBY
|
|
113
|
-
# TODO: this actually a workaround for cucumber/gherkin#238
|
|
114
|
-
@last_stderr.gsub!(/^.*java_package_module_template.rb:\d+ warning: `eval' should not be aliased.*\n/, '')
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
def run_spork_in_background(port = nil)
|
|
119
|
-
require 'spork'
|
|
120
|
-
|
|
121
|
-
pid = fork
|
|
122
|
-
in_current_dir do
|
|
123
|
-
if pid
|
|
124
|
-
background_jobs << pid
|
|
125
|
-
else
|
|
126
|
-
# STDOUT.close
|
|
127
|
-
# STDERR.close
|
|
128
|
-
port_arg = port ? "-p #{port}" : ''
|
|
129
|
-
cmd = "#{Cucumber::RUBY_BINARY} -I #{Cucumber::LIBDIR} #{Spork::BINARY} cuc #{port_arg}"
|
|
130
|
-
exec cmd
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
sleep 2.0
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def terminate_background_jobs
|
|
137
|
-
background_jobs.each do |pid|
|
|
138
|
-
Process.kill(Signal.list['TERM'], pid)
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
def restore_original_env_vars
|
|
143
|
-
@original_env_vars.each { |variable, value| ENV[variable] = value } if @original_env_vars
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
World do
|
|
149
|
-
CucumberWorld.new
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
Before do
|
|
153
|
-
FileUtils.rm_rf CucumberWorld.working_dir
|
|
154
|
-
FileUtils.mkdir CucumberWorld.working_dir
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
After do
|
|
158
|
-
FileUtils.rm_rf CucumberWorld.working_dir unless ENV['KEEP_FILES']
|
|
159
|
-
terminate_background_jobs
|
|
160
|
-
restore_original_env_vars
|
|
161
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
Feature: Table mapping
|
|
2
|
-
Scenario: Mapping table shouldn't change output
|
|
3
|
-
Given a standard Cucumber project directory structure
|
|
4
|
-
And a file named "features/f.feature" with:
|
|
5
|
-
"""
|
|
6
|
-
Feature: F
|
|
7
|
-
Scenario: S
|
|
8
|
-
Given a table:
|
|
9
|
-
| who |
|
|
10
|
-
| aslak |
|
|
11
|
-
"""
|
|
12
|
-
And a file named "features/step_definitions/steps.rb" with:
|
|
13
|
-
"""
|
|
14
|
-
Given(/a table:/) { |table| table.map_headers!(/who/i => 'Who')
|
|
15
|
-
table.map_column!('Who') { |who| "Cuke" }
|
|
16
|
-
table.hashes[0]['Who'] = "Joe"
|
|
17
|
-
table.hashes.should == [{"Who"=>"Joe"}]
|
|
18
|
-
}
|
|
19
|
-
"""
|
|
20
|
-
When I run cucumber features/f.feature
|
|
21
|
-
Then STDERR should be empty
|
|
22
|
-
And it should pass with
|
|
23
|
-
"""
|
|
24
|
-
Feature: F
|
|
25
|
-
|
|
26
|
-
Scenario: S # features/f.feature:2
|
|
27
|
-
Given a table: # features/step_definitions/steps.rb:1
|
|
28
|
-
| who |
|
|
29
|
-
| aslak |
|
|
30
|
-
|
|
31
|
-
1 scenario (1 passed)
|
|
32
|
-
1 step (1 passed)
|
|
33
|
-
|
|
34
|
-
"""
|