cucumber 1.3.20 → 2.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.rspec +1 -1
- data/.travis.yml +1 -2
- data/CONTRIBUTING.md +9 -0
- data/Gemfile +9 -2
- data/History.md +26 -17
- data/LICENSE +2 -2
- data/README.md +4 -4
- data/Rakefile +12 -0
- data/bin/cucumber +1 -5
- data/bin/cuke +60 -0
- data/cucumber.gemspec +10 -15
- data/cucumber.yml +14 -26
- 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/{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/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/fr/Rakefile +3 -1
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +2 -2
- 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-CN/features/{step_definitons → step_definitions}/calculator_steps.rb +4 -4
- data/examples/i18n/zh-TW/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- 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 +25 -0
- data/features/docs/cli/exclude_files.feature +19 -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 +113 -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 +41 -0
- data/features/{nested_steps.feature → docs/defining_steps/nested_steps.feature} +3 -5
- data/features/{nested_steps_i18n.feature → docs/defining_steps/nested_steps_i18n.feature} +0 -2
- data/features/{nested_steps_with_second_arg.feature → docs/defining_steps/nested_steps_with_second_arg.feature} +0 -0
- data/features/{step_definitions.feature → docs/defining_steps/one_line_step_definitions.feature} +3 -3
- data/features/docs/defining_steps/printing_messages.feature +147 -0
- data/features/docs/defining_steps/skip_scenario.feature +33 -0
- data/features/docs/defining_steps/snippets.feature +41 -0
- data/{legacy_features → features/docs/defining_steps}/table_diffing.feature +15 -15
- 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} +21 -24
- data/{legacy_features/exception_in_before_block.feature → features/docs/exception_in_before_hook.feature} +18 -20
- data/features/{custom_formatter.feature → docs/extending_cucumber/custom_formatter.feature} +3 -8
- data/features/{formatter_callbacks.feature → docs/extending_cucumber/formatter_callbacks.feature} +185 -4
- data/{legacy_features/listener_debugger_formatter.feature → features/docs/formatters/debug_formatter.feature} +13 -15
- 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/{json_formatter.feature → docs/formatters/json_formatter.feature} +109 -247
- data/features/docs/formatters/junit_formatter.feature +275 -0
- data/features/{pretty_formatter.feature → docs/formatters/pretty_formatter.feature} +1 -1
- data/features/{progress_formatter.feature → docs/formatters/progress_formatter.feature} +1 -1
- data/features/docs/formatters/rerun_formatter.feature +135 -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 +154 -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/features/{iso-8859-1.feature → docs/iso-8859-1.feature} +0 -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/features/docs/report_called_undefined_steps.feature +57 -0
- data/{legacy_features → features/docs}/wire_protocol.feature +36 -31
- data/{legacy_features → features/docs}/wire_protocol_erb.feature +5 -6
- data/{legacy_features → features/docs}/wire_protocol_table_diffing.feature +14 -12
- data/{legacy_features → features/docs}/wire_protocol_tags.feature +6 -7
- data/{legacy_features → features/docs}/wire_protocol_timeouts.feature +6 -6
- data/{legacy_features → features/docs}/work_in_progress.feature +52 -54
- data/{legacy_features → features/docs/writing_support_code}/around_hooks.feature +25 -28
- data/features/docs/writing_support_code/before_hook.feature +61 -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/{tagged_hooks.feature → docs/writing_support_code/tagged_hooks.feature} +11 -13
- 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/{legacy_features → features/lib}/step_definitions/wire_steps.rb +16 -9
- data/features/lib/support/env.rb +21 -0
- data/{legacy_features → features/lib}/support/fake_wire_server.rb +0 -0
- 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 +1 -10
- data/gem_tasks/rspec.rake +0 -2
- data/gem_tasks/yard.rake +4 -1
- data/lib/cucumber.rb +1 -3
- data/lib/cucumber/cli/configuration.rb +30 -25
- data/lib/cucumber/cli/main.rb +13 -25
- data/lib/cucumber/cli/options.rb +15 -57
- 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/errors.rb +3 -1
- data/lib/cucumber/file_specs.rb +35 -0
- data/lib/cucumber/formatter/console.rb +32 -21
- data/lib/cucumber/formatter/debug.rb +5 -0
- data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +8 -38
- data/lib/cucumber/formatter/html.rb +29 -21
- data/lib/cucumber/formatter/junit.rb +10 -7
- data/lib/cucumber/formatter/pretty.rb +2 -8
- data/lib/cucumber/formatter/rerun.rb +2 -3
- data/lib/cucumber/formatter/unicode.rb +8 -21
- data/lib/cucumber/formatter/usage.rb +65 -2
- data/lib/cucumber/language_support/language_methods.rb +1 -1
- data/lib/cucumber/mappings.rb +212 -0
- data/lib/cucumber/multiline_argument.rb +115 -0
- data/lib/cucumber/platform.rb +21 -22
- data/lib/cucumber/rake/task.rb +3 -54
- data/lib/cucumber/rb_support/rb_language.rb +2 -5
- data/lib/cucumber/rb_support/rb_world.rb +14 -19
- data/lib/cucumber/rb_support/snippet.rb +60 -19
- data/lib/cucumber/reports/legacy_formatter.rb +1279 -0
- data/lib/cucumber/runtime.rb +176 -26
- data/lib/cucumber/runtime/for_programming_languages.rb +10 -4
- data/lib/cucumber/runtime/gated_receiver.rb +21 -0
- data/lib/cucumber/runtime/support_code.rb +9 -7
- data/lib/cucumber/runtime/tag_limits.rb +15 -0
- data/lib/cucumber/runtime/tag_limits/filter.rb +31 -0
- data/lib/cucumber/runtime/tag_limits/test_case_index.rb +29 -0
- data/lib/cucumber/runtime/tag_limits/verifier.rb +57 -0
- data/lib/cucumber/runtime/user_interface.rb +4 -0
- data/lib/cucumber/step_match.rb +3 -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/spec/cucumber/cli/configuration_spec.rb +151 -150
- 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 +9 -8
- data/spec/cucumber/configuration_spec.rb +3 -3
- data/spec/cucumber/constantize_spec.rb +2 -1
- data/spec/cucumber/core_ext/proc_spec.rb +32 -43
- data/spec/cucumber/file_specs_spec.rb +41 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +11 -10
- data/spec/cucumber/formatter/debug_spec.rb +569 -0
- data/spec/cucumber/formatter/duration_spec.rb +6 -6
- data/spec/cucumber/formatter/html_spec.rb +53 -62
- data/spec/cucumber/formatter/interceptor_spec.rb +38 -31
- data/spec/cucumber/formatter/junit_spec.rb +34 -28
- data/spec/cucumber/formatter/pretty_spec.rb +238 -52
- data/spec/cucumber/formatter/progress_spec.rb +2 -2
- data/spec/cucumber/formatter/spec_helper.rb +23 -17
- data/spec/cucumber/rake/forked_spec.rb +13 -22
- data/spec/cucumber/rb_support/rb_language_spec.rb +76 -67
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +63 -42
- data/spec/cucumber/rb_support/rb_transform_spec.rb +4 -3
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +6 -4
- data/spec/cucumber/rb_support/snippet_spec.rb +42 -33
- data/spec/cucumber/reports/legacy_formatter_spec.rb +1750 -0
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +11 -10
- data/spec/cucumber/runtime/gated_receiver_spec.rb +47 -0
- data/spec/cucumber/runtime/results_spec.rb +33 -26
- data/spec/cucumber/runtime/support_code_spec.rb +29 -29
- data/spec/cucumber/runtime/tag_limits/filter_spec.rb +59 -0
- data/spec/cucumber/runtime/tag_limits/test_case_index_spec.rb +38 -0
- data/spec/cucumber/runtime/tag_limits/verifier_spec.rb +57 -0
- data/spec/cucumber/runtime_spec.rb +39 -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 +3 -9
- metadata +298 -507
- 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 -722
- 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 -26
- data/features/drb_server_integration.feature +0 -63
- data/features/execute_with_tag_filter.feature +0 -63
- data/features/parsing.feature +0 -18
- data/features/rerun_formatter.feature +0 -99
- 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 -57
- data/features/step_definitions/drb_steps.rb +0 -3
- data/features/support/env.rb +0 -57
- 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.html +0 -138
- 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/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/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/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/lib/README.rdoc +0 -12
- data/lib/cucumber/ast.rb +0 -30
- 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/table.rb +0 -738
- 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 -101
- 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.rb +0 -2
- data/lib/cucumber/parser/gherkin_builder.rb +0 -284
- 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/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/table_spec.rb +0 -594
- 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/wire_support/wire_step_definition_spec.rb +0 -20
@@ -1,30 +0,0 @@
|
|
1
|
-
Feature: Language from header
|
2
|
-
In order to simplify command line and
|
3
|
-
settings in IDEs, Cucumber should pick
|
4
|
-
up parser language from a header.
|
5
|
-
|
6
|
-
Scenario: LOLCAT
|
7
|
-
Given a standard Cucumber project directory structure
|
8
|
-
And a file named "features/lolcat.feature" with:
|
9
|
-
"""
|
10
|
-
# language: en-lol
|
11
|
-
OH HAI: STUFFING
|
12
|
-
B4: HUNGRY
|
13
|
-
MISHUN: CUKES
|
14
|
-
DEN KTHXBAI
|
15
|
-
"""
|
16
|
-
When I run cucumber -i features/lolcat.feature
|
17
|
-
Then it should pass with
|
18
|
-
"""
|
19
|
-
# language: en-lol
|
20
|
-
OH HAI: STUFFING
|
21
|
-
|
22
|
-
B4: HUNGRY # features/lolcat.feature:3
|
23
|
-
|
24
|
-
MISHUN: CUKES # features/lolcat.feature:4
|
25
|
-
DEN KTHXBAI # features/lolcat.feature:5
|
26
|
-
|
27
|
-
1 scenario (1 undefined)
|
28
|
-
1 step (1 undefined)
|
29
|
-
|
30
|
-
"""
|
@@ -1,44 +0,0 @@
|
|
1
|
-
Feature: Multiline description names
|
2
|
-
In order to accurately document feature elements
|
3
|
-
As a cucumberist
|
4
|
-
I want to have multiline names
|
5
|
-
|
6
|
-
Scenario: multiline scenario
|
7
|
-
When I run cucumber features/multiline_name.feature --no-snippets
|
8
|
-
Then STDERR should be empty
|
9
|
-
Then it should pass with
|
10
|
-
"""
|
11
|
-
Feature: multiline
|
12
|
-
|
13
|
-
Background: I'm a multiline name # features/multiline_name.feature:3
|
14
|
-
which goes on and on and on for three lines
|
15
|
-
yawn
|
16
|
-
Given passing without a table # features/step_definitions/sample_steps.rb:12
|
17
|
-
|
18
|
-
Scenario: I'm a multiline name # features/multiline_name.feature:8
|
19
|
-
which goes on and on and on for three lines
|
20
|
-
yawn
|
21
|
-
Given passing without a table # features/step_definitions/sample_steps.rb:12
|
22
|
-
|
23
|
-
Scenario Outline: I'm a multiline name # features/multiline_name.feature:13
|
24
|
-
which goes on and on and on for three lines
|
25
|
-
yawn
|
26
|
-
Given <state> without a table # features/step_definitions/sample_steps.rb:12
|
27
|
-
|
28
|
-
Examples:
|
29
|
-
| state |
|
30
|
-
| passing |
|
31
|
-
|
32
|
-
Scenario Outline: name # features/multiline_name.feature:21
|
33
|
-
Given <state> without a table # features/step_definitions/sample_steps.rb:12
|
34
|
-
|
35
|
-
Examples: I'm a multiline name
|
36
|
-
which goes on and on and on for three lines
|
37
|
-
yawn
|
38
|
-
| state |
|
39
|
-
| passing |
|
40
|
-
|
41
|
-
3 scenarios (3 passed)
|
42
|
-
6 steps (6 passed)
|
43
|
-
|
44
|
-
"""
|
@@ -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,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
|