kbaum-cucumber 0.4.5.pre
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 +18 -0
- data/Caliper.yml +5 -0
- data/History.txt +1292 -0
- data/LICENSE +22 -0
- data/README.rdoc +26 -0
- data/Rakefile +63 -0
- data/VERSION.yml +5 -0
- data/bin/cucumber +16 -0
- data/cucumber.gemspec +741 -0
- data/cucumber.yml +10 -0
- data/examples/dos_line_endings/Rakefile +6 -0
- data/examples/dos_line_endings/features/dos_line_endings.feature +9 -0
- data/examples/i18n/README.textile +18 -0
- data/examples/i18n/Rakefile +32 -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 +6 -0
- data/examples/i18n/bg/features/support/world.rb +8 -0
- data/examples/i18n/bg/lib/calculator.rb +24 -0
- data/examples/i18n/cat/Rakefile +6 -0
- data/examples/i18n/cat/features/step_definitons/calculator_steps.rb +21 -0
- data/examples/i18n/cat/features/suma.feature +17 -0
- data/examples/i18n/cat/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 +8 -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/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 +38 -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 +14 -0
- data/examples/i18n/hu/.gitignore +1 -0
- data/examples/i18n/hu/Rakefile +6 -0
- data/examples/i18n/hu/features/addition.feature +17 -0
- data/examples/i18n/hu/features/division.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 +24 -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 +6 -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 +6 -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 +6 -0
- data/examples/i18n/ru/features/support/world.rb +8 -0
- data/examples/i18n/ru/lib/calculator.rb +24 -0
- data/examples/i18n/se/Rakefile +6 -0
- data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +24 -0
- data/examples/i18n/se/features/summering.feature +18 -0
- data/examples/i18n/se/lib/kalkulator.rb +11 -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-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/sr/Rakefile +6 -0
- data/examples/i18n/sr/features/sabiranje.feature +18 -0
- data/examples/i18n/sr/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/sr/lib/calculator.rb +12 -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/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 +6 -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/junit/features/one_passing_one_failing.feature +8 -0
- data/examples/junit/features/pending.feature +5 -0
- data/examples/junit/features/step_definitions/steps.rb +11 -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/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/selenium/Rakefile +6 -0
- data/examples/selenium/features/search.feature +9 -0
- data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium/features/support/env.rb +19 -0
- data/examples/selenium_webrat/Rakefile +6 -0
- data/examples/selenium_webrat/config.ru +0 -0
- data/examples/selenium_webrat/features/search.feature +9 -0
- data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium_webrat/features/support/env.rb +45 -0
- data/examples/self_test/.gitignore +1 -0
- data/examples/self_test/README.textile +6 -0
- data/examples/self_test/Rakefile +6 -0
- data/examples/self_test/features/background/background_tagged_before_on_outline.feature +12 -0
- data/examples/self_test/features/background/background_with_name.feature +7 -0
- data/examples/self_test/features/background/failing_background.feature +12 -0
- data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
- data/examples/self_test/features/background/multiline_args_background.feature +32 -0
- data/examples/self_test/features/background/passing_background.feature +10 -0
- data/examples/self_test/features/background/pending_background.feature +10 -0
- data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
- data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
- data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
- data/examples/self_test/features/failing_expectation.feature +4 -0
- data/examples/self_test/features/lots_of_undefined.feature +8 -0
- data/examples/self_test/features/multiline_name.feature +27 -0
- data/examples/self_test/features/outline_sample.feature +15 -0
- data/examples/self_test/features/sample.feature +21 -0
- data/examples/self_test/features/search_sample.feature +32 -0
- data/examples/self_test/features/step_definitions/sample_steps.rb +81 -0
- data/examples/self_test/features/support/env.rb +18 -0
- data/examples/self_test/features/tags_sample.feature +17 -0
- data/examples/self_test/features/tons_of_cukes.feature +52 -0
- data/examples/self_test/features/undefined_multiline_args.feature +12 -0
- data/examples/self_test/list-of-features.txt +1 -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 +30 -0
- data/examples/sinatra/views/add.erb +5 -0
- data/examples/sinatra/views/layout.erb +8 -0
- data/examples/steps_library/features/step_definitions/steps_lib1.rb +8 -0
- data/examples/steps_library/features/step_definitions/steps_lib2.rb +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/tickets/Rakefile +20 -0
- data/examples/tickets/features.html +138 -0
- data/examples/tickets/features/172.feature +28 -0
- data/examples/tickets/features/177/1.feature +28 -0
- data/examples/tickets/features/177/2.feature +20 -0
- data/examples/tickets/features/177/3.feature +18 -0
- data/examples/tickets/features/180.feature +7 -0
- data/examples/tickets/features/229/tagged_hooks.feature +8 -0
- data/examples/tickets/features/229/tagged_hooks.rb +14 -0
- data/examples/tickets/features/236.feature +13 -0
- data/examples/tickets/features/241.feature +12 -0
- data/examples/tickets/features/246.feature +4 -0
- data/examples/tickets/features/248.feature +11 -0
- data/examples/tickets/features/270/back.feature +14 -0
- data/examples/tickets/features/270/back.steps.rb +14 -0
- data/examples/tickets/features/272/hooks.feature +26 -0
- data/examples/tickets/features/272/hooks_steps.rb +53 -0
- data/examples/tickets/features/279/py_string_indent.feature +25 -0
- data/examples/tickets/features/279/py_string_indent.steps.rb +12 -0
- data/examples/tickets/features/279/wrong.feature_ +11 -0
- data/examples/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
- data/examples/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
- data/examples/tickets/features/306/only_background.feature +4 -0
- data/examples/tickets/features/lib/eatting_machine.rb +18 -0
- data/examples/tickets/features/lib/pantry.rb +20 -0
- data/examples/tickets/features/scenario_outline.feature +95 -0
- data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
- data/examples/tickets/features/step_definitons/248_steps.rb +15 -0
- data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
- data/examples/tickets/features/step_definitons/tickets_steps.rb +81 -0
- data/examples/tickets/features/table_diffing.feature +13 -0
- data/examples/tickets/features/tickets.feature +28 -0
- data/examples/watir/README.textile +16 -0
- data/examples/watir/Rakefile +10 -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 +44 -0
- data/examples/webrat/features/search.feature +12 -0
- data/examples/webrat/features/step_definitions/kvasir_steps.rb +14 -0
- data/examples/webrat/features/support/env.rb +17 -0
- data/features/announce.feature +122 -0
- data/features/background.feature +308 -0
- data/features/bug_371.feature +32 -0
- data/features/bug_464.feature +16 -0
- data/features/bug_475.feature +43 -0
- data/features/call_many_steps.feature +124 -0
- data/features/cucumber_cli.feature +654 -0
- data/features/cucumber_cli_diff_disabled.feature +52 -0
- data/features/cucumber_cli_outlines.feature +105 -0
- data/features/custom_formatter.feature +47 -0
- data/features/default_snippets.feature +42 -0
- data/features/drb_server_integration.feature +174 -0
- data/features/exception_in_after_block.feature +100 -0
- data/features/exception_in_after_step_block.feature +102 -0
- data/features/exception_in_before_block.feature +78 -0
- data/features/exclude_files.feature +20 -0
- data/features/expand.feature +60 -0
- data/features/html_formatter.feature +7 -0
- data/features/html_formatter/a.html +400 -0
- data/features/junit_formatter.feature +88 -0
- data/features/language_from_header.feature +30 -0
- data/features/language_help.feature +68 -0
- data/features/listener_debugger_formatter.feature +41 -0
- data/features/multiline_names.feature +43 -0
- data/features/negative_tagged_hooks.feature +61 -0
- data/features/post_configuration_hook.feature +37 -0
- data/features/profiles.feature +112 -0
- data/features/rake_task.feature +152 -0
- data/features/report_called_undefined_steps.feature +34 -0
- data/features/simplest.feature +11 -0
- data/features/snippet.feature +22 -0
- data/features/step_definitions/cucumber_steps.rb +154 -0
- data/features/step_definitions/extra_steps.rb +2 -0
- data/features/step_definitions/simplest_steps.rb +3 -0
- data/features/step_definitions/wire_steps.rb +14 -0
- data/features/support/env.rb +141 -0
- data/features/support/env.rb.simplest +7 -0
- data/features/support/fake_wire_server.rb +63 -0
- data/features/table_diffing.feature +45 -0
- data/features/table_mapping.feature +35 -0
- data/features/tag_logic.feature +258 -0
- data/features/transform.feature +245 -0
- data/features/unicode_table.feature +35 -0
- data/features/usage_and_stepdefs_formatter.feature +169 -0
- data/features/wire_protocol.feature +177 -0
- data/features/work_in_progress.feature +156 -0
- data/gem_tasks/contributors.rake +13 -0
- data/gem_tasks/environment.rake +7 -0
- data/gem_tasks/features.rake +18 -0
- data/gem_tasks/fix_cr_lf.rake +10 -0
- data/gem_tasks/flog.rake +4 -0
- data/gem_tasks/rspec.rake +15 -0
- data/gem_tasks/sass.rake +4 -0
- data/gem_tasks/sdoc.rake +12 -0
- data/lib/README.rdoc +12 -0
- data/lib/autotest/cucumber.rb +6 -0
- data/lib/autotest/cucumber_mixin.rb +131 -0
- data/lib/autotest/cucumber_rails.rb +6 -0
- data/lib/autotest/cucumber_rails_rspec.rb +6 -0
- data/lib/autotest/cucumber_rspec.rb +6 -0
- data/lib/autotest/discover.rb +9 -0
- data/lib/cucumber.rb +15 -0
- data/lib/cucumber/ast.rb +30 -0
- data/lib/cucumber/ast/background.rb +75 -0
- data/lib/cucumber/ast/comment.rb +31 -0
- data/lib/cucumber/ast/examples.rb +36 -0
- data/lib/cucumber/ast/feature.rb +85 -0
- data/lib/cucumber/ast/feature_element.rb +68 -0
- data/lib/cucumber/ast/features.rb +40 -0
- data/lib/cucumber/ast/outline_table.rb +166 -0
- data/lib/cucumber/ast/py_string.rb +59 -0
- data/lib/cucumber/ast/scenario.rb +111 -0
- data/lib/cucumber/ast/scenario_outline.rb +100 -0
- data/lib/cucumber/ast/step.rb +121 -0
- data/lib/cucumber/ast/step_collection.rb +76 -0
- data/lib/cucumber/ast/step_invocation.rb +190 -0
- data/lib/cucumber/ast/table.rb +655 -0
- data/lib/cucumber/ast/tags.rb +122 -0
- data/lib/cucumber/ast/tree_walker.rb +201 -0
- data/lib/cucumber/ast/visitor.rb +11 -0
- data/lib/cucumber/broadcaster.rb +13 -0
- data/lib/cucumber/cli/configuration.rb +180 -0
- data/lib/cucumber/cli/drb_client.rb +32 -0
- data/lib/cucumber/cli/language_help_formatter.rb +72 -0
- data/lib/cucumber/cli/main.rb +121 -0
- data/lib/cucumber/cli/options.rb +404 -0
- data/lib/cucumber/cli/profile_loader.rb +82 -0
- data/lib/cucumber/constantize.rb +34 -0
- data/lib/cucumber/core_ext/instance_exec.rb +98 -0
- data/lib/cucumber/core_ext/proc.rb +30 -0
- data/lib/cucumber/core_ext/string.rb +16 -0
- data/lib/cucumber/feature_file.rb +54 -0
- data/lib/cucumber/filter.rb +41 -0
- data/lib/cucumber/formatter/ansicolor.rb +157 -0
- data/lib/cucumber/formatter/color_io.rb +23 -0
- data/lib/cucumber/formatter/console.rb +205 -0
- data/lib/cucumber/formatter/cucumber.css +248 -0
- data/lib/cucumber/formatter/cucumber.sass +241 -0
- data/lib/cucumber/formatter/debug.rb +33 -0
- data/lib/cucumber/formatter/duration.rb +13 -0
- data/lib/cucumber/formatter/html.rb +545 -0
- data/lib/cucumber/formatter/io.rb +33 -0
- data/lib/cucumber/formatter/junit.rb +149 -0
- data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
- data/lib/cucumber/formatter/pdf.rb +234 -0
- data/lib/cucumber/formatter/pretty.rb +237 -0
- data/lib/cucumber/formatter/progress.rb +75 -0
- data/lib/cucumber/formatter/rerun.rb +50 -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/tag_cloud.rb +34 -0
- data/lib/cucumber/formatter/unicode.rb +35 -0
- data/lib/cucumber/formatter/usage.rb +127 -0
- data/lib/cucumber/language_support.rb +30 -0
- data/lib/cucumber/language_support/language_methods.rb +110 -0
- data/lib/cucumber/languages.yml +535 -0
- data/lib/cucumber/parser.rb +8 -0
- data/lib/cucumber/parser/common.rb +170 -0
- data/lib/cucumber/parser/common.tt +21 -0
- data/lib/cucumber/parser/feature.rb +1783 -0
- data/lib/cucumber/parser/feature.tt +317 -0
- data/lib/cucumber/parser/i18n.tt +34 -0
- data/lib/cucumber/parser/natural_language.rb +108 -0
- data/lib/cucumber/parser/py_string.rb +276 -0
- data/lib/cucumber/parser/py_string.tt +45 -0
- data/lib/cucumber/parser/table.rb +305 -0
- data/lib/cucumber/parser/table.tt +60 -0
- data/lib/cucumber/parser/treetop_ext.rb +53 -0
- data/lib/cucumber/platform.rb +31 -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 +81 -0
- data/lib/cucumber/rake/task.rb +166 -0
- data/lib/cucumber/rb_support/rb_dsl.rb +102 -0
- data/lib/cucumber/rb_support/rb_hook.rb +19 -0
- data/lib/cucumber/rb_support/rb_language.rb +179 -0
- data/lib/cucumber/rb_support/rb_step_definition.rb +75 -0
- data/lib/cucumber/rb_support/rb_transform.rb +37 -0
- data/lib/cucumber/rb_support/rb_world.rb +81 -0
- data/lib/cucumber/rb_support/regexp_argument_matcher.rb +21 -0
- data/lib/cucumber/rspec_neuter.rb +23 -0
- data/lib/cucumber/step_argument.rb +9 -0
- data/lib/cucumber/step_definition_light.rb +20 -0
- data/lib/cucumber/step_match.rb +107 -0
- data/lib/cucumber/step_mother.rb +350 -0
- data/lib/cucumber/webrat/element_locator.rb +93 -0
- data/lib/cucumber/webrat/table_locator.rb +1 -0
- data/lib/cucumber/wire_support/connection.rb +42 -0
- data/lib/cucumber/wire_support/request_handler.rb +19 -0
- data/lib/cucumber/wire_support/wire_exception.rb +10 -0
- data/lib/cucumber/wire_support/wire_language.rb +52 -0
- data/lib/cucumber/wire_support/wire_packet.rb +34 -0
- data/lib/cucumber/wire_support/wire_protocol.rb +64 -0
- data/lib/cucumber/wire_support/wire_step_definition.rb +21 -0
- data/spec/cucumber/ast/background_spec.rb +54 -0
- data/spec/cucumber/ast/feature_element_spec.rb +41 -0
- data/spec/cucumber/ast/feature_factory.rb +62 -0
- data/spec/cucumber/ast/feature_spec.rb +44 -0
- data/spec/cucumber/ast/outline_table_spec.rb +21 -0
- data/spec/cucumber/ast/py_string_spec.rb +51 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +73 -0
- data/spec/cucumber/ast/scenario_spec.rb +45 -0
- data/spec/cucumber/ast/step_collection_spec.rb +17 -0
- data/spec/cucumber/ast/step_spec.rb +66 -0
- data/spec/cucumber/ast/table_spec.rb +422 -0
- data/spec/cucumber/ast/tags_spec.rb +29 -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 +396 -0
- data/spec/cucumber/cli/drb_client_spec.rb +77 -0
- data/spec/cucumber/cli/main_spec.rb +172 -0
- data/spec/cucumber/cli/options_spec.rb +335 -0
- data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
- data/spec/cucumber/core_ext/proc_spec.rb +68 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
- data/spec/cucumber/formatter/color_io_spec.rb +27 -0
- data/spec/cucumber/formatter/console_spec.rb +20 -0
- data/spec/cucumber/formatter/duration_spec.rb +22 -0
- data/spec/cucumber/formatter/html_spec.rb +213 -0
- data/spec/cucumber/formatter/junit_spec.rb +110 -0
- data/spec/cucumber/formatter/progress_spec.rb +38 -0
- data/spec/cucumber/formatter/spec_helper.rb +50 -0
- data/spec/cucumber/parser/feature_parser_spec.rb +400 -0
- data/spec/cucumber/parser/table_parser_spec.rb +52 -0
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +132 -0
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +18 -0
- data/spec/cucumber/sell_cucumbers.feature +19 -0
- data/spec/cucumber/step_match_spec.rb +56 -0
- data/spec/cucumber/step_mother_spec.rb +270 -0
- data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
- data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
- data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
- data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
- data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
- data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
- data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
- data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
- data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
- data/spec/cucumber/treetop_parser/spaces.feature +12 -0
- data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
- data/spec/cucumber/treetop_parser/with_comments.feature +23 -0
- data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
- data/spec/cucumber/wire_support/wire_language_spec.rb +47 -0
- data/spec/cucumber/wire_support/wire_packet_spec.rb +26 -0
- data/spec/cucumber/world/pending_spec.rb +46 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +18 -0
- metadata +813 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
require 'treetop'
|
|
3
|
+
require 'cucumber/parser'
|
|
4
|
+
|
|
5
|
+
module Cucumber
|
|
6
|
+
module Parser
|
|
7
|
+
describe 'Tables' do
|
|
8
|
+
before do
|
|
9
|
+
@parser = NaturalLanguage.get(StepMother.new, 'en').parser
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
after do
|
|
13
|
+
NaturalLanguage.instance_variable_set(:@languages, nil)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def parse(text)
|
|
17
|
+
@parser.__send__(:prepare_to_parse, text)
|
|
18
|
+
@parser.root = :table
|
|
19
|
+
table = @parser._nt_table
|
|
20
|
+
table.raw
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should parse a 1x2 table with newline" do
|
|
24
|
+
parse(" | 1 | 2 | \n").should == [%w{1 2}]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should parse a 1x2 table without newline" do
|
|
28
|
+
parse("| 1 | 2 |").should == [%w{1 2}]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should parse a 1x2 table without spaces" do
|
|
32
|
+
parse("|1|2|").should == [%w{1 2}]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should parse a 2x2 table" do
|
|
36
|
+
parse("| 1 | 2 |\n| 3 | 4 |\n").should == [%w{1 2}, %w{3 4}]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should parse a 2x2 table with several newlines" do
|
|
40
|
+
parse("| 1 | 2 |\n| 3 | 4 |\n\n\n").should == [%w{1 2}, %w{3 4}]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should parse a 2x2 table with empty cells" do
|
|
44
|
+
parse("| 1 | |\n|| 4 |\n").should == [['1', ''], ['', '4']]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should not parse a 2x2 table that isn't closed" do
|
|
48
|
+
parse("| 1 | |\n|| 4 ").should_not == [['1', ''], ['', '4']]
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
require 'cucumber/ast'
|
|
4
|
+
require 'cucumber/step_mother'
|
|
5
|
+
require 'cucumber/rb_support/rb_language'
|
|
6
|
+
|
|
7
|
+
module Cucumber
|
|
8
|
+
module RbSupport
|
|
9
|
+
describe RbStepDefinition do
|
|
10
|
+
before do
|
|
11
|
+
@step_mother = StepMother.new
|
|
12
|
+
@step_mother.load_natural_language('en')
|
|
13
|
+
@rb = @step_mother.load_programming_language('rb')
|
|
14
|
+
@dsl = Object.new
|
|
15
|
+
@dsl.extend RbSupport::RbDsl
|
|
16
|
+
@step_mother.before(mock('scenario', :null_object => true))
|
|
17
|
+
|
|
18
|
+
$inside = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should allow calling of other steps" do
|
|
22
|
+
@dsl.Given /Outside/ do
|
|
23
|
+
Given "Inside"
|
|
24
|
+
end
|
|
25
|
+
@dsl.Given /Inside/ do
|
|
26
|
+
$inside = true
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
@step_mother.step_match("Outside").invoke(nil)
|
|
30
|
+
$inside.should == true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should allow calling of other steps with inline arg" do
|
|
34
|
+
@dsl.Given /Outside/ do
|
|
35
|
+
Given "Inside", Ast::Table.new([['inside']])
|
|
36
|
+
end
|
|
37
|
+
@dsl.Given /Inside/ do |table|
|
|
38
|
+
$inside = table.raw[0][0]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
@step_mother.step_match("Outside").invoke(nil)
|
|
42
|
+
$inside.should == 'inside'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should raise Undefined when inside step is not defined" do
|
|
46
|
+
@dsl.Given /Outside/ do
|
|
47
|
+
Given 'Inside'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
lambda do
|
|
51
|
+
@step_mother.step_match('Outside').invoke(nil)
|
|
52
|
+
end.should raise_error(Undefined, 'Undefined step: "Inside"')
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should allow forced pending" do
|
|
56
|
+
@dsl.Given /Outside/ do
|
|
57
|
+
pending("Do me!")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
lambda do
|
|
61
|
+
@step_mother.step_match("Outside").invoke(nil)
|
|
62
|
+
end.should raise_error(Pending, "Do me!")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should raise ArityMismatchError when the number of capture groups differs from the number of step arguments" do
|
|
66
|
+
@dsl.Given /No group: \w+/ do |arg|
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
lambda do
|
|
70
|
+
@step_mother.step_match("No group: arg").invoke(nil)
|
|
71
|
+
end.should raise_error(ArityMismatchError)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should allow announce" do
|
|
75
|
+
v = mock('visitor')
|
|
76
|
+
v.should_receive(:announce).with('wasup')
|
|
77
|
+
@step_mother.visitor = v
|
|
78
|
+
@dsl.Given /Loud/ do
|
|
79
|
+
announce 'wasup'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
@step_mother.step_match("Loud").invoke(nil)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "should recognize $arg style captures" do
|
|
86
|
+
@dsl.Given "capture this: $arg" do |arg|
|
|
87
|
+
arg.should == 'this'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
@step_mother.step_match('capture this: this').invoke(nil)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def unindented(s)
|
|
95
|
+
s.split("\n")[1..-2].join("\n").indent(-10)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "should recognise quotes in name and make according regexp" do
|
|
99
|
+
@rb.snippet_text('Given', 'A "first" arg', nil).should == unindented(%{
|
|
100
|
+
Given /^A "([^\\"]*)" arg$/ do |arg1|
|
|
101
|
+
pending # express the regexp above with the code you wish you had
|
|
102
|
+
end
|
|
103
|
+
})
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "should recognise several quoted words in name and make according regexp and args" do
|
|
107
|
+
@rb.snippet_text('Given', 'A "first" and "second" arg', nil).should == unindented(%{
|
|
108
|
+
Given /^A "([^\\"]*)" and "([^\\"]*)" arg$/ do |arg1, arg2|
|
|
109
|
+
pending # express the regexp above with the code you wish you had
|
|
110
|
+
end
|
|
111
|
+
})
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should not use quote group when there are no quotes" do
|
|
115
|
+
@rb.snippet_text('Given', 'A first arg', nil).should == unindented(%{
|
|
116
|
+
Given /^A first arg$/ do
|
|
117
|
+
pending # express the regexp above with the code you wish you had
|
|
118
|
+
end
|
|
119
|
+
})
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should be helpful with tables" do
|
|
123
|
+
@rb.snippet_text('Given', 'A "first" arg', Cucumber::Ast::Table).should == unindented(%{
|
|
124
|
+
Given /^A "([^\\"]*)" arg$/ do |arg1, table|
|
|
125
|
+
# table is a Cucumber::Ast::Table
|
|
126
|
+
pending # express the regexp above with the code you wish you had
|
|
127
|
+
end
|
|
128
|
+
})
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
require 'cucumber/rb_support/regexp_argument_matcher'
|
|
3
|
+
|
|
4
|
+
module Cucumber
|
|
5
|
+
module RbSupport
|
|
6
|
+
describe RegexpArgumentMatcher do
|
|
7
|
+
it "should create 2 arguments" do
|
|
8
|
+
arguments = RegexpArgumentMatcher.arguments_from(/I (\w+) (\w+)/, "I like fish")
|
|
9
|
+
arguments.map{|argument| [argument.val, argument.pos]}.should == [["like", 2], ["fish", 7]]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should create 2 arguments when first group is optional" do
|
|
13
|
+
arguments = RegexpArgumentMatcher.arguments_from(/should( not)? be flashed '([^']*?)'$/, "I should be flashed 'Login failed.'")
|
|
14
|
+
arguments.map{|argument| [argument.val, argument.pos]}.should == [[nil, nil], ["Login failed.", 21]]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Feature: Sell cucumbers
|
|
2
|
+
As a cucumber farmer
|
|
3
|
+
I want to sell cucumbers
|
|
4
|
+
So that I buy meat
|
|
5
|
+
|
|
6
|
+
Scenario: Sell a dozen
|
|
7
|
+
Given there are 5 cucumbers
|
|
8
|
+
When I sell 12 cucumbers
|
|
9
|
+
Then I should owe 7 cucumbers
|
|
10
|
+
|
|
11
|
+
Scenario: Sell twenty
|
|
12
|
+
Given there are 5 cucumbers
|
|
13
|
+
When I sell 20 cucumbers
|
|
14
|
+
Then I should owe 15 cucumbers
|
|
15
|
+
|
|
16
|
+
Scenario: Sell fifty
|
|
17
|
+
Given there are 5 cucumbers
|
|
18
|
+
When I sell 50 cucumbers
|
|
19
|
+
Then I should owe 45 cucumbers
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
3
|
+
require 'cucumber/rb_support/rb_step_definition'
|
|
4
|
+
require 'cucumber/rb_support/rb_language'
|
|
5
|
+
|
|
6
|
+
module Cucumber
|
|
7
|
+
describe StepMatch do
|
|
8
|
+
before do
|
|
9
|
+
@rb_language = RbSupport::RbLanguage.new(nil)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def stepdef(regexp)
|
|
13
|
+
RbSupport::RbStepDefinition.new(@rb_language, regexp, lambda{})
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def step_match(regexp, name)
|
|
17
|
+
stepdef = stepdef(regexp)
|
|
18
|
+
StepMatch.new(stepdef, name, nil, stepdef.arguments_from(name))
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should format one groups when we use Unicode" do
|
|
22
|
+
m = step_match(/I (\w+) ok/, "I æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ ok")
|
|
23
|
+
m.format_args("<span>%s</span>").should == "I <span>æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ</span> ok"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should format several groups when we use Unicode" do
|
|
27
|
+
m = step_match(/I (\w+) (\w+) (\w+) this (\w+)/, "I ate æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ egg this morning")
|
|
28
|
+
m.format_args("<span>%s</span>").should == "I <span>ate</span> <span>æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ</span> <span>egg</span> this <span>morning</span>"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should format groups with format string" do
|
|
32
|
+
m = step_match(/I (\w+) (\d+) (\w+) this (\w+)/, "I ate 1 egg this morning")
|
|
33
|
+
m.format_args("<span>%s</span>").should == "I <span>ate</span> <span>1</span> <span>egg</span> this <span>morning</span>"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should format groups with format string when there are dupes" do
|
|
37
|
+
m = step_match(/I (\w+) (\d+) (\w+) this (\w+)/, "I bob 1 bo this bobs")
|
|
38
|
+
m.format_args("<span>%s</span>").should == "I <span>bob</span> <span>1</span> <span>bo</span> this <span>bobs</span>"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should format groups with block" do
|
|
42
|
+
m = step_match(/I (\w+) (\d+) (\w+) this (\w+)/, "I ate 1 egg this morning")
|
|
43
|
+
m.format_args(&lambda{|m| "<span>#{m}</span>"}).should == "I <span>ate</span> <span>1</span> <span>egg</span> this <span>morning</span>"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should format groups with proc object" do
|
|
47
|
+
m = step_match(/I (\w+) (\d+) (\w+) this (\w+)/, "I ate 1 egg this morning")
|
|
48
|
+
m.format_args(lambda{|m| "<span>#{m}</span>"}).should == "I <span>ate</span> <span>1</span> <span>egg</span> this <span>morning</span>"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should format groups even when first group is optional and not matched" do
|
|
52
|
+
m = step_match(/should( not)? be flashed '([^']*?)'$/, "I should be flashed 'Login failed.'")
|
|
53
|
+
m.format_args("<span>%s</span>").should == "I should be flashed '<span>Login failed.</span>'"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
|
|
3
|
+
require 'cucumber'
|
|
4
|
+
require 'cucumber/rb_support/rb_language'
|
|
5
|
+
|
|
6
|
+
module Cucumber
|
|
7
|
+
describe StepMother do
|
|
8
|
+
before do
|
|
9
|
+
@dsl = Object.new
|
|
10
|
+
@dsl.extend(RbSupport::RbDsl)
|
|
11
|
+
|
|
12
|
+
@step_mother = StepMother.new
|
|
13
|
+
@step_mother.load_natural_language('en')
|
|
14
|
+
@rb = @step_mother.load_programming_language('rb')
|
|
15
|
+
|
|
16
|
+
@visitor = mock('Visitor')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should format step names" do
|
|
20
|
+
@dsl.Given(/it (.*) in (.*)/) do |what, month|
|
|
21
|
+
end
|
|
22
|
+
@dsl.Given(/nope something else/) do |what, month|
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
format = @step_mother.step_match("it snows in april").format_args("[%s]")
|
|
26
|
+
format.should == "it [snows] in [april]"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should raise Ambiguous error with guess hint when multiple step definitions match" do
|
|
30
|
+
@dsl.Given(/Three (.*) mice/) {|disability|}
|
|
31
|
+
@dsl.Given(/Three blind (.*)/) {|animal|}
|
|
32
|
+
|
|
33
|
+
lambda do
|
|
34
|
+
@step_mother.step_match("Three blind mice")
|
|
35
|
+
end.should raise_error(Ambiguous, %{Ambiguous match of "Three blind mice":
|
|
36
|
+
|
|
37
|
+
spec/cucumber/step_mother_spec.rb:30:in `/Three (.*) mice/'
|
|
38
|
+
spec/cucumber/step_mother_spec.rb:31:in `/Three blind (.*)/'
|
|
39
|
+
|
|
40
|
+
You can run again with --guess to make Cucumber be more smart about it
|
|
41
|
+
})
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should not show --guess hint when --guess is used" do
|
|
45
|
+
@step_mother.options = {:guess => true}
|
|
46
|
+
|
|
47
|
+
@dsl.Given(/Three (.*) mice/) {|disability|}
|
|
48
|
+
@dsl.Given(/Three cute (.*)/) {|animal|}
|
|
49
|
+
|
|
50
|
+
lambda do
|
|
51
|
+
@step_mother.step_match("Three cute mice")
|
|
52
|
+
end.should raise_error(Ambiguous, %{Ambiguous match of "Three cute mice":
|
|
53
|
+
|
|
54
|
+
spec/cucumber/step_mother_spec.rb:47:in `/Three (.*) mice/'
|
|
55
|
+
spec/cucumber/step_mother_spec.rb:48:in `/Three cute (.*)/'
|
|
56
|
+
|
|
57
|
+
})
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should not raise Ambiguous error when multiple step definitions match, but --guess is enabled" do
|
|
61
|
+
@step_mother.options = {:guess => true}
|
|
62
|
+
@dsl.Given(/Three (.*) mice/) {|disability|}
|
|
63
|
+
@dsl.Given(/Three (.*)/) {|animal|}
|
|
64
|
+
|
|
65
|
+
lambda do
|
|
66
|
+
@step_mother.step_match("Three blind mice")
|
|
67
|
+
end.should_not raise_error
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should pick right step definition when --guess is enabled and equal number of capture groups" do
|
|
71
|
+
@step_mother.options = {:guess => true}
|
|
72
|
+
right = @dsl.Given(/Three (.*) mice/) {|disability|}
|
|
73
|
+
wrong = @dsl.Given(/Three (.*)/) {|animal|}
|
|
74
|
+
|
|
75
|
+
@step_mother.step_match("Three blind mice").step_definition.should == right
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should pick right step definition when --guess is enabled and unequal number of capture groups" do
|
|
79
|
+
@step_mother.options = {:guess => true}
|
|
80
|
+
right = @dsl.Given(/Three (.*) mice ran (.*)/) {|disability|}
|
|
81
|
+
wrong = @dsl.Given(/Three (.*)/) {|animal|}
|
|
82
|
+
|
|
83
|
+
@step_mother.step_match("Three blind mice ran far").step_definition.should == right
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should pick most specific step definition when --guess is enabled and unequal number of capture groups" do
|
|
87
|
+
@step_mother.options = {:guess => true}
|
|
88
|
+
general = @dsl.Given(/Three (.*) mice ran (.*)/) {|disability|}
|
|
89
|
+
specific = @dsl.Given(/Three blind mice ran far/) {}
|
|
90
|
+
more_specific = @dsl.Given(/^Three blind mice ran far$/) {}
|
|
91
|
+
|
|
92
|
+
@step_mother.step_match("Three blind mice ran far").step_definition.should == more_specific
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "should raise Undefined error when no step definitions match" do
|
|
96
|
+
lambda do
|
|
97
|
+
@step_mother.step_match("Three blind mice")
|
|
98
|
+
end.should raise_error(Undefined)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# http://railsforum.com/viewtopic.php?pid=93881
|
|
102
|
+
it "should not raise Redundant unless it's really redundant" do
|
|
103
|
+
@dsl.Given(/^(.*) (.*) user named '(.*)'$/) {|a,b,c|}
|
|
104
|
+
@dsl.Given(/^there is no (.*) user named '(.*)'$/) {|a,b|}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "should raise an error if the world is nil" do
|
|
108
|
+
@dsl.World do
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
begin
|
|
112
|
+
@step_mother.before_and_after(nil) {}
|
|
113
|
+
raise "Should fail"
|
|
114
|
+
rescue RbSupport::NilWorld => e
|
|
115
|
+
e.message.should == "World procs should never return nil"
|
|
116
|
+
e.backtrace.should == ["spec/cucumber/step_mother_spec.rb:108:in `World'"]
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
module ModuleOne
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
module ModuleTwo
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
class ClassOne
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "should implicitly extend world with modules" do
|
|
130
|
+
@dsl.World(ModuleOne, ModuleTwo)
|
|
131
|
+
@step_mother.before(mock('scenario', :null_object => true))
|
|
132
|
+
class << @rb.current_world
|
|
133
|
+
included_modules.index(ModuleOne).should_not == nil
|
|
134
|
+
included_modules.index(ModuleTwo).should_not == nil
|
|
135
|
+
end
|
|
136
|
+
@rb.current_world.class.should == Object
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "should raise error when we try to register more than one World proc" do
|
|
140
|
+
@dsl.World { Hash.new }
|
|
141
|
+
lambda do
|
|
142
|
+
@dsl.World { Array.new }
|
|
143
|
+
end.should raise_error(RbSupport::MultipleWorld, %{You can only pass a proc to #World once, but it's happening
|
|
144
|
+
in 2 places:
|
|
145
|
+
|
|
146
|
+
spec/cucumber/step_mother_spec.rb:140:in `World'
|
|
147
|
+
spec/cucumber/step_mother_spec.rb:142:in `World'
|
|
148
|
+
|
|
149
|
+
Use Ruby modules instead to extend your worlds. See the Cucumber::RbSupport::RbDsl#World RDoc
|
|
150
|
+
or http://wiki.github.com/aslakhellesoy/cucumber/a-whole-new-world.
|
|
151
|
+
|
|
152
|
+
})
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "should find before hooks" do
|
|
156
|
+
fish = @dsl.Before('@fish'){}
|
|
157
|
+
meat = @dsl.Before('@meat'){}
|
|
158
|
+
|
|
159
|
+
scenario = mock('Scenario')
|
|
160
|
+
scenario.should_receive(:accept_hook?).with(fish).and_return(true)
|
|
161
|
+
scenario.should_receive(:accept_hook?).with(meat).and_return(false)
|
|
162
|
+
|
|
163
|
+
@rb.hooks_for(:before, scenario).should == [fish]
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
describe StepMother, "step argument transformations" do
|
|
168
|
+
before do
|
|
169
|
+
@dsl = Object.new
|
|
170
|
+
@dsl.extend(RbSupport::RbDsl)
|
|
171
|
+
|
|
172
|
+
@step_mother = StepMother.new
|
|
173
|
+
@step_mother.load_natural_language('en')
|
|
174
|
+
@rb = @step_mother.load_programming_language('rb')
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
describe "without capture groups" do
|
|
178
|
+
it "complains when registering with a with no transform block" do
|
|
179
|
+
lambda do
|
|
180
|
+
@dsl.Transform('^abc$')
|
|
181
|
+
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it "complains when registering with a zero-arg transform block" do
|
|
185
|
+
lambda do
|
|
186
|
+
@dsl.Transform('^abc$') {42}
|
|
187
|
+
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it "complains when registering with a splat-arg transform block" do
|
|
191
|
+
lambda do
|
|
192
|
+
@dsl.Transform('^abc$') {|*splat| 42 }
|
|
193
|
+
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it "complains when transforming with an arity mismatch" do
|
|
197
|
+
lambda do
|
|
198
|
+
@dsl.Transform('^abc$') {|one, two| 42 }
|
|
199
|
+
@rb.execute_transforms(['abc'])
|
|
200
|
+
end.should raise_error(Cucumber::ArityMismatchError)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it "allows registering a regexp pattern that yields the step_arg matched" do
|
|
204
|
+
@dsl.Transform(/^ab*c$/) {|arg| 42}
|
|
205
|
+
@rb.execute_transforms(['ab']).should == ['ab']
|
|
206
|
+
@rb.execute_transforms(['ac']).should == [42]
|
|
207
|
+
@rb.execute_transforms(['abc']).should == [42]
|
|
208
|
+
@rb.execute_transforms(['abbc']).should == [42]
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
describe "with capture groups" do
|
|
213
|
+
it "complains when registering with a with no transform block" do
|
|
214
|
+
lambda do
|
|
215
|
+
@dsl.Transform('^a(.)c$')
|
|
216
|
+
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "complains when registering with a zero-arg transform block" do
|
|
220
|
+
lambda do
|
|
221
|
+
@dsl.Transform('^a(.)c$') { 42 }
|
|
222
|
+
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
it "complains when registering with a splat-arg transform block" do
|
|
226
|
+
lambda do
|
|
227
|
+
@dsl.Transform('^a(.)c$') {|*splat| 42 }
|
|
228
|
+
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
it "complains when transforming with an arity mismatch" do
|
|
232
|
+
lambda do
|
|
233
|
+
@dsl.Transform('^a(.)c$') {|one, two| 42 }
|
|
234
|
+
@rb.execute_transforms(['abc'])
|
|
235
|
+
end.should raise_error(Cucumber::ArityMismatchError)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it "allows registering a regexp pattern that yields capture groups" do
|
|
239
|
+
@dsl.Transform(/^shape: (.+), color: (.+)$/) do |shape, color|
|
|
240
|
+
{shape.to_sym => color.to_sym}
|
|
241
|
+
end
|
|
242
|
+
@rb.execute_transforms(['shape: circle, color: blue']).should == [{:circle => :blue}]
|
|
243
|
+
@rb.execute_transforms(['shape: square, color: red']).should == [{:square => :red}]
|
|
244
|
+
@rb.execute_transforms(['not shape: square, not color: red']).should == ['not shape: square, not color: red']
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
it "allows registering a string pattern" do
|
|
249
|
+
@dsl.Transform('^ab*c$') {|arg| 42}
|
|
250
|
+
@rb.execute_transforms(['ab']).should == ['ab']
|
|
251
|
+
@rb.execute_transforms(['ac']).should == [42]
|
|
252
|
+
@rb.execute_transforms(['abc']).should == [42]
|
|
253
|
+
@rb.execute_transforms(['abbc']).should == [42]
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
it "gives match priority to transforms defined last" do
|
|
257
|
+
@dsl.Transform(/^transform_me$/) {|arg| :foo }
|
|
258
|
+
@dsl.Transform(/^transform_me$/) {|arg| :bar }
|
|
259
|
+
@dsl.Transform(/^transform_me$/) {|arg| :baz }
|
|
260
|
+
@rb.execute_transforms(['transform_me']).should == [:baz]
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
it "allows registering a transform which returns nil" do
|
|
264
|
+
@dsl.Transform('^ac$') {|arg| nil}
|
|
265
|
+
@rb.execute_transforms(['ab']).should == ['ab']
|
|
266
|
+
@rb.execute_transforms(['ac']).should == [nil]
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
end
|