cucumber 3.0.0.pre.2 → 4.0.0.rc.5
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 +5 -5
- data/{History.md → CHANGELOG.md} +267 -14
- data/CONTRIBUTING.md +4 -21
- data/README.md +14 -15
- data/bin/cucumber +2 -1
- data/lib/autotest/cucumber.rb +1 -0
- data/lib/autotest/cucumber_mixin.rb +36 -40
- data/lib/autotest/cucumber_rails.rb +1 -0
- data/lib/autotest/cucumber_rails_rspec.rb +1 -0
- data/lib/autotest/cucumber_rails_rspec2.rb +1 -0
- data/lib/autotest/cucumber_rspec.rb +1 -0
- data/lib/autotest/cucumber_rspec2.rb +1 -0
- data/lib/autotest/discover.rb +1 -0
- data/lib/cucumber.rb +2 -1
- data/lib/cucumber/cli/configuration.rb +8 -7
- data/lib/cucumber/cli/main.rb +14 -14
- data/lib/cucumber/cli/options.rb +141 -120
- data/lib/cucumber/cli/profile_loader.rb +50 -29
- data/lib/cucumber/cli/rerun_file.rb +1 -0
- data/lib/cucumber/configuration.rb +40 -30
- data/lib/cucumber/constantize.rb +8 -10
- data/lib/cucumber/core_ext/string.rb +1 -0
- data/lib/cucumber/deprecate.rb +33 -9
- data/lib/cucumber/encoding.rb +2 -1
- data/lib/cucumber/errors.rb +10 -8
- data/lib/cucumber/events.rb +14 -9
- data/lib/cucumber/events/envelope.rb +9 -0
- data/lib/cucumber/events/gherkin_source_parsed.rb +11 -0
- data/lib/cucumber/events/gherkin_source_read.rb +1 -4
- data/lib/cucumber/events/hook_test_step_created.rb +13 -0
- data/lib/cucumber/events/step_activated.rb +6 -6
- data/lib/cucumber/events/step_definition_registered.rb +4 -8
- data/lib/cucumber/events/test_case_created.rb +13 -0
- data/lib/cucumber/events/test_case_finished.rb +1 -5
- data/lib/cucumber/events/test_case_ready.rb +12 -0
- data/lib/cucumber/events/{test_case_starting.rb → test_case_started.rb} +1 -5
- data/lib/cucumber/events/test_run_finished.rb +2 -3
- data/lib/cucumber/events/{test_run_starting.rb → test_run_started.rb} +3 -5
- data/lib/cucumber/events/test_step_created.rb +13 -0
- data/lib/cucumber/events/test_step_finished.rb +0 -6
- data/lib/cucumber/events/{test_step_starting.rb → test_step_started.rb} +2 -8
- data/lib/cucumber/file_specs.rb +7 -6
- data/lib/cucumber/filters.rb +3 -1
- data/lib/cucumber/filters/activate_steps.rb +11 -5
- data/lib/cucumber/filters/apply_after_hooks.rb +1 -0
- data/lib/cucumber/filters/apply_after_step_hooks.rb +1 -0
- data/lib/cucumber/filters/apply_around_hooks.rb +1 -0
- data/lib/cucumber/filters/apply_before_hooks.rb +1 -0
- data/lib/cucumber/filters/broadcast_test_case_ready_event.rb +12 -0
- data/lib/cucumber/filters/{broadcast_test_run_starting_event.rb → broadcast_test_run_started_event.rb} +4 -3
- data/lib/cucumber/filters/gated_receiver.rb +1 -2
- data/lib/cucumber/filters/prepare_world.rb +6 -13
- data/lib/cucumber/filters/quit.rb +3 -7
- data/lib/cucumber/filters/randomizer.rb +6 -7
- data/lib/cucumber/filters/retry.rb +2 -2
- data/lib/cucumber/filters/tag_limits.rb +2 -2
- data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -2
- data/lib/cucumber/filters/tag_limits/verifier.rb +3 -6
- data/lib/cucumber/formatter/ansicolor.rb +33 -37
- data/lib/cucumber/formatter/ast_lookup.rb +165 -0
- data/lib/cucumber/formatter/backtrace_filter.rb +10 -10
- data/lib/cucumber/formatter/console.rb +37 -74
- data/lib/cucumber/formatter/console_counts.rb +4 -9
- data/lib/cucumber/formatter/console_issues.rb +10 -7
- data/lib/cucumber/formatter/duration.rb +2 -1
- data/lib/cucumber/formatter/duration_extractor.rb +4 -2
- data/lib/cucumber/formatter/errors.rb +6 -0
- data/lib/cucumber/formatter/fail_fast.rb +9 -6
- data/lib/cucumber/formatter/fanout.rb +3 -3
- data/lib/cucumber/formatter/html.rb +11 -603
- data/lib/cucumber/formatter/http_io.rb +93 -0
- data/lib/cucumber/formatter/ignore_missing_messages.rb +2 -4
- data/lib/cucumber/formatter/interceptor.rb +10 -12
- data/lib/cucumber/formatter/io.rb +19 -12
- data/lib/cucumber/formatter/json.rb +106 -112
- data/lib/cucumber/formatter/junit.rb +81 -76
- data/lib/cucumber/formatter/message.rb +22 -0
- data/lib/cucumber/formatter/message_builder.rb +241 -0
- data/lib/cucumber/formatter/pretty.rb +353 -153
- data/lib/cucumber/formatter/progress.rb +30 -33
- data/lib/cucumber/formatter/query/hook_by_test_step.rb +31 -0
- data/lib/cucumber/formatter/query/pickle_by_test.rb +26 -0
- data/lib/cucumber/formatter/query/pickle_step_by_test_step.rb +26 -0
- data/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +40 -0
- data/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +40 -0
- data/lib/cucumber/formatter/rerun.rb +24 -5
- data/lib/cucumber/formatter/stepdefs.rb +2 -2
- data/lib/cucumber/formatter/steps.rb +4 -5
- data/lib/cucumber/formatter/summary.rb +18 -11
- data/lib/cucumber/formatter/unicode.rb +16 -18
- data/lib/cucumber/formatter/usage.rb +30 -26
- data/lib/cucumber/gherkin/data_table_parser.rb +18 -6
- data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +83 -86
- data/lib/cucumber/gherkin/formatter/escaping.rb +13 -12
- data/lib/cucumber/gherkin/i18n.rb +1 -0
- data/lib/cucumber/gherkin/steps_parser.rb +18 -8
- data/lib/cucumber/glue/dsl.rb +13 -26
- data/lib/cucumber/glue/hook.rb +35 -11
- data/lib/cucumber/glue/invoke_in_world.rb +15 -20
- data/lib/cucumber/glue/proto_world.rb +48 -42
- data/lib/cucumber/glue/registry_and_more.rb +58 -23
- data/lib/cucumber/glue/snippet.rb +23 -26
- data/lib/cucumber/glue/step_definition.rb +51 -28
- data/lib/cucumber/glue/world_factory.rb +2 -4
- data/lib/cucumber/hooks.rb +27 -17
- data/lib/cucumber/load_path.rb +1 -0
- data/lib/cucumber/multiline_argument.rb +7 -17
- data/lib/cucumber/multiline_argument/data_table.rb +113 -82
- data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +8 -12
- data/lib/cucumber/multiline_argument/doc_string.rb +2 -1
- data/lib/cucumber/platform.rb +4 -3
- data/lib/cucumber/project_initializer.rb +2 -2
- data/lib/cucumber/rake/task.rb +28 -21
- data/lib/cucumber/rspec/disable_option_parser.rb +10 -8
- data/lib/cucumber/rspec/doubles.rb +1 -0
- data/lib/cucumber/running_test_case.rb +4 -54
- data/lib/cucumber/runtime.rb +32 -63
- data/lib/cucumber/runtime/after_hooks.rb +9 -4
- data/lib/cucumber/runtime/before_hooks.rb +9 -4
- data/lib/cucumber/runtime/for_programming_languages.rb +12 -9
- data/lib/cucumber/runtime/step_hooks.rb +5 -2
- data/lib/cucumber/runtime/support_code.rb +16 -22
- data/lib/cucumber/runtime/user_interface.rb +12 -23
- data/lib/cucumber/step_definition_light.rb +6 -4
- data/lib/cucumber/step_definitions.rb +3 -2
- data/lib/cucumber/step_match.rb +29 -14
- data/lib/cucumber/step_match_search.rb +10 -10
- data/lib/cucumber/term/ansicolor.rb +39 -39
- data/lib/cucumber/unit.rb +1 -0
- data/lib/cucumber/version +1 -1
- data/lib/simplecov_setup.rb +1 -0
- metadata +206 -678
- data/.coveralls.yml +0 -1
- data/.cucumberproignore +0 -6
- data/.github/ISSUE_TEMPLATE.md +0 -48
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -39
- data/.rspec +0 -1
- data/.rubocop.yml +0 -13
- data/.rubocop_todo.yml +0 -1075
- data/.ruby-gemset +0 -1
- data/.travis.yml +0 -69
- data/.yardopts +0 -1
- data/Gemfile +0 -28
- data/Rakefile +0 -32
- data/appveyor.yml +0 -26
- data/cucumber.gemspec +0 -52
- data/cucumber.yml +0 -19
- data/examples/i18n/README.textile +0 -3
- data/examples/i18n/Rakefile +0 -33
- data/examples/i18n/ar/Rakefile +0 -6
- data/examples/i18n/ar/features/addition.feature +0 -17
- data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/ar/lib/calculator.rb +0 -11
- data/examples/i18n/bg/Rakefile +0 -6
- data/examples/i18n/bg/features/addition.feature +0 -12
- data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
- data/examples/i18n/bg/features/division.feature +0 -17
- data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/bg/features/support/env.rb +0 -5
- data/examples/i18n/bg/features/support/world.rb +0 -8
- data/examples/i18n/bg/lib/calculator.rb +0 -24
- data/examples/i18n/ca/Rakefile +0 -6
- data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -21
- data/examples/i18n/ca/features/suma.feature +0 -17
- data/examples/i18n/ca/lib/calculadora.rb +0 -16
- data/examples/i18n/cs/Rakefile +0 -6
- data/examples/i18n/cs/features/addition.feature +0 -17
- data/examples/i18n/cs/features/division.feature +0 -11
- data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/cs/lib/calculator.rb +0 -14
- data/examples/i18n/da/Rakefile +0 -6
- data/examples/i18n/da/features/sammenlaegning.feature +0 -18
- data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -24
- data/examples/i18n/da/lib/lommeregner.rb +0 -11
- data/examples/i18n/de/Rakefile +0 -6
- data/examples/i18n/de/features/addition.feature +0 -17
- data/examples/i18n/de/features/division.feature +0 -10
- data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/de/lib/calculator.rb +0 -14
- data/examples/i18n/el/Rakefile +0 -6
- data/examples/i18n/el/features/addition.feature +0 -17
- data/examples/i18n/el/features/division.feature +0 -10
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/el/lib/calculator.rb +0 -14
- data/examples/i18n/en-lol/Rakefile +0 -4
- data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
- data/examples/i18n/en-lol/features/stuffing.feature +0 -8
- data/examples/i18n/en-lol/features/support/env.rb +0 -7
- data/examples/i18n/en-lol/lib/basket.rb +0 -12
- data/examples/i18n/en-lol/lib/belly.rb +0 -11
- data/examples/i18n/en/Rakefile +0 -6
- data/examples/i18n/en/features/addition.feature +0 -17
- data/examples/i18n/en/features/division.feature +0 -10
- data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/en/lib/calculator.rb +0 -14
- data/examples/i18n/eo/Rakefile +0 -6
- data/examples/i18n/eo/features/adicio.feature +0 -17
- data/examples/i18n/eo/features/divido.feature +0 -10
- data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/eo/lib/calculator.rb +0 -14
- data/examples/i18n/es/Rakefile +0 -6
- data/examples/i18n/es/features/adicion.feature +0 -17
- data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -21
- data/examples/i18n/es/lib/calculador.rb +0 -14
- data/examples/i18n/et/Rakefile +0 -6
- data/examples/i18n/et/features/jagamine.feature +0 -10
- data/examples/i18n/et/features/liitmine.feature +0 -17
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -24
- data/examples/i18n/et/lib/kalkulaator.rb +0 -14
- data/examples/i18n/fi/Rakefile +0 -6
- data/examples/i18n/fi/features/jakolasku.feature +0 -10
- data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -24
- data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
- data/examples/i18n/fi/lib/laskin.rb +0 -14
- data/examples/i18n/fr/Rakefile +0 -8
- data/examples/i18n/fr/features/addition.feature +0 -18
- data/examples/i18n/fr/features/addition2.feature +0 -17
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
- data/examples/i18n/fr/features/support/env.rb +0 -5
- data/examples/i18n/fr/lib/calculatrice.rb +0 -10
- data/examples/i18n/he/Rakefile +0 -6
- data/examples/i18n/he/features/addition.feature +0 -17
- data/examples/i18n/he/features/division.feature +0 -10
- data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/he/lib/calculator.rb +0 -15
- data/examples/i18n/hi/Rakefile +0 -6
- data/examples/i18n/hi/features/addition.feature +0 -16
- data/examples/i18n/hi/features/division.feature +0 -10
- data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/hi/lib/calculator.rb +0 -15
- data/examples/i18n/ht/Rakefile +0 -6
- data/examples/i18n/ht/features/adisyon.feature +0 -17
- data/examples/i18n/ht/features/divizyon.feature +0 -10
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +0 -25
- data/examples/i18n/ht/lib/kalkilatris.rb +0 -14
- data/examples/i18n/hu/Rakefile +0 -6
- data/examples/i18n/hu/features/osszeadas.feature +0 -17
- data/examples/i18n/hu/features/osztas.feature +0 -10
- data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -25
- data/examples/i18n/hu/lib/calculator.rb +0 -14
- data/examples/i18n/id/Rakefile +0 -6
- data/examples/i18n/id/features/addition.feature +0 -17
- data/examples/i18n/id/features/division.feature +0 -10
- data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/id/lib/calculator.rb +0 -14
- data/examples/i18n/it/Rakefile +0 -6
- data/examples/i18n/it/features/somma.feature +0 -11
- data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -24
- data/examples/i18n/it/lib/calcolatrice.rb +0 -11
- data/examples/i18n/ja/Rakefile +0 -6
- data/examples/i18n/ja/features/addition.feature +0 -17
- data/examples/i18n/ja/features/division.feature +0 -10
- data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
- data/examples/i18n/ja/features/support/env.rb +0 -5
- data/examples/i18n/ja/lib/calculator.rb +0 -14
- data/examples/i18n/ko/Rakefile +0 -6
- data/examples/i18n/ko/features/addition.feature +0 -17
- data/examples/i18n/ko/features/division.feature +0 -11
- data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/ko/lib/calculator.rb +0 -14
- data/examples/i18n/lt/Rakefile +0 -6
- data/examples/i18n/lt/features/addition.feature +0 -17
- data/examples/i18n/lt/features/division.feature +0 -10
- data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/lt/lib/calculator.rb +0 -14
- data/examples/i18n/lv/Rakefile +0 -6
- data/examples/i18n/lv/features/addition.feature +0 -17
- data/examples/i18n/lv/features/division.feature +0 -10
- data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/lv/lib/calculator.rb +0 -14
- data/examples/i18n/no/Rakefile +0 -6
- data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
- data/examples/i18n/no/features/summering.feature +0 -19
- data/examples/i18n/no/features/support/env.rb +0 -6
- data/examples/i18n/no/lib/kalkulator.rb +0 -11
- data/examples/i18n/pl/Rakefile +0 -6
- data/examples/i18n/pl/features/addition.feature +0 -17
- data/examples/i18n/pl/features/division.feature +0 -10
- data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/pl/features/support/env.rb +0 -5
- data/examples/i18n/pl/lib/calculator.rb +0 -14
- data/examples/i18n/pt/Rakefile +0 -6
- data/examples/i18n/pt/features/adicao.feature +0 -11
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
- data/examples/i18n/pt/features/support/env.rb +0 -5
- data/examples/i18n/pt/lib/calculadora.rb +0 -10
- data/examples/i18n/ro/Rakefile +0 -6
- data/examples/i18n/ro/features/adunare.feature +0 -12
- data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -21
- data/examples/i18n/ro/lib/calculator.rb +0 -11
- data/examples/i18n/ru/Rakefile +0 -6
- data/examples/i18n/ru/features/addition.feature +0 -11
- data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
- data/examples/i18n/ru/features/division.feature +0 -16
- data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
- data/examples/i18n/ru/features/support/env.rb +0 -5
- data/examples/i18n/ru/features/support/world.rb +0 -8
- data/examples/i18n/ru/lib/calculator.rb +0 -24
- data/examples/i18n/sk/Rakefile +0 -6
- data/examples/i18n/sk/features/addition.feature +0 -17
- data/examples/i18n/sk/features/division.feature +0 -10
- data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/sk/lib/calculator.rb +0 -14
- data/examples/i18n/sr-Cyrl/Rakefile +0 -6
- data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
- data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
- data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -5
- data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
- data/examples/i18n/sr-Latn/Rakefile +0 -6
- data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
- data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
- data/examples/i18n/sv/Rakefile +0 -6
- data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -24
- data/examples/i18n/sv/features/summering.feature +0 -18
- data/examples/i18n/sv/lib/kalkulator.rb +0 -11
- data/examples/i18n/tr/Rakefile +0 -6
- data/examples/i18n/tr/features/bolme.feature +0 -10
- data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -24
- data/examples/i18n/tr/features/toplama.feature +0 -18
- data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
- data/examples/i18n/uk/Rakefile +0 -6
- data/examples/i18n/uk/features/addition.feature +0 -11
- data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
- data/examples/i18n/uk/features/division.feature +0 -16
- data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
- data/examples/i18n/uk/features/support/env.rb +0 -5
- data/examples/i18n/uk/features/support/world.rb +0 -8
- data/examples/i18n/uk/lib/calculator.rb +0 -24
- data/examples/i18n/uz/Rakefile +0 -6
- data/examples/i18n/uz/features/addition.feature +0 -10
- data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
- data/examples/i18n/uz/features/division.feature +0 -17
- data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
- data/examples/i18n/uz/features/support/env.rb +0 -5
- data/examples/i18n/uz/features/support/world.rb +0 -8
- data/examples/i18n/uz/lib/calculator.rb +0 -24
- data/examples/i18n/zh-CN/Rakefile +0 -4
- data/examples/i18n/zh-CN/features/addition.feature +0 -18
- data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -26
- data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
- data/examples/i18n/zh-TW/Rakefile +0 -4
- data/examples/i18n/zh-TW/features/addition.feature +0 -17
- data/examples/i18n/zh-TW/features/division.feature +0 -11
- data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -24
- data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
- data/examples/rspec_doubles/Rakefile +0 -4
- data/examples/rspec_doubles/features/mocking.feature +0 -9
- data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
- data/examples/rspec_doubles/features/support/env.rb +0 -12
- data/examples/sinatra/README.textile +0 -13
- data/examples/sinatra/Rakefile +0 -6
- data/examples/sinatra/app.rb +0 -14
- data/examples/sinatra/features/add.feature +0 -11
- data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
- data/examples/sinatra/features/support/env.rb +0 -10
- data/examples/sinatra/views/add.erb +0 -7
- data/examples/sinatra/views/layout.erb +0 -8
- data/examples/tcl/README.textile +0 -11
- data/examples/tcl/Rakefile +0 -6
- data/examples/tcl/features/fibonnacci.feature +0 -17
- data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
- data/examples/tcl/features/support/env.rb +0 -6
- data/examples/tcl/src/fib.tcl +0 -3
- data/examples/test_unit/Gemfile +0 -4
- data/examples/test_unit/Rakefile +0 -6
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
- data/examples/test_unit/features/test_unit.feature +0 -9
- data/examples/watir/README.textile +0 -16
- data/examples/watir/Rakefile +0 -12
- data/examples/watir/cucumber.yml +0 -1
- data/examples/watir/features/search.feature +0 -12
- data/examples/watir/features/step_definitions/search_steps.rb +0 -26
- data/examples/watir/features/support/env.rb +0 -35
- data/examples/watir/features/support/screenshots.rb +0 -47
- data/features/docs/api/list_step_defs_as_json.feature +0 -64
- data/features/docs/api/listen_for_events.feature +0 -59
- data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -27
- data/features/docs/cli/backtraces.feature +0 -36
- data/features/docs/cli/dry_run.feature +0 -73
- data/features/docs/cli/exclude_files.feature +0 -18
- data/features/docs/cli/execute_with_tag_filter.feature +0 -117
- data/features/docs/cli/fail_fast.feature +0 -48
- data/features/docs/cli/finding_steps.feature +0 -28
- data/features/docs/cli/help.feature +0 -8
- data/features/docs/cli/i18n.feature +0 -42
- data/features/docs/cli/randomize.feature +0 -140
- data/features/docs/cli/require.feature +0 -27
- data/features/docs/cli/retry_failing_tests.feature +0 -92
- data/features/docs/cli/run_scenarios_matching_name.feature +0 -105
- data/features/docs/cli/run_specific_scenarios.feature +0 -77
- data/features/docs/cli/showing_differences.feature +0 -43
- data/features/docs/cli/specifying_multiple_formatters.feature +0 -68
- data/features/docs/cli/strict_mode.feature +0 -70
- data/features/docs/defining_steps/nested_steps.feature +0 -181
- data/features/docs/defining_steps/nested_steps_i18n.feature +0 -37
- data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -56
- data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
- data/features/docs/defining_steps/printing_messages.feature +0 -147
- data/features/docs/defining_steps/skip_scenario.feature +0 -31
- data/features/docs/defining_steps/snippets.feature +0 -56
- data/features/docs/defining_steps/table_diffing.feature +0 -50
- data/features/docs/events/gherkin_source_read_event.feature +0 -43
- data/features/docs/events/step_activated_event.feature +0 -36
- data/features/docs/events/step_definition_registered_event.feature +0 -29
- data/features/docs/events/test_case_finished_event.feature +0 -35
- data/features/docs/events/test_case_starting_event.feature +0 -54
- data/features/docs/events/test_run_finished_event.feature +0 -40
- data/features/docs/events/test_run_starting_event.feature +0 -41
- data/features/docs/events/test_step_finished_event.feature +0 -47
- data/features/docs/events/test_step_starting_event.feature +0 -43
- data/features/docs/exception_in_after_hook.feature +0 -127
- data/features/docs/exception_in_after_step_hook.feature +0 -104
- data/features/docs/exception_in_around_hook.feature +0 -80
- data/features/docs/exception_in_before_hook.feature +0 -98
- data/features/docs/extending_cucumber/custom_filter.feature +0 -29
- data/features/docs/extending_cucumber/custom_formatter.feature +0 -122
- data/features/docs/formatters/api_methods.feature +0 -37
- data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
- data/features/docs/formatters/html_formatter.feature +0 -91
- data/features/docs/formatters/json_formatter.feature +0 -767
- data/features/docs/formatters/junit_formatter.feature +0 -455
- data/features/docs/formatters/pretty_formatter.feature +0 -74
- data/features/docs/formatters/progress_formatter.feature +0 -32
- data/features/docs/formatters/rerun_formatter.feature +0 -190
- data/features/docs/formatters/summary_formatter.feature +0 -35
- data/features/docs/formatters/usage_formatter.feature +0 -101
- data/features/docs/getting_started.feature +0 -28
- data/features/docs/gherkin/background.feature +0 -548
- data/features/docs/gherkin/doc_strings.feature +0 -76
- data/features/docs/gherkin/expand_option_for_outlines.feature +0 -47
- data/features/docs/gherkin/language_from_header.feature +0 -32
- data/features/docs/gherkin/outlines.feature +0 -160
- data/features/docs/gherkin/unicode_table.feature +0 -33
- data/features/docs/gherkin/using_descriptions.feature +0 -83
- data/features/docs/gherkin/using_star_notation.feature +0 -37
- data/features/docs/iso-8859-1.feature +0 -6
- data/features/docs/post_configuration_hook.feature +0 -33
- data/features/docs/profiles.feature +0 -120
- data/features/docs/rake_task.feature +0 -146
- data/features/docs/raketask.feature +0 -46
- data/features/docs/work_in_progress.feature +0 -157
- data/features/docs/writing_support_code/after_hooks.feature +0 -102
- data/features/docs/writing_support_code/after_step_hooks.feature +0 -55
- data/features/docs/writing_support_code/around_hooks.feature +0 -266
- data/features/docs/writing_support_code/before_hook.feature +0 -66
- data/features/docs/writing_support_code/hook_order.feature +0 -63
- data/features/docs/writing_support_code/load_path.feature +0 -17
- data/features/docs/writing_support_code/parameter_types.feature +0 -75
- data/features/docs/writing_support_code/state.feature +0 -32
- data/features/docs/writing_support_code/tagged_hooks.feature +0 -95
- data/features/docs/writing_support_code/world.feature +0 -129
- data/features/lib/step_definitions/aruba_steps.rb +0 -21
- data/features/lib/step_definitions/cli_steps.rb +0 -4
- data/features/lib/step_definitions/cucumber_steps.rb +0 -75
- data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -13
- data/features/lib/step_definitions/json_steps.rb +0 -8
- data/features/lib/step_definitions/junit_steps.rb +0 -14
- data/features/lib/step_definitions/language_steps.rb +0 -9
- data/features/lib/step_definitions/profile_steps.rb +0 -16
- data/features/lib/step_definitions/retry_steps.rb +0 -55
- data/features/lib/step_definitions/ruby_steps.rb +0 -4
- data/features/lib/support/env.rb +0 -22
- data/features/lib/support/fake_wire_server.rb +0 -86
- data/features/lib/support/feature_factory.rb +0 -68
- data/features/lib/support/normalise_output.rb +0 -52
- data/features/lib/support/parameter_types.rb +0 -8
- data/gem_tasks/contributors.rake +0 -19
- data/gem_tasks/cov.rake +0 -6
- data/gem_tasks/downloads.rb +0 -8
- data/gem_tasks/environment.rake +0 -4
- data/gem_tasks/examples.rake +0 -12
- data/gem_tasks/fix_cr_lf.rake +0 -11
- data/gem_tasks/flog.rake +0 -5
- data/gem_tasks/rspec.rake +0 -7
- data/gem_tasks/sass.rake +0 -5
- data/gem_tasks/stats +0 -16
- data/gem_tasks/versions.txt +0 -74
- data/lib/cucumber/formatter/cucumber.css +0 -286
- data/lib/cucumber/formatter/cucumber.sass +0 -247
- data/lib/cucumber/formatter/hook_query_visitor.rb +0 -41
- data/lib/cucumber/formatter/html_builder.rb +0 -110
- data/lib/cucumber/formatter/inline-js.js +0 -30
- data/lib/cucumber/formatter/jquery-min.js +0 -154
- data/lib/cucumber/formatter/json_pretty.rb +0 -11
- data/lib/cucumber/formatter/legacy_api/adapter.rb +0 -1012
- data/lib/cucumber/formatter/legacy_api/ast.rb +0 -386
- data/lib/cucumber/formatter/legacy_api/results.rb +0 -50
- data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +0 -32
- data/lib/cucumber/step_argument.rb +0 -24
- data/scripts/invite-collaborator +0 -40
- data/scripts/update-history +0 -83
- data/spec/cucumber/cli/configuration_spec.rb +0 -434
- data/spec/cucumber/cli/main_spec.rb +0 -84
- data/spec/cucumber/cli/options_spec.rb +0 -445
- data/spec/cucumber/cli/profile_loader_spec.rb +0 -66
- data/spec/cucumber/cli/rerun_spec.rb +0 -86
- data/spec/cucumber/configuration_spec.rb +0 -148
- data/spec/cucumber/constantize_spec.rb +0 -20
- data/spec/cucumber/events_spec.rb +0 -9
- data/spec/cucumber/file_specs_spec.rb +0 -61
- data/spec/cucumber/filters/activate_steps_spec.rb +0 -152
- data/spec/cucumber/filters/gated_receiver_spec.rb +0 -48
- data/spec/cucumber/filters/retry_spec.rb +0 -98
- data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -39
- data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -58
- data/spec/cucumber/filters/tag_limits_spec.rb +0 -60
- data/spec/cucumber/formatter/ansicolor_spec.rb +0 -33
- data/spec/cucumber/formatter/backtrace_filter_spec.rb +0 -32
- data/spec/cucumber/formatter/console_counts_spec.rb +0 -14
- data/spec/cucumber/formatter/duration_spec.rb +0 -23
- data/spec/cucumber/formatter/fail_fast_spec.rb +0 -88
- data/spec/cucumber/formatter/html_spec.rb +0 -543
- data/spec/cucumber/formatter/interceptor_spec.rb +0 -137
- data/spec/cucumber/formatter/json_spec.rb +0 -840
- data/spec/cucumber/formatter/junit_spec.rb +0 -251
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2187
- data/spec/cucumber/formatter/pretty_spec.rb +0 -920
- data/spec/cucumber/formatter/progress_spec.rb +0 -170
- data/spec/cucumber/formatter/rerun_spec.rb +0 -97
- data/spec/cucumber/formatter/spec_helper.rb +0 -84
- data/spec/cucumber/glue/proto_world_spec.rb +0 -63
- data/spec/cucumber/glue/registry_and_more_spec.rb +0 -213
- data/spec/cucumber/glue/snippet_spec.rb +0 -174
- data/spec/cucumber/glue/step_definition_spec.rb +0 -207
- data/spec/cucumber/hooks_spec.rb +0 -31
- data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -648
- data/spec/cucumber/project_initializer_spec.rb +0 -88
- data/spec/cucumber/rake/forked_spec.rb +0 -54
- data/spec/cucumber/rake/task_spec.rb +0 -86
- data/spec/cucumber/running_test_case_spec.rb +0 -140
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -8
- data/spec/cucumber/runtime/support_code_spec.rb +0 -17
- data/spec/cucumber/runtime_spec.rb +0 -21
- data/spec/cucumber/sell_cucumbers.feature +0 -19
- data/spec/cucumber/step_argument_spec.rb +0 -19
- data/spec/cucumber/step_match_search_spec.rb +0 -113
- data/spec/cucumber/step_match_spec.rb +0 -86
- data/spec/cucumber/world/pending_spec.rb +0 -48
- data/spec/spec_helper.rb +0 -30
- data/spec/support/standard_step_actions.rb +0 -19
@@ -1,174 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'spec_helper'
|
3
|
-
require 'cucumber/cucumber_expressions/parameter_type_registry'
|
4
|
-
require 'cucumber/cucumber_expressions/parameter_type'
|
5
|
-
require 'cucumber/cucumber_expressions/cucumber_expression_generator'
|
6
|
-
require 'cucumber/glue/snippet'
|
7
|
-
|
8
|
-
module Cucumber
|
9
|
-
module Glue
|
10
|
-
describe Snippet do
|
11
|
-
let(:code_keyword) { 'Given' }
|
12
|
-
|
13
|
-
before do
|
14
|
-
@step_text = 'we have a missing step'
|
15
|
-
@multiline_argument = Core::Ast::EmptyMultilineArgument.new
|
16
|
-
@registry = CucumberExpressions::ParameterTypeRegistry.new
|
17
|
-
@cucumber_expression_generator = CucumberExpressions::CucumberExpressionGenerator.new(@registry)
|
18
|
-
end
|
19
|
-
|
20
|
-
let(:snippet) do
|
21
|
-
snippet_class.new(@cucumber_expression_generator, code_keyword, @step_text, @multiline_argument)
|
22
|
-
end
|
23
|
-
|
24
|
-
def unindented(s)
|
25
|
-
s.split("\n")[1..-2].join("\n").indent(-10)
|
26
|
-
end
|
27
|
-
|
28
|
-
describe Snippet::Regexp do
|
29
|
-
let(:snippet_class) { Snippet::Regexp }
|
30
|
-
let(:snippet_text) { snippet.to_s }
|
31
|
-
|
32
|
-
it 'wraps snippet patterns in parentheses' do
|
33
|
-
@step_text = 'A "string" with 4 spaces'
|
34
|
-
|
35
|
-
expect(snippet_text).to eq unindented(%{
|
36
|
-
Given(/^A "([^"]*)" with (\\d+) spaces$/) do |arg1, arg2|
|
37
|
-
pending # Write code here that turns the phrase above into concrete actions
|
38
|
-
end
|
39
|
-
})
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'recognises numbers in name and make according regexp' do
|
43
|
-
@step_text = 'Cloud 9 yeah'
|
44
|
-
|
45
|
-
expect(snippet_text).to eq unindented(%{
|
46
|
-
Given(/^Cloud (\\d+) yeah$/) do |arg1|
|
47
|
-
pending # Write code here that turns the phrase above into concrete actions
|
48
|
-
end
|
49
|
-
})
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'recognises a mix of ints, strings and why not a table too' do
|
53
|
-
@step_text = 'I have 9 "awesome" cukes in 37 "boxes"'
|
54
|
-
@multiline_argument = Core::Ast::DataTable.new([[]], Core::Ast::Location.new(''))
|
55
|
-
|
56
|
-
expect(snippet_text).to eq unindented(%{
|
57
|
-
Given(/^I have (\\d+) "([^"]*)" cukes in (\\d+) "([^"]*)"$/) do |arg1, arg2, arg3, arg4, table|
|
58
|
-
# table is a Cucumber::MultilineArgument::DataTable
|
59
|
-
pending # Write code here that turns the phrase above into concrete actions
|
60
|
-
end
|
61
|
-
})
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'recognises quotes in name and make according regexp' do
|
65
|
-
@step_text = 'A "first" arg'
|
66
|
-
|
67
|
-
expect(snippet_text).to eq unindented(%{
|
68
|
-
Given(/^A "([^"]*)" arg$/) do |arg1|
|
69
|
-
pending # Write code here that turns the phrase above into concrete actions
|
70
|
-
end
|
71
|
-
})
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'recognises several quoted words in name and make according regexp and args' do
|
75
|
-
@step_text = 'A "first" and "second" arg'
|
76
|
-
|
77
|
-
expect(snippet_text).to eq unindented(%{
|
78
|
-
Given(/^A "([^"]*)" and "([^"]*)" arg$/) do |arg1, arg2|
|
79
|
-
pending # Write code here that turns the phrase above into concrete actions
|
80
|
-
end
|
81
|
-
})
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'does not use quote group when there are no quotes' do
|
85
|
-
@step_text = 'A first arg'
|
86
|
-
|
87
|
-
expect(snippet_text).to eq unindented(%{
|
88
|
-
Given(/^A first arg$/) do
|
89
|
-
pending # Write code here that turns the phrase above into concrete actions
|
90
|
-
end
|
91
|
-
})
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'is helpful with tables' do
|
95
|
-
@step_text = 'A "first" arg'
|
96
|
-
@multiline_argument = Core::Ast::DataTable.new([[]], Core::Ast::Location.new(''))
|
97
|
-
|
98
|
-
expect(snippet_text).to eq unindented(%{
|
99
|
-
Given(/^A "([^"]*)" arg$/) do |arg1, table|
|
100
|
-
# table is a Cucumber::MultilineArgument::DataTable
|
101
|
-
pending # Write code here that turns the phrase above into concrete actions
|
102
|
-
end
|
103
|
-
})
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'is helpful with doc string' do
|
107
|
-
@step_text = 'A "first" arg'
|
108
|
-
@multiline_argument = MultilineArgument.from('', Core::Ast::Location.new(''))
|
109
|
-
|
110
|
-
expect(snippet_text).to eq unindented(%{
|
111
|
-
Given(/^A "([^"]*)" arg$/) do |arg1, string|
|
112
|
-
pending # Write code here that turns the phrase above into concrete actions
|
113
|
-
end
|
114
|
-
})
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
describe Snippet::Classic do
|
119
|
-
let(:snippet_class) { Snippet::Classic }
|
120
|
-
|
121
|
-
it 'renders snippet as unwrapped regular expression' do
|
122
|
-
expect(snippet.to_s).to eq unindented(%{
|
123
|
-
Given /^we have a missing step$/ do
|
124
|
-
pending # Write code here that turns the phrase above into concrete actions
|
125
|
-
end
|
126
|
-
})
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
describe Snippet::Percent do
|
131
|
-
let(:snippet_class) { Snippet::Percent }
|
132
|
-
|
133
|
-
it 'renders snippet as percent-style regular expression' do
|
134
|
-
expect(snippet.to_s).to eq unindented(%{
|
135
|
-
Given %r{^we have a missing step$} do
|
136
|
-
pending # Write code here that turns the phrase above into concrete actions
|
137
|
-
end
|
138
|
-
})
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
describe Snippet::CucumberExpression do
|
143
|
-
let(:snippet_class) { Snippet::CucumberExpression }
|
144
|
-
|
145
|
-
it 'renders snippet as cucumber expression' do
|
146
|
-
@step_text = 'I have 2.3 cukes in my belly'
|
147
|
-
@registry.define_parameter_type(CucumberExpressions::ParameterType.new(
|
148
|
-
'veg',
|
149
|
-
/(cuke|banana)s?/,
|
150
|
-
Object,
|
151
|
-
->(s) { s},
|
152
|
-
true,
|
153
|
-
false
|
154
|
-
))
|
155
|
-
@registry.define_parameter_type(CucumberExpressions::ParameterType.new(
|
156
|
-
'cucumis',
|
157
|
-
/(bella|cuke)s?/,
|
158
|
-
Object,
|
159
|
-
->(s) { s},
|
160
|
-
true,
|
161
|
-
false
|
162
|
-
))
|
163
|
-
|
164
|
-
expect(snippet.to_s).to eq unindented(%{
|
165
|
-
Given("I have {float} {cucumis} in my belly") do |float, cucumis|
|
166
|
-
# Given("I have {float} {veg} in my belly") do |float, veg|
|
167
|
-
pending # Write code here that turns the phrase above into concrete actions
|
168
|
-
end
|
169
|
-
})
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
@@ -1,207 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'spec_helper'
|
3
|
-
require 'cucumber/glue/registry_and_more'
|
4
|
-
|
5
|
-
module Cucumber
|
6
|
-
module Glue
|
7
|
-
describe StepDefinition do
|
8
|
-
let(:user_interface) { double('user interface') }
|
9
|
-
let(:support_code) { Cucumber::Runtime::SupportCode.new(user_interface) }
|
10
|
-
let(:registry) { support_code.registry }
|
11
|
-
let(:scenario) { double('scenario', iso_code: 'en').as_null_object }
|
12
|
-
let(:dsl) do
|
13
|
-
registry
|
14
|
-
Object.new.extend(Cucumber::Glue::Dsl)
|
15
|
-
end
|
16
|
-
|
17
|
-
before do
|
18
|
-
registry.begin_scenario(scenario)
|
19
|
-
$inside = nil
|
20
|
-
end
|
21
|
-
|
22
|
-
def run_step(text)
|
23
|
-
step_match(text).invoke(MultilineArgument::None.new)
|
24
|
-
end
|
25
|
-
|
26
|
-
def step_match(text)
|
27
|
-
StepMatchSearch.new(registry.method(:step_matches), Configuration.default).call(text).first
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'allows calling of other steps' do
|
31
|
-
dsl.Given(/Outside/) do
|
32
|
-
step 'Inside'
|
33
|
-
end
|
34
|
-
dsl.Given(/Inside/) do
|
35
|
-
$inside = true
|
36
|
-
end
|
37
|
-
|
38
|
-
run_step 'Outside'
|
39
|
-
|
40
|
-
expect($inside).to be true
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'allows calling of other steps with inline arg' do
|
44
|
-
dsl.Given(/Outside/) do
|
45
|
-
step 'Inside', table([['inside']])
|
46
|
-
end
|
47
|
-
dsl.Given(/Inside/) do |t|
|
48
|
-
$inside = t.raw[0][0]
|
49
|
-
end
|
50
|
-
|
51
|
-
run_step 'Outside'
|
52
|
-
|
53
|
-
expect($inside).to eq 'inside'
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'mapping to world methods' do
|
57
|
-
it 'calls a method on the world when specified with a symbol' do
|
58
|
-
expect(registry.current_world).to receive(:with_symbol)
|
59
|
-
|
60
|
-
dsl.Given(/With symbol/, :with_symbol)
|
61
|
-
|
62
|
-
run_step 'With symbol'
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'calls a method on a specified object' do
|
66
|
-
target = double('target')
|
67
|
-
|
68
|
-
allow(registry.current_world).to receive(:target) { target }
|
69
|
-
|
70
|
-
dsl.Given(/With symbol on block/, :with_symbol, :on => lambda { target })
|
71
|
-
|
72
|
-
expect(target).to receive(:with_symbol)
|
73
|
-
|
74
|
-
run_step 'With symbol on block'
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'calls a method on a specified world attribute' do
|
78
|
-
target = double('target')
|
79
|
-
|
80
|
-
allow(registry.current_world).to receive(:target) { target }
|
81
|
-
|
82
|
-
dsl.Given(/With symbol on symbol/, :with_symbol, :on => :target)
|
83
|
-
|
84
|
-
expect(target).to receive(:with_symbol)
|
85
|
-
|
86
|
-
run_step 'With symbol on symbol'
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'has the correct location' do
|
90
|
-
dsl.Given(/With symbol/, :with_symbol)
|
91
|
-
expect(step_match('With symbol').file_colon_line).to eq "spec/cucumber/glue/step_definition_spec.rb:#{__LINE__-1}"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'raises UndefinedDynamicStep when inside step is not defined' do
|
96
|
-
dsl.Given(/Outside/) do
|
97
|
-
step 'Inside'
|
98
|
-
end
|
99
|
-
|
100
|
-
expect(-> {
|
101
|
-
run_step 'Outside'
|
102
|
-
}).to raise_error(Cucumber::UndefinedDynamicStep)
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'raises UndefinedDynamicStep when an undefined step is parsed dynamically' do
|
106
|
-
dsl.Given(/Outside/) do
|
107
|
-
steps %{
|
108
|
-
Given Inside
|
109
|
-
}
|
110
|
-
end
|
111
|
-
|
112
|
-
expect(-> {
|
113
|
-
run_step 'Outside'
|
114
|
-
}).to raise_error(Cucumber::UndefinedDynamicStep)
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'raises UndefinedDynamicStep when an undefined step with doc string is parsed dynamically' do
|
118
|
-
dsl.Given(/Outside/) do
|
119
|
-
steps %{
|
120
|
-
Given Inside
|
121
|
-
"""
|
122
|
-
abc
|
123
|
-
"""
|
124
|
-
}
|
125
|
-
end
|
126
|
-
|
127
|
-
expect(-> {
|
128
|
-
run_step 'Outside'
|
129
|
-
}).to raise_error(Cucumber::UndefinedDynamicStep)
|
130
|
-
end
|
131
|
-
|
132
|
-
it 'raises UndefinedDynamicStep when an undefined step with data table is parsed dynamically' do
|
133
|
-
dsl.Given(/Outside/) do
|
134
|
-
steps %{
|
135
|
-
Given Inside
|
136
|
-
| a |
|
137
|
-
| 1 |
|
138
|
-
}
|
139
|
-
end
|
140
|
-
|
141
|
-
expect(-> {
|
142
|
-
run_step 'Outside'
|
143
|
-
}).to raise_error(Cucumber::UndefinedDynamicStep)
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'allows forced pending' do
|
147
|
-
dsl.Given(/Outside/) do
|
148
|
-
pending('Do me!')
|
149
|
-
end
|
150
|
-
|
151
|
-
expect(-> {
|
152
|
-
run_step 'Outside'
|
153
|
-
}).to raise_error(Cucumber::Pending, 'Do me!')
|
154
|
-
end
|
155
|
-
|
156
|
-
it 'raises ArityMismatchError when the number of capture groups differs from the number of step arguments' do
|
157
|
-
dsl.Given(/No group: \w+/) do |arg|
|
158
|
-
end
|
159
|
-
|
160
|
-
expect(-> {
|
161
|
-
run_step 'No group: arg'
|
162
|
-
}).to raise_error(Cucumber::Glue::ArityMismatchError)
|
163
|
-
end
|
164
|
-
|
165
|
-
it 'does not modify the step_match arg when arg is modified in a step' do
|
166
|
-
dsl.Given(/My car is (.*)/) do |colour|
|
167
|
-
colour << 'xxx'
|
168
|
-
end
|
169
|
-
|
170
|
-
step_name = 'My car is white'
|
171
|
-
step_args = step_match(step_name).args
|
172
|
-
|
173
|
-
expect(-> {
|
174
|
-
run_step step_name
|
175
|
-
}).not_to change{ step_args.first }
|
176
|
-
end
|
177
|
-
|
178
|
-
it 'allows puts' do
|
179
|
-
expect(user_interface).to receive(:puts).with('wasup')
|
180
|
-
dsl.Given(/Loud/) do
|
181
|
-
puts 'wasup'
|
182
|
-
end
|
183
|
-
run_step 'Loud'
|
184
|
-
end
|
185
|
-
|
186
|
-
it 'recognizes $arg style captures' do
|
187
|
-
arg_value = 'up'
|
188
|
-
dsl.Given 'capture this: {word}' do |arg|
|
189
|
-
expect(arg).to eq arg_value
|
190
|
-
end
|
191
|
-
run_step 'capture this: up'
|
192
|
-
end
|
193
|
-
|
194
|
-
it 'has a JSON representation of the signature' do
|
195
|
-
expect(StepDefinition.new(registry, /I CAN HAZ (\d+) CUKES/i, lambda{}, {}).to_hash).to eq({
|
196
|
-
source: {
|
197
|
-
type: 'regular expression',
|
198
|
-
expression: 'I CAN HAZ (\\d+) CUKES'
|
199
|
-
},
|
200
|
-
regexp: {
|
201
|
-
source: 'I CAN HAZ (\\d+) CUKES', flags: 'i'
|
202
|
-
}
|
203
|
-
})
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|
data/spec/cucumber/hooks_spec.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'cucumber/hooks'
|
3
|
-
module Cucumber::Hooks
|
4
|
-
shared_examples_for 'a source node' do
|
5
|
-
it 'responds to name' do
|
6
|
-
expect( subject.name ).to be_a(String)
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'responds to location' do
|
10
|
-
expect( subject.location ).to eq(location)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'responds to match_locations?' do
|
14
|
-
expect( subject.match_locations? [location] ).to be_truthy
|
15
|
-
expect( subject.match_locations? [] ).to be_falsey
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
require 'cucumber/core/ast/location'
|
20
|
-
describe BeforeHook do
|
21
|
-
subject { BeforeHook.new(location) }
|
22
|
-
let(:location) { Cucumber::Core::Ast::Location.new('hooks.rb', 1) }
|
23
|
-
it_behaves_like 'a source node'
|
24
|
-
end
|
25
|
-
|
26
|
-
describe AfterHook do
|
27
|
-
subject { AfterHook.new(location) }
|
28
|
-
let(:location) { Cucumber::Core::Ast::Location.new('hooks.rb', 1) }
|
29
|
-
it_behaves_like 'a source node'
|
30
|
-
end
|
31
|
-
end
|
@@ -1,648 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
# frozen_string_literal: true
|
3
|
-
require 'spec_helper'
|
4
|
-
require 'cucumber/multiline_argument/data_table'
|
5
|
-
|
6
|
-
module Cucumber
|
7
|
-
module MultilineArgument
|
8
|
-
describe DataTable do
|
9
|
-
before do
|
10
|
-
@table = DataTable.from([
|
11
|
-
%w{one four seven},
|
12
|
-
%w{4444 55555 666666}
|
13
|
-
])
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should have rows' do
|
17
|
-
expect( @table.cells_rows[0].map{|cell| cell.value} ).to eq %w{one four seven}
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should have columns' do
|
21
|
-
expect( @table.columns[1].map{|cell| cell.value} ).to eq %w{four 55555}
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should have same cell objects in rows and columns' do
|
25
|
-
# 666666
|
26
|
-
expect( @table.cells_rows[1][2] ).to equal(@table.columns[2][1])
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should be convertible to an array of hashes' do
|
30
|
-
expect( @table.hashes ).to eq [
|
31
|
-
{'one' => '4444', 'four' => '55555', 'seven' => '666666'}
|
32
|
-
]
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should accept symbols as keys for the hashes' do
|
36
|
-
expect( @table.hashes.first[:one] ).to eq '4444'
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'should return the row values in order' do
|
40
|
-
expect( @table.rows.first ).to eq %w{4444 55555 666666}
|
41
|
-
end
|
42
|
-
|
43
|
-
describe '#symbolic_hashes' do
|
44
|
-
|
45
|
-
it 'should covert data table to an array of hashes with symbols as keys' do
|
46
|
-
ast_table = Cucumber::Core::Ast::DataTable.new([['foo', 'Bar', 'Foo Bar'], %w{1 22 333}], nil)
|
47
|
-
data_table = DataTable.new(ast_table)
|
48
|
-
expect(data_table.symbolic_hashes).to eq([{:foo => '1', :bar => '22', :foo_bar => '333'}])
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should be able to be accessed multiple times' do
|
52
|
-
@table.symbolic_hashes
|
53
|
-
expect{@table.symbolic_hashes}.to_not raise_error
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
|
58
|
-
describe '#map_column!' do
|
59
|
-
it 'should allow mapping columns' do
|
60
|
-
@table.map_column!('one') { |v| v.to_i }
|
61
|
-
expect( @table.hashes.first['one'] ).to eq 4444
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'applies the block once to each value' do
|
65
|
-
headers = ['header']
|
66
|
-
rows = ['value']
|
67
|
-
table = DataTable.from [headers, rows]
|
68
|
-
count = 0
|
69
|
-
table.map_column!('header') { |value| count +=1 }
|
70
|
-
table.rows
|
71
|
-
expect( count ).to eq rows.size
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'should allow mapping columns and take a symbol as the column name' do
|
75
|
-
@table.map_column!(:one) { |v| v.to_i }
|
76
|
-
expect( @table.hashes.first['one'] ).to eq 4444
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'should allow mapping columns and modify the rows as well' do
|
80
|
-
@table.map_column!(:one) { |v| v.to_i }
|
81
|
-
expect( @table.rows.first ).to include(4444)
|
82
|
-
expect( @table.rows.first ).to_not include('4444')
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'should pass silently if a mapped column does not exist in non-strict mode' do
|
86
|
-
expect {
|
87
|
-
@table.map_column!('two', false) { |v| v.to_i }
|
88
|
-
@table.hashes
|
89
|
-
}.not_to raise_error
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'should fail if a mapped column does not exist in strict mode' do
|
93
|
-
expect {
|
94
|
-
@table.map_column!('two', true) { |v| v.to_i }
|
95
|
-
@table.hashes
|
96
|
-
}.to raise_error('The column named "two" does not exist')
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'should return the table' do
|
100
|
-
expect( (@table.map_column!(:one) { |v| v.to_i }) ).to eq @table
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
describe '#map_column' do
|
105
|
-
it 'should allow mapping columns' do
|
106
|
-
new_table = @table.map_column('one') { |v| v.to_i }
|
107
|
-
expect( new_table.hashes.first['one'] ).to eq 4444
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'applies the block once to each value' do
|
111
|
-
headers = ['header']
|
112
|
-
rows = ['value']
|
113
|
-
table = DataTable.from [headers, rows]
|
114
|
-
count = 0
|
115
|
-
new_table = table.map_column('header') { |value| count +=1 }
|
116
|
-
new_table.rows
|
117
|
-
expect( count ).to eq rows.size
|
118
|
-
end
|
119
|
-
|
120
|
-
it 'should allow mapping columns and take a symbol as the column name' do
|
121
|
-
new_table = @table.map_column(:one) { |v| v.to_i }
|
122
|
-
expect( new_table.hashes.first['one'] ).to eq 4444
|
123
|
-
end
|
124
|
-
|
125
|
-
it 'should allow mapping columns and modify the rows as well' do
|
126
|
-
new_table = @table.map_column(:one) { |v| v.to_i }
|
127
|
-
expect( new_table.rows.first ).to include(4444)
|
128
|
-
expect( new_table.rows.first ).to_not include('4444')
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'should pass silently if a mapped column does not exist in non-strict mode' do
|
132
|
-
expect {
|
133
|
-
new_table = @table.map_column('two', false) { |v| v.to_i }
|
134
|
-
new_table.hashes
|
135
|
-
}.not_to raise_error
|
136
|
-
end
|
137
|
-
|
138
|
-
it 'should fail if a mapped column does not exist in strict mode' do
|
139
|
-
expect {
|
140
|
-
new_table = @table.map_column('two', true) { |v| v.to_i }
|
141
|
-
new_table.hashes
|
142
|
-
}.to raise_error('The column named "two" does not exist')
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'should return a new table' do
|
146
|
-
expect( (@table.map_column(:one) { |v| v.to_i }) ).to_not eq @table
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
describe '#match' do
|
151
|
-
before(:each) do
|
152
|
-
@table = DataTable.from([
|
153
|
-
%w{one four seven},
|
154
|
-
%w{4444 55555 666666}
|
155
|
-
])
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'returns nil if headers do not match' do
|
159
|
-
expect( @table.match('does,not,match') ).to be_nil
|
160
|
-
end
|
161
|
-
it 'requires a table: prefix on match' do
|
162
|
-
expect( @table.match('table:one,four,seven') ).to_not be_nil
|
163
|
-
end
|
164
|
-
it 'does not match if no table: prefix on match' do
|
165
|
-
expect( @table.match('one,four,seven') ).to be_nil
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
describe '#transpose' do
|
170
|
-
before(:each) do
|
171
|
-
@table = DataTable.from([
|
172
|
-
%w{one 1111},
|
173
|
-
%w{two 22222}
|
174
|
-
])
|
175
|
-
end
|
176
|
-
|
177
|
-
it 'should be convertible in to an array where each row is a hash' do
|
178
|
-
expect( @table.transpose.hashes[0] ).to eq('one' => '1111', 'two' => '22222')
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
describe '#rows_hash' do
|
183
|
-
|
184
|
-
it 'should return a hash of the rows' do
|
185
|
-
table = DataTable.from([
|
186
|
-
%w{one 1111},
|
187
|
-
%w{two 22222}
|
188
|
-
])
|
189
|
-
expect( table.rows_hash ).to eq( 'one' => '1111', 'two' => '22222' )
|
190
|
-
end
|
191
|
-
|
192
|
-
it "should fail if the table doesn't have two columns" do
|
193
|
-
faulty_table = DataTable.from([
|
194
|
-
%w{one 1111 abc},
|
195
|
-
%w{two 22222 def}
|
196
|
-
])
|
197
|
-
expect {
|
198
|
-
faulty_table.rows_hash
|
199
|
-
}.to raise_error('The table must have exactly 2 columns')
|
200
|
-
end
|
201
|
-
|
202
|
-
it 'should support header and column mapping' do
|
203
|
-
table = DataTable.from([
|
204
|
-
%w{one 1111},
|
205
|
-
%w{two 22222}
|
206
|
-
])
|
207
|
-
t2 = table.map_headers({ 'two' => 'Two' }) { |header| header.upcase }.
|
208
|
-
map_column('two', false) { |val| val.to_i }
|
209
|
-
expect( t2.rows_hash ).to eq( 'ONE' => '1111', 'Two' => 22222 )
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
describe '#map_headers!' do
|
214
|
-
let(:table) do
|
215
|
-
DataTable.from([
|
216
|
-
%w{HELLO WORLD},
|
217
|
-
%w{4444 55555}
|
218
|
-
])
|
219
|
-
end
|
220
|
-
|
221
|
-
it 'renames the columns to the specified values in the provided hash' do
|
222
|
-
@table.map_headers!('one' => :three)
|
223
|
-
expect( @table.hashes.first[:three] ).to eq '4444'
|
224
|
-
end
|
225
|
-
|
226
|
-
it 'allows renaming columns using regexp' do
|
227
|
-
@table.map_headers!(/one|uno/ => :three)
|
228
|
-
expect( @table.hashes.first[:three] ).to eq '4444'
|
229
|
-
end
|
230
|
-
|
231
|
-
it 'copies column mappings' do
|
232
|
-
@table.map_column!('one') { |v| v.to_i }
|
233
|
-
@table.map_headers!('one' => 'three')
|
234
|
-
expect( @table.hashes.first['three'] ).to eq 4444
|
235
|
-
end
|
236
|
-
|
237
|
-
it 'takes a block and operates on all the headers with it' do
|
238
|
-
table.map_headers! do |header|
|
239
|
-
header.downcase
|
240
|
-
end
|
241
|
-
expect( table.hashes.first.keys ).to match %w[hello world]
|
242
|
-
end
|
243
|
-
|
244
|
-
it 'treats the mappings in the provided hash as overrides when used with a block' do
|
245
|
-
table.map_headers!('WORLD' => 'foo') do |header|
|
246
|
-
header.downcase
|
247
|
-
end
|
248
|
-
|
249
|
-
expect( table.hashes.first.keys ).to match %w[hello foo]
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
describe '#map_headers' do
|
254
|
-
let(:table) do
|
255
|
-
DataTable.from([
|
256
|
-
%w{HELLO WORLD},
|
257
|
-
%w{4444 55555}
|
258
|
-
])
|
259
|
-
end
|
260
|
-
|
261
|
-
it 'renames the columns to the specified values in the provided hash' do
|
262
|
-
table2 = @table.map_headers('one' => :three)
|
263
|
-
expect( table2.hashes.first[:three] ).to eq '4444'
|
264
|
-
end
|
265
|
-
|
266
|
-
it 'allows renaming columns using regexp' do
|
267
|
-
table2 = @table.map_headers(/one|uno/ => :three)
|
268
|
-
expect( table2.hashes.first[:three] ).to eq '4444'
|
269
|
-
end
|
270
|
-
|
271
|
-
it 'copies column mappings' do
|
272
|
-
@table.map_column!('one') { |v| v.to_i }
|
273
|
-
table2 = @table.map_headers('one' => 'three')
|
274
|
-
expect( table2.hashes.first['three'] ).to eq 4444
|
275
|
-
end
|
276
|
-
|
277
|
-
it 'takes a block and operates on all the headers with it' do
|
278
|
-
table2 = table.map_headers do |header|
|
279
|
-
header.downcase
|
280
|
-
end
|
281
|
-
|
282
|
-
expect( table2.hashes.first.keys ).to match %w[hello world]
|
283
|
-
end
|
284
|
-
|
285
|
-
it 'treats the mappings in the provided hash as overrides when used with a block' do
|
286
|
-
table2 = table.map_headers('WORLD' => 'foo') do |header|
|
287
|
-
header.downcase
|
288
|
-
end
|
289
|
-
|
290
|
-
expect( table2.hashes.first.keys ).to match %w[hello foo]
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
describe 'diff!' do
|
295
|
-
it 'should detect a complex diff' do
|
296
|
-
t1 = DataTable.from(%{
|
297
|
-
| 1 | 22 | 333 | 4444 |
|
298
|
-
| 55555 | 666666 | 7777777 | 88888888 |
|
299
|
-
| 999999999 | 0000000000 | 01010101010 | 121212121212 |
|
300
|
-
| 4000 | ABC | DEF | 50000 |
|
301
|
-
})
|
302
|
-
|
303
|
-
t2 = DataTable.from(%{
|
304
|
-
| a | 4444 | 1 |
|
305
|
-
| bb | 88888888 | 55555 |
|
306
|
-
| ccc | xxxxxxxx | 999999999 |
|
307
|
-
| dddd | 4000 | 300 |
|
308
|
-
| e | 50000 | 4000 |
|
309
|
-
})
|
310
|
-
expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
|
311
|
-
expect(error.table.to_s(indent: 14, color: false)).to eq %{
|
312
|
-
| 1 | (-) 22 | (-) 333 | 4444 | (+) a |
|
313
|
-
| 55555 | (-) 666666 | (-) 7777777 | 88888888 | (+) bb |
|
314
|
-
| (-) 999999999 | (-) 0000000000 | (-) 01010101010 | (-) 121212121212 | (+) |
|
315
|
-
| (+) 999999999 | (+) | (+) | (+) xxxxxxxx | (+) ccc |
|
316
|
-
| (+) 300 | (+) | (+) | (+) 4000 | (+) dddd |
|
317
|
-
| 4000 | (-) ABC | (-) DEF | 50000 | (+) e |
|
318
|
-
}
|
319
|
-
end
|
320
|
-
end
|
321
|
-
|
322
|
-
it 'should not change table when diffed with identical' do
|
323
|
-
t = DataTable.from(%{
|
324
|
-
|a|b|c|
|
325
|
-
|d|e|f|
|
326
|
-
|g|h|i|
|
327
|
-
})
|
328
|
-
t.diff!(t.dup)
|
329
|
-
expect( t.to_s(:indent => 12, :color => false) ).to eq %{
|
330
|
-
| a | b | c |
|
331
|
-
| d | e | f |
|
332
|
-
| g | h | i |
|
333
|
-
}
|
334
|
-
end
|
335
|
-
|
336
|
-
context 'with empty tables' do
|
337
|
-
it 'should allow diffing empty tables' do
|
338
|
-
t1 = DataTable.from([[]])
|
339
|
-
t2 = DataTable.from([[]])
|
340
|
-
expect{ t1.diff!(t2) }.not_to raise_error
|
341
|
-
end
|
342
|
-
|
343
|
-
it 'should be able to diff when the right table is empty' do
|
344
|
-
t1 = DataTable.from(%{
|
345
|
-
|a|b|c|
|
346
|
-
|d|e|f|
|
347
|
-
|g|h|i|
|
348
|
-
})
|
349
|
-
t2 = DataTable.from([[]])
|
350
|
-
expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
|
351
|
-
expect(error.table.to_s(indent: 16, color: false)).to eq %{
|
352
|
-
| (-) a | (-) b | (-) c |
|
353
|
-
| (-) d | (-) e | (-) f |
|
354
|
-
| (-) g | (-) h | (-) i |
|
355
|
-
}
|
356
|
-
end
|
357
|
-
end
|
358
|
-
|
359
|
-
it 'should be able to diff when the left table is empty' do
|
360
|
-
t1 = DataTable.from([[]])
|
361
|
-
t2 = DataTable.from(%{
|
362
|
-
|a|b|c|
|
363
|
-
|d|e|f|
|
364
|
-
|g|h|i|
|
365
|
-
})
|
366
|
-
expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
|
367
|
-
expect(error.table.to_s(indent: 16, color: false)).to eq %{
|
368
|
-
| (+) a | (+) b | (+) c |
|
369
|
-
| (+) d | (+) e | (+) f |
|
370
|
-
| (+) g | (+) h | (+) i |
|
371
|
-
}
|
372
|
-
end
|
373
|
-
end
|
374
|
-
end
|
375
|
-
|
376
|
-
context 'in case of duplicate header values' do
|
377
|
-
it 'raises no error for two identical tables' do
|
378
|
-
t = DataTable.from(%{
|
379
|
-
|a|a|c|
|
380
|
-
|d|e|f|
|
381
|
-
|g|h|i|
|
382
|
-
})
|
383
|
-
t.diff!(t.dup)
|
384
|
-
expect( t.to_s(:indent => 12, :color => false) ).to eq %{
|
385
|
-
| a | a | c |
|
386
|
-
| d | e | f |
|
387
|
-
| g | h | i |
|
388
|
-
}
|
389
|
-
end
|
390
|
-
|
391
|
-
it 'detects a diff in one cell' do
|
392
|
-
t1 = DataTable.from(%{
|
393
|
-
|a|a|c|
|
394
|
-
|d|e|f|
|
395
|
-
|g|h|i|
|
396
|
-
})
|
397
|
-
t2 = DataTable.from(%{
|
398
|
-
|a|a|c|
|
399
|
-
|d|oops|f|
|
400
|
-
|g|h|i|
|
401
|
-
})
|
402
|
-
expect{ t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
|
403
|
-
expect(error.table.to_s(indent: 16, color: false)).to eq %{
|
404
|
-
| a | a | c |
|
405
|
-
| (-) d | (-) e | (-) f |
|
406
|
-
| (+) d | (+) oops | (+) f |
|
407
|
-
| g | h | i |
|
408
|
-
}
|
409
|
-
end
|
410
|
-
end
|
411
|
-
|
412
|
-
it 'detects missing columns' do
|
413
|
-
t1 = DataTable.from(%{
|
414
|
-
|a|a|b|c|
|
415
|
-
|d|d|e|f|
|
416
|
-
|g|g|h|i|
|
417
|
-
})
|
418
|
-
t2 = DataTable.from(%{
|
419
|
-
|a|b|c|
|
420
|
-
|d|e|f|
|
421
|
-
|g|h|i|
|
422
|
-
})
|
423
|
-
expect{ t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
|
424
|
-
expect(error.table.to_s(indent: 16, color: false)).to eq %{
|
425
|
-
| a | (-) a | b | c |
|
426
|
-
| d | (-) d | e | f |
|
427
|
-
| g | (-) g | h | i |
|
428
|
-
}
|
429
|
-
end
|
430
|
-
end
|
431
|
-
|
432
|
-
it 'detects surplus columns' do
|
433
|
-
t1 = DataTable.from(%{
|
434
|
-
|a|b|c|
|
435
|
-
|d|e|f|
|
436
|
-
|g|h|i|
|
437
|
-
})
|
438
|
-
t2 = DataTable.from(%{
|
439
|
-
|a|b|a|c|
|
440
|
-
|d|e|d|f|
|
441
|
-
|g|h|g|i|
|
442
|
-
})
|
443
|
-
expect{ t1.diff!(t2, :surplus_col => true) }.to raise_error(DataTable::Different) do |error|
|
444
|
-
expect(error.table.to_s(indent: 16, color: false)).to eq %{
|
445
|
-
| a | b | c | (+) a |
|
446
|
-
| d | e | f | (+) d |
|
447
|
-
| g | h | i | (+) g |
|
448
|
-
}
|
449
|
-
end
|
450
|
-
end
|
451
|
-
end
|
452
|
-
|
453
|
-
it 'should inspect missing and surplus cells' do
|
454
|
-
t1 = DataTable.from([
|
455
|
-
%w(name male lastname swedish),
|
456
|
-
%w(aslak true hellesøy false)
|
457
|
-
])
|
458
|
-
t2 = DataTable.from([
|
459
|
-
%w(name male lastname swedish),
|
460
|
-
['aslak', true, 'hellesøy', false]
|
461
|
-
])
|
462
|
-
expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
|
463
|
-
expect(error.table.to_s(indent: 14, color: false)).to eq %{
|
464
|
-
| name | male | lastname | swedish |
|
465
|
-
| (-) aslak | (-) (i) "true" | (-) hellesøy | (-) (i) "false" |
|
466
|
-
| (+) aslak | (+) (i) true | (+) hellesøy | (+) (i) false |
|
467
|
-
}
|
468
|
-
end
|
469
|
-
end
|
470
|
-
|
471
|
-
it 'should allow column mapping of target before diffing' do
|
472
|
-
t1 = DataTable.from([
|
473
|
-
%w(name male),
|
474
|
-
%w(aslak true)
|
475
|
-
])
|
476
|
-
t1.map_column!('male') { |m| m == 'true' }
|
477
|
-
t2 = DataTable.from([
|
478
|
-
%w(name male),
|
479
|
-
['aslak', true]
|
480
|
-
])
|
481
|
-
t1.diff!(t2)
|
482
|
-
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
483
|
-
| name | male |
|
484
|
-
| aslak | true |
|
485
|
-
}
|
486
|
-
end
|
487
|
-
|
488
|
-
it 'should allow column mapping of argument before diffing' do
|
489
|
-
t1 = DataTable.from([
|
490
|
-
%w(name male),
|
491
|
-
['aslak', true]
|
492
|
-
])
|
493
|
-
t1.map_column!('male') {
|
494
|
-
'true'
|
495
|
-
}
|
496
|
-
t2 = DataTable.from([
|
497
|
-
%w(name male),
|
498
|
-
%w(aslak true)
|
499
|
-
])
|
500
|
-
t2.diff!(t1)
|
501
|
-
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
502
|
-
| name | male |
|
503
|
-
| aslak | true |
|
504
|
-
}
|
505
|
-
end
|
506
|
-
|
507
|
-
it 'should allow header mapping before diffing' do
|
508
|
-
t1 = DataTable.from([
|
509
|
-
%w(Name Male),
|
510
|
-
%w(aslak true)
|
511
|
-
])
|
512
|
-
t1.map_headers!('Name' => 'name', 'Male' => 'male')
|
513
|
-
t1.map_column!('male') { |m| m == 'true' }
|
514
|
-
t2 = DataTable.from([
|
515
|
-
%w(name male),
|
516
|
-
['aslak', true]
|
517
|
-
])
|
518
|
-
t1.diff!(t2)
|
519
|
-
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
520
|
-
| name | male |
|
521
|
-
| aslak | true |
|
522
|
-
}
|
523
|
-
end
|
524
|
-
|
525
|
-
it 'should detect seemingly identical tables as different' do
|
526
|
-
t1 = DataTable.from([
|
527
|
-
%w(X Y),
|
528
|
-
%w(2 1)
|
529
|
-
])
|
530
|
-
t2 = DataTable.from([
|
531
|
-
%w(X Y),
|
532
|
-
[2, 1]
|
533
|
-
])
|
534
|
-
expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
|
535
|
-
expect(error.table.to_s(indent: 14, color: false)).to eq %{
|
536
|
-
| X | Y |
|
537
|
-
| (-) (i) "2" | (-) (i) "1" |
|
538
|
-
| (+) (i) 2 | (+) (i) 1 |
|
539
|
-
}
|
540
|
-
end
|
541
|
-
end
|
542
|
-
|
543
|
-
it 'should not allow mappings that match more than 1 column' do
|
544
|
-
t1 = DataTable.from([
|
545
|
-
%w(Cuke Duke),
|
546
|
-
%w(Foo Bar)
|
547
|
-
])
|
548
|
-
expect do
|
549
|
-
t1.map_headers!(/uk/ => 'u')
|
550
|
-
t1.hashes
|
551
|
-
end.to raise_error(%{2 headers matched /uk/: ["Cuke", "Duke"]})
|
552
|
-
end
|
553
|
-
|
554
|
-
describe 'raising' do
|
555
|
-
before do
|
556
|
-
@t = DataTable.from(%{
|
557
|
-
| a | b |
|
558
|
-
| c | d |
|
559
|
-
})
|
560
|
-
expect( @t ).not_to eq nil
|
561
|
-
end
|
562
|
-
|
563
|
-
it 'should raise on missing rows' do
|
564
|
-
t = DataTable.from(%{
|
565
|
-
| a | b |
|
566
|
-
})
|
567
|
-
expect { @t.dup.diff!(t) }.to raise_error(DataTable::Different)
|
568
|
-
expect { @t.dup.diff!(t, :missing_row => false) }.not_to raise_error
|
569
|
-
end
|
570
|
-
|
571
|
-
it 'should not raise on surplus rows when surplus is at the end' do
|
572
|
-
t = DataTable.from(%{
|
573
|
-
| a | b |
|
574
|
-
| c | d |
|
575
|
-
| e | f |
|
576
|
-
})
|
577
|
-
expect { @t.dup.diff!(t) }.to raise_error(DataTable::Different)
|
578
|
-
expect { @t.dup.diff!(t, :surplus_row => false) }.not_to raise_error
|
579
|
-
end
|
580
|
-
|
581
|
-
it 'should not raise on surplus rows when surplus is interleaved' do
|
582
|
-
t1 = DataTable.from(%{
|
583
|
-
| row_1 | row_2 |
|
584
|
-
| four | 4 |
|
585
|
-
})
|
586
|
-
t2 = DataTable.from(%{
|
587
|
-
| row_1 | row_2 |
|
588
|
-
| one | 1 |
|
589
|
-
| two | 2 |
|
590
|
-
| three | 3 |
|
591
|
-
| four | 4 |
|
592
|
-
| five | 5 |
|
593
|
-
})
|
594
|
-
expect { t1.dup.diff!(t2) }.to raise_error(DataTable::Different)
|
595
|
-
expect { t1.dup.diff!(t2, :surplus_row => false) }.not_to raise_error
|
596
|
-
end
|
597
|
-
|
598
|
-
it 'should raise on missing columns' do
|
599
|
-
t = DataTable.from(%{
|
600
|
-
| a |
|
601
|
-
| c |
|
602
|
-
})
|
603
|
-
expect { @t.dup.diff!(t) }.to raise_error(DataTable::Different)
|
604
|
-
expect { @t.dup.diff!(t, :missing_col => false) }.not_to raise_error
|
605
|
-
end
|
606
|
-
|
607
|
-
it 'should not raise on surplus columns' do
|
608
|
-
t = DataTable.from(%{
|
609
|
-
| a | b | x |
|
610
|
-
| c | d | y |
|
611
|
-
})
|
612
|
-
expect { @t.dup.diff!(t) }.not_to raise_error
|
613
|
-
expect { @t.dup.diff!(t, :surplus_col => true) }.to raise_error(DataTable::Different)
|
614
|
-
end
|
615
|
-
|
616
|
-
it 'should not raise on misplaced columns' do
|
617
|
-
t = DataTable.from(%{
|
618
|
-
| b | a |
|
619
|
-
| d | c |
|
620
|
-
})
|
621
|
-
expect { @t.dup.diff!(t) }.not_to raise_error
|
622
|
-
expect { @t.dup.diff!(t, :misplaced_col => true) }.to raise_error(DataTable::Different)
|
623
|
-
end
|
624
|
-
end
|
625
|
-
|
626
|
-
it 'can compare to an Array' do
|
627
|
-
t = DataTable.from(%{
|
628
|
-
| b | a |
|
629
|
-
| d | c |
|
630
|
-
})
|
631
|
-
other = [ %w{b a}, %w{d c} ]
|
632
|
-
|
633
|
-
expect { t.diff!(other) }.not_to raise_error
|
634
|
-
end
|
635
|
-
end
|
636
|
-
|
637
|
-
describe '#from' do
|
638
|
-
it 'should allow Array of Hash' do
|
639
|
-
t1 = DataTable.from([{'name' => 'aslak', 'male' => 'true'}])
|
640
|
-
expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
|
641
|
-
| male | name |
|
642
|
-
| true | aslak |
|
643
|
-
}
|
644
|
-
end
|
645
|
-
end
|
646
|
-
end
|
647
|
-
end
|
648
|
-
end
|