cucumber 1.3.10 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.rspec +1 -1
- data/.travis.yml +4 -3
- data/CONTRIBUTING.md +9 -0
- data/Gemfile +9 -2
- data/History.md +212 -22
- data/LICENSE +2 -2
- data/README.md +4 -4
- data/Rakefile +10 -1
- data/bin/cucumber +1 -5
- data/cucumber.gemspec +10 -13
- data/cucumber.yml +14 -24
- data/examples/{ramaze → i18n/el}/Rakefile +1 -1
- data/examples/i18n/el/features/addition.feature +17 -0
- data/examples/i18n/el/features/division.feature +10 -0
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +24 -0
- data/examples/i18n/el/lib/calculator.rb +14 -0
- data/examples/i18n/fr/Rakefile +3 -1
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +2 -2
- data/examples/i18n/ht/Rakefile +6 -0
- data/examples/i18n/ht/features/adisyon.feature +17 -0
- data/examples/i18n/ht/features/divizyon.feature +10 -0
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +25 -0
- data/examples/i18n/ht/lib/kalkilatris.rb +14 -0
- data/examples/i18n/zh-CN/features/{step_definitons → step_definitions}/calculator_steps.rb +4 -4
- data/examples/tcl/features/step_definitions/fib_steps.rb +1 -1
- data/{legacy_features → features/docs}/api/list_step_defs_as_json.feature +14 -14
- data/{legacy_features → features/docs}/api/run_cli_main_with_existing_runtime.feature +5 -10
- data/features/{backtraces.feature → docs/cli/backtraces.feature} +2 -2
- data/features/docs/cli/dry_run.feature +73 -0
- data/features/docs/cli/exclude_files.feature +18 -0
- data/features/docs/cli/execute_with_tag_filter.feature +117 -0
- data/features/docs/cli/randomize.feature +46 -0
- data/features/docs/cli/require.feature +27 -0
- data/features/docs/cli/run_scenarios_matching_name.feature +104 -0
- data/features/docs/cli/run_specific_scenarios.feature +75 -0
- data/features/docs/cli/showing_differences.feature +43 -0
- data/features/docs/cli/specifying_multiple_formatters.feature +44 -0
- data/features/docs/cli/strict_mode.feature +64 -0
- data/features/{nested_steps.feature → docs/defining_steps/nested_steps.feature} +52 -6
- data/features/{nested_steps_i18n.feature → docs/defining_steps/nested_steps_i18n.feature} +0 -2
- data/features/{step_definitions.feature → docs/defining_steps/one_line_step_definitions.feature} +3 -3
- data/features/docs/defining_steps/printing_messages.feature +148 -0
- data/features/docs/defining_steps/skip_scenario.feature +62 -0
- data/features/docs/defining_steps/snippets.feature +56 -0
- data/{legacy_features → features/docs/defining_steps}/table_diffing.feature +21 -16
- data/features/{transforms.feature → docs/defining_steps/transforms.feature} +2 -2
- data/{legacy_features/exception_in_after_block.feature → features/docs/exception_in_after_hook.feature} +25 -26
- data/{legacy_features/exception_in_after_step_block.feature → features/docs/exception_in_after_step_hook.feature} +22 -24
- data/features/docs/exception_in_around_hook.feature +80 -0
- data/{legacy_features/exception_in_before_block.feature → features/docs/exception_in_before_hook.feature} +18 -20
- data/features/docs/extending_cucumber/custom_filter.feature +29 -0
- data/features/docs/extending_cucumber/custom_formatter.feature +94 -0
- data/features/docs/formatters/debug_formatter.feature +47 -0
- data/features/{formatter_step_file_colon_line.feature → docs/formatters/formatter_step_file_colon_line.feature} +2 -4
- data/features/{html_formatter.feature → docs/formatters/html_formatter.feature} +10 -14
- data/features/docs/formatters/json_formatter.feature +760 -0
- data/features/docs/formatters/junit_formatter.feature +316 -0
- data/features/docs/formatters/pretty_formatter.feature +73 -0
- data/features/{progress_formatter.feature → docs/formatters/progress_formatter.feature} +1 -1
- data/features/docs/formatters/rerun_formatter.feature +136 -0
- data/features/docs/formatters/usage_formatter.feature +102 -0
- data/features/docs/getting_started.feature +27 -0
- data/features/{background.feature → docs/gherkin/background.feature} +149 -91
- data/features/{doc_strings.feature → docs/gherkin/doc_strings.feature} +1 -0
- data/features/docs/gherkin/expand_option_for_outlines.feature +46 -0
- data/features/docs/gherkin/language_from_header.feature +32 -0
- data/features/docs/gherkin/outlines.feature +158 -0
- data/features/docs/gherkin/unicode_table.feature +32 -0
- data/features/docs/gherkin/using_descriptions.feature +88 -0
- data/features/docs/gherkin/using_star_notation.feature +37 -0
- data/{legacy_features → features/docs}/post_configuration_hook.feature +17 -18
- data/{legacy_features → features/docs}/profiles.feature +30 -36
- data/{legacy_features → features/docs}/rake_task.feature +30 -41
- data/features/{raketask.feature → docs/raketask.feature} +6 -13
- data/{legacy_features/wire_protocol_erb.feature → features/docs/wire_protocol/erb_configuration.feature} +7 -8
- data/features/docs/wire_protocol/handle_unexpected_response.feature +30 -0
- data/features/docs/wire_protocol/invoke_message.feature +216 -0
- data/features/docs/wire_protocol/readme.md +26 -0
- data/features/docs/wire_protocol/snippets_message.feature +51 -0
- data/features/docs/wire_protocol/step_matches_message.feature +81 -0
- data/{legacy_features/wire_protocol_table_diffing.feature → features/docs/wire_protocol/table_diffing.feature} +19 -12
- data/{legacy_features/wire_protocol_tags.feature → features/docs/wire_protocol/tags.feature} +7 -7
- data/{legacy_features/wire_protocol_timeouts.feature → features/docs/wire_protocol/timeouts.feature} +7 -6
- data/{legacy_features → features/docs}/work_in_progress.feature +52 -54
- data/features/docs/writing_support_code/after_hooks.feature +80 -0
- data/{legacy_features → features/docs/writing_support_code}/around_hooks.feature +56 -28
- data/features/docs/writing_support_code/before_hook.feature +65 -0
- data/features/docs/writing_support_code/hook_order.feature +61 -0
- data/features/{load_path.feature → docs/writing_support_code/load_path.feature} +3 -0
- data/features/docs/writing_support_code/state.feature +32 -0
- data/features/docs/writing_support_code/tagged_hooks.feature +95 -0
- data/features/lib/step_definitions/aruba_steps.rb +22 -0
- data/features/lib/step_definitions/cucumber_steps.rb +50 -0
- data/features/{step_definitions → lib/step_definitions}/iso-8859-1_steps.rb +3 -15
- data/features/lib/step_definitions/json_steps.rb +7 -0
- data/features/lib/step_definitions/junit_steps.rb +13 -0
- data/features/lib/step_definitions/language_steps.rb +4 -5
- data/features/lib/step_definitions/profile_steps.rb +15 -0
- data/features/lib/step_definitions/ruby_steps.rb +3 -0
- data/features/lib/step_definitions/wire_steps.rb +58 -0
- data/features/lib/support/env.rb +21 -0
- data/{legacy_features → features/lib}/support/fake_wire_server.rb +10 -7
- data/features/{support → lib/support}/feature_factory.rb +1 -1
- data/features/lib/support/normalise_output.rb +33 -0
- data/gem_tasks/cov.rake +5 -0
- data/gem_tasks/cucumber.rake +3 -8
- data/gem_tasks/rspec.rake +0 -2
- data/lib/cucumber/ast.rb +8 -25
- data/lib/cucumber/cli/configuration.rb +33 -37
- data/lib/cucumber/cli/main.rb +14 -27
- data/lib/cucumber/cli/options.rb +22 -60
- data/lib/cucumber/cli/profile_loader.rb +1 -1
- data/lib/cucumber/configuration.rb +4 -0
- data/lib/cucumber/constantize.rb +7 -6
- data/lib/cucumber/core_ext/instance_exec.rb +7 -38
- data/lib/cucumber/core_ext/proc.rb +1 -1
- data/lib/cucumber/encoding.rb +5 -0
- data/lib/cucumber/errors.rb +21 -10
- data/lib/cucumber/file_specs.rb +37 -0
- data/lib/cucumber/filters/activate_steps.rb +33 -0
- data/lib/cucumber/filters/apply_after_hooks.rb +9 -0
- data/lib/cucumber/filters/apply_after_step_hooks.rb +12 -0
- data/lib/cucumber/filters/apply_around_hooks.rb +12 -0
- data/lib/cucumber/filters/apply_before_hooks.rb +9 -0
- data/lib/cucumber/filters/gated_receiver.rb +25 -0
- data/lib/cucumber/filters/prepare_world.rb +45 -0
- data/lib/cucumber/filters/quit.rb +28 -0
- data/lib/cucumber/filters/randomizer.rb +40 -0
- data/lib/cucumber/filters/tag_limits/test_case_index.rb +31 -0
- data/lib/cucumber/filters/tag_limits/verifier.rb +59 -0
- data/lib/cucumber/filters/tag_limits.rb +45 -0
- data/lib/cucumber/filters.rb +9 -0
- data/lib/cucumber/formatter/ansicolor.rb +0 -8
- data/lib/cucumber/formatter/console.rb +66 -36
- data/lib/cucumber/formatter/debug.rb +10 -8
- data/lib/cucumber/formatter/fanout.rb +27 -0
- data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +122 -12
- data/lib/cucumber/formatter/html.rb +67 -18
- data/lib/cucumber/formatter/ignore_missing_messages.rb +20 -0
- data/lib/cucumber/formatter/interceptor.rb +17 -3
- data/lib/cucumber/formatter/json.rb +1 -1
- data/lib/cucumber/formatter/junit.rb +105 -5
- data/lib/cucumber/formatter/legacy_api/adapter.rb +1060 -0
- data/lib/cucumber/formatter/legacy_api/ast.rb +376 -0
- data/lib/cucumber/formatter/legacy_api/results.rb +51 -0
- data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +30 -0
- data/lib/cucumber/formatter/pretty.rb +16 -8
- data/lib/cucumber/formatter/progress.rb +10 -0
- data/lib/cucumber/formatter/rerun.rb +14 -71
- data/lib/cucumber/formatter/unicode.rb +8 -21
- data/lib/cucumber/formatter/usage.rb +7 -1
- data/lib/cucumber/hooks.rb +97 -0
- data/lib/cucumber/language_support/language_methods.rb +0 -54
- data/lib/cucumber/{ast/table.rb → multiline_argument/data_table.rb} +77 -84
- data/lib/cucumber/multiline_argument/doc_string.rb +10 -0
- data/lib/cucumber/multiline_argument.rb +74 -0
- data/lib/cucumber/platform.rb +21 -20
- data/lib/cucumber/project_initializer.rb +43 -0
- data/lib/cucumber/rake/task.rb +3 -54
- data/lib/cucumber/rb_support/rb_hook.rb +2 -2
- data/lib/cucumber/rb_support/rb_language.rb +4 -34
- data/lib/cucumber/rb_support/rb_step_definition.rb +11 -2
- data/lib/cucumber/rb_support/rb_transform.rb +3 -1
- data/lib/cucumber/rb_support/rb_world.rb +13 -20
- data/lib/cucumber/rb_support/snippet.rb +61 -20
- data/lib/cucumber/rspec/doubles.rb +9 -6
- data/lib/cucumber/running_test_case.rb +115 -0
- data/lib/cucumber/runtime/after_hooks.rb +24 -0
- data/lib/cucumber/runtime/before_hooks.rb +23 -0
- data/lib/cucumber/runtime/for_programming_languages.rb +14 -10
- data/lib/cucumber/runtime/step_hooks.rb +22 -0
- data/lib/cucumber/runtime/support_code.rb +78 -21
- data/lib/cucumber/runtime/user_interface.rb +4 -0
- data/lib/cucumber/runtime.rb +153 -98
- data/lib/cucumber/step_match.rb +27 -3
- data/lib/cucumber/term/ansicolor.rb +1 -9
- data/lib/cucumber/wire_support/wire_language.rb +23 -9
- data/lib/cucumber/wire_support/wire_packet.rb +1 -1
- data/lib/cucumber/wire_support/wire_protocol/requests.rb +13 -5
- data/lib/cucumber/wire_support/wire_step_definition.rb +1 -8
- data/lib/cucumber.rb +8 -6
- data/spec/cucumber/cli/configuration_spec.rb +165 -134
- data/spec/cucumber/cli/main_spec.rb +36 -99
- data/spec/cucumber/cli/options_spec.rb +238 -272
- data/spec/cucumber/cli/profile_loader_spec.rb +18 -7
- data/spec/cucumber/configuration_spec.rb +3 -3
- data/spec/cucumber/constantize_spec.rb +2 -1
- data/spec/cucumber/core_ext/instance_exec_spec.rb +4 -0
- data/spec/cucumber/core_ext/proc_spec.rb +32 -43
- data/spec/cucumber/file_specs_spec.rb +60 -0
- data/spec/cucumber/filters/activate_steps_spec.rb +57 -0
- data/spec/cucumber/filters/gated_receiver_spec.rb +47 -0
- data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +38 -0
- data/spec/cucumber/filters/tag_limits/verifier_spec.rb +57 -0
- data/spec/cucumber/filters/tag_limits_spec.rb +59 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +11 -10
- data/spec/cucumber/formatter/debug_spec.rb +64 -0
- data/spec/cucumber/formatter/duration_spec.rb +6 -6
- data/spec/cucumber/formatter/html_spec.rb +233 -39
- data/spec/cucumber/formatter/interceptor_spec.rb +38 -31
- data/spec/cucumber/formatter/junit_spec.rb +213 -151
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +2090 -0
- data/spec/cucumber/formatter/pretty_spec.rb +481 -49
- data/spec/cucumber/formatter/progress_spec.rb +63 -16
- data/spec/cucumber/formatter/rerun_spec.rb +107 -0
- data/spec/cucumber/formatter/spec_helper.rb +32 -17
- data/spec/cucumber/hooks_spec.rb +30 -0
- data/spec/cucumber/{ast/table_spec.rb → multiline_argument/data_table_spec.rb} +128 -208
- data/spec/cucumber/project_initializer_spec.rb +87 -0
- data/spec/cucumber/rake/forked_spec.rb +13 -22
- data/spec/cucumber/rb_support/rb_language_spec.rb +78 -69
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +90 -44
- data/spec/cucumber/rb_support/rb_transform_spec.rb +24 -3
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +6 -4
- data/spec/cucumber/rb_support/snippet_spec.rb +47 -38
- data/spec/cucumber/running_test_case_spec.rb +83 -0
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +18 -13
- data/spec/cucumber/runtime/support_code_spec.rb +29 -29
- data/spec/cucumber/runtime_spec.rb +35 -34
- data/spec/cucumber/step_match_spec.rb +30 -20
- data/spec/cucumber/wire_support/configuration_spec.rb +8 -5
- data/spec/cucumber/wire_support/connection_spec.rb +12 -8
- data/spec/cucumber/wire_support/wire_exception_spec.rb +14 -8
- data/spec/cucumber/wire_support/wire_language_spec.rb +8 -9
- data/spec/cucumber/wire_support/wire_packet_spec.rb +17 -13
- data/spec/cucumber/world/pending_spec.rb +36 -36
- data/spec/simplecov_setup.rb +18 -0
- data/spec/spec_helper.rb +6 -13
- metadata +348 -350
- data/.gitattributes +0 -1
- data/.ruby-version +0 -1
- data/examples/python/README.textile +0 -8
- data/examples/python/Rakefile +0 -4
- data/examples/python/features/fibonacci.feature +0 -19
- data/examples/python/features/step_definitions/fib_steps.py +0 -11
- data/examples/python/lib/fib.py +0 -7
- data/examples/ramaze/README.textile +0 -7
- data/examples/ramaze/app.rb +0 -21
- data/examples/ramaze/features/add.feature +0 -11
- data/examples/ramaze/features/step_definitions/add_steps.rb +0 -15
- data/examples/ramaze/features/support/env.rb +0 -32
- data/examples/ramaze/layout/default.html.erb +0 -8
- data/examples/ramaze/view/index.html.erb +0 -5
- data/examples/ruby2python/README.textile +0 -8
- data/examples/ruby2python/Rakefile +0 -4
- data/examples/ruby2python/features/fibonacci.feature +0 -19
- data/examples/ruby2python/features/step_definitions/fib_steps.rb +0 -7
- data/examples/ruby2python/features/support/env.rb +0 -21
- data/examples/ruby2python/lib/fib.py +0 -7
- data/examples/v8/Rakefile +0 -6
- data/examples/v8/features/fibonacci.feature +0 -43
- data/examples/v8/features/step_definitions/fib_steps.js +0 -49
- data/examples/v8/features/support/env.js +0 -14
- data/examples/v8/lib/fibonacci.js +0 -19
- data/features/.cucumber/stepdefs.json +0 -627
- data/features/assertions.feature +0 -73
- data/features/autoformat_profile_output.feature +0 -23
- data/features/before_hook.feature +0 -43
- data/features/bootstrap.feature +0 -27
- data/features/custom_formatter.feature +0 -41
- data/features/drb_server_integration.feature +0 -63
- data/features/execute_with_tag_filter.feature +0 -63
- data/features/formatter_callbacks.feature +0 -189
- data/features/json_formatter.feature +0 -338
- data/features/parsing.feature +0 -18
- data/features/pretty_formatter.feature +0 -31
- data/features/rerun_formatter.feature +0 -35
- data/features/run_specific_scenarios.feature +0 -47
- data/features/stats_formatters.feature +0 -73
- data/features/step_definitions/cucumber-features/cucumber_ruby_mappings.rb +0 -197
- data/features/step_definitions/cucumber_steps.rb +0 -55
- data/features/step_definitions/drb_steps.rb +0 -3
- data/features/support/env.rb +0 -57
- data/features/tagged_hooks.feature +0 -59
- data/fixtures/json/features/background.feature +0 -7
- data/fixtures/json/features/embed.feature +0 -4
- data/fixtures/json/features/one_passing_one_failing.feature +0 -11
- data/fixtures/json/features/step_definitions/steps.rb +0 -32
- data/fixtures/json/features/tables.feature +0 -13
- data/fixtures/junit/features/one_passing_one_failing.feature +0 -8
- data/fixtures/junit/features/pending.feature +0 -7
- data/fixtures/junit/features/scenario_outline.feature +0 -9
- data/fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature +0 -8
- data/fixtures/junit/features/step_definitions/steps.rb +0 -11
- data/fixtures/self_test/README.textile +0 -6
- data/fixtures/self_test/Rakefile +0 -6
- data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +0 -7
- data/fixtures/self_test/features/failing_expectation.feature +0 -4
- data/fixtures/self_test/features/lots_of_undefined.feature +0 -8
- data/fixtures/self_test/features/multiline_name.feature +0 -27
- data/fixtures/self_test/features/outline_sample.feature +0 -15
- data/fixtures/self_test/features/sample.feature +0 -21
- data/fixtures/self_test/features/search_sample.feature +0 -32
- data/fixtures/self_test/features/step_definitions/sample_steps.rb +0 -84
- data/fixtures/self_test/features/support/bubble_256x256.png +0 -0
- data/fixtures/self_test/features/support/env.rb +0 -26
- data/fixtures/self_test/features/tags_sample.feature +0 -17
- data/fixtures/self_test/features/tons_of_cukes.feature +0 -52
- data/fixtures/self_test/features/undefined_multiline_args.feature +0 -12
- data/fixtures/self_test/list-of-features.txt +0 -1
- data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +0 -8
- data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +0 -8
- data/fixtures/tickets/Rakefile +0 -20
- data/fixtures/tickets/features/172.feature +0 -28
- data/fixtures/tickets/features/177/1.feature +0 -28
- data/fixtures/tickets/features/177/2.feature +0 -20
- data/fixtures/tickets/features/177/3.feature +0 -18
- data/fixtures/tickets/features/180.feature +0 -7
- data/fixtures/tickets/features/229/tagged_hooks.feature +0 -8
- data/fixtures/tickets/features/229/tagged_hooks.rb +0 -14
- data/fixtures/tickets/features/236.feature +0 -13
- data/fixtures/tickets/features/241.feature +0 -12
- data/fixtures/tickets/features/246.feature +0 -4
- data/fixtures/tickets/features/248.feature +0 -11
- data/fixtures/tickets/features/270/back.feature +0 -14
- data/fixtures/tickets/features/270/back.steps.rb +0 -14
- data/fixtures/tickets/features/272/hooks.feature +0 -26
- data/fixtures/tickets/features/272/hooks_steps.rb +0 -53
- data/fixtures/tickets/features/279/py_string_indent.feature +0 -25
- data/fixtures/tickets/features/279/py_string_indent.steps.rb +0 -12
- data/fixtures/tickets/features/279/wrong.feature_ +0 -11
- data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +0 -6
- data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +0 -12
- data/fixtures/tickets/features/306/only_background.feature +0 -4
- data/fixtures/tickets/features/around_timeout.feature +0 -6
- data/fixtures/tickets/features/gherkin_67.feature +0 -12
- data/fixtures/tickets/features/gherkin_68.feature +0 -4
- data/fixtures/tickets/features/half_manual.feature +0 -11
- data/fixtures/tickets/features/lib/eatting_machine.rb +0 -18
- data/fixtures/tickets/features/lib/pantry.rb +0 -20
- data/fixtures/tickets/features/scenario_outline.feature +0 -95
- data/fixtures/tickets/features/step_definitons/246_steps.rb +0 -3
- data/fixtures/tickets/features/step_definitons/248_steps.rb +0 -15
- data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +0 -9
- data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +0 -11
- data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +0 -42
- data/fixtures/tickets/features/step_definitons/tickets_steps.rb +0 -88
- data/fixtures/tickets/features/table_diffing.feature +0 -13
- data/fixtures/tickets/features/tickets.feature +0 -28
- data/fixtures/tickets/features.html +0 -138
- data/gem_tasks/yard/default/layout/html/bubble_32x32.png +0 -0
- data/gem_tasks/yard/default/layout/html/footer.erb +0 -5
- data/gem_tasks/yard/default/layout/html/index.erb +0 -1
- data/gem_tasks/yard/default/layout/html/layout.erb +0 -25
- data/gem_tasks/yard/default/layout/html/logo.erb +0 -1
- data/gem_tasks/yard/default/layout/html/setup.rb +0 -4
- data/gem_tasks/yard.rake +0 -40
- data/legacy_features/README.md +0 -14
- data/legacy_features/announce.feature +0 -152
- data/legacy_features/bug_371.feature +0 -32
- data/legacy_features/bug_464.feature +0 -16
- data/legacy_features/bug_475.feature +0 -42
- data/legacy_features/bug_585_tab_indentation.feature +0 -22
- data/legacy_features/bug_600.feature +0 -73
- data/legacy_features/cucumber_cli.feature +0 -584
- data/legacy_features/cucumber_cli_outlines.feature +0 -117
- data/legacy_features/default_snippets.feature +0 -43
- data/legacy_features/diffing.feature +0 -25
- data/legacy_features/drb_server_integration.feature +0 -174
- data/legacy_features/exclude_files.feature +0 -20
- data/legacy_features/expand.feature +0 -60
- data/legacy_features/junit_formatter.feature +0 -214
- data/legacy_features/language_from_header.feature +0 -30
- data/legacy_features/listener_debugger_formatter.feature +0 -42
- data/legacy_features/multiline_names.feature +0 -44
- data/legacy_features/report_called_undefined_steps.feature +0 -35
- data/legacy_features/rerun_formatter.feature +0 -52
- data/legacy_features/simplest.feature +0 -11
- data/legacy_features/snippet.feature +0 -23
- data/legacy_features/snippets_when_using_star_keyword.feature +0 -38
- data/legacy_features/step_definitions/cucumber_steps.rb +0 -179
- data/legacy_features/step_definitions/extra_steps.rb +0 -2
- data/legacy_features/step_definitions/simplest_steps.rb +0 -3
- data/legacy_features/step_definitions/wire_steps.rb +0 -34
- data/legacy_features/support/env.rb +0 -161
- data/legacy_features/support/env.rb.simplest +0 -7
- data/legacy_features/table_mapping.feature +0 -34
- data/legacy_features/transform.feature +0 -245
- data/legacy_features/unicode_table.feature +0 -35
- data/legacy_features/wire_protocol.feature +0 -332
- data/lib/README.rdoc +0 -12
- data/lib/cucumber/ast/background.rb +0 -116
- data/lib/cucumber/ast/comment.rb +0 -31
- data/lib/cucumber/ast/doc_string.rb +0 -61
- data/lib/cucumber/ast/empty_background.rb +0 -33
- data/lib/cucumber/ast/examples.rb +0 -49
- data/lib/cucumber/ast/feature.rb +0 -99
- data/lib/cucumber/ast/features.rb +0 -38
- data/lib/cucumber/ast/has_steps.rb +0 -74
- data/lib/cucumber/ast/location.rb +0 -41
- data/lib/cucumber/ast/multiline_argument.rb +0 -30
- data/lib/cucumber/ast/names.rb +0 -13
- data/lib/cucumber/ast/outline_table.rb +0 -194
- data/lib/cucumber/ast/scenario.rb +0 -103
- data/lib/cucumber/ast/scenario_outline.rb +0 -146
- data/lib/cucumber/ast/step.rb +0 -122
- data/lib/cucumber/ast/step_collection.rb +0 -92
- data/lib/cucumber/ast/step_invocation.rb +0 -196
- data/lib/cucumber/ast/tags.rb +0 -28
- data/lib/cucumber/ast/tree_walker.rb +0 -191
- data/lib/cucumber/ast/visitor.rb +0 -11
- data/lib/cucumber/broadcaster.rb +0 -13
- data/lib/cucumber/cli/drb_client.rb +0 -43
- data/lib/cucumber/feature_file.rb +0 -94
- data/lib/cucumber/formatter/ordered_xml_markup.rb +0 -24
- data/lib/cucumber/js_support/js_dsl.js +0 -57
- data/lib/cucumber/js_support/js_language.rb +0 -185
- data/lib/cucumber/js_support/js_snippets.rb +0 -27
- data/lib/cucumber/parser/gherkin_builder.rb +0 -284
- data/lib/cucumber/parser.rb +0 -2
- data/lib/cucumber/py_support/py_dsl.py +0 -10
- data/lib/cucumber/py_support/py_language.py +0 -10
- data/lib/cucumber/py_support/py_language.rb +0 -80
- data/lib/cucumber/runtime/features_loader.rb +0 -62
- data/lib/cucumber/runtime/results.rb +0 -64
- data/lib/cucumber/step_mother.rb +0 -10
- data/spec/cucumber/ast/background_spec.rb +0 -122
- data/spec/cucumber/ast/doc_string_spec.rb +0 -40
- data/spec/cucumber/ast/feature_factory.rb +0 -72
- data/spec/cucumber/ast/feature_spec.rb +0 -63
- data/spec/cucumber/ast/features_spec.rb +0 -51
- data/spec/cucumber/ast/outline_table_spec.rb +0 -21
- data/spec/cucumber/ast/scenario_outline_spec.rb +0 -74
- data/spec/cucumber/ast/step_spec.rb +0 -68
- data/spec/cucumber/ast/tree_walker_spec.rb +0 -19
- data/spec/cucumber/broadcaster_spec.rb +0 -15
- data/spec/cucumber/cli/drb_client_spec.rb +0 -76
- data/spec/cucumber/rake/rcov_spec.rb +0 -71
- data/spec/cucumber/runtime/results_spec.rb +0 -81
- data/spec/cucumber/wire_support/wire_step_definition_spec.rb +0 -20
- /data/examples/i18n/ar/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/bg/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ca/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/cs/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/da/features/{step_definitons → step_definitions}/lommeregner_steps.rb +0 -0
- /data/examples/i18n/de/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/en/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/eo/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/es/features/{step_definitons → step_definitions}/calculador_steps.rb +0 -0
- /data/examples/i18n/fi/features/{step_definitons → step_definitions}/laskin_steps.rb +0 -0
- /data/examples/i18n/he/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/hi/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/hu/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/id/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/it/features/{step_definitons → step_definitions}/calcolatrice_steps.rb +0 -0
- /data/examples/i18n/ja/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ko/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/lt/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/lv/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/no/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
- /data/examples/i18n/pl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ro/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/ru/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sr-Cyrl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sr-Latn/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/sv/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
- /data/examples/i18n/tr/features/{step_definitons → step_definitions}/hesap_makinesi_adimlari.rb +0 -0
- /data/examples/i18n/uk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/uz/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/examples/i18n/zh-TW/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
- /data/features/{nested_steps_with_second_arg.feature → docs/defining_steps/nested_steps_with_second_arg.feature} +0 -0
- /data/features/{iso-8859-1.feature → docs/iso-8859-1.feature} +0 -0
|
@@ -1,213 +1,202 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require 'spec_helper'
|
|
3
|
-
require 'cucumber/
|
|
3
|
+
require 'cucumber/multiline_argument/data_table'
|
|
4
4
|
|
|
5
5
|
module Cucumber
|
|
6
|
-
module
|
|
7
|
-
describe
|
|
6
|
+
module MultilineArgument
|
|
7
|
+
describe DataTable do
|
|
8
8
|
before do
|
|
9
|
-
@table =
|
|
9
|
+
@table = DataTable.from([
|
|
10
10
|
%w{one four seven},
|
|
11
11
|
%w{4444 55555 666666}
|
|
12
12
|
])
|
|
13
|
-
def @table.cells_rows; super; end
|
|
14
|
-
def @table.columns; super; end
|
|
15
13
|
end
|
|
16
14
|
|
|
17
15
|
it "should have rows" do
|
|
18
|
-
@table.cells_rows[0].map{|cell| cell.value}.
|
|
16
|
+
expect( @table.cells_rows[0].map{|cell| cell.value} ).to eq %w{one four seven}
|
|
19
17
|
end
|
|
20
18
|
|
|
21
19
|
it "should have columns" do
|
|
22
|
-
@table.columns[1].map{|cell| cell.value}.
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should have headers" do
|
|
26
|
-
@table.headers.should == %w{one four seven}
|
|
20
|
+
expect( @table.columns[1].map{|cell| cell.value} ).to eq %w{four 55555}
|
|
27
21
|
end
|
|
28
22
|
|
|
29
23
|
it "should have same cell objects in rows and columns" do
|
|
30
24
|
# 666666
|
|
31
|
-
@table.cells_rows[1]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should know about max width of a row" do
|
|
35
|
-
@table.columns[1].__send__(:width).should == 5
|
|
25
|
+
expect( @table.cells_rows[1][2] ).to equal(@table.columns[2][1])
|
|
36
26
|
end
|
|
37
27
|
|
|
38
28
|
it "should be convertible to an array of hashes" do
|
|
39
|
-
@table.hashes.
|
|
29
|
+
expect( @table.hashes ).to eq [
|
|
40
30
|
{'one' => '4444', 'four' => '55555', 'seven' => '666666'}
|
|
41
31
|
]
|
|
42
32
|
end
|
|
43
33
|
|
|
44
34
|
it "should accept symbols as keys for the hashes" do
|
|
45
|
-
@table.hashes.first[:one].
|
|
35
|
+
expect( @table.hashes.first[:one] ).to eq '4444'
|
|
46
36
|
end
|
|
47
37
|
|
|
48
38
|
it "should return the row values in order" do
|
|
49
|
-
@table.rows.first.
|
|
39
|
+
expect( @table.rows.first ).to eq %w{4444 55555 666666}
|
|
50
40
|
end
|
|
51
41
|
|
|
52
42
|
describe '#map_column!' do
|
|
53
43
|
it "should allow mapping columns" do
|
|
54
44
|
@table.map_column!('one') { |v| v.to_i }
|
|
55
|
-
@table.hashes.first['one'].
|
|
45
|
+
expect( @table.hashes.first['one'] ).to eq 4444
|
|
56
46
|
end
|
|
57
47
|
|
|
58
48
|
it "applies the block once to each value" do
|
|
59
49
|
headers = ['header']
|
|
60
50
|
rows = ['value']
|
|
61
|
-
table =
|
|
51
|
+
table = DataTable.from [headers, rows]
|
|
62
52
|
count = 0
|
|
63
53
|
table.map_column!('header') { |value| count +=1 }
|
|
64
54
|
table.rows
|
|
65
|
-
count.
|
|
55
|
+
expect( count ).to eq rows.size
|
|
66
56
|
end
|
|
67
57
|
|
|
68
58
|
it "should allow mapping columns and take a symbol as the column name" do
|
|
69
59
|
@table.map_column!(:one) { |v| v.to_i }
|
|
70
|
-
@table.hashes.first['one'].
|
|
60
|
+
expect( @table.hashes.first['one'] ).to eq 4444
|
|
71
61
|
end
|
|
72
62
|
|
|
73
63
|
it "should allow mapping columns and modify the rows as well" do
|
|
74
64
|
@table.map_column!(:one) { |v| v.to_i }
|
|
75
|
-
@table.rows.first.
|
|
76
|
-
@table.rows.first.
|
|
65
|
+
expect( @table.rows.first ).to include(4444)
|
|
66
|
+
expect( @table.rows.first ).to_not include('4444')
|
|
77
67
|
end
|
|
78
68
|
|
|
79
69
|
it "should pass silently if a mapped column does not exist in non-strict mode" do
|
|
80
|
-
|
|
70
|
+
expect {
|
|
81
71
|
@table.map_column!('two', false) { |v| v.to_i }
|
|
82
72
|
@table.hashes
|
|
83
|
-
}.
|
|
73
|
+
}.not_to raise_error
|
|
84
74
|
end
|
|
85
75
|
|
|
86
76
|
it "should fail if a mapped column does not exist in strict mode" do
|
|
87
|
-
|
|
77
|
+
expect {
|
|
88
78
|
@table.map_column!('two', true) { |v| v.to_i }
|
|
89
79
|
@table.hashes
|
|
90
|
-
}.
|
|
80
|
+
}.to raise_error('The column named "two" does not exist')
|
|
91
81
|
end
|
|
92
82
|
|
|
93
83
|
it "should return the table" do
|
|
94
|
-
(@table.map_column!(:one) { |v| v.to_i }).
|
|
84
|
+
expect( (@table.map_column!(:one) { |v| v.to_i }) ).to eq @table
|
|
95
85
|
end
|
|
96
86
|
end
|
|
97
87
|
|
|
98
88
|
describe '#map_column' do
|
|
99
89
|
it "should allow mapping columns" do
|
|
100
90
|
new_table = @table.map_column('one') { |v| v.to_i }
|
|
101
|
-
new_table.hashes.first['one'].
|
|
91
|
+
expect( new_table.hashes.first['one'] ).to eq 4444
|
|
102
92
|
end
|
|
103
93
|
|
|
104
94
|
it "applies the block once to each value" do
|
|
105
95
|
headers = ['header']
|
|
106
96
|
rows = ['value']
|
|
107
|
-
table =
|
|
97
|
+
table = DataTable.from [headers, rows]
|
|
108
98
|
count = 0
|
|
109
99
|
new_table = table.map_column('header') { |value| count +=1 }
|
|
110
100
|
new_table.rows
|
|
111
|
-
count.
|
|
101
|
+
expect( count ).to eq rows.size
|
|
112
102
|
end
|
|
113
103
|
|
|
114
104
|
it "should allow mapping columns and take a symbol as the column name" do
|
|
115
105
|
new_table = @table.map_column(:one) { |v| v.to_i }
|
|
116
|
-
new_table.hashes.first['one'].
|
|
106
|
+
expect( new_table.hashes.first['one'] ).to eq 4444
|
|
117
107
|
end
|
|
118
108
|
|
|
119
109
|
it "should allow mapping columns and modify the rows as well" do
|
|
120
110
|
new_table = @table.map_column(:one) { |v| v.to_i }
|
|
121
|
-
new_table.rows.first.
|
|
122
|
-
new_table.rows.first.
|
|
111
|
+
expect( new_table.rows.first ).to include(4444)
|
|
112
|
+
expect( new_table.rows.first ).to_not include('4444')
|
|
123
113
|
end
|
|
124
114
|
|
|
125
115
|
it "should pass silently if a mapped column does not exist in non-strict mode" do
|
|
126
|
-
|
|
116
|
+
expect {
|
|
127
117
|
new_table = @table.map_column('two', false) { |v| v.to_i }
|
|
128
118
|
new_table.hashes
|
|
129
|
-
}.
|
|
119
|
+
}.not_to raise_error
|
|
130
120
|
end
|
|
131
121
|
|
|
132
122
|
it "should fail if a mapped column does not exist in strict mode" do
|
|
133
|
-
|
|
123
|
+
expect {
|
|
134
124
|
new_table = @table.map_column('two', true) { |v| v.to_i }
|
|
135
125
|
new_table.hashes
|
|
136
|
-
}.
|
|
126
|
+
}.to raise_error('The column named "two" does not exist')
|
|
137
127
|
end
|
|
138
128
|
|
|
139
129
|
it "should return a new table" do
|
|
140
|
-
(@table.map_column(:one) { |v| v.to_i }).
|
|
130
|
+
expect( (@table.map_column(:one) { |v| v.to_i }) ).to_not eq @table
|
|
141
131
|
end
|
|
142
132
|
end
|
|
143
133
|
|
|
144
|
-
|
|
145
134
|
describe "#match" do
|
|
146
135
|
before(:each) do
|
|
147
|
-
@table =
|
|
136
|
+
@table = DataTable.from([
|
|
148
137
|
%w{one four seven},
|
|
149
138
|
%w{4444 55555 666666}
|
|
150
139
|
])
|
|
151
140
|
end
|
|
152
141
|
|
|
153
142
|
it "returns nil if headers do not match" do
|
|
154
|
-
@table.match('does,not,match').
|
|
143
|
+
expect( @table.match('does,not,match') ).to be_nil
|
|
155
144
|
end
|
|
156
145
|
it "requires a table: prefix on match" do
|
|
157
|
-
@table.match('table:one,four,seven').
|
|
146
|
+
expect( @table.match('table:one,four,seven') ).to_not be_nil
|
|
158
147
|
end
|
|
159
148
|
it "does not match if no table: prefix on match" do
|
|
160
|
-
@table.match('one,four,seven').
|
|
149
|
+
expect( @table.match('one,four,seven') ).to be_nil
|
|
161
150
|
end
|
|
162
151
|
end
|
|
163
152
|
|
|
164
153
|
describe "#transpose" do
|
|
165
154
|
before(:each) do
|
|
166
|
-
@table =
|
|
155
|
+
@table = DataTable.from([
|
|
167
156
|
%w{one 1111},
|
|
168
157
|
%w{two 22222}
|
|
169
158
|
])
|
|
170
159
|
end
|
|
171
160
|
|
|
172
161
|
it "should be convertible in to an array where each row is a hash" do
|
|
173
|
-
@table.transpose.hashes[0].
|
|
162
|
+
expect( @table.transpose.hashes[0] ).to eq('one' => '1111', 'two' => '22222')
|
|
174
163
|
end
|
|
175
164
|
end
|
|
176
165
|
|
|
177
166
|
describe "#rows_hash" do
|
|
178
167
|
|
|
179
168
|
it "should return a hash of the rows" do
|
|
180
|
-
table =
|
|
169
|
+
table = DataTable.from([
|
|
181
170
|
%w{one 1111},
|
|
182
171
|
%w{two 22222}
|
|
183
172
|
])
|
|
184
|
-
table.rows_hash.
|
|
173
|
+
expect( table.rows_hash ).to eq( 'one' => '1111', 'two' => '22222' )
|
|
185
174
|
end
|
|
186
175
|
|
|
187
176
|
it "should fail if the table doesn't have two columns" do
|
|
188
|
-
faulty_table =
|
|
177
|
+
faulty_table = DataTable.from([
|
|
189
178
|
%w{one 1111 abc},
|
|
190
179
|
%w{two 22222 def}
|
|
191
180
|
])
|
|
192
|
-
|
|
181
|
+
expect {
|
|
193
182
|
faulty_table.rows_hash
|
|
194
|
-
}.
|
|
183
|
+
}.to raise_error('The table must have exactly 2 columns')
|
|
195
184
|
end
|
|
196
185
|
|
|
197
186
|
it "should support header and column mapping" do
|
|
198
|
-
table =
|
|
187
|
+
table = DataTable.from([
|
|
199
188
|
%w{one 1111},
|
|
200
189
|
%w{two 22222}
|
|
201
190
|
])
|
|
202
|
-
table.map_headers
|
|
203
|
-
|
|
204
|
-
|
|
191
|
+
t2 = table.map_headers({ 'two' => 'Two' }) { |header| header.upcase }.
|
|
192
|
+
map_column('two', false) { |val| val.to_i }
|
|
193
|
+
expect( t2.rows_hash ).to eq( 'ONE' => '1111', 'Two' => 22222 )
|
|
205
194
|
end
|
|
206
195
|
end
|
|
207
196
|
|
|
208
197
|
describe '#map_headers!' do
|
|
209
198
|
let(:table) do
|
|
210
|
-
|
|
199
|
+
DataTable.from([
|
|
211
200
|
%w{HELLO WORLD},
|
|
212
201
|
%w{4444 55555}
|
|
213
202
|
])
|
|
@@ -215,25 +204,25 @@ module Cucumber
|
|
|
215
204
|
|
|
216
205
|
it "renames the columns to the specified values in the provided hash" do
|
|
217
206
|
@table.map_headers!('one' => :three)
|
|
218
|
-
@table.hashes.first[:three].
|
|
207
|
+
expect( @table.hashes.first[:three] ).to eq '4444'
|
|
219
208
|
end
|
|
220
209
|
|
|
221
210
|
it "allows renaming columns using regexp" do
|
|
222
211
|
@table.map_headers!(/one|uno/ => :three)
|
|
223
|
-
@table.hashes.first[:three].
|
|
212
|
+
expect( @table.hashes.first[:three] ).to eq '4444'
|
|
224
213
|
end
|
|
225
214
|
|
|
226
215
|
it "copies column mappings" do
|
|
227
216
|
@table.map_column!('one') { |v| v.to_i }
|
|
228
217
|
@table.map_headers!('one' => 'three')
|
|
229
|
-
@table.hashes.first['three'].
|
|
218
|
+
expect( @table.hashes.first['three'] ).to eq 4444
|
|
230
219
|
end
|
|
231
220
|
|
|
232
221
|
it "takes a block and operates on all the headers with it" do
|
|
233
222
|
table.map_headers! do |header|
|
|
234
223
|
header.downcase
|
|
235
224
|
end
|
|
236
|
-
table.hashes.first.keys.
|
|
225
|
+
expect( table.hashes.first.keys ).to match %w[hello world]
|
|
237
226
|
end
|
|
238
227
|
|
|
239
228
|
it "treats the mappings in the provided hash as overrides when used with a block" do
|
|
@@ -241,13 +230,13 @@ module Cucumber
|
|
|
241
230
|
header.downcase
|
|
242
231
|
end
|
|
243
232
|
|
|
244
|
-
table.hashes.first.keys.
|
|
233
|
+
expect( table.hashes.first.keys ).to match %w[hello foo]
|
|
245
234
|
end
|
|
246
235
|
end
|
|
247
236
|
|
|
248
237
|
describe '#map_headers' do
|
|
249
238
|
let(:table) do
|
|
250
|
-
|
|
239
|
+
DataTable.from([
|
|
251
240
|
%w{HELLO WORLD},
|
|
252
241
|
%w{4444 55555}
|
|
253
242
|
])
|
|
@@ -255,18 +244,18 @@ module Cucumber
|
|
|
255
244
|
|
|
256
245
|
it "renames the columns to the specified values in the provided hash" do
|
|
257
246
|
table2 = @table.map_headers('one' => :three)
|
|
258
|
-
table2.hashes.first[:three].
|
|
247
|
+
expect( table2.hashes.first[:three] ).to eq '4444'
|
|
259
248
|
end
|
|
260
249
|
|
|
261
250
|
it "allows renaming columns using regexp" do
|
|
262
251
|
table2 = @table.map_headers(/one|uno/ => :three)
|
|
263
|
-
table2.hashes.first[:three].
|
|
252
|
+
expect( table2.hashes.first[:three] ).to eq '4444'
|
|
264
253
|
end
|
|
265
254
|
|
|
266
255
|
it "copies column mappings" do
|
|
267
256
|
@table.map_column!('one') { |v| v.to_i }
|
|
268
257
|
table2 = @table.map_headers('one' => 'three')
|
|
269
|
-
table2.hashes.first['three'].
|
|
258
|
+
expect( table2.hashes.first['three'] ).to eq 4444
|
|
270
259
|
end
|
|
271
260
|
|
|
272
261
|
it "takes a block and operates on all the headers with it" do
|
|
@@ -274,7 +263,7 @@ module Cucumber
|
|
|
274
263
|
header.downcase
|
|
275
264
|
end
|
|
276
265
|
|
|
277
|
-
table2.hashes.first.keys.
|
|
266
|
+
expect( table2.hashes.first.keys ).to match %w[hello world]
|
|
278
267
|
end
|
|
279
268
|
|
|
280
269
|
it "treats the mappings in the provided hash as overrides when used with a block" do
|
|
@@ -282,89 +271,28 @@ module Cucumber
|
|
|
282
271
|
header.downcase
|
|
283
272
|
end
|
|
284
273
|
|
|
285
|
-
table2.hashes.first.keys.
|
|
286
|
-
end
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
describe "replacing arguments" do
|
|
290
|
-
|
|
291
|
-
before(:each) do
|
|
292
|
-
@table = Table.new([
|
|
293
|
-
%w{qty book},
|
|
294
|
-
%w{<qty> <book>}
|
|
295
|
-
])
|
|
296
|
-
end
|
|
297
|
-
|
|
298
|
-
it "should return a new table with arguments replaced with values" do
|
|
299
|
-
table_with_replaced_args = @table.arguments_replaced({'<book>' => 'Unbearable lightness of being', '<qty>' => '5'})
|
|
300
|
-
|
|
301
|
-
table_with_replaced_args.hashes[0]['book'].should == 'Unbearable lightness of being'
|
|
302
|
-
table_with_replaced_args.hashes[0]['qty'].should == '5'
|
|
303
|
-
end
|
|
304
|
-
|
|
305
|
-
it "should recognise when entire cell is delimited" do
|
|
306
|
-
@table.should have_text('<book>')
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
it "should recognise when just a subset of a cell is delimited" do
|
|
310
|
-
table = Table.new([
|
|
311
|
-
%w{qty book},
|
|
312
|
-
[nil, "This is <who>'s book"]
|
|
313
|
-
])
|
|
314
|
-
table.should have_text('<who>')
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
it "should replace nil values with nil" do
|
|
318
|
-
table_with_replaced_args = @table.arguments_replaced({'<book>' => nil})
|
|
319
|
-
|
|
320
|
-
table_with_replaced_args.hashes[0]['book'].should == nil
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
it "should preserve values which don't match a placeholder when replacing with nil" do
|
|
324
|
-
table = Table.new([
|
|
325
|
-
%w{book},
|
|
326
|
-
%w{cat}
|
|
327
|
-
])
|
|
328
|
-
table_with_replaced_args = table.arguments_replaced({'<book>' => nil})
|
|
329
|
-
|
|
330
|
-
table_with_replaced_args.hashes[0]['book'].should == 'cat'
|
|
331
|
-
end
|
|
332
|
-
|
|
333
|
-
it "should not change the original table" do
|
|
334
|
-
@table.arguments_replaced({'<book>' => 'Unbearable lightness of being'})
|
|
335
|
-
|
|
336
|
-
@table.hashes[0]['book'].should_not == 'Unbearable lightness of being'
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
it "should not raise an error when there are nil values in the table" do
|
|
340
|
-
table = Table.new([
|
|
341
|
-
['book', 'qty'],
|
|
342
|
-
['<book>', nil],
|
|
343
|
-
])
|
|
344
|
-
lambda{
|
|
345
|
-
table.arguments_replaced({'<book>' => nil, '<qty>' => '5'})
|
|
346
|
-
}.should_not raise_error
|
|
274
|
+
expect( table2.hashes.first.keys ).to match %w[hello foo]
|
|
347
275
|
end
|
|
348
276
|
end
|
|
349
277
|
|
|
350
278
|
describe "diff!" do
|
|
351
279
|
it "should detect a complex diff" do
|
|
352
|
-
t1 =
|
|
280
|
+
t1 = DataTable.from(%{
|
|
353
281
|
| 1 | 22 | 333 | 4444 |
|
|
354
282
|
| 55555 | 666666 | 7777777 | 88888888 |
|
|
355
283
|
| 999999999 | 0000000000 | 01010101010 | 121212121212 |
|
|
356
284
|
| 4000 | ABC | DEF | 50000 |
|
|
357
|
-
}
|
|
285
|
+
})
|
|
358
286
|
|
|
359
|
-
t2 =
|
|
287
|
+
t2 = DataTable.from(%{
|
|
360
288
|
| a | 4444 | 1 |
|
|
361
289
|
| bb | 88888888 | 55555 |
|
|
362
290
|
| ccc | xxxxxxxx | 999999999 |
|
|
363
291
|
| dddd | 4000 | 300 |
|
|
364
292
|
| e | 50000 | 4000 |
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
t1.to_s(:indent => 12, :color => false).
|
|
293
|
+
})
|
|
294
|
+
expect { t1.diff!(t2) }.to raise_error
|
|
295
|
+
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
|
368
296
|
| 1 | (-) 22 | (-) 333 | 4444 | (+) a |
|
|
369
297
|
| 55555 | (-) 666666 | (-) 7777777 | 88888888 | (+) bb |
|
|
370
298
|
| (-) 999999999 | (-) 0000000000 | (-) 01010101010 | (-) 121212121212 | (+) |
|
|
@@ -375,13 +303,13 @@ module Cucumber
|
|
|
375
303
|
end
|
|
376
304
|
|
|
377
305
|
it "should not change table when diffed with identical" do
|
|
378
|
-
t =
|
|
306
|
+
t = DataTable.from(%{
|
|
379
307
|
|a|b|c|
|
|
380
308
|
|d|e|f|
|
|
381
309
|
|g|h|i|
|
|
382
|
-
}
|
|
310
|
+
})
|
|
383
311
|
t.diff!(t.dup)
|
|
384
|
-
t.to_s(:indent => 12, :color => false).
|
|
312
|
+
expect( t.to_s(:indent => 12, :color => false) ).to eq %{
|
|
385
313
|
| a | b | c |
|
|
386
314
|
| d | e | f |
|
|
387
315
|
| g | h | i |
|
|
@@ -389,17 +317,17 @@ module Cucumber
|
|
|
389
317
|
end
|
|
390
318
|
|
|
391
319
|
it "should inspect missing and surplus cells" do
|
|
392
|
-
t1 =
|
|
320
|
+
t1 = DataTable.from([
|
|
393
321
|
['name', 'male', 'lastname', 'swedish'],
|
|
394
322
|
['aslak', 'true', 'hellesøy', 'false']
|
|
395
323
|
])
|
|
396
|
-
t2 =
|
|
324
|
+
t2 = DataTable.from([
|
|
397
325
|
['name', 'male', 'lastname', 'swedish'],
|
|
398
326
|
['aslak', true, 'hellesøy', false]
|
|
399
327
|
])
|
|
400
|
-
|
|
328
|
+
expect { t1.diff!(t2) }.to raise_error
|
|
401
329
|
|
|
402
|
-
t1.to_s(:indent => 12, :color => false).
|
|
330
|
+
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
|
403
331
|
| name | male | lastname | swedish |
|
|
404
332
|
| (-) aslak | (-) (i) "true" | (-) hellesøy | (-) (i) "false" |
|
|
405
333
|
| (+) aslak | (+) (i) true | (+) hellesøy | (+) (i) false |
|
|
@@ -407,70 +335,70 @@ module Cucumber
|
|
|
407
335
|
end
|
|
408
336
|
|
|
409
337
|
it "should allow column mapping of target before diffing" do
|
|
410
|
-
t1 =
|
|
338
|
+
t1 = DataTable.from([
|
|
411
339
|
['name', 'male'],
|
|
412
340
|
['aslak', 'true']
|
|
413
341
|
])
|
|
414
342
|
t1.map_column!('male') { |m| m == 'true' }
|
|
415
|
-
t2 =
|
|
343
|
+
t2 = DataTable.from([
|
|
416
344
|
['name', 'male'],
|
|
417
345
|
['aslak', true]
|
|
418
346
|
])
|
|
419
347
|
t1.diff!(t2)
|
|
420
|
-
t1.to_s(:indent => 12, :color => false).
|
|
348
|
+
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
|
421
349
|
| name | male |
|
|
422
350
|
| aslak | true |
|
|
423
351
|
}
|
|
424
352
|
end
|
|
425
353
|
|
|
426
354
|
it "should allow column mapping of argument before diffing" do
|
|
427
|
-
t1 =
|
|
355
|
+
t1 = DataTable.from([
|
|
428
356
|
['name', 'male'],
|
|
429
357
|
['aslak', true]
|
|
430
358
|
])
|
|
431
359
|
t1.map_column!('male') {
|
|
432
360
|
'true'
|
|
433
361
|
}
|
|
434
|
-
t2 =
|
|
362
|
+
t2 = DataTable.from([
|
|
435
363
|
['name', 'male'],
|
|
436
364
|
['aslak', 'true']
|
|
437
365
|
])
|
|
438
366
|
t2.diff!(t1)
|
|
439
|
-
t1.to_s(:indent => 12, :color => false).
|
|
367
|
+
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
|
440
368
|
| name | male |
|
|
441
369
|
| aslak | true |
|
|
442
370
|
}
|
|
443
371
|
end
|
|
444
372
|
|
|
445
373
|
it "should allow header mapping before diffing" do
|
|
446
|
-
t1 =
|
|
374
|
+
t1 = DataTable.from([
|
|
447
375
|
['Name', 'Male'],
|
|
448
376
|
['aslak', 'true']
|
|
449
377
|
])
|
|
450
378
|
t1.map_headers!('Name' => 'name', 'Male' => 'male')
|
|
451
379
|
t1.map_column!('male') { |m| m == 'true' }
|
|
452
|
-
t2 =
|
|
380
|
+
t2 = DataTable.from([
|
|
453
381
|
['name', 'male'],
|
|
454
382
|
['aslak', true]
|
|
455
383
|
])
|
|
456
384
|
t1.diff!(t2)
|
|
457
|
-
t1.to_s(:indent => 12, :color => false).
|
|
385
|
+
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
|
458
386
|
| name | male |
|
|
459
387
|
| aslak | true |
|
|
460
388
|
}
|
|
461
389
|
end
|
|
462
390
|
|
|
463
391
|
it "should detect seemingly identical tables as different" do
|
|
464
|
-
t1 =
|
|
392
|
+
t1 = DataTable.from([
|
|
465
393
|
['X', 'Y'],
|
|
466
394
|
['2', '1']
|
|
467
395
|
])
|
|
468
|
-
t2 =
|
|
396
|
+
t2 = DataTable.from([
|
|
469
397
|
['X', 'Y'],
|
|
470
398
|
[2, 1]
|
|
471
399
|
])
|
|
472
|
-
|
|
473
|
-
t1.to_s(:indent => 12, :color => false).
|
|
400
|
+
expect { t1.diff!(t2) }.to raise_error
|
|
401
|
+
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
|
474
402
|
| X | Y |
|
|
475
403
|
| (-) (i) "2" | (-) (i) "1" |
|
|
476
404
|
| (+) (i) 2 | (+) (i) 1 |
|
|
@@ -478,117 +406,109 @@ module Cucumber
|
|
|
478
406
|
end
|
|
479
407
|
|
|
480
408
|
it "should not allow mappings that match more than 1 column" do
|
|
481
|
-
t1 =
|
|
409
|
+
t1 = DataTable.from([
|
|
482
410
|
['Cuke', 'Duke'],
|
|
483
411
|
['Foo', 'Bar']
|
|
484
412
|
])
|
|
485
|
-
|
|
413
|
+
expect do
|
|
486
414
|
t1.map_headers!(/uk/ => 'u')
|
|
487
415
|
t1.hashes
|
|
488
|
-
end.
|
|
416
|
+
end.to raise_error(%{2 headers matched /uk/: ["Cuke", "Duke"]})
|
|
489
417
|
end
|
|
490
418
|
|
|
491
419
|
describe "raising" do
|
|
492
420
|
before do
|
|
493
|
-
@t =
|
|
421
|
+
@t = DataTable.from(%{
|
|
494
422
|
| a | b |
|
|
495
423
|
| c | d |
|
|
496
|
-
}
|
|
497
|
-
@t.
|
|
424
|
+
})
|
|
425
|
+
expect( @t ).not_to eq nil
|
|
498
426
|
end
|
|
499
427
|
|
|
500
428
|
it "should raise on missing rows" do
|
|
501
|
-
t =
|
|
429
|
+
t = DataTable.from(%{
|
|
502
430
|
| a | b |
|
|
503
|
-
}
|
|
504
|
-
lambda { @t.dup.diff!(t) }.
|
|
505
|
-
|
|
431
|
+
})
|
|
432
|
+
expect( lambda { @t.dup.diff!(t) } ).to raise_error
|
|
433
|
+
expect { @t.dup.diff!(t, :missing_row => false) }.not_to raise_error
|
|
506
434
|
end
|
|
507
435
|
|
|
508
436
|
it "should not raise on surplus rows when surplus is at the end" do
|
|
509
|
-
t =
|
|
437
|
+
t = DataTable.from(%{
|
|
510
438
|
| a | b |
|
|
511
439
|
| c | d |
|
|
512
440
|
| e | f |
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
|
|
441
|
+
})
|
|
442
|
+
expect { @t.dup.diff!(t) }.to raise_error
|
|
443
|
+
expect { @t.dup.diff!(t, :surplus_row => false) }.not_to raise_error
|
|
516
444
|
end
|
|
517
445
|
|
|
518
446
|
it "should not raise on surplus rows when surplus is interleaved" do
|
|
519
|
-
t1 =
|
|
447
|
+
t1 = DataTable.from(%{
|
|
520
448
|
| row_1 | row_2 |
|
|
521
449
|
| four | 4 |
|
|
522
|
-
}
|
|
523
|
-
t2 =
|
|
450
|
+
})
|
|
451
|
+
t2 = DataTable.from(%{
|
|
524
452
|
| row_1 | row_2 |
|
|
525
453
|
| one | 1 |
|
|
526
454
|
| two | 2 |
|
|
527
455
|
| three | 3 |
|
|
528
456
|
| four | 4 |
|
|
529
457
|
| five | 5 |
|
|
530
|
-
}
|
|
531
|
-
|
|
458
|
+
})
|
|
459
|
+
expect { t1.dup.diff!(t2) }.to raise_error
|
|
532
460
|
|
|
533
|
-
|
|
461
|
+
expect { t1.dup.diff!(t2, :surplus_row => false) }.not_to raise_error
|
|
534
462
|
end
|
|
535
463
|
|
|
536
464
|
it "should raise on missing columns" do
|
|
537
|
-
t =
|
|
465
|
+
t = DataTable.from(%{
|
|
538
466
|
| a |
|
|
539
467
|
| c |
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
|
|
468
|
+
})
|
|
469
|
+
expect { @t.dup.diff!(t) }.to raise_error
|
|
470
|
+
expect { @t.dup.diff!(t, :missing_col => false) }.not_to raise_error
|
|
543
471
|
end
|
|
544
472
|
|
|
545
473
|
it "should not raise on surplus columns" do
|
|
546
|
-
t =
|
|
474
|
+
t = DataTable.from(%{
|
|
547
475
|
| a | b | x |
|
|
548
476
|
| c | d | y |
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
|
|
477
|
+
})
|
|
478
|
+
expect { @t.dup.diff!(t) }.not_to raise_error
|
|
479
|
+
expect { @t.dup.diff!(t, :surplus_col => true) }.to raise_error
|
|
552
480
|
end
|
|
553
481
|
|
|
554
482
|
it "should not raise on misplaced columns" do
|
|
555
|
-
t =
|
|
483
|
+
t = DataTable.from(%{
|
|
556
484
|
| b | a |
|
|
557
485
|
| d | c |
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
|
|
486
|
+
})
|
|
487
|
+
expect { @t.dup.diff!(t) }.not_to raise_error
|
|
488
|
+
expect { @t.dup.diff!(t, :misplaced_col => true) }.to raise_error
|
|
561
489
|
end
|
|
562
490
|
end
|
|
563
491
|
|
|
564
|
-
|
|
565
|
-
|
|
492
|
+
it "can compare to an Array" do
|
|
493
|
+
t = DataTable.from(%{
|
|
494
|
+
| b | a |
|
|
495
|
+
| d | c |
|
|
496
|
+
})
|
|
497
|
+
other = [ %w{b a}, %w{d c} ]
|
|
498
|
+
|
|
499
|
+
expect { t.diff!(other) }.not_to raise_error
|
|
566
500
|
end
|
|
567
501
|
end
|
|
568
502
|
|
|
569
|
-
describe "#
|
|
503
|
+
describe "#from" do
|
|
570
504
|
it "should allow Array of Hash" do
|
|
571
|
-
t1 =
|
|
572
|
-
t1.to_s(:indent => 12, :color => false).
|
|
505
|
+
t1 = DataTable.from([{'name' => 'aslak', 'male' => 'true'}])
|
|
506
|
+
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
|
573
507
|
| male | name |
|
|
574
508
|
| true | aslak |
|
|
575
509
|
}
|
|
576
510
|
end
|
|
577
511
|
end
|
|
578
|
-
|
|
579
|
-
it "should convert to sexp" do
|
|
580
|
-
@table.to_sexp.should ==
|
|
581
|
-
[:table,
|
|
582
|
-
[:row, -1,
|
|
583
|
-
[:cell, "one"],
|
|
584
|
-
[:cell, "four"],
|
|
585
|
-
[:cell, "seven"]
|
|
586
|
-
],
|
|
587
|
-
[:row, -1,
|
|
588
|
-
[:cell, "4444"],
|
|
589
|
-
[:cell, "55555"],
|
|
590
|
-
[:cell, "666666"]]]
|
|
591
|
-
end
|
|
592
512
|
end
|
|
593
513
|
end
|
|
594
514
|
end
|