stefl-cucumber 0.10.1
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.
- data/.gitattributes +1 -0
- data/.gitignore +24 -0
- data/.rspec +1 -0
- data/Gemfile +7 -0
- data/History.txt +1613 -0
- data/LICENSE +22 -0
- data/README.rdoc +26 -0
- data/Rakefile +12 -0
- data/bin/cucumber +22 -0
- data/cucumber.gemspec +50 -0
- data/cucumber.yml +20 -0
- data/examples/i18n/README.textile +18 -0
- data/examples/i18n/Rakefile +33 -0
- data/examples/i18n/ar/Rakefile +6 -0
- data/examples/i18n/ar/features/addition.feature +17 -0
- data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ar/lib/calculator.rb +11 -0
- data/examples/i18n/bg/Rakefile +6 -0
- data/examples/i18n/bg/features/addition.feature +12 -0
- data/examples/i18n/bg/features/consecutive_calculations.feature +19 -0
- data/examples/i18n/bg/features/division.feature +17 -0
- data/examples/i18n/bg/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/bg/features/support/env.rb +5 -0
- data/examples/i18n/bg/features/support/world.rb +8 -0
- data/examples/i18n/bg/lib/calculator.rb +24 -0
- data/examples/i18n/ca/Rakefile +6 -0
- data/examples/i18n/ca/features/step_definitons/calculator_steps.rb +21 -0
- data/examples/i18n/ca/features/suma.feature +17 -0
- data/examples/i18n/ca/lib/calculadora.rb +16 -0
- data/examples/i18n/da/Rakefile +6 -0
- data/examples/i18n/da/features/sammenlaegning.feature +18 -0
- data/examples/i18n/da/features/step_definitons/lommeregner_steps.rb +24 -0
- data/examples/i18n/da/lib/lommeregner.rb +11 -0
- data/examples/i18n/de/.gitignore +1 -0
- data/examples/i18n/de/Rakefile +6 -0
- data/examples/i18n/de/features/addition.feature +17 -0
- data/examples/i18n/de/features/division.feature +10 -0
- data/examples/i18n/de/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/de/lib/calculator.rb +14 -0
- data/examples/i18n/en-lol/Rakefile +4 -0
- data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
- data/examples/i18n/en-lol/features/stuffing.feature +8 -0
- data/examples/i18n/en-lol/features/support/env.rb +7 -0
- data/examples/i18n/en-lol/lib/basket.rb +12 -0
- data/examples/i18n/en-lol/lib/belly.rb +11 -0
- data/examples/i18n/en/.gitignore +1 -0
- data/examples/i18n/en/Rakefile +6 -0
- data/examples/i18n/en/features/addition.feature +17 -0
- data/examples/i18n/en/features/division.feature +10 -0
- data/examples/i18n/en/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/en/lib/calculator.rb +14 -0
- data/examples/i18n/eo/.gitignore +1 -0
- data/examples/i18n/eo/Rakefile +6 -0
- data/examples/i18n/eo/features/adicio.feature +17 -0
- data/examples/i18n/eo/features/divido.feature +10 -0
- data/examples/i18n/eo/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/eo/lib/calculator.rb +14 -0
- data/examples/i18n/es/Rakefile +6 -0
- data/examples/i18n/es/features/adicion.feature +17 -0
- data/examples/i18n/es/features/step_definitons/calculador_steps.rb +21 -0
- data/examples/i18n/es/lib/calculador.rb +14 -0
- data/examples/i18n/et/Rakefile +6 -0
- data/examples/i18n/et/features/jagamine.feature +10 -0
- data/examples/i18n/et/features/liitmine.feature +17 -0
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +24 -0
- data/examples/i18n/et/lib/kalkulaator.rb +14 -0
- data/examples/i18n/fi/.gitignore +1 -0
- data/examples/i18n/fi/Rakefile +6 -0
- data/examples/i18n/fi/features/jakolasku.feature +10 -0
- data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
- data/examples/i18n/fi/features/yhteenlasku.feature +17 -0
- data/examples/i18n/fi/lib/laskin.rb +14 -0
- data/examples/i18n/fr/Rakefile +6 -0
- data/examples/i18n/fr/features/addition.feature +18 -0
- data/examples/i18n/fr/features/addition2.feature +17 -0
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +32 -0
- data/examples/i18n/fr/features/support/env.rb +5 -0
- data/examples/i18n/fr/lib/calculatrice.rb +10 -0
- data/examples/i18n/he/Rakefile +6 -0
- data/examples/i18n/he/features/addition.feature +17 -0
- data/examples/i18n/he/features/division.feature +10 -0
- data/examples/i18n/he/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/he/lib/calculator.rb +15 -0
- data/examples/i18n/hu/.gitignore +1 -0
- data/examples/i18n/hu/Rakefile +6 -0
- data/examples/i18n/hu/features/osszeadas.feature +17 -0
- data/examples/i18n/hu/features/osztas.feature +10 -0
- data/examples/i18n/hu/features/step_definitons/calculator_steps.rb +25 -0
- data/examples/i18n/hu/lib/calculator.rb +14 -0
- data/examples/i18n/id/.gitignore +1 -0
- data/examples/i18n/id/Rakefile +6 -0
- data/examples/i18n/id/features/addition.feature +17 -0
- data/examples/i18n/id/features/division.feature +10 -0
- data/examples/i18n/id/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/id/lib/calculator.rb +14 -0
- data/examples/i18n/it/Rakefile +6 -0
- data/examples/i18n/it/features/somma.feature +11 -0
- data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +24 -0
- data/examples/i18n/it/lib/calcolatrice.rb +11 -0
- data/examples/i18n/ja/.gitignore +1 -0
- data/examples/i18n/ja/Rakefile +6 -0
- data/examples/i18n/ja/features/addition.feature +17 -0
- data/examples/i18n/ja/features/division.feature +10 -0
- data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/ja/features/support/env.rb +5 -0
- data/examples/i18n/ja/lib/calculator.rb +14 -0
- data/examples/i18n/ko/.gitignore +1 -0
- data/examples/i18n/ko/Rakefile +6 -0
- data/examples/i18n/ko/features/addition.feature +17 -0
- data/examples/i18n/ko/features/division.feature +11 -0
- data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ko/lib/calculator.rb +14 -0
- data/examples/i18n/lt/.gitignore +1 -0
- data/examples/i18n/lt/Rakefile +6 -0
- data/examples/i18n/lt/features/addition.feature +17 -0
- data/examples/i18n/lt/features/division.feature +10 -0
- data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/lt/lib/calculator.rb +14 -0
- data/examples/i18n/lv/Rakefile +6 -0
- data/examples/i18n/lv/features/addition.feature +17 -0
- data/examples/i18n/lv/features/division.feature +10 -0
- data/examples/i18n/lv/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/lv/lib/calculator.rb +14 -0
- data/examples/i18n/no/Rakefile +6 -0
- data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +17 -0
- data/examples/i18n/no/features/summering.feature +19 -0
- data/examples/i18n/no/features/support/env.rb +6 -0
- data/examples/i18n/no/lib/kalkulator.rb +11 -0
- data/examples/i18n/pl/.gitignore +1 -0
- data/examples/i18n/pl/Rakefile +6 -0
- data/examples/i18n/pl/features/addition.feature +17 -0
- data/examples/i18n/pl/features/division.feature +10 -0
- data/examples/i18n/pl/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/pl/features/support/env.rb +5 -0
- data/examples/i18n/pl/lib/calculator.rb +14 -0
- data/examples/i18n/pt/Rakefile +6 -0
- data/examples/i18n/pt/features/adicao.feature +11 -0
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +20 -0
- data/examples/i18n/pt/features/support/env.rb +5 -0
- data/examples/i18n/pt/lib/calculadora.rb +10 -0
- data/examples/i18n/ro/Rakefile +6 -0
- data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ro/features/suma.feature +11 -0
- data/examples/i18n/ro/lib/calculator.rb +11 -0
- data/examples/i18n/ru/Rakefile +6 -0
- data/examples/i18n/ru/features/addition.feature +11 -0
- data/examples/i18n/ru/features/consecutive_calculations.feature +17 -0
- data/examples/i18n/ru/features/division.feature +16 -0
- data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/ru/features/support/env.rb +5 -0
- data/examples/i18n/ru/features/support/world.rb +8 -0
- data/examples/i18n/ru/lib/calculator.rb +24 -0
- data/examples/i18n/sk/.gitignore +1 -0
- data/examples/i18n/sk/Rakefile +6 -0
- data/examples/i18n/sk/features/addition.feature +17 -0
- data/examples/i18n/sk/features/division.feature +10 -0
- data/examples/i18n/sk/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/sk/lib/calculator.rb +14 -0
- data/examples/i18n/sr-Cyrl/Rakefile +6 -0
- data/examples/i18n/sr-Cyrl/features/sabiranje.feature +18 -0
- data/examples/i18n/sr-Cyrl/features/step_definitons/calculator_steps.rb +20 -0
- data/examples/i18n/sr-Cyrl/features/support/env.rb +5 -0
- data/examples/i18n/sr-Cyrl/lib/calculator.rb +12 -0
- data/examples/i18n/sr-Latn/Rakefile +6 -0
- data/examples/i18n/sr-Latn/features/sabiranje.feature +18 -0
- data/examples/i18n/sr-Latn/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/sr-Latn/lib/calculator.rb +12 -0
- data/examples/i18n/sv/Rakefile +6 -0
- data/examples/i18n/sv/features/step_definitons/kalkulator_steps.rb +24 -0
- data/examples/i18n/sv/features/summering.feature +18 -0
- data/examples/i18n/sv/lib/kalkulator.rb +11 -0
- data/examples/i18n/tr/.gitignore +1 -0
- data/examples/i18n/tr/Rakefile +6 -0
- data/examples/i18n/tr/features/bolme.feature +10 -0
- data/examples/i18n/tr/features/step_definitons/hesap_makinesi_adimlari.rb +24 -0
- data/examples/i18n/tr/features/toplama.feature +18 -0
- data/examples/i18n/tr/lib/hesap_makinesi.rb +15 -0
- data/examples/i18n/uk/Rakefile +6 -0
- data/examples/i18n/uk/features/addition.feature +11 -0
- data/examples/i18n/uk/features/consecutive_calculations.feature +17 -0
- data/examples/i18n/uk/features/division.feature +16 -0
- data/examples/i18n/uk/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/uk/features/support/env.rb +5 -0
- data/examples/i18n/uk/features/support/world.rb +8 -0
- data/examples/i18n/uk/lib/calculator.rb +24 -0
- data/examples/i18n/uz/Rakefile +6 -0
- data/examples/i18n/uz/features/addition.feature +10 -0
- data/examples/i18n/uz/features/consecutive_calculations.feature +17 -0
- data/examples/i18n/uz/features/division.feature +17 -0
- data/examples/i18n/uz/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/uz/features/support/env.rb +5 -0
- data/examples/i18n/uz/features/support/world.rb +8 -0
- data/examples/i18n/uz/lib/calculator.rb +24 -0
- data/examples/i18n/zh-CN/Rakefile +4 -0
- data/examples/i18n/zh-CN/features/addition.feature +18 -0
- data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +26 -0
- data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
- data/examples/i18n/zh-TW/.gitignore +1 -0
- data/examples/i18n/zh-TW/Rakefile +4 -0
- data/examples/i18n/zh-TW/features/addition.feature +17 -0
- data/examples/i18n/zh-TW/features/division.feature +11 -0
- data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
- data/examples/python/README.textile +7 -0
- data/examples/python/Rakefile +4 -0
- data/examples/python/features/fibonacci.feature +19 -0
- data/examples/python/features/step_definitions/fib_steps.py +11 -0
- data/examples/python/lib/.gitignore +1 -0
- data/examples/python/lib/fib.py +7 -0
- data/examples/ramaze/README.textile +7 -0
- data/examples/ramaze/Rakefile +6 -0
- data/examples/ramaze/app.rb +21 -0
- data/examples/ramaze/features/add.feature +11 -0
- data/examples/ramaze/features/step_definitions/add_steps.rb +15 -0
- data/examples/ramaze/features/support/env.rb +32 -0
- data/examples/ramaze/layout/default.html.erb +8 -0
- data/examples/ramaze/view/index.html.erb +5 -0
- data/examples/rspec_doubles/Rakefile +4 -0
- data/examples/rspec_doubles/features/mocking.feature +9 -0
- data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +19 -0
- data/examples/rspec_doubles/features/support/env.rb +12 -0
- data/examples/ruby2python/README.textile +7 -0
- data/examples/ruby2python/Rakefile +4 -0
- data/examples/ruby2python/features/fibonacci.feature +19 -0
- data/examples/ruby2python/features/step_definitions/fib_steps.rb +7 -0
- data/examples/ruby2python/features/support/env.rb +21 -0
- data/examples/ruby2python/lib/.gitignore +1 -0
- data/examples/ruby2python/lib/fib.py +7 -0
- data/examples/sinatra/README.textile +13 -0
- data/examples/sinatra/Rakefile +6 -0
- data/examples/sinatra/app.rb +14 -0
- data/examples/sinatra/features/add.feature +11 -0
- data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
- data/examples/sinatra/features/support/env.rb +10 -0
- data/examples/sinatra/views/add.erb +7 -0
- data/examples/sinatra/views/layout.erb +8 -0
- data/examples/tcl/README.textile +11 -0
- data/examples/tcl/Rakefile +6 -0
- data/examples/tcl/features/fibonnacci.feature +17 -0
- data/examples/tcl/features/step_definitions/fib_steps.rb +7 -0
- data/examples/tcl/features/support/env.rb +6 -0
- data/examples/tcl/src/fib.tcl +3 -0
- data/examples/test_unit/Rakefile +6 -0
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +23 -0
- data/examples/test_unit/features/test_unit.feature +9 -0
- data/examples/v8/Rakefile +6 -0
- data/examples/v8/features/fibonacci.feature +43 -0
- data/examples/v8/features/step_definitions/fib_steps.js +49 -0
- data/examples/v8/features/support/env.js +14 -0
- data/examples/v8/lib/fibonacci.js +19 -0
- data/examples/watir/.gitignore +2 -0
- data/examples/watir/README.textile +16 -0
- data/examples/watir/Rakefile +12 -0
- data/examples/watir/cucumber.yml +1 -0
- data/examples/watir/features/search.feature +12 -0
- data/examples/watir/features/step_definitions/search_steps.rb +26 -0
- data/examples/watir/features/support/env.rb +32 -0
- data/examples/watir/features/support/screenshots.rb +47 -0
- data/features/background.feature +498 -0
- data/features/custom_formatter.feature +41 -0
- data/features/execute_with_tag_filter.feature +63 -0
- data/features/hooks.feature +59 -0
- data/features/json_formatter.feature +249 -0
- data/features/stats_formatters.feature +70 -0
- data/features/step_definitions/cucumber_steps.rb +8 -0
- data/features/support/env.rb +31 -0
- data/features/tagged_hooks.feature +217 -0
- data/fixtures/json/features/background.feature +7 -0
- data/fixtures/json/features/embed.feature +4 -0
- data/fixtures/json/features/one_passing_one_failing.feature +11 -0
- data/fixtures/json/features/step_definitions/steps.rb +32 -0
- data/fixtures/json/features/tables.feature +13 -0
- data/fixtures/junit/features/one_passing_one_failing.feature +8 -0
- data/fixtures/junit/features/pending.feature +5 -0
- data/fixtures/junit/features/step_definitions/steps.rb +11 -0
- data/fixtures/self_test/.gitignore +1 -0
- data/fixtures/self_test/README.textile +6 -0
- data/fixtures/self_test/Rakefile +6 -0
- data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +7 -0
- data/fixtures/self_test/features/failing_expectation.feature +4 -0
- data/fixtures/self_test/features/lots_of_undefined.feature +8 -0
- data/fixtures/self_test/features/multiline_name.feature +27 -0
- data/fixtures/self_test/features/outline_sample.feature +15 -0
- data/fixtures/self_test/features/sample.feature +21 -0
- data/fixtures/self_test/features/search_sample.feature +32 -0
- data/fixtures/self_test/features/step_definitions/sample_steps.rb +84 -0
- data/fixtures/self_test/features/support/env.rb +18 -0
- data/fixtures/self_test/features/tags_sample.feature +17 -0
- data/fixtures/self_test/features/tons_of_cukes.feature +52 -0
- data/fixtures/self_test/features/undefined_multiline_args.feature +12 -0
- data/fixtures/self_test/list-of-features.txt +1 -0
- data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +8 -0
- data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +8 -0
- data/fixtures/tickets/Rakefile +20 -0
- data/fixtures/tickets/features.html +138 -0
- data/fixtures/tickets/features/172.feature +28 -0
- data/fixtures/tickets/features/177/1.feature +28 -0
- data/fixtures/tickets/features/177/2.feature +20 -0
- data/fixtures/tickets/features/177/3.feature +18 -0
- data/fixtures/tickets/features/180.feature +7 -0
- data/fixtures/tickets/features/229/tagged_hooks.feature +8 -0
- data/fixtures/tickets/features/229/tagged_hooks.rb +14 -0
- data/fixtures/tickets/features/236.feature +13 -0
- data/fixtures/tickets/features/241.feature +12 -0
- data/fixtures/tickets/features/246.feature +4 -0
- data/fixtures/tickets/features/248.feature +11 -0
- data/fixtures/tickets/features/270/back.feature +14 -0
- data/fixtures/tickets/features/270/back.steps.rb +14 -0
- data/fixtures/tickets/features/272/hooks.feature +26 -0
- data/fixtures/tickets/features/272/hooks_steps.rb +53 -0
- data/fixtures/tickets/features/279/py_string_indent.feature +25 -0
- data/fixtures/tickets/features/279/py_string_indent.steps.rb +12 -0
- data/fixtures/tickets/features/279/wrong.feature_ +11 -0
- data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
- data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
- data/fixtures/tickets/features/306/only_background.feature +4 -0
- data/fixtures/tickets/features/around_timeout.feature +6 -0
- data/fixtures/tickets/features/gherkin_67.feature +12 -0
- data/fixtures/tickets/features/gherkin_68.feature +4 -0
- data/fixtures/tickets/features/half_manual.feature +11 -0
- data/fixtures/tickets/features/lib/eatting_machine.rb +18 -0
- data/fixtures/tickets/features/lib/pantry.rb +20 -0
- data/fixtures/tickets/features/scenario_outline.feature +95 -0
- data/fixtures/tickets/features/step_definitons/246_steps.rb +3 -0
- data/fixtures/tickets/features/step_definitons/248_steps.rb +15 -0
- data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +9 -0
- data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +11 -0
- data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
- data/fixtures/tickets/features/step_definitons/tickets_steps.rb +88 -0
- data/fixtures/tickets/features/table_diffing.feature +13 -0
- data/fixtures/tickets/features/tickets.feature +28 -0
- data/gem_tasks/contributors.rake +15 -0
- data/gem_tasks/cucumber.rake +19 -0
- data/gem_tasks/environment.rake +7 -0
- data/gem_tasks/examples.rake +11 -0
- data/gem_tasks/fix_cr_lf.rake +10 -0
- data/gem_tasks/flog.rake +4 -0
- data/gem_tasks/rspec.rake +8 -0
- data/gem_tasks/sass.rake +4 -0
- data/gem_tasks/sdoc.rake +12 -0
- data/legacy_features/announce.feature +164 -0
- data/legacy_features/api/list_step_defs_as_json.feature +50 -0
- data/legacy_features/api/run_cli_main_with_existing_runtime.feature +34 -0
- data/legacy_features/around_hooks.feature +232 -0
- data/legacy_features/bug_371.feature +32 -0
- data/legacy_features/bug_464.feature +16 -0
- data/legacy_features/bug_475.feature +42 -0
- data/legacy_features/bug_585_tab_indentation.feature +22 -0
- data/legacy_features/bug_600.feature +67 -0
- data/legacy_features/call_steps_from_stepdefs.feature +154 -0
- data/legacy_features/cucumber_cli.feature +591 -0
- data/legacy_features/cucumber_cli_outlines.feature +117 -0
- data/legacy_features/default_snippets.feature +42 -0
- data/legacy_features/diffing.feature +25 -0
- data/legacy_features/drb_server_integration.feature +174 -0
- data/legacy_features/exception_in_after_block.feature +127 -0
- data/legacy_features/exception_in_after_step_block.feature +104 -0
- data/legacy_features/exception_in_before_block.feature +98 -0
- data/legacy_features/exclude_files.feature +20 -0
- data/legacy_features/expand.feature +60 -0
- data/legacy_features/html_formatter.feature +8 -0
- data/legacy_features/html_formatter/a.html +550 -0
- data/legacy_features/junit_formatter.feature +92 -0
- data/legacy_features/language_from_header.feature +30 -0
- data/legacy_features/language_help.feature +78 -0
- data/legacy_features/listener_debugger_formatter.feature +42 -0
- data/legacy_features/multiline_names.feature +44 -0
- data/legacy_features/post_configuration_hook.feature +50 -0
- data/legacy_features/profiles.feature +126 -0
- data/legacy_features/rake_task.feature +152 -0
- data/legacy_features/report_called_undefined_steps.feature +34 -0
- data/legacy_features/rerun_formatter.feature +45 -0
- data/legacy_features/simplest.feature +11 -0
- data/legacy_features/snippet.feature +23 -0
- data/legacy_features/snippets_when_using_star_keyword.feature +36 -0
- data/legacy_features/step_definitions/cucumber_steps.rb +168 -0
- data/legacy_features/step_definitions/extra_steps.rb +2 -0
- data/legacy_features/step_definitions/simplest_steps.rb +3 -0
- data/legacy_features/step_definitions/wire_steps.rb +34 -0
- data/legacy_features/support/env.rb +157 -0
- data/legacy_features/support/env.rb.simplest +7 -0
- data/legacy_features/support/fake_wire_server.rb +77 -0
- data/legacy_features/table_diffing.feature +45 -0
- data/legacy_features/table_mapping.feature +34 -0
- data/legacy_features/transform.feature +245 -0
- data/legacy_features/unicode_table.feature +35 -0
- data/legacy_features/wire_protocol.feature +332 -0
- data/legacy_features/wire_protocol_table_diffing.feature +119 -0
- data/legacy_features/wire_protocol_tags.feature +87 -0
- data/legacy_features/wire_protocol_timeouts.feature +63 -0
- data/legacy_features/work_in_progress.feature +156 -0
- data/lib/README.rdoc +12 -0
- data/lib/autotest/cucumber.rb +6 -0
- data/lib/autotest/cucumber_mixin.rb +135 -0
- data/lib/autotest/cucumber_rails.rb +6 -0
- data/lib/autotest/cucumber_rails_rspec.rb +6 -0
- data/lib/autotest/cucumber_rails_rspec2.rb +6 -0
- data/lib/autotest/cucumber_rspec.rb +6 -0
- data/lib/autotest/cucumber_rspec2.rb +6 -0
- data/lib/autotest/discover.rb +9 -0
- data/lib/cucumber.rb +27 -0
- data/lib/cucumber/ast.rb +30 -0
- data/lib/cucumber/ast/background.rb +99 -0
- data/lib/cucumber/ast/comment.rb +31 -0
- data/lib/cucumber/ast/examples.rb +43 -0
- data/lib/cucumber/ast/feature.rb +103 -0
- data/lib/cucumber/ast/feature_element.rb +78 -0
- data/lib/cucumber/ast/features.rb +35 -0
- data/lib/cucumber/ast/outline_table.rb +187 -0
- data/lib/cucumber/ast/py_string.rb +80 -0
- data/lib/cucumber/ast/scenario.rb +117 -0
- data/lib/cucumber/ast/scenario_outline.rb +122 -0
- data/lib/cucumber/ast/step.rb +126 -0
- data/lib/cucumber/ast/step_collection.rb +76 -0
- data/lib/cucumber/ast/step_invocation.rb +199 -0
- data/lib/cucumber/ast/table.rb +689 -0
- data/lib/cucumber/ast/tags.rb +28 -0
- data/lib/cucumber/ast/tree_walker.rb +184 -0
- data/lib/cucumber/ast/visitor.rb +11 -0
- data/lib/cucumber/broadcaster.rb +13 -0
- data/lib/cucumber/cli/configuration.rb +209 -0
- data/lib/cucumber/cli/drb_client.rb +43 -0
- data/lib/cucumber/cli/main.rb +78 -0
- data/lib/cucumber/cli/options.rb +406 -0
- data/lib/cucumber/cli/profile_loader.rb +91 -0
- data/lib/cucumber/configuration.rb +49 -0
- data/lib/cucumber/constantize.rb +34 -0
- data/lib/cucumber/core_ext/disable_mini_unit_autorun.rb +14 -0
- data/lib/cucumber/core_ext/instance_exec.rb +98 -0
- data/lib/cucumber/core_ext/proc.rb +34 -0
- data/lib/cucumber/core_ext/string.rb +9 -0
- data/lib/cucumber/errors.rb +40 -0
- data/lib/cucumber/feature_file.rb +62 -0
- data/lib/cucumber/formatter/ansicolor.rb +160 -0
- data/lib/cucumber/formatter/console.rb +177 -0
- data/lib/cucumber/formatter/cucumber.css +275 -0
- data/lib/cucumber/formatter/cucumber.sass +271 -0
- data/lib/cucumber/formatter/debug.rb +33 -0
- data/lib/cucumber/formatter/duration.rb +13 -0
- data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +84 -0
- data/lib/cucumber/formatter/gpretty.rb +24 -0
- data/lib/cucumber/formatter/html.rb +644 -0
- data/lib/cucumber/formatter/io.rb +31 -0
- data/lib/cucumber/formatter/jquery-min.js +154 -0
- data/lib/cucumber/formatter/json.rb +29 -0
- data/lib/cucumber/formatter/json_pretty.rb +13 -0
- data/lib/cucumber/formatter/junit.rb +150 -0
- data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
- data/lib/cucumber/formatter/pdf.rb +244 -0
- data/lib/cucumber/formatter/pretty.rb +237 -0
- data/lib/cucumber/formatter/progress.rb +92 -0
- data/lib/cucumber/formatter/rerun.rb +55 -0
- data/lib/cucumber/formatter/stepdefs.rb +14 -0
- data/lib/cucumber/formatter/steps.rb +49 -0
- data/lib/cucumber/formatter/summary.rb +35 -0
- data/lib/cucumber/formatter/unicode.rb +79 -0
- data/lib/cucumber/formatter/usage.rb +127 -0
- data/lib/cucumber/js_support/js_dsl.js +57 -0
- data/lib/cucumber/js_support/js_language.rb +185 -0
- data/lib/cucumber/js_support/js_snippets.rb +27 -0
- data/lib/cucumber/language_support.rb +30 -0
- data/lib/cucumber/language_support/language_methods.rb +129 -0
- data/lib/cucumber/parser.rb +2 -0
- data/lib/cucumber/parser/gherkin_builder.rb +130 -0
- data/lib/cucumber/platform.rb +29 -0
- data/lib/cucumber/py_support/py_dsl.py +10 -0
- data/lib/cucumber/py_support/py_language.py +10 -0
- data/lib/cucumber/py_support/py_language.rb +84 -0
- data/lib/cucumber/rake/task.rb +170 -0
- data/lib/cucumber/rb_support/rb_dsl.rb +112 -0
- data/lib/cucumber/rb_support/rb_hook.rb +18 -0
- data/lib/cucumber/rb_support/rb_language.rb +195 -0
- data/lib/cucumber/rb_support/rb_step_definition.rb +82 -0
- data/lib/cucumber/rb_support/rb_transform.rb +37 -0
- data/lib/cucumber/rb_support/rb_world.rb +95 -0
- data/lib/cucumber/rb_support/regexp_argument_matcher.rb +21 -0
- data/lib/cucumber/rspec/disable_option_parser.rb +23 -0
- data/lib/cucumber/rspec/doubles.rb +16 -0
- data/lib/cucumber/runtime.rb +145 -0
- data/lib/cucumber/runtime/features_loader.rb +62 -0
- data/lib/cucumber/runtime/for_programming_languages.rb +65 -0
- data/lib/cucumber/runtime/results.rb +64 -0
- data/lib/cucumber/runtime/support_code.rb +203 -0
- data/lib/cucumber/runtime/user_interface.rb +80 -0
- data/lib/cucumber/step_argument.rb +9 -0
- data/lib/cucumber/step_definition_light.rb +20 -0
- data/lib/cucumber/step_definitions.rb +14 -0
- data/lib/cucumber/step_match.rb +115 -0
- data/lib/cucumber/step_mother.rb +10 -0
- data/lib/cucumber/wire_support/configuration.rb +30 -0
- data/lib/cucumber/wire_support/connection.rb +55 -0
- data/lib/cucumber/wire_support/request_handler.rb +32 -0
- data/lib/cucumber/wire_support/wire_exception.rb +32 -0
- data/lib/cucumber/wire_support/wire_language.rb +54 -0
- data/lib/cucumber/wire_support/wire_packet.rb +32 -0
- data/lib/cucumber/wire_support/wire_protocol.rb +44 -0
- data/lib/cucumber/wire_support/wire_protocol/requests.rb +123 -0
- data/lib/cucumber/wire_support/wire_step_definition.rb +26 -0
- data/spec/cucumber/ast/background_spec.rb +110 -0
- data/spec/cucumber/ast/feature_factory.rb +60 -0
- data/spec/cucumber/ast/feature_spec.rb +63 -0
- data/spec/cucumber/ast/outline_table_spec.rb +21 -0
- data/spec/cucumber/ast/py_string_spec.rb +40 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +68 -0
- data/spec/cucumber/ast/scenario_spec.rb +43 -0
- data/spec/cucumber/ast/step_spec.rb +66 -0
- data/spec/cucumber/ast/table_spec.rb +474 -0
- data/spec/cucumber/ast/tree_walker_spec.rb +11 -0
- data/spec/cucumber/broadcaster_spec.rb +15 -0
- data/spec/cucumber/cli/configuration_spec.rb +431 -0
- data/spec/cucumber/cli/drb_client_spec.rb +77 -0
- data/spec/cucumber/cli/main_spec.rb +137 -0
- data/spec/cucumber/cli/options_spec.rb +351 -0
- data/spec/cucumber/cli/profile_loader_spec.rb +35 -0
- data/spec/cucumber/configuration_spec.rb +23 -0
- data/spec/cucumber/core_ext/proc_spec.rb +68 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
- data/spec/cucumber/formatter/duration_spec.rb +22 -0
- data/spec/cucumber/formatter/html_spec.rb +258 -0
- data/spec/cucumber/formatter/junit_spec.rb +111 -0
- data/spec/cucumber/formatter/progress_spec.rb +38 -0
- data/spec/cucumber/formatter/spec_helper.rb +51 -0
- data/spec/cucumber/rb_support/rb_language_spec.rb +283 -0
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +99 -0
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +18 -0
- data/spec/cucumber/runtime/support_code_spec.rb +112 -0
- data/spec/cucumber/runtime_spec.rb +41 -0
- data/spec/cucumber/sell_cucumbers.feature +19 -0
- data/spec/cucumber/step_match_spec.rb +69 -0
- data/spec/cucumber/wire_support/configuration_spec.rb +51 -0
- data/spec/cucumber/wire_support/connection_spec.rb +46 -0
- data/spec/cucumber/wire_support/wire_exception_spec.rb +44 -0
- data/spec/cucumber/wire_support/wire_language_spec.rb +47 -0
- data/spec/cucumber/wire_support/wire_packet_spec.rb +40 -0
- data/spec/cucumber/wire_support/wire_step_definition_spec.rb +20 -0
- data/spec/cucumber/world/pending_spec.rb +46 -0
- data/spec/spec_helper.rb +10 -0
- metadata +884 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Given /^there is a wire server (running |)on port (\d+) which understands the following protocol:$/ do |running, port, table|
|
|
2
|
+
table.map_column!('response') {|cell| cell.gsub(/\n/, '\n')}
|
|
3
|
+
protocol = table.hashes
|
|
4
|
+
@server = FakeWireServer.new(port.to_i, protocol)
|
|
5
|
+
start_wire_server if running.strip == "running"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
Given /^the wire server takes (.*) seconds to respond to the invoke message$/ do |timeout|
|
|
9
|
+
@server.delay_response(:invoke, timeout.to_f)
|
|
10
|
+
start_wire_server
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module WireHelper
|
|
14
|
+
def start_wire_server
|
|
15
|
+
@wire_pid = fork do
|
|
16
|
+
at_exit { stop_wire_server }
|
|
17
|
+
@server.run
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def stop_wire_server
|
|
22
|
+
return unless @wire_pid
|
|
23
|
+
Process.kill('KILL', @wire_pid)
|
|
24
|
+
Process.wait
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Before('@wire') do
|
|
29
|
+
extend(WireHelper)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
After('@wire') do
|
|
33
|
+
stop_wire_server
|
|
34
|
+
end
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
|
|
3
|
+
require 'tempfile'
|
|
4
|
+
require 'rspec/expectations'
|
|
5
|
+
require 'fileutils'
|
|
6
|
+
require 'forwardable'
|
|
7
|
+
require 'cucumber/formatter/unicode'
|
|
8
|
+
# This is to force miniunit to be loaded on 1.9.2, and verify that we can still run with --profile. See:
|
|
9
|
+
# * disable_mini_test_autorun.rb and
|
|
10
|
+
# * http://groups.google.com/group/cukes/browse_thread/thread/5682d41436e235d7
|
|
11
|
+
# * https://rspec.lighthouseapp.com/projects/16211/tickets/677-cucumber-093-prevents-testunit-from-running
|
|
12
|
+
require 'test/unit'
|
|
13
|
+
|
|
14
|
+
class CucumberWorld
|
|
15
|
+
extend Forwardable
|
|
16
|
+
def_delegators CucumberWorld, :fixtures_dir, :self_test_dir, :working_dir, :cucumber_lib_dir
|
|
17
|
+
|
|
18
|
+
def self.fixtures_dir(subdir=nil)
|
|
19
|
+
@fixtures_dir ||= File.expand_path(File.join(File.dirname(__FILE__), '../../fixtures'))
|
|
20
|
+
subdir ? File.join(@fixtures_dir, subdir) : @fixtures_dir
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.self_test_dir
|
|
24
|
+
@self_test_dir ||= fixtures_dir('self_test')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.working_dir
|
|
28
|
+
@working_dir ||= fixtures_dir('self_test/tmp')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def cucumber_lib_dir
|
|
32
|
+
@cucumber_lib_dir ||= File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Don't use Cucumber::BINARY (which is the binary used to start the "outer" cucumber)
|
|
36
|
+
# Instead we force the use of this codebase's cucumber bin script.
|
|
37
|
+
# This allows us to run cucumber's cukes with an older, stable cucumber.
|
|
38
|
+
def cucumber_bin
|
|
39
|
+
File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def initialize
|
|
43
|
+
@current_dir = self_test_dir
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
attr_reader :last_exit_status, :last_stderr
|
|
48
|
+
|
|
49
|
+
# The last standard out, with the duration line taken out (unpredictable)
|
|
50
|
+
def last_stdout
|
|
51
|
+
strip_1_9_paths(strip_duration(@last_stdout))
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def combined_output
|
|
55
|
+
last_stdout + "\n" + last_stderr
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def strip_duration(s)
|
|
59
|
+
s.gsub(/^\d+m\d+\.\d+s\n/m, "")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def strip_1_9_paths(s)
|
|
63
|
+
s.gsub(/#{Dir.pwd}\/fixtures\/self_test\/tmp/m, ".").gsub(/#{Dir.pwd}\/fixtures\/self_test/m, ".")
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def replace_duration(s, replacement)
|
|
67
|
+
s.gsub(/\d+m\d+\.\d+s/m, replacement)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def replace_junit_duration(s, replacement)
|
|
71
|
+
s.gsub(/\d+\.\d\d+/m, replacement)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def strip_ruby186_extra_trace(s)
|
|
75
|
+
s.gsub(/^.*\.\/features\/step_definitions(.*)\n/, "")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def create_file(file_name, file_content)
|
|
79
|
+
file_content.gsub!("CUCUMBER_LIB", "'#{cucumber_lib_dir}'") # Some files, such as Rakefiles need to use the lib dir
|
|
80
|
+
in_current_dir do
|
|
81
|
+
FileUtils.mkdir_p(File.dirname(file_name)) unless File.directory?(File.dirname(file_name))
|
|
82
|
+
File.open(file_name, 'w') { |f| f << file_content }
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def set_env_var(variable, value)
|
|
87
|
+
@original_env_vars ||= {}
|
|
88
|
+
@original_env_vars[variable] = ENV[variable]
|
|
89
|
+
ENV[variable] = value
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def background_jobs
|
|
93
|
+
@background_jobs ||= []
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def in_current_dir(&block)
|
|
97
|
+
Dir.chdir(@current_dir, &block)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def run(command)
|
|
101
|
+
stderr_file = Tempfile.new('cucumber')
|
|
102
|
+
stderr_file.close
|
|
103
|
+
in_current_dir do
|
|
104
|
+
mode = Cucumber::RUBY_1_9 ? {:external_encoding=>"UTF-8"} : 'r'
|
|
105
|
+
IO.popen("#{command} 2> #{stderr_file.path}", mode) do |io|
|
|
106
|
+
@last_stdout = io.read
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
@last_exit_status = $?.exitstatus
|
|
110
|
+
end
|
|
111
|
+
@last_stderr = IO.read(stderr_file.path)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def run_spork_in_background(port = nil)
|
|
115
|
+
require 'spork'
|
|
116
|
+
|
|
117
|
+
pid = fork
|
|
118
|
+
in_current_dir do
|
|
119
|
+
if pid
|
|
120
|
+
background_jobs << pid
|
|
121
|
+
else
|
|
122
|
+
# STDOUT.close
|
|
123
|
+
# STDERR.close
|
|
124
|
+
port_arg = port ? "-p #{port}" : ''
|
|
125
|
+
cmd = "#{Cucumber::RUBY_BINARY} -I #{Cucumber::LIBDIR} #{Spork::BINARY} cuc #{port_arg}"
|
|
126
|
+
exec cmd
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
sleep 1.0
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def terminate_background_jobs
|
|
133
|
+
background_jobs.each do |pid|
|
|
134
|
+
Process.kill(Signal.list['TERM'], pid)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def restore_original_env_vars
|
|
139
|
+
@original_env_vars.each { |variable, value| ENV[variable] = value } if @original_env_vars
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
World do
|
|
145
|
+
CucumberWorld.new
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
Before do
|
|
149
|
+
FileUtils.rm_rf CucumberWorld.working_dir
|
|
150
|
+
FileUtils.mkdir CucumberWorld.working_dir
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
After do
|
|
154
|
+
FileUtils.rm_rf CucumberWorld.working_dir unless ENV['KEEP_FILES']
|
|
155
|
+
terminate_background_jobs
|
|
156
|
+
restore_original_env_vars
|
|
157
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require 'socket'
|
|
2
|
+
require 'json'
|
|
3
|
+
|
|
4
|
+
class FakeWireServer
|
|
5
|
+
def initialize(port, protocol_table)
|
|
6
|
+
@port, @protocol_table = port, protocol_table
|
|
7
|
+
@delays = {}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def run
|
|
11
|
+
@server = TCPServer.open(@port)
|
|
12
|
+
loop { handle_connections }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def delay_response(message, delay)
|
|
16
|
+
@delays[message] = delay
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def handle_connections
|
|
22
|
+
Thread.start(@server.accept) { |socket| open_session_on socket }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def open_session_on(socket)
|
|
26
|
+
begin
|
|
27
|
+
SocketSession.new(socket, @protocol_table, @delays).start
|
|
28
|
+
rescue Exception => e
|
|
29
|
+
raise e
|
|
30
|
+
ensure
|
|
31
|
+
socket.close
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class SocketSession
|
|
36
|
+
def initialize(socket, protocol, delays)
|
|
37
|
+
@socket = socket
|
|
38
|
+
@protocol = protocol
|
|
39
|
+
@delays = delays
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def start
|
|
43
|
+
while message = @socket.gets
|
|
44
|
+
handle(message)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def handle(data)
|
|
51
|
+
if protocol_entry = response_to(data.strip)
|
|
52
|
+
sleep delay(data)
|
|
53
|
+
send_response(protocol_entry['response'])
|
|
54
|
+
else
|
|
55
|
+
serialized_exception = { :message => "Not understood: #{data}", :backtrace => [] }
|
|
56
|
+
send_response(['fail', serialized_exception ].to_json)
|
|
57
|
+
end
|
|
58
|
+
rescue => e
|
|
59
|
+
send_response(['fail', { :message => e.message, :backtrace => e.backtrace, :exception => e.class } ].to_json)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def response_to(data)
|
|
63
|
+
@protocol.detect do |entry|
|
|
64
|
+
JSON.parse(entry['request']) == JSON.parse(data)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def send_response(response)
|
|
69
|
+
@socket.puts response + "\n"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def delay(data)
|
|
73
|
+
message = JSON.parse(data.strip)[0]
|
|
74
|
+
@delays[message.to_sym] || 0
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Feature: Table diffing
|
|
2
|
+
In order to more easily compare data in tables
|
|
3
|
+
step definition writers should be able to diff
|
|
4
|
+
a table with expected data and see the diff inline
|
|
5
|
+
|
|
6
|
+
Scenario: Extra row
|
|
7
|
+
Given a standard Cucumber project directory structure
|
|
8
|
+
And a file named "features/tables.feature" with:
|
|
9
|
+
"""
|
|
10
|
+
Feature: Tables
|
|
11
|
+
Scenario: Extra row
|
|
12
|
+
Then the table should be:
|
|
13
|
+
| x | y |
|
|
14
|
+
| a | b |
|
|
15
|
+
"""
|
|
16
|
+
And a file named "features/step_definitions/table_steps.rb" with:
|
|
17
|
+
"""
|
|
18
|
+
Then /the table should be:/ do |expected| x=1
|
|
19
|
+
expected.diff!(table(%{
|
|
20
|
+
| x | y |
|
|
21
|
+
| a | c |
|
|
22
|
+
}))
|
|
23
|
+
end
|
|
24
|
+
"""
|
|
25
|
+
When I run cucumber -i features/tables.feature
|
|
26
|
+
Then it should fail with
|
|
27
|
+
"""
|
|
28
|
+
Feature: Tables
|
|
29
|
+
|
|
30
|
+
Scenario: Extra row # features/tables.feature:2
|
|
31
|
+
Then the table should be: # features/step_definitions/table_steps.rb:1
|
|
32
|
+
| x | y |
|
|
33
|
+
| a | b |
|
|
34
|
+
| a | c |
|
|
35
|
+
Tables were not identical (Cucumber::Ast::Table::Different)
|
|
36
|
+
./features/step_definitions/table_steps.rb:2:in `/the table should be:/'
|
|
37
|
+
features/tables.feature:3:in `Then the table should be:'
|
|
38
|
+
|
|
39
|
+
Failing Scenarios:
|
|
40
|
+
cucumber features/tables.feature:2 # Scenario: Extra row
|
|
41
|
+
|
|
42
|
+
1 scenario (1 failed)
|
|
43
|
+
1 step (1 failed)
|
|
44
|
+
|
|
45
|
+
"""
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Feature: Table mapping
|
|
2
|
+
Scenario: Mapping table shouldn't change output
|
|
3
|
+
Given a standard Cucumber project directory structure
|
|
4
|
+
And a file named "features/f.feature" with:
|
|
5
|
+
"""
|
|
6
|
+
Feature: F
|
|
7
|
+
Scenario: S
|
|
8
|
+
Given a table:
|
|
9
|
+
| who |
|
|
10
|
+
| aslak |
|
|
11
|
+
"""
|
|
12
|
+
And a file named "features/step_definitions/steps.rb" with:
|
|
13
|
+
"""
|
|
14
|
+
Given(/a table:/) { |table| table.map_headers!(/who/i => 'Who')
|
|
15
|
+
table.map_column!('Who') { |who| "Cuke" }
|
|
16
|
+
table.hashes[0]['Who'] = "Joe"
|
|
17
|
+
table.hashes.should == [{"Who"=>"Joe"}]
|
|
18
|
+
}
|
|
19
|
+
"""
|
|
20
|
+
When I run cucumber features/f.feature
|
|
21
|
+
Then STDERR should be empty
|
|
22
|
+
And it should pass with
|
|
23
|
+
"""
|
|
24
|
+
Feature: F
|
|
25
|
+
|
|
26
|
+
Scenario: S # features/f.feature:2
|
|
27
|
+
Given a table: # features/step_definitions/steps.rb:1
|
|
28
|
+
| who |
|
|
29
|
+
| aslak |
|
|
30
|
+
|
|
31
|
+
1 scenario (1 passed)
|
|
32
|
+
1 step (1 passed)
|
|
33
|
+
|
|
34
|
+
"""
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
Feature: transform
|
|
2
|
+
In order to maintain modularity within step definitions
|
|
3
|
+
As a step definition editor
|
|
4
|
+
I want to register a regex to capture and tranform step definition arguments.
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given a standard Cucumber project directory structure
|
|
8
|
+
And a file named "features/step_definitions/steps.rb" with:
|
|
9
|
+
"""
|
|
10
|
+
Then /^I should transform ('\d+' to an Integer)$/ do |integer|
|
|
11
|
+
integer.should be_kind_of(Integer)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
Then /^I should transform ('\w+' to a Symbol)$/ do |symbol|
|
|
15
|
+
symbol.should be_kind_of(Symbol)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
Then /^I should transform ('\d+' to a Float)$/ do |float|
|
|
19
|
+
float.should be_kind_of(Float)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Then /^I should transform ('\w+' to an Array)$/ do |array|
|
|
23
|
+
array.should be_kind_of(Array)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Then /^I should transform ('\w+' to Nil)$/ do |string|
|
|
27
|
+
string.should be_nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Then /^I should not transform ('\d+') to an Integer$/ do |string|
|
|
31
|
+
string.should be_kind_of(String)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
Then /^I should transform ((?:nothing|'\d+') to an optional Integer)$/ do |integer|
|
|
35
|
+
integer.should be_nil
|
|
36
|
+
end
|
|
37
|
+
"""
|
|
38
|
+
And a file named "features/support/env.rb" with:
|
|
39
|
+
"""
|
|
40
|
+
Transform /^'\d+' to an Integer$/ do |step_arg|
|
|
41
|
+
/'(\d+)' to an Integer/.match(step_arg).captures[0].to_i
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Transform /^(?:nothing|'(\d+)') to an optional Integer$/ do |str|
|
|
45
|
+
str ? str.to_i : nil
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
Transform /^'(\d+)' to a Float$/ do |integer_string|
|
|
49
|
+
Transform("'#{integer_string}' to an Integer").to_f
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
Transform(/^('\w+') to Nil$/) {|str| nil }
|
|
53
|
+
|
|
54
|
+
Transform(/^('\w+') to a Symbol$/) {|str| str.to_sym }
|
|
55
|
+
|
|
56
|
+
module MyHelpers
|
|
57
|
+
def fetch_array
|
|
58
|
+
@array
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
World(MyHelpers)
|
|
63
|
+
|
|
64
|
+
Before do
|
|
65
|
+
@array = []
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
Transform(/^('\w+') to an Array$/) {|str| fetch_array }
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
Scenario: run a specific scenario with a registered transform
|
|
72
|
+
Given a file named "features/transform_sample.feature" with:
|
|
73
|
+
"""
|
|
74
|
+
Feature: Step argument transformations
|
|
75
|
+
|
|
76
|
+
Scenario: transform with matches
|
|
77
|
+
Then I should transform '10' to an Integer
|
|
78
|
+
|
|
79
|
+
Scenario: transform with matches that capture
|
|
80
|
+
Then I should transform 'abc' to a Symbol
|
|
81
|
+
|
|
82
|
+
Scenario: transform with matches that reuse transforms
|
|
83
|
+
Then I should transform '10' to a Float
|
|
84
|
+
|
|
85
|
+
Scenario: transform with matches that use current world
|
|
86
|
+
Then I should transform 'abc' to an Array
|
|
87
|
+
|
|
88
|
+
Scenario: transform with matches that return nil
|
|
89
|
+
Then I should transform 'nil' to Nil
|
|
90
|
+
|
|
91
|
+
Scenario: transform without matches
|
|
92
|
+
Then I should not transform '10' to an Integer
|
|
93
|
+
|
|
94
|
+
Scenario: transform with optional arguments not given
|
|
95
|
+
Then I should transform nothing to an optional Integer
|
|
96
|
+
"""
|
|
97
|
+
When I run cucumber --backtrace -s features
|
|
98
|
+
Then it should pass with
|
|
99
|
+
"""
|
|
100
|
+
Feature: Step argument transformations
|
|
101
|
+
|
|
102
|
+
Scenario: transform with matches
|
|
103
|
+
Then I should transform '10' to an Integer
|
|
104
|
+
|
|
105
|
+
Scenario: transform with matches that capture
|
|
106
|
+
Then I should transform 'abc' to a Symbol
|
|
107
|
+
|
|
108
|
+
Scenario: transform with matches that reuse transforms
|
|
109
|
+
Then I should transform '10' to a Float
|
|
110
|
+
|
|
111
|
+
Scenario: transform with matches that use current world
|
|
112
|
+
Then I should transform 'abc' to an Array
|
|
113
|
+
|
|
114
|
+
Scenario: transform with matches that return nil
|
|
115
|
+
Then I should transform 'nil' to Nil
|
|
116
|
+
|
|
117
|
+
Scenario: transform without matches
|
|
118
|
+
Then I should not transform '10' to an Integer
|
|
119
|
+
|
|
120
|
+
Scenario: transform with optional arguments not given
|
|
121
|
+
Then I should transform nothing to an optional Integer
|
|
122
|
+
|
|
123
|
+
7 scenarios (7 passed)
|
|
124
|
+
7 steps (7 passed)
|
|
125
|
+
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
Scenario: run a table scenario with an unrelated registered transform
|
|
129
|
+
Given a file named "features/transform_sample.feature" with:
|
|
130
|
+
"""
|
|
131
|
+
Feature: Step argument transformations
|
|
132
|
+
|
|
133
|
+
Scenario: A table
|
|
134
|
+
Then I should check the following table:
|
|
135
|
+
| letter | letter_plus_a |
|
|
136
|
+
| r | ra |
|
|
137
|
+
| m | ma |
|
|
138
|
+
| p | pa |
|
|
139
|
+
"""
|
|
140
|
+
And a file named "features/support/table.rb" with:
|
|
141
|
+
"""
|
|
142
|
+
Transform /^table:number,number_plus_a$/ do |table|
|
|
143
|
+
:not_what_you_were_expecting
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
Then "I should check the following table:" do |table|
|
|
147
|
+
table.hashes.each do |hash|
|
|
148
|
+
hash['letter_plus_a'].should == (hash['letter'] + 'a')
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
"""
|
|
152
|
+
When I run cucumber -s features
|
|
153
|
+
Then it should pass with
|
|
154
|
+
"""
|
|
155
|
+
Feature: Step argument transformations
|
|
156
|
+
|
|
157
|
+
Scenario: A table
|
|
158
|
+
Then I should check the following table:
|
|
159
|
+
| letter | letter_plus_a |
|
|
160
|
+
| r | ra |
|
|
161
|
+
| m | ma |
|
|
162
|
+
| p | pa |
|
|
163
|
+
|
|
164
|
+
1 scenario (1 passed)
|
|
165
|
+
1 step (1 passed)
|
|
166
|
+
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
Scenario: run a table scenario with an related registered transform not using table
|
|
170
|
+
Given a file named "features/transform_sample.feature" with:
|
|
171
|
+
"""
|
|
172
|
+
Feature: Step argument transformations
|
|
173
|
+
|
|
174
|
+
Scenario: A table
|
|
175
|
+
Then I should check the following table:
|
|
176
|
+
| letter | letter_plus_a |
|
|
177
|
+
| r | ra |
|
|
178
|
+
| m | ma |
|
|
179
|
+
| p | pa |
|
|
180
|
+
"""
|
|
181
|
+
And a file named "features/support/table.rb" with:
|
|
182
|
+
"""
|
|
183
|
+
Transform /^table:letter,letter_plus_a$/ do |table|
|
|
184
|
+
1
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
Then "I should check the following table:" do |columns|
|
|
188
|
+
columns.should == 1
|
|
189
|
+
end
|
|
190
|
+
"""
|
|
191
|
+
When I run cucumber -s features
|
|
192
|
+
Then it should pass with
|
|
193
|
+
"""
|
|
194
|
+
Feature: Step argument transformations
|
|
195
|
+
|
|
196
|
+
Scenario: A table
|
|
197
|
+
Then I should check the following table:
|
|
198
|
+
| letter | letter_plus_a |
|
|
199
|
+
| r | ra |
|
|
200
|
+
| m | ma |
|
|
201
|
+
| p | pa |
|
|
202
|
+
|
|
203
|
+
1 scenario (1 passed)
|
|
204
|
+
1 step (1 passed)
|
|
205
|
+
|
|
206
|
+
"""
|
|
207
|
+
|
|
208
|
+
Scenario: run a table scenario with an related registered transform using table
|
|
209
|
+
Given a file named "features/transform_sample.feature" with:
|
|
210
|
+
"""
|
|
211
|
+
Feature: Step argument transformations
|
|
212
|
+
|
|
213
|
+
Scenario: A table
|
|
214
|
+
Then I should check the following table:
|
|
215
|
+
| letter | letter_plus_a |
|
|
216
|
+
| r | ra |
|
|
217
|
+
| m | ma |
|
|
218
|
+
| p | pa |
|
|
219
|
+
"""
|
|
220
|
+
And a file named "features/support/table.rb" with:
|
|
221
|
+
"""
|
|
222
|
+
Transform /^table:letter,letter_plus_a$/ do |table|
|
|
223
|
+
table.rows.map { |row| row.join(',') }
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
Then "I should check the following table:" do |rows_in_table|
|
|
227
|
+
rows_in_table.should == ['r,ra','m,ma','p,pa']
|
|
228
|
+
end
|
|
229
|
+
"""
|
|
230
|
+
When I run cucumber -b -s features
|
|
231
|
+
Then it should pass with
|
|
232
|
+
"""
|
|
233
|
+
Feature: Step argument transformations
|
|
234
|
+
|
|
235
|
+
Scenario: A table
|
|
236
|
+
Then I should check the following table:
|
|
237
|
+
| letter | letter_plus_a |
|
|
238
|
+
| r | ra |
|
|
239
|
+
| m | ma |
|
|
240
|
+
| p | pa |
|
|
241
|
+
|
|
242
|
+
1 scenario (1 passed)
|
|
243
|
+
1 step (1 passed)
|
|
244
|
+
|
|
245
|
+
"""
|