cucumber 1.3.10 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.rspec +1 -1
- data/.travis.yml +4 -3
- data/CONTRIBUTING.md +9 -0
- data/Gemfile +9 -2
- data/History.md +212 -22
- data/LICENSE +2 -2
- data/README.md +4 -4
- data/Rakefile +10 -1
- data/bin/cucumber +1 -5
- data/cucumber.gemspec +10 -13
- data/cucumber.yml +14 -24
- data/examples/{ramaze → i18n/el}/Rakefile +1 -1
- data/examples/i18n/el/features/addition.feature +17 -0
- data/examples/i18n/el/features/division.feature +10 -0
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +24 -0
- data/examples/i18n/el/lib/calculator.rb +14 -0
- data/examples/i18n/fr/Rakefile +3 -1
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +2 -2
- data/examples/i18n/ht/Rakefile +6 -0
- data/examples/i18n/ht/features/adisyon.feature +17 -0
- data/examples/i18n/ht/features/divizyon.feature +10 -0
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +25 -0
- data/examples/i18n/ht/lib/kalkilatris.rb +14 -0
- data/examples/i18n/zh-CN/features/{step_definitons → step_definitions}/calculator_steps.rb +4 -4
- data/examples/tcl/features/step_definitions/fib_steps.rb +1 -1
- data/{legacy_features → features/docs}/api/list_step_defs_as_json.feature +14 -14
- data/{legacy_features → features/docs}/api/run_cli_main_with_existing_runtime.feature +5 -10
- data/features/{backtraces.feature → docs/cli/backtraces.feature} +2 -2
- data/features/docs/cli/dry_run.feature +73 -0
- data/features/docs/cli/exclude_files.feature +18 -0
- data/features/docs/cli/execute_with_tag_filter.feature +117 -0
- data/features/docs/cli/randomize.feature +46 -0
- data/features/docs/cli/require.feature +27 -0
- data/features/docs/cli/run_scenarios_matching_name.feature +104 -0
- data/features/docs/cli/run_specific_scenarios.feature +75 -0
- data/features/docs/cli/showing_differences.feature +43 -0
- data/features/docs/cli/specifying_multiple_formatters.feature +44 -0
- data/features/docs/cli/strict_mode.feature +64 -0
- data/features/{nested_steps.feature → docs/defining_steps/nested_steps.feature} +52 -6
- data/features/{nested_steps_i18n.feature → docs/defining_steps/nested_steps_i18n.feature} +0 -2
- data/features/{step_definitions.feature → docs/defining_steps/one_line_step_definitions.feature} +3 -3
- data/features/docs/defining_steps/printing_messages.feature +148 -0
- data/features/docs/defining_steps/skip_scenario.feature +62 -0
- data/features/docs/defining_steps/snippets.feature +56 -0
- data/{legacy_features → features/docs/defining_steps}/table_diffing.feature +21 -16
- data/features/{transforms.feature → docs/defining_steps/transforms.feature} +2 -2
- data/{legacy_features/exception_in_after_block.feature → features/docs/exception_in_after_hook.feature} +25 -26
- data/{legacy_features/exception_in_after_step_block.feature → features/docs/exception_in_after_step_hook.feature} +22 -24
- data/features/docs/exception_in_around_hook.feature +80 -0
- data/{legacy_features/exception_in_before_block.feature → features/docs/exception_in_before_hook.feature} +18 -20
- data/features/docs/extending_cucumber/custom_filter.feature +29 -0
- data/features/docs/extending_cucumber/custom_formatter.feature +94 -0
- data/features/docs/formatters/debug_formatter.feature +47 -0
- data/features/{formatter_step_file_colon_line.feature → docs/formatters/formatter_step_file_colon_line.feature} +2 -4
- data/features/{html_formatter.feature → docs/formatters/html_formatter.feature} +10 -14
- data/features/docs/formatters/json_formatter.feature +760 -0
- data/features/docs/formatters/junit_formatter.feature +316 -0
- data/features/docs/formatters/pretty_formatter.feature +73 -0
- data/features/{progress_formatter.feature → docs/formatters/progress_formatter.feature} +1 -1
- data/features/docs/formatters/rerun_formatter.feature +136 -0
- data/features/docs/formatters/usage_formatter.feature +102 -0
- data/features/docs/getting_started.feature +27 -0
- data/features/{background.feature → docs/gherkin/background.feature} +149 -91
- data/features/{doc_strings.feature → docs/gherkin/doc_strings.feature} +1 -0
- data/features/docs/gherkin/expand_option_for_outlines.feature +46 -0
- data/features/docs/gherkin/language_from_header.feature +32 -0
- data/features/docs/gherkin/outlines.feature +158 -0
- data/features/docs/gherkin/unicode_table.feature +32 -0
- data/features/docs/gherkin/using_descriptions.feature +88 -0
- data/features/docs/gherkin/using_star_notation.feature +37 -0
- data/{legacy_features → features/docs}/post_configuration_hook.feature +17 -18
- data/{legacy_features → features/docs}/profiles.feature +30 -36
- data/{legacy_features → features/docs}/rake_task.feature +30 -41
- data/features/{raketask.feature → docs/raketask.feature} +6 -13
- data/{legacy_features/wire_protocol_erb.feature → features/docs/wire_protocol/erb_configuration.feature} +7 -8
- data/features/docs/wire_protocol/handle_unexpected_response.feature +30 -0
- data/features/docs/wire_protocol/invoke_message.feature +216 -0
- data/features/docs/wire_protocol/readme.md +26 -0
- data/features/docs/wire_protocol/snippets_message.feature +51 -0
- data/features/docs/wire_protocol/step_matches_message.feature +81 -0
- data/{legacy_features/wire_protocol_table_diffing.feature → features/docs/wire_protocol/table_diffing.feature} +19 -12
- data/{legacy_features/wire_protocol_tags.feature → features/docs/wire_protocol/tags.feature} +7 -7
- data/{legacy_features/wire_protocol_timeouts.feature → features/docs/wire_protocol/timeouts.feature} +7 -6
- data/{legacy_features → features/docs}/work_in_progress.feature +52 -54
- data/features/docs/writing_support_code/after_hooks.feature +80 -0
- data/{legacy_features → features/docs/writing_support_code}/around_hooks.feature +56 -28
- data/features/docs/writing_support_code/before_hook.feature +65 -0
- data/features/docs/writing_support_code/hook_order.feature +61 -0
- data/features/{load_path.feature → docs/writing_support_code/load_path.feature} +3 -0
- data/features/docs/writing_support_code/state.feature +32 -0
- data/features/docs/writing_support_code/tagged_hooks.feature +95 -0
- data/features/lib/step_definitions/aruba_steps.rb +22 -0
- data/features/lib/step_definitions/cucumber_steps.rb +50 -0
- data/features/{step_definitions → lib/step_definitions}/iso-8859-1_steps.rb +3 -15
- data/features/lib/step_definitions/json_steps.rb +7 -0
- data/features/lib/step_definitions/junit_steps.rb +13 -0
- data/features/lib/step_definitions/language_steps.rb +4 -5
- data/features/lib/step_definitions/profile_steps.rb +15 -0
- data/features/lib/step_definitions/ruby_steps.rb +3 -0
- data/features/lib/step_definitions/wire_steps.rb +58 -0
- data/features/lib/support/env.rb +21 -0
- data/{legacy_features → features/lib}/support/fake_wire_server.rb +10 -7
- data/features/{support → lib/support}/feature_factory.rb +1 -1
- data/features/lib/support/normalise_output.rb +33 -0
- data/gem_tasks/cov.rake +5 -0
- data/gem_tasks/cucumber.rake +3 -8
- data/gem_tasks/rspec.rake +0 -2
- data/lib/cucumber/ast.rb +8 -25
- data/lib/cucumber/cli/configuration.rb +33 -37
- data/lib/cucumber/cli/main.rb +14 -27
- data/lib/cucumber/cli/options.rb +22 -60
- data/lib/cucumber/cli/profile_loader.rb +1 -1
- data/lib/cucumber/configuration.rb +4 -0
- data/lib/cucumber/constantize.rb +7 -6
- data/lib/cucumber/core_ext/instance_exec.rb +7 -38
- data/lib/cucumber/core_ext/proc.rb +1 -1
- data/lib/cucumber/encoding.rb +5 -0
- data/lib/cucumber/errors.rb +21 -10
- data/lib/cucumber/file_specs.rb +37 -0
- data/lib/cucumber/filters/activate_steps.rb +33 -0
- data/lib/cucumber/filters/apply_after_hooks.rb +9 -0
- data/lib/cucumber/filters/apply_after_step_hooks.rb +12 -0
- data/lib/cucumber/filters/apply_around_hooks.rb +12 -0
- data/lib/cucumber/filters/apply_before_hooks.rb +9 -0
- data/lib/cucumber/filters/gated_receiver.rb +25 -0
- data/lib/cucumber/filters/prepare_world.rb +45 -0
- data/lib/cucumber/filters/quit.rb +28 -0
- data/lib/cucumber/filters/randomizer.rb +40 -0
- data/lib/cucumber/filters/tag_limits/test_case_index.rb +31 -0
- data/lib/cucumber/filters/tag_limits/verifier.rb +59 -0
- data/lib/cucumber/filters/tag_limits.rb +45 -0
- data/lib/cucumber/filters.rb +9 -0
- data/lib/cucumber/formatter/ansicolor.rb +0 -8
- data/lib/cucumber/formatter/console.rb +66 -36
- data/lib/cucumber/formatter/debug.rb +10 -8
- data/lib/cucumber/formatter/fanout.rb +27 -0
- data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +122 -12
- data/lib/cucumber/formatter/html.rb +67 -18
- data/lib/cucumber/formatter/ignore_missing_messages.rb +20 -0
- data/lib/cucumber/formatter/interceptor.rb +17 -3
- data/lib/cucumber/formatter/json.rb +1 -1
- data/lib/cucumber/formatter/junit.rb +105 -5
- data/lib/cucumber/formatter/legacy_api/adapter.rb +1060 -0
- data/lib/cucumber/formatter/legacy_api/ast.rb +376 -0
- data/lib/cucumber/formatter/legacy_api/results.rb +51 -0
- data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +30 -0
- data/lib/cucumber/formatter/pretty.rb +16 -8
- data/lib/cucumber/formatter/progress.rb +10 -0
- data/lib/cucumber/formatter/rerun.rb +14 -71
- data/lib/cucumber/formatter/unicode.rb +8 -21
- data/lib/cucumber/formatter/usage.rb +7 -1
- data/lib/cucumber/hooks.rb +97 -0
- data/lib/cucumber/language_support/language_methods.rb +0 -54
- data/lib/cucumber/{ast/table.rb → multiline_argument/data_table.rb} +77 -84
- data/lib/cucumber/multiline_argument/doc_string.rb +10 -0
- data/lib/cucumber/multiline_argument.rb +74 -0
- data/lib/cucumber/platform.rb +21 -20
- data/lib/cucumber/project_initializer.rb +43 -0
- data/lib/cucumber/rake/task.rb +3 -54
- data/lib/cucumber/rb_support/rb_hook.rb +2 -2
- data/lib/cucumber/rb_support/rb_language.rb +4 -34
- data/lib/cucumber/rb_support/rb_step_definition.rb +11 -2
- data/lib/cucumber/rb_support/rb_transform.rb +3 -1
- data/lib/cucumber/rb_support/rb_world.rb +13 -20
- data/lib/cucumber/rb_support/snippet.rb +61 -20
- data/lib/cucumber/rspec/doubles.rb +9 -6
- data/lib/cucumber/running_test_case.rb +115 -0
- data/lib/cucumber/runtime/after_hooks.rb +24 -0
- data/lib/cucumber/runtime/before_hooks.rb +23 -0
- data/lib/cucumber/runtime/for_programming_languages.rb +14 -10
- data/lib/cucumber/runtime/step_hooks.rb +22 -0
- data/lib/cucumber/runtime/support_code.rb +78 -21
- data/lib/cucumber/runtime/user_interface.rb +4 -0
- data/lib/cucumber/runtime.rb +153 -98
- data/lib/cucumber/step_match.rb +27 -3
- data/lib/cucumber/term/ansicolor.rb +1 -9
- data/lib/cucumber/wire_support/wire_language.rb +23 -9
- data/lib/cucumber/wire_support/wire_packet.rb +1 -1
- data/lib/cucumber/wire_support/wire_protocol/requests.rb +13 -5
- data/lib/cucumber/wire_support/wire_step_definition.rb +1 -8
- data/lib/cucumber.rb +8 -6
- data/spec/cucumber/cli/configuration_spec.rb +165 -134
- data/spec/cucumber/cli/main_spec.rb +36 -99
- data/spec/cucumber/cli/options_spec.rb +238 -272
- data/spec/cucumber/cli/profile_loader_spec.rb +18 -7
- data/spec/cucumber/configuration_spec.rb +3 -3
- data/spec/cucumber/constantize_spec.rb +2 -1
- data/spec/cucumber/core_ext/instance_exec_spec.rb +4 -0
- data/spec/cucumber/core_ext/proc_spec.rb +32 -43
- data/spec/cucumber/file_specs_spec.rb +60 -0
- data/spec/cucumber/filters/activate_steps_spec.rb +57 -0
- data/spec/cucumber/filters/gated_receiver_spec.rb +47 -0
- data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +38 -0
- data/spec/cucumber/filters/tag_limits/verifier_spec.rb +57 -0
- data/spec/cucumber/filters/tag_limits_spec.rb +59 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +11 -10
- data/spec/cucumber/formatter/debug_spec.rb +64 -0
- data/spec/cucumber/formatter/duration_spec.rb +6 -6
- data/spec/cucumber/formatter/html_spec.rb +233 -39
- data/spec/cucumber/formatter/interceptor_spec.rb +38 -31
- data/spec/cucumber/formatter/junit_spec.rb +213 -151
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +2090 -0
- data/spec/cucumber/formatter/pretty_spec.rb +481 -49
- data/spec/cucumber/formatter/progress_spec.rb +63 -16
- data/spec/cucumber/formatter/rerun_spec.rb +107 -0
- data/spec/cucumber/formatter/spec_helper.rb +32 -17
- data/spec/cucumber/hooks_spec.rb +30 -0
- data/spec/cucumber/{ast/table_spec.rb → multiline_argument/data_table_spec.rb} +128 -208
- data/spec/cucumber/project_initializer_spec.rb +87 -0
- data/spec/cucumber/rake/forked_spec.rb +13 -22
- data/spec/cucumber/rb_support/rb_language_spec.rb +78 -69
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +90 -44
- data/spec/cucumber/rb_support/rb_transform_spec.rb +24 -3
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +6 -4
- data/spec/cucumber/rb_support/snippet_spec.rb +47 -38
- data/spec/cucumber/running_test_case_spec.rb +83 -0
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +18 -13
- data/spec/cucumber/runtime/support_code_spec.rb +29 -29
- data/spec/cucumber/runtime_spec.rb +35 -34
- data/spec/cucumber/step_match_spec.rb +30 -20
- data/spec/cucumber/wire_support/configuration_spec.rb +8 -5
- data/spec/cucumber/wire_support/connection_spec.rb +12 -8
- data/spec/cucumber/wire_support/wire_exception_spec.rb +14 -8
- data/spec/cucumber/wire_support/wire_language_spec.rb +8 -9
- data/spec/cucumber/wire_support/wire_packet_spec.rb +17 -13
- data/spec/cucumber/world/pending_spec.rb +36 -36
- data/spec/simplecov_setup.rb +18 -0
- data/spec/spec_helper.rb +6 -13
- metadata +348 -350
- data/.gitattributes +0 -1
- data/.ruby-version +0 -1
- data/examples/python/README.textile +0 -8
- data/examples/python/Rakefile +0 -4
- data/examples/python/features/fibonacci.feature +0 -19
- data/examples/python/features/step_definitions/fib_steps.py +0 -11
- data/examples/python/lib/fib.py +0 -7
- data/examples/ramaze/README.textile +0 -7
- data/examples/ramaze/app.rb +0 -21
- data/examples/ramaze/features/add.feature +0 -11
- data/examples/ramaze/features/step_definitions/add_steps.rb +0 -15
- data/examples/ramaze/features/support/env.rb +0 -32
- data/examples/ramaze/layout/default.html.erb +0 -8
- data/examples/ramaze/view/index.html.erb +0 -5
- data/examples/ruby2python/README.textile +0 -8
- data/examples/ruby2python/Rakefile +0 -4
- data/examples/ruby2python/features/fibonacci.feature +0 -19
- data/examples/ruby2python/features/step_definitions/fib_steps.rb +0 -7
- data/examples/ruby2python/features/support/env.rb +0 -21
- data/examples/ruby2python/lib/fib.py +0 -7
- data/examples/v8/Rakefile +0 -6
- data/examples/v8/features/fibonacci.feature +0 -43
- data/examples/v8/features/step_definitions/fib_steps.js +0 -49
- data/examples/v8/features/support/env.js +0 -14
- data/examples/v8/lib/fibonacci.js +0 -19
- data/features/.cucumber/stepdefs.json +0 -627
- data/features/assertions.feature +0 -73
- data/features/autoformat_profile_output.feature +0 -23
- data/features/before_hook.feature +0 -43
- data/features/bootstrap.feature +0 -27
- data/features/custom_formatter.feature +0 -41
- data/features/drb_server_integration.feature +0 -63
- data/features/execute_with_tag_filter.feature +0 -63
- data/features/formatter_callbacks.feature +0 -189
- data/features/json_formatter.feature +0 -338
- data/features/parsing.feature +0 -18
- data/features/pretty_formatter.feature +0 -31
- data/features/rerun_formatter.feature +0 -35
- data/features/run_specific_scenarios.feature +0 -47
- data/features/stats_formatters.feature +0 -73
- data/features/step_definitions/cucumber-features/cucumber_ruby_mappings.rb +0 -197
- data/features/step_definitions/cucumber_steps.rb +0 -55
- data/features/step_definitions/drb_steps.rb +0 -3
- data/features/support/env.rb +0 -57
- data/features/tagged_hooks.feature +0 -59
- data/fixtures/json/features/background.feature +0 -7
- data/fixtures/json/features/embed.feature +0 -4
- data/fixtures/json/features/one_passing_one_failing.feature +0 -11
- data/fixtures/json/features/step_definitions/steps.rb +0 -32
- data/fixtures/json/features/tables.feature +0 -13
- data/fixtures/junit/features/one_passing_one_failing.feature +0 -8
- data/fixtures/junit/features/pending.feature +0 -7
- data/fixtures/junit/features/scenario_outline.feature +0 -9
- data/fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature +0 -8
- data/fixtures/junit/features/step_definitions/steps.rb +0 -11
- data/fixtures/self_test/README.textile +0 -6
- data/fixtures/self_test/Rakefile +0 -6
- data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +0 -7
- data/fixtures/self_test/features/failing_expectation.feature +0 -4
- data/fixtures/self_test/features/lots_of_undefined.feature +0 -8
- data/fixtures/self_test/features/multiline_name.feature +0 -27
- data/fixtures/self_test/features/outline_sample.feature +0 -15
- data/fixtures/self_test/features/sample.feature +0 -21
- data/fixtures/self_test/features/search_sample.feature +0 -32
- data/fixtures/self_test/features/step_definitions/sample_steps.rb +0 -84
- data/fixtures/self_test/features/support/bubble_256x256.png +0 -0
- data/fixtures/self_test/features/support/env.rb +0 -26
- data/fixtures/self_test/features/tags_sample.feature +0 -17
- data/fixtures/self_test/features/tons_of_cukes.feature +0 -52
- data/fixtures/self_test/features/undefined_multiline_args.feature +0 -12
- data/fixtures/self_test/list-of-features.txt +0 -1
- data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +0 -8
- data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +0 -8
- data/fixtures/tickets/Rakefile +0 -20
- data/fixtures/tickets/features/172.feature +0 -28
- data/fixtures/tickets/features/177/1.feature +0 -28
- data/fixtures/tickets/features/177/2.feature +0 -20
- data/fixtures/tickets/features/177/3.feature +0 -18
- data/fixtures/tickets/features/180.feature +0 -7
- data/fixtures/tickets/features/229/tagged_hooks.feature +0 -8
- data/fixtures/tickets/features/229/tagged_hooks.rb +0 -14
- data/fixtures/tickets/features/236.feature +0 -13
- data/fixtures/tickets/features/241.feature +0 -12
- data/fixtures/tickets/features/246.feature +0 -4
- data/fixtures/tickets/features/248.feature +0 -11
- data/fixtures/tickets/features/270/back.feature +0 -14
- data/fixtures/tickets/features/270/back.steps.rb +0 -14
- data/fixtures/tickets/features/272/hooks.feature +0 -26
- data/fixtures/tickets/features/272/hooks_steps.rb +0 -53
- data/fixtures/tickets/features/279/py_string_indent.feature +0 -25
- data/fixtures/tickets/features/279/py_string_indent.steps.rb +0 -12
- data/fixtures/tickets/features/279/wrong.feature_ +0 -11
- data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +0 -6
- data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +0 -12
- data/fixtures/tickets/features/306/only_background.feature +0 -4
- data/fixtures/tickets/features/around_timeout.feature +0 -6
- data/fixtures/tickets/features/gherkin_67.feature +0 -12
- data/fixtures/tickets/features/gherkin_68.feature +0 -4
- data/fixtures/tickets/features/half_manual.feature +0 -11
- data/fixtures/tickets/features/lib/eatting_machine.rb +0 -18
- data/fixtures/tickets/features/lib/pantry.rb +0 -20
- data/fixtures/tickets/features/scenario_outline.feature +0 -95
- data/fixtures/tickets/features/step_definitons/246_steps.rb +0 -3
- data/fixtures/tickets/features/step_definitons/248_steps.rb +0 -15
- data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +0 -9
- data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +0 -11
- data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +0 -42
- data/fixtures/tickets/features/step_definitons/tickets_steps.rb +0 -88
- data/fixtures/tickets/features/table_diffing.feature +0 -13
- data/fixtures/tickets/features/tickets.feature +0 -28
- data/fixtures/tickets/features.html +0 -138
- data/gem_tasks/yard/default/layout/html/bubble_32x32.png +0 -0
- data/gem_tasks/yard/default/layout/html/footer.erb +0 -5
- data/gem_tasks/yard/default/layout/html/index.erb +0 -1
- data/gem_tasks/yard/default/layout/html/layout.erb +0 -25
- data/gem_tasks/yard/default/layout/html/logo.erb +0 -1
- data/gem_tasks/yard/default/layout/html/setup.rb +0 -4
- data/gem_tasks/yard.rake +0 -40
- data/legacy_features/README.md +0 -14
- data/legacy_features/announce.feature +0 -152
- data/legacy_features/bug_371.feature +0 -32
- data/legacy_features/bug_464.feature +0 -16
- data/legacy_features/bug_475.feature +0 -42
- data/legacy_features/bug_585_tab_indentation.feature +0 -22
- data/legacy_features/bug_600.feature +0 -73
- data/legacy_features/cucumber_cli.feature +0 -584
- data/legacy_features/cucumber_cli_outlines.feature +0 -117
- data/legacy_features/default_snippets.feature +0 -43
- data/legacy_features/diffing.feature +0 -25
- data/legacy_features/drb_server_integration.feature +0 -174
- data/legacy_features/exclude_files.feature +0 -20
- data/legacy_features/expand.feature +0 -60
- data/legacy_features/junit_formatter.feature +0 -214
- data/legacy_features/language_from_header.feature +0 -30
- data/legacy_features/listener_debugger_formatter.feature +0 -42
- data/legacy_features/multiline_names.feature +0 -44
- data/legacy_features/report_called_undefined_steps.feature +0 -35
- data/legacy_features/rerun_formatter.feature +0 -52
- data/legacy_features/simplest.feature +0 -11
- data/legacy_features/snippet.feature +0 -23
- data/legacy_features/snippets_when_using_star_keyword.feature +0 -38
- data/legacy_features/step_definitions/cucumber_steps.rb +0 -179
- data/legacy_features/step_definitions/extra_steps.rb +0 -2
- data/legacy_features/step_definitions/simplest_steps.rb +0 -3
- data/legacy_features/step_definitions/wire_steps.rb +0 -34
- data/legacy_features/support/env.rb +0 -161
- data/legacy_features/support/env.rb.simplest +0 -7
- data/legacy_features/table_mapping.feature +0 -34
- data/legacy_features/transform.feature +0 -245
- data/legacy_features/unicode_table.feature +0 -35
- data/legacy_features/wire_protocol.feature +0 -332
- data/lib/README.rdoc +0 -12
- data/lib/cucumber/ast/background.rb +0 -116
- data/lib/cucumber/ast/comment.rb +0 -31
- data/lib/cucumber/ast/doc_string.rb +0 -61
- data/lib/cucumber/ast/empty_background.rb +0 -33
- data/lib/cucumber/ast/examples.rb +0 -49
- data/lib/cucumber/ast/feature.rb +0 -99
- data/lib/cucumber/ast/features.rb +0 -38
- data/lib/cucumber/ast/has_steps.rb +0 -74
- data/lib/cucumber/ast/location.rb +0 -41
- data/lib/cucumber/ast/multiline_argument.rb +0 -30
- data/lib/cucumber/ast/names.rb +0 -13
- data/lib/cucumber/ast/outline_table.rb +0 -194
- data/lib/cucumber/ast/scenario.rb +0 -103
- data/lib/cucumber/ast/scenario_outline.rb +0 -146
- data/lib/cucumber/ast/step.rb +0 -122
- data/lib/cucumber/ast/step_collection.rb +0 -92
- data/lib/cucumber/ast/step_invocation.rb +0 -196
- data/lib/cucumber/ast/tags.rb +0 -28
- data/lib/cucumber/ast/tree_walker.rb +0 -191
- data/lib/cucumber/ast/visitor.rb +0 -11
- data/lib/cucumber/broadcaster.rb +0 -13
- data/lib/cucumber/cli/drb_client.rb +0 -43
- data/lib/cucumber/feature_file.rb +0 -94
- data/lib/cucumber/formatter/ordered_xml_markup.rb +0 -24
- data/lib/cucumber/js_support/js_dsl.js +0 -57
- data/lib/cucumber/js_support/js_language.rb +0 -185
- data/lib/cucumber/js_support/js_snippets.rb +0 -27
- data/lib/cucumber/parser/gherkin_builder.rb +0 -284
- data/lib/cucumber/parser.rb +0 -2
- data/lib/cucumber/py_support/py_dsl.py +0 -10
- data/lib/cucumber/py_support/py_language.py +0 -10
- data/lib/cucumber/py_support/py_language.rb +0 -80
- data/lib/cucumber/runtime/features_loader.rb +0 -62
- data/lib/cucumber/runtime/results.rb +0 -64
- data/lib/cucumber/step_mother.rb +0 -10
- data/spec/cucumber/ast/background_spec.rb +0 -122
- data/spec/cucumber/ast/doc_string_spec.rb +0 -40
- data/spec/cucumber/ast/feature_factory.rb +0 -72
- data/spec/cucumber/ast/feature_spec.rb +0 -63
- data/spec/cucumber/ast/features_spec.rb +0 -51
- data/spec/cucumber/ast/outline_table_spec.rb +0 -21
- data/spec/cucumber/ast/scenario_outline_spec.rb +0 -74
- data/spec/cucumber/ast/step_spec.rb +0 -68
- data/spec/cucumber/ast/tree_walker_spec.rb +0 -19
- data/spec/cucumber/broadcaster_spec.rb +0 -15
- data/spec/cucumber/cli/drb_client_spec.rb +0 -76
- data/spec/cucumber/rake/rcov_spec.rb +0 -71
- data/spec/cucumber/runtime/results_spec.rb +0 -81
- data/spec/cucumber/wire_support/wire_step_definition_spec.rb +0 -20
- /data/examples/i18n/ar/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/bg/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ca/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/cs/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/da/features/{step_definitons → step_definitions}/lommeregner_steps.rb +0 -0
- /data/examples/i18n/de/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/en/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/eo/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/es/features/{step_definitons → step_definitions}/calculador_steps.rb +0 -0
- /data/examples/i18n/fi/features/{step_definitons → step_definitions}/laskin_steps.rb +0 -0
- /data/examples/i18n/he/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/hi/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/hu/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/id/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/it/features/{step_definitons → step_definitions}/calcolatrice_steps.rb +0 -0
- /data/examples/i18n/ja/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ko/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/lt/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/lv/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/no/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
- /data/examples/i18n/pl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ro/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ru/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sr-Cyrl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sr-Latn/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sv/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
- /data/examples/i18n/tr/features/{step_definitons → step_definitions}/hesap_makinesi_adimlari.rb +0 -0
- /data/examples/i18n/uk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/uz/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/zh-TW/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/features/{nested_steps_with_second_arg.feature → docs/defining_steps/nested_steps_with_second_arg.feature} +0 -0
- /data/features/{iso-8859-1.feature → docs/iso-8859-1.feature} +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
Feature: Tagged hooks
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given the standard step definitions
|
|
5
|
+
And a file named "features/support/hooks.rb" with:
|
|
6
|
+
"""
|
|
7
|
+
Before('~@no-boom') do
|
|
8
|
+
raise 'boom'
|
|
9
|
+
end
|
|
10
|
+
"""
|
|
11
|
+
And a file named "features/f.feature" with:
|
|
12
|
+
"""
|
|
13
|
+
Feature: With and without hooks
|
|
14
|
+
Scenario: using hook
|
|
15
|
+
Given this step passes
|
|
16
|
+
|
|
17
|
+
@no-boom
|
|
18
|
+
Scenario: omitting hook
|
|
19
|
+
Given this step passes
|
|
20
|
+
|
|
21
|
+
Scenario Outline: omitting hook on specified examples
|
|
22
|
+
Given this step passes
|
|
23
|
+
|
|
24
|
+
Examples:
|
|
25
|
+
| Value |
|
|
26
|
+
| Irrelevant |
|
|
27
|
+
|
|
28
|
+
@no-boom
|
|
29
|
+
Examples:
|
|
30
|
+
| Value |
|
|
31
|
+
| Also Irrelevant |
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
Scenario: omit tagged hook
|
|
35
|
+
When I run `cucumber features/f.feature:2`
|
|
36
|
+
Then it should fail with exactly:
|
|
37
|
+
"""
|
|
38
|
+
Feature: With and without hooks
|
|
39
|
+
|
|
40
|
+
Scenario: using hook # features/f.feature:2
|
|
41
|
+
boom (RuntimeError)
|
|
42
|
+
./features/support/hooks.rb:2:in `Before'
|
|
43
|
+
Given this step passes # features/step_definitions/steps.rb:1
|
|
44
|
+
|
|
45
|
+
Failing Scenarios:
|
|
46
|
+
cucumber features/f.feature:2 # Scenario: using hook
|
|
47
|
+
|
|
48
|
+
1 scenario (1 failed)
|
|
49
|
+
1 step (1 skipped)
|
|
50
|
+
0m0.012s
|
|
51
|
+
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
Scenario: omit tagged hook
|
|
55
|
+
When I run `cucumber features/f.feature:6`
|
|
56
|
+
Then it should pass with exactly:
|
|
57
|
+
"""
|
|
58
|
+
Feature: With and without hooks
|
|
59
|
+
|
|
60
|
+
@no-boom
|
|
61
|
+
Scenario: omitting hook # features/f.feature:6
|
|
62
|
+
Given this step passes # features/step_definitions/steps.rb:1
|
|
63
|
+
|
|
64
|
+
1 scenario (1 passed)
|
|
65
|
+
1 step (1 passed)
|
|
66
|
+
0m0.012s
|
|
67
|
+
|
|
68
|
+
"""
|
|
69
|
+
Scenario: Omit example hook
|
|
70
|
+
When I run `cucumber features/f.feature:12`
|
|
71
|
+
Then it should fail with exactly:
|
|
72
|
+
"""
|
|
73
|
+
Feature: With and without hooks
|
|
74
|
+
|
|
75
|
+
Scenario Outline: omitting hook on specified examples # features/f.feature:9
|
|
76
|
+
Given this step passes # features/f.feature:10
|
|
77
|
+
|
|
78
|
+
Examples:
|
|
79
|
+
| Value |
|
|
80
|
+
boom (RuntimeError)
|
|
81
|
+
./features/support/hooks.rb:2:in `Before'
|
|
82
|
+
| Irrelevant |
|
|
83
|
+
|
|
84
|
+
Failing Scenarios:
|
|
85
|
+
cucumber features/f.feature:14 # Scenario Outline: omitting hook on specified examples, Examples (#1)
|
|
86
|
+
|
|
87
|
+
1 scenario (1 failed)
|
|
88
|
+
1 step (1 skipped)
|
|
89
|
+
0m0.012s
|
|
90
|
+
|
|
91
|
+
"""
|
|
92
|
+
Scenario:
|
|
93
|
+
When I run `cucumber features/f.feature:17`
|
|
94
|
+
Then it should pass
|
|
95
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Given('a Gemfile with:') do |content|
|
|
2
|
+
path = File.expand_path(current_dir + "/Gemfile")
|
|
3
|
+
write_file path, content
|
|
4
|
+
set_env "BUNDLE_GEMFILE", path
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
Then(/^it should (pass|fail)$/) do |result|
|
|
8
|
+
assert_success result == 'pass'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Then(/^"([^"]*)" should not be required$/) do |file_name|
|
|
12
|
+
expect(all_output).not_to include("* #{file_name}")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
Then(/^"([^"]*)" should be required$/) do |file_name|
|
|
16
|
+
expect(all_output).to include("* #{file_name}")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Then /^it fails before running features with:$/ do |expected|
|
|
20
|
+
assert_matching_output("\\A#{expected}", all_output)
|
|
21
|
+
assert_success(false)
|
|
22
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
Given /^a directory without standard Cucumber project directory structure$/ do
|
|
2
|
+
in_current_dir do
|
|
3
|
+
FileUtils.rm_rf 'features' if File.directory?('features')
|
|
4
|
+
end
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
Given /^a scenario with a step that looks like this:$/ do |string|
|
|
8
|
+
create_feature do
|
|
9
|
+
create_scenario { string }
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Given(/^a scenario with a step that looks like this in japanese:$/) do |string|
|
|
14
|
+
create_feature_ja do
|
|
15
|
+
create_scenario_ja { string }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Given(/^the standard step definitions$/) do
|
|
20
|
+
write_file 'features/step_definitions/steps.rb',
|
|
21
|
+
|
|
22
|
+
<<-STEPS
|
|
23
|
+
Given(/^this step passes$/) { }
|
|
24
|
+
Given(/^this step raises an error$/) { raise 'error' }
|
|
25
|
+
Given(/^this step is pending$/) { pending }
|
|
26
|
+
Given(/^this step fails$/) { fail }
|
|
27
|
+
Given(/^this step is a table step$/) {|t| }
|
|
28
|
+
STEPS
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
Given /^a step definition that looks like this:$/ do |string|
|
|
32
|
+
create_step_definition { string }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
When /^I run the feature with the (\w+) formatter$/ do |formatter|
|
|
36
|
+
expect(features.length).to eq 1
|
|
37
|
+
run_feature features.first, formatter
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
Then /^the stderr should contain a warning message$/ do
|
|
41
|
+
expect(all_stderr).to include("[warning]")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
module CucumberHelper
|
|
45
|
+
def run_feature(filename = 'features/a_feature.feature', formatter = 'progress')
|
|
46
|
+
run_simple "#{Cucumber::BINARY} #{filename} --format #{formatter}", false
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
World(CucumberHelper)
|
|
@@ -1,24 +1,12 @@
|
|
|
1
1
|
# encoding: iso-8859-1
|
|
2
2
|
# Ideally we would use Norwegian keywords here, but that won't work unless this file is UTF-8 encoded.
|
|
3
3
|
# Alternatively it would be possible to use Norwegian keywords and encode the file as UTF-8.
|
|
4
|
-
#
|
|
4
|
+
#
|
|
5
5
|
# In both cases, stepdef arguments will be sent in as UTF-8, regardless of what encoding is used.
|
|
6
6
|
Given /^jeg drikker en "([^"]*)"$/ do |drink|
|
|
7
|
-
drink.
|
|
7
|
+
expect(drink).to eq '�l'.encode('UTF-8')
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
When /^skal de andre si "([^"]*)"$/ do |greeting|
|
|
11
|
-
greeting.
|
|
11
|
+
expect(greeting).to eq 'sk�l'.encode('UTF-8')
|
|
12
12
|
end
|
|
13
|
-
|
|
14
|
-
module EncodingHelper
|
|
15
|
-
def utf8(string, encoding)
|
|
16
|
-
if string.respond_to?(:encode) # Ruby 1.9
|
|
17
|
-
string.encode('UTF-8')
|
|
18
|
-
else # Ruby 1.8
|
|
19
|
-
require 'iconv'
|
|
20
|
-
Iconv.new('UTF-8', encoding).iconv(string)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
World(EncodingHelper)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Then(/^the junit output file "(.*?)" should contain:$/) do |actual_file, text|
|
|
2
|
+
actual = IO.read(current_dir + '/' + actual_file)
|
|
3
|
+
actual = replace_junit_time(actual)
|
|
4
|
+
expect(actual).to eq text.to_s
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
module JUnitHelper
|
|
8
|
+
def replace_junit_time(s)
|
|
9
|
+
s.gsub(/\d+\.\d\d+/m, '0.05')
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
World(JUnitHelper)
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
|
|
3
3
|
Then(/^cucumber lists all the supported languages$/) do
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
all_output.should include("日本語")
|
|
4
|
+
sample_languages = ["Arabic", "български", "Pirate", "English", "日本語"]
|
|
5
|
+
sample_languages.each do |language|
|
|
6
|
+
expect(all_output.force_encoding('utf-8')).to include(language)
|
|
7
|
+
end
|
|
9
8
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Given /^the following profiles? (?:are|is) defined:$/ do |profiles|
|
|
2
|
+
write_file 'cucumber.yml', profiles
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^the (.*) profile should be used$/ do |profile|
|
|
6
|
+
step 'the stdout should contain:', profile
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^exactly these files should be loaded:\s*(.*)$/ do |files|
|
|
10
|
+
expect(all_stdout.scan(/^ \* (.*\.rb)$/).flatten).to eq files.split(/,\s+/)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^exactly these features should be ran:\s*(.*)$/ do |files|
|
|
14
|
+
expect(all_stdout.scan(/^ \* (.*\.feature)$/).flatten).to eq files.split(/,\s+/)
|
|
15
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Given /^there is a wire server (running |)on port (\d+) which understands the following protocol:$/ do |running, port, table|
|
|
2
|
+
protocol = table.hashes.map do |table_hash|
|
|
3
|
+
table_hash['response'] = table_hash['response'].gsub(/\n/, '\n')
|
|
4
|
+
table_hash
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
@server = FakeWireServer.new(port.to_i, protocol)
|
|
8
|
+
start_wire_server if running.strip == "running"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Given /^the wire server takes (.*) seconds to respond to the invoke message$/ do |timeout|
|
|
12
|
+
@server.delay_response(:invoke, timeout.to_f)
|
|
13
|
+
start_wire_server
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
Given /^I have environment variable (\w+) set to "([^"]*)"$/ do |variable, value|
|
|
17
|
+
set_env(variable, value)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Then(/^the wire server should have received the following messages:$/) do |expected_messages|
|
|
21
|
+
expect(messages_received).to eq expected_messages.raw.flatten
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
module WireHelper
|
|
25
|
+
attr_reader :messages_received
|
|
26
|
+
|
|
27
|
+
def start_wire_server
|
|
28
|
+
@messages_received = []
|
|
29
|
+
reader, writer = IO.pipe
|
|
30
|
+
@wire_pid = fork {
|
|
31
|
+
reader.close
|
|
32
|
+
@server.run(writer)
|
|
33
|
+
}
|
|
34
|
+
writer.close
|
|
35
|
+
Thread.new do
|
|
36
|
+
while message = reader.gets
|
|
37
|
+
@messages_received << message.strip
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
at_exit { stop_wire_server }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def stop_wire_server
|
|
44
|
+
return unless @wire_pid
|
|
45
|
+
Process.kill('KILL', @wire_pid)
|
|
46
|
+
Process.wait(@wire_pid)
|
|
47
|
+
rescue Errno::ESRCH
|
|
48
|
+
# No such process - wire server has already been stopped by the After hook
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
Before('@wire') do
|
|
53
|
+
extend(WireHelper)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
After('@wire') do
|
|
57
|
+
stop_wire_server
|
|
58
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'aruba/cucumber'
|
|
2
|
+
require 'aruba/in_process'
|
|
3
|
+
require 'aruba/spawn_process'
|
|
4
|
+
require 'cucumber/cli/main'
|
|
5
|
+
|
|
6
|
+
Before('@spawn') do
|
|
7
|
+
Aruba.process = Aruba::SpawnProcess
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
Before('~@spawn') do
|
|
11
|
+
Aruba::InProcess.main_class = Cucumber::Cli::Main
|
|
12
|
+
Aruba.process = Aruba::InProcess
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
Before do
|
|
16
|
+
# Make sure bin/cucumber runs with SimpleCov enabled
|
|
17
|
+
# set_env('SIMPLECOV', 'true')
|
|
18
|
+
|
|
19
|
+
# Set a longer timeout for aruba, and a really long one if running on JRuby
|
|
20
|
+
@aruba_timeout_seconds = Cucumber::JRUBY ? 35 : 15
|
|
21
|
+
end
|
|
@@ -7,9 +7,9 @@ class FakeWireServer
|
|
|
7
7
|
@delays = {}
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def run
|
|
10
|
+
def run(io)
|
|
11
11
|
@server = TCPServer.open(@port)
|
|
12
|
-
loop { handle_connections }
|
|
12
|
+
loop { handle_connections(io) }
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def delay_response(message, delay)
|
|
@@ -18,13 +18,14 @@ class FakeWireServer
|
|
|
18
18
|
|
|
19
19
|
private
|
|
20
20
|
|
|
21
|
-
def handle_connections
|
|
22
|
-
Thread.start(@server.accept) { |socket| open_session_on socket }
|
|
21
|
+
def handle_connections(io)
|
|
22
|
+
Thread.start(@server.accept) { |socket| open_session_on socket, io }
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
def open_session_on(socket)
|
|
25
|
+
def open_session_on(socket, io)
|
|
26
26
|
begin
|
|
27
|
-
|
|
27
|
+
on_message = lambda { |message| io.puts message }
|
|
28
|
+
SocketSession.new(socket, @protocol_table, @delays, on_message).start
|
|
28
29
|
rescue Exception => e
|
|
29
30
|
raise e
|
|
30
31
|
ensure
|
|
@@ -33,10 +34,11 @@ class FakeWireServer
|
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
class SocketSession
|
|
36
|
-
def initialize(socket, protocol, delays)
|
|
37
|
+
def initialize(socket, protocol, delays, on_message)
|
|
37
38
|
@socket = socket
|
|
38
39
|
@protocol = protocol
|
|
39
40
|
@delays = delays
|
|
41
|
+
@on_message = on_message
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
def start
|
|
@@ -50,6 +52,7 @@ class FakeWireServer
|
|
|
50
52
|
def handle(data)
|
|
51
53
|
if protocol_entry = response_to(data.strip)
|
|
52
54
|
sleep delay(data)
|
|
55
|
+
@on_message.call(MultiJson.load(protocol_entry['request'])[0])
|
|
53
56
|
send_response(protocol_entry['response'])
|
|
54
57
|
else
|
|
55
58
|
serialized_exception = { :message => "Not understood: #{data}", :backtrace => [] }
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# override aruba to filter out some stuff
|
|
2
|
+
module NormaliseArubaOutput
|
|
3
|
+
def all_stdout
|
|
4
|
+
normalise_output(super)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def normalise_output(out)
|
|
8
|
+
out = out.gsub(/#{Dir.pwd}\/tmp\/aruba/, '.') # Remove absolute paths
|
|
9
|
+
out = out.gsub(/tmp\/aruba\//, '') # Fix aruba path
|
|
10
|
+
out = out.gsub(/^.*cucumber_process\.rb.*$\n/, '')
|
|
11
|
+
out = out.gsub(/^\d+m\d+\.\d+s$/, '0m0.012s') # Make duration predictable
|
|
12
|
+
out = out.gsub(/Coverage report generated .+$\n/, '') # Remove SimpleCov message
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def normalise_json(json)
|
|
16
|
+
#make sure duration was captured (should be >= 0)
|
|
17
|
+
#then set it to what is "expected" since duration is dynamic
|
|
18
|
+
json.each do |feature|
|
|
19
|
+
elements = feature.fetch('elements') { [] }
|
|
20
|
+
elements.each do |scenario|
|
|
21
|
+
scenario['steps'].each do |step|
|
|
22
|
+
if step['result']
|
|
23
|
+
expect(step['result']['duration']).to be >= 0
|
|
24
|
+
step['result']['duration'] = 1
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
World(NormaliseArubaOutput)
|
|
33
|
+
|
data/gem_tasks/cov.rake
ADDED
data/gem_tasks/cucumber.rake
CHANGED
|
@@ -7,12 +7,12 @@ class Cucumber::Rake::Task
|
|
|
7
7
|
Cucumber::WINDOWS ? 'jruby_win' : 'jruby'
|
|
8
8
|
elsif Cucumber::WINDOWS_MRI
|
|
9
9
|
'windows_mri'
|
|
10
|
-
elsif Cucumber::RUBY_1_8_7
|
|
11
|
-
'ruby_1_8_7'
|
|
12
10
|
elsif Cucumber::RUBY_1_9
|
|
13
11
|
'ruby_1_9'
|
|
14
12
|
elsif Cucumber::RUBY_2_0
|
|
15
13
|
'ruby_2_0'
|
|
14
|
+
elsif Cucumber::RUBY_2_1
|
|
15
|
+
'ruby_2_1'
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -22,9 +22,4 @@ Cucumber::Rake::Task.new(:features) do |t|
|
|
|
22
22
|
t.set_profile_for_current_ruby
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
t.fork = true
|
|
27
|
-
t.profile = :legacy
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
task :cucumber => [:features, :legacy_features]
|
|
25
|
+
task :cucumber => :features
|
data/gem_tasks/rspec.rake
CHANGED
data/lib/cucumber/ast.rb
CHANGED
|
@@ -1,30 +1,13 @@
|
|
|
1
|
-
require 'cucumber/
|
|
2
|
-
require 'cucumber/ast/features'
|
|
3
|
-
require 'cucumber/ast/feature'
|
|
4
|
-
require 'cucumber/ast/background'
|
|
5
|
-
require 'cucumber/ast/scenario'
|
|
6
|
-
require 'cucumber/ast/scenario_outline'
|
|
7
|
-
require 'cucumber/ast/step_invocation'
|
|
8
|
-
require 'cucumber/ast/step_collection'
|
|
9
|
-
require 'cucumber/ast/step'
|
|
10
|
-
require 'cucumber/ast/table'
|
|
11
|
-
require 'cucumber/ast/tags'
|
|
12
|
-
require 'cucumber/ast/doc_string'
|
|
13
|
-
require 'cucumber/ast/outline_table'
|
|
14
|
-
require 'cucumber/ast/examples'
|
|
15
|
-
require 'cucumber/ast/visitor'
|
|
16
|
-
require 'cucumber/ast/tree_walker'
|
|
1
|
+
require 'cucumber/multiline_argument'
|
|
17
2
|
|
|
18
3
|
module Cucumber
|
|
19
|
-
# Classes in this module represent the Abstract Syntax Tree (AST)
|
|
20
|
-
# that gets built when feature files are parsed.
|
|
21
|
-
#
|
|
22
|
-
# AST classes don't expose any internal data directly. This is
|
|
23
|
-
# in order to encourage a less coupled design in the classes
|
|
24
|
-
# that operate on the AST. The only public method is #accept.
|
|
25
|
-
#
|
|
26
|
-
# The AST can be traversed with a visitor. See Cucumber::Format::Pretty
|
|
27
|
-
# for an example.
|
|
28
4
|
module Ast
|
|
5
|
+
def self.const_missing(const_name)
|
|
6
|
+
if const_name == :Table
|
|
7
|
+
warn "`Cucumber::Ast::Table` has been deprecated. Use `Cucumber::MultilineArgument::DataTable` instead."
|
|
8
|
+
return Cucumber::MultilineArgument::DataTable
|
|
9
|
+
end
|
|
10
|
+
raise "`Cucumber::Ast` no longer exists. These classes have moved into the `Cucumber::Core::Ast` namespace, but may not have the same API."
|
|
11
|
+
end
|
|
29
12
|
end
|
|
30
13
|
end
|
|
@@ -25,10 +25,8 @@ module Cucumber
|
|
|
25
25
|
@options.parse!(args)
|
|
26
26
|
arrange_formats
|
|
27
27
|
raise("You can't use both --strict and --wip") if strict? && wip?
|
|
28
|
-
|
|
28
|
+
# todo: remove
|
|
29
29
|
@options[:tag_expression] = Gherkin::TagExpression.new(@options[:tag_expressions])
|
|
30
|
-
return @args.replace(@options.expanded_args_without_drb) if drb?
|
|
31
|
-
|
|
32
30
|
set_environment_variables
|
|
33
31
|
end
|
|
34
32
|
|
|
@@ -36,6 +34,14 @@ module Cucumber
|
|
|
36
34
|
@options[:verbose]
|
|
37
35
|
end
|
|
38
36
|
|
|
37
|
+
def randomize?
|
|
38
|
+
@options[:order] == 'random'
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def seed
|
|
42
|
+
Integer(@options[:seed] || rand(0xFFFF))
|
|
43
|
+
end
|
|
44
|
+
|
|
39
45
|
def strict?
|
|
40
46
|
@options[:strict]
|
|
41
47
|
end
|
|
@@ -48,14 +54,6 @@ module Cucumber
|
|
|
48
54
|
@options[:guess]
|
|
49
55
|
end
|
|
50
56
|
|
|
51
|
-
def drb?
|
|
52
|
-
@options[:drb]
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def drb_port
|
|
56
|
-
@options[:drb_port].to_i if @options[:drb_port]
|
|
57
|
-
end
|
|
58
|
-
|
|
59
57
|
def dry_run?
|
|
60
58
|
@options[:dry_run]
|
|
61
59
|
end
|
|
@@ -64,18 +62,10 @@ module Cucumber
|
|
|
64
62
|
@options[:expand]
|
|
65
63
|
end
|
|
66
64
|
|
|
67
|
-
def dotcucumber
|
|
68
|
-
@options[:dotcucumber]
|
|
69
|
-
end
|
|
70
|
-
|
|
71
65
|
def snippet_type
|
|
72
66
|
@options[:snippet_type] || :regexp
|
|
73
67
|
end
|
|
74
68
|
|
|
75
|
-
def build_tree_walker(runtime)
|
|
76
|
-
Ast::TreeWalker.new(runtime, formatters(runtime), self)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
69
|
def formatter_class(format)
|
|
80
70
|
if(builtin = Options::BUILTIN_FORMATS[format])
|
|
81
71
|
constantize(builtin[0])
|
|
@@ -117,7 +107,7 @@ module Cucumber
|
|
|
117
107
|
Dir["#{path}/**/*.feature"].sort
|
|
118
108
|
elsif path[0..0] == '@' and # @listfile.txt
|
|
119
109
|
File.file?(path[1..-1]) # listfile.txt is a file
|
|
120
|
-
IO.read(path[1..-1]).split
|
|
110
|
+
IO.read(path[1..-1]).split(/(.*?\.feature.*?) /).collect(&:strip).reject(&:empty?)
|
|
121
111
|
else
|
|
122
112
|
path
|
|
123
113
|
end
|
|
@@ -140,10 +130,23 @@ module Cucumber
|
|
|
140
130
|
logger
|
|
141
131
|
end
|
|
142
132
|
|
|
133
|
+
# todo: remove
|
|
143
134
|
def tag_expression
|
|
144
135
|
Gherkin::TagExpression.new(@options[:tag_expressions])
|
|
145
136
|
end
|
|
146
137
|
|
|
138
|
+
def tag_limits
|
|
139
|
+
tag_expression.limits.to_hash
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def tag_expressions
|
|
143
|
+
@options[:tag_expressions]
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def name_regexps
|
|
147
|
+
@options[:name_regexps]
|
|
148
|
+
end
|
|
149
|
+
|
|
147
150
|
def filters
|
|
148
151
|
@options.filters
|
|
149
152
|
end
|
|
@@ -160,27 +163,14 @@ module Cucumber
|
|
|
160
163
|
def paths
|
|
161
164
|
@options[:paths]
|
|
162
165
|
end
|
|
163
|
-
private
|
|
164
|
-
def with_default_features_path(paths)
|
|
165
|
-
return ['features'] if paths.empty?
|
|
166
|
-
paths
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
def formatters(runtime)
|
|
171
|
-
# TODO: We should remove the autoformat functionality. That
|
|
172
|
-
# can be done with the gherkin CLI.
|
|
173
|
-
if @options[:autoformat]
|
|
174
|
-
require 'cucumber/formatter/pretty'
|
|
175
|
-
return [Formatter::Pretty.new(runtime, out_stream, @options)]
|
|
176
|
-
end
|
|
177
166
|
|
|
167
|
+
def formatter_factories
|
|
178
168
|
@options[:formats].map do |format_and_out|
|
|
179
169
|
format = format_and_out[0]
|
|
180
170
|
path_or_io = format_and_out[1]
|
|
181
171
|
begin
|
|
182
|
-
|
|
183
|
-
|
|
172
|
+
factory = formatter_class(format)
|
|
173
|
+
yield factory, path_or_io, @options
|
|
184
174
|
rescue Exception => e
|
|
185
175
|
e.message << "\nError creating formatter: #{format}"
|
|
186
176
|
raise e
|
|
@@ -188,13 +178,19 @@ module Cucumber
|
|
|
188
178
|
end
|
|
189
179
|
end
|
|
190
180
|
|
|
181
|
+
private
|
|
182
|
+
|
|
183
|
+
def with_default_features_path(paths)
|
|
184
|
+
return ['features'] if paths.empty?
|
|
185
|
+
paths
|
|
186
|
+
end
|
|
187
|
+
|
|
191
188
|
class LogFormatter < ::Logger::Formatter
|
|
192
189
|
def call(severity, time, progname, msg)
|
|
193
190
|
msg
|
|
194
191
|
end
|
|
195
192
|
end
|
|
196
193
|
|
|
197
|
-
|
|
198
194
|
def set_environment_variables
|
|
199
195
|
@options[:env_vars].each do |var, value|
|
|
200
196
|
ENV[var] = value
|