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,60 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module Parser
|
3
|
+
# TIP: When you hack on the grammar, just delete table.rb in this directory.
|
4
|
+
# Also make sure you have uninstalled all cucumber gems (don't forget xxx-cucumber
|
5
|
+
# github gems).
|
6
|
+
#
|
7
|
+
# Treetop will then generate the parser in-memory. When you're happy, just generate
|
8
|
+
# the rb file with tt feature.tt
|
9
|
+
grammar Table
|
10
|
+
include Common
|
11
|
+
|
12
|
+
rule table
|
13
|
+
table_row+ {
|
14
|
+
def at_line?(line)
|
15
|
+
elements.detect{|table_row| table_row.at_line?(line)}
|
16
|
+
end
|
17
|
+
|
18
|
+
def build(filter=nil)
|
19
|
+
Ast::Table.new(raw)
|
20
|
+
end
|
21
|
+
|
22
|
+
def raw(filter=nil, scenario_outline=nil)
|
23
|
+
elements.map do |table_row|
|
24
|
+
if(filter.nil? || table_row == elements[0] || filter.at_line?(table_row) || (scenario_outline && filter.outline_at_line?(scenario_outline)))
|
25
|
+
table_row.build
|
26
|
+
end
|
27
|
+
end.compact
|
28
|
+
end
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
rule table_row
|
33
|
+
space* '|' cells:(cell '|')+ space* (eol+ / eof) {
|
34
|
+
def at_line?(line)
|
35
|
+
cells.line == line
|
36
|
+
end
|
37
|
+
|
38
|
+
def build
|
39
|
+
row = cells.elements.map do |elt|
|
40
|
+
value = elt.cell.text_value.strip
|
41
|
+
value
|
42
|
+
end
|
43
|
+
|
44
|
+
class << row
|
45
|
+
attr_accessor :line
|
46
|
+
end
|
47
|
+
row.line = cells.line
|
48
|
+
|
49
|
+
row
|
50
|
+
end
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
rule cell
|
55
|
+
(!('|' / eol) .)*
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
begin
|
2
|
+
require 'treetop'
|
3
|
+
require 'treetop/runtime'
|
4
|
+
require 'treetop/ruby_extensions'
|
5
|
+
rescue LoadError
|
6
|
+
require "rubygems"
|
7
|
+
gem "treetop"
|
8
|
+
require 'treetop'
|
9
|
+
require 'treetop/runtime'
|
10
|
+
require 'treetop/ruby_extensions'
|
11
|
+
end
|
12
|
+
|
13
|
+
module Cucumber
|
14
|
+
module Parser
|
15
|
+
# Raised if Cucumber fails to parse a feature file
|
16
|
+
class SyntaxError < StandardError
|
17
|
+
def initialize(parser, file, line_offset)
|
18
|
+
tf = parser.terminal_failures
|
19
|
+
expected = tf.size == 1 ? tf[0].expected_string.inspect : "one of #{tf.map{|f| f.expected_string.inspect}.uniq*', '}"
|
20
|
+
line = parser.failure_line + line_offset
|
21
|
+
message = "#{file}:#{line}:#{parser.failure_column}: Parse error, expected #{expected}."
|
22
|
+
super(message)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module TreetopExt #:nodoc:
|
27
|
+
def parse_or_fail(source, file=nil, filter=nil, line_offset=0)
|
28
|
+
parse_tree = parse(source)
|
29
|
+
if parse_tree.nil?
|
30
|
+
raise Cucumber::Parser::SyntaxError.new(self, file, line_offset)
|
31
|
+
else
|
32
|
+
ast = parse_tree.build(filter) # may return nil if it doesn't match filter.
|
33
|
+
ast.file = file unless ast.nil?
|
34
|
+
ast
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
module Treetop #:nodoc:
|
42
|
+
module Runtime #:nodoc:
|
43
|
+
class SyntaxNode #:nodoc:
|
44
|
+
def line
|
45
|
+
input.line_of(interval.first)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class CompiledParser #:nodoc:
|
50
|
+
include Cucumber::Parser::TreetopExt
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Detect the platform we're running on so we can tweak behaviour
|
2
|
+
# in various places.
|
3
|
+
require 'rbconfig'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
module Cucumber
|
7
|
+
version = YAML.load_file(File.dirname(__FILE__) + '/../../VERSION.yml')
|
8
|
+
VERSION = "#{version[:major]}.#{version[:minor]}.#{version[:patch]}"
|
9
|
+
LANGUAGE_FILE = File.expand_path(File.dirname(__FILE__) + '/languages.yml')
|
10
|
+
LANGUAGES = YAML.load_file(LANGUAGE_FILE)
|
11
|
+
BINARY = File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
|
12
|
+
LIBDIR = File.expand_path(File.dirname(__FILE__) + '/../../lib')
|
13
|
+
JRUBY = defined?(JRUBY_VERSION)
|
14
|
+
IRONRUBY = defined?(RUBY_ENGINE) && RUBY_ENGINE == "ironruby"
|
15
|
+
WINDOWS = Config::CONFIG['host_os'] =~ /mswin|mingw/
|
16
|
+
OS_X = Config::CONFIG['host_os'] =~ /darwin/
|
17
|
+
WINDOWS_MRI = WINDOWS && !JRUBY && !IRONRUBY
|
18
|
+
RAILS = defined?(Rails)
|
19
|
+
RUBY_BINARY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
|
20
|
+
RUBY_1_9 = RUBY_VERSION =~ /^1\.9/
|
21
|
+
RUBY_1_8_7 = RUBY_VERSION =~ /^1\.8\.7/
|
22
|
+
|
23
|
+
class << self
|
24
|
+
attr_accessor :use_full_backtrace
|
25
|
+
|
26
|
+
def file_mode(m) #:nodoc:
|
27
|
+
RUBY_1_9 ? "#{m}:UTF-8" : m
|
28
|
+
end
|
29
|
+
end
|
30
|
+
self.use_full_backtrace = false
|
31
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'rubypython'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module PySupport
|
5
|
+
class PyLanguage
|
6
|
+
include LanguageSupport::LanguageMethods
|
7
|
+
|
8
|
+
def initialize(step_mother)
|
9
|
+
@step_def_files = []
|
10
|
+
#
|
11
|
+
# @python_path = ENV['PYTHONPATH'] ? ENV['PYTHONPATH'].split(':') : []
|
12
|
+
# add_to_python_path(File.dirname(__FILE__))
|
13
|
+
#
|
14
|
+
# RubyPython.start
|
15
|
+
# at_exit{RubyPython.stop}
|
16
|
+
#
|
17
|
+
# import(File.dirname(__FILE__) + '/py_language.py')
|
18
|
+
end
|
19
|
+
|
20
|
+
def load_code_file(py_file)
|
21
|
+
@step_def_files << py_file
|
22
|
+
end
|
23
|
+
|
24
|
+
def alias_adverbs(adverbs)
|
25
|
+
end
|
26
|
+
|
27
|
+
def step_definitions_for(py_file)
|
28
|
+
mod = import(py_file)
|
29
|
+
end
|
30
|
+
|
31
|
+
def snippet_text(step_keyword, step_name, multiline_arg_class)
|
32
|
+
"python snippet: #{step_keyword}, #{step_name}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def begin_scenario
|
36
|
+
@python_path = []
|
37
|
+
add_to_python_path(File.dirname(__FILE__))
|
38
|
+
@step_def_files.each{|f| add_to_python_path(File.dirname(f))}
|
39
|
+
|
40
|
+
RubyPython.start
|
41
|
+
|
42
|
+
@delegate = import(File.dirname(__FILE__) + '/py_language.py')
|
43
|
+
@step_def_files.each{|f| import(f)}
|
44
|
+
end
|
45
|
+
|
46
|
+
def step_matches(step_name, name_to_report)
|
47
|
+
@delegate.step_matches(step_name, name_to_report)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def import(path)
|
53
|
+
modname = File.basename(path)[0...-File.extname(path).length]
|
54
|
+
begin
|
55
|
+
mod = RubyPython.import(modname)
|
56
|
+
rescue PythonError => e
|
57
|
+
# e.message << "Couldn't load #{path}\nConsider adding #{File.expand_path(File.dirname(path))} to your PYTHONPATH"
|
58
|
+
raise e
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def add_to_python_path(dir)
|
63
|
+
dir = File.expand_path(dir)
|
64
|
+
@python_path.unshift(dir)
|
65
|
+
@python_path.uniq!
|
66
|
+
ENV['PYTHONPATH'] = @python_path.join(':')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class String #:nodoc:
|
73
|
+
# RubyPython incorrectly to expects String#end_with? to exist.
|
74
|
+
unless defined? end_with? # 1.9
|
75
|
+
def end_with?(str) #:nodoc:
|
76
|
+
str = str.to_str
|
77
|
+
tail = self[-str.length, str.length]
|
78
|
+
tail == str
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
require 'cucumber/platform'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Rake
|
5
|
+
# Defines a Rake task for running features.
|
6
|
+
#
|
7
|
+
# The simplest use of it goes something like:
|
8
|
+
#
|
9
|
+
# Cucumber::Rake::Task.new
|
10
|
+
#
|
11
|
+
# This will define a task named <tt>cucumber</tt> described as 'Run Cucumber features'.
|
12
|
+
# It will use steps from 'features/**/*.rb' and features in 'features/**/*.feature'.
|
13
|
+
#
|
14
|
+
# To further configure the task, you can pass a block:
|
15
|
+
#
|
16
|
+
# Cucumber::Rake::Task.new do |t|
|
17
|
+
# t.cucumber_opts = %w{--format progress}
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# This task can also be configured to be run with RCov:
|
21
|
+
#
|
22
|
+
# Cucumber::Rake::Task.new do |t|
|
23
|
+
# t.rcov = true
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# See the attributes for additional configuration possibilities.
|
27
|
+
class Task
|
28
|
+
class InProcessCucumberRunner #:nodoc:
|
29
|
+
attr_reader :args
|
30
|
+
|
31
|
+
def initialize(libs, cucumber_opts, feature_files)
|
32
|
+
raise "libs must be an Array when running in-process" unless Array === libs
|
33
|
+
libs.reverse.each{|lib| $LOAD_PATH.unshift(lib)}
|
34
|
+
@args = (
|
35
|
+
cucumber_opts +
|
36
|
+
feature_files
|
37
|
+
).flatten.compact
|
38
|
+
end
|
39
|
+
|
40
|
+
def run
|
41
|
+
require 'cucumber/cli/main'
|
42
|
+
failure = Cucumber::Cli::Main.execute(args)
|
43
|
+
raise "Cucumber failed" if failure
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class ForkedCucumberRunner #:nodoc:
|
48
|
+
attr_reader :args
|
49
|
+
|
50
|
+
def initialize(libs, cucumber_bin, cucumber_opts, feature_files)
|
51
|
+
@args = (
|
52
|
+
['-I'] + load_path(libs) +
|
53
|
+
quoted_binary(cucumber_bin) +
|
54
|
+
cucumber_opts +
|
55
|
+
feature_files
|
56
|
+
).flatten
|
57
|
+
end
|
58
|
+
|
59
|
+
def load_path(libs)
|
60
|
+
['"%s"' % libs.join(File::PATH_SEPARATOR)]
|
61
|
+
end
|
62
|
+
|
63
|
+
def quoted_binary(cucumber_bin)
|
64
|
+
['"%s"' % cucumber_bin]
|
65
|
+
end
|
66
|
+
|
67
|
+
def run
|
68
|
+
ruby(args.join(" ")) # ruby(*args) is broken on Windows
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class RCovCucumberRunner < ForkedCucumberRunner #:nodoc:
|
73
|
+
def initialize(libs, cucumber_bin, cucumber_opts, feature_files, rcov_opts)
|
74
|
+
@args = (
|
75
|
+
['-I'] + load_path(libs) +
|
76
|
+
['-S', 'rcov'] + rcov_opts +
|
77
|
+
quoted_binary(cucumber_bin) +
|
78
|
+
['--'] +
|
79
|
+
cucumber_opts +
|
80
|
+
feature_files
|
81
|
+
).flatten
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
LIB = File.expand_path(File.dirname(__FILE__) + '/../..') #:nodoc:
|
86
|
+
|
87
|
+
# Directories to add to the Ruby $LOAD_PATH
|
88
|
+
attr_accessor :libs
|
89
|
+
|
90
|
+
# Name of the cucumber binary to use for running features. Defaults to Cucumber::BINARY
|
91
|
+
attr_accessor :binary
|
92
|
+
|
93
|
+
# Extra options to pass to the cucumber binary. Can be overridden by the CUCUMBER_OPTS environment variable.
|
94
|
+
# It's recommended to pass an Array, but if it's a String it will be #split by ' '.
|
95
|
+
attr_accessor :cucumber_opts
|
96
|
+
def cucumber_opts=(opts) #:nodoc:
|
97
|
+
@cucumber_opts = String === opts ? opts.split(' ') : opts
|
98
|
+
end
|
99
|
+
|
100
|
+
# Run cucumber with RCov? Defaults to false. If you set this to
|
101
|
+
# true, +fork+ is implicit.
|
102
|
+
attr_accessor :rcov
|
103
|
+
|
104
|
+
# Extra options to pass to rcov.
|
105
|
+
# It's recommended to pass an Array, but if it's a String it will be #split by ' '.
|
106
|
+
attr_accessor :rcov_opts
|
107
|
+
def rcov_opts=(opts) #:nodoc:
|
108
|
+
@rcov_opts = String === opts ? opts.split(' ') : opts
|
109
|
+
end
|
110
|
+
|
111
|
+
# Whether or not to fork a new ruby interpreter. Defaults to true. You may gain
|
112
|
+
# some startup speed if you set it to false, but this may also cause issues with
|
113
|
+
# your load path and gems.
|
114
|
+
attr_accessor :fork
|
115
|
+
|
116
|
+
# Define what profile to be used. When used with cucumber_opts it is simply appended
|
117
|
+
# to it. Will be ignored when CUCUMBER_OPTS is used.
|
118
|
+
attr_accessor :profile
|
119
|
+
|
120
|
+
# Define Cucumber Rake task
|
121
|
+
def initialize(task_name = "cucumber", desc = "Run Cucumber features")
|
122
|
+
@task_name, @desc = task_name, desc
|
123
|
+
@fork = true
|
124
|
+
@libs = ['lib']
|
125
|
+
@rcov_opts = %w{--rails --exclude osx\/objc,gems\/}
|
126
|
+
|
127
|
+
yield self if block_given?
|
128
|
+
|
129
|
+
@binary = binary.nil? ? Cucumber::BINARY : File.expand_path(binary)
|
130
|
+
@libs.insert(0, LIB) if binary == Cucumber::BINARY
|
131
|
+
|
132
|
+
define_task
|
133
|
+
end
|
134
|
+
|
135
|
+
def define_task #:nodoc:
|
136
|
+
desc @desc
|
137
|
+
task @task_name do
|
138
|
+
runner.run
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def runner(task_args = nil) #:nodoc:
|
143
|
+
cucumber_opts = [(ENV['CUCUMBER_OPTS'] ? ENV['CUCUMBER_OPTS'].split(/\s+/) : nil) || cucumber_opts_with_profile]
|
144
|
+
if(@rcov)
|
145
|
+
RCovCucumberRunner.new(libs, binary, cucumber_opts, feature_files, rcov_opts)
|
146
|
+
elsif(@fork)
|
147
|
+
ForkedCucumberRunner.new(libs, binary, cucumber_opts, feature_files)
|
148
|
+
else
|
149
|
+
InProcessCucumberRunner.new(libs, cucumber_opts, feature_files)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def cucumber_opts_with_profile #:nodoc:
|
154
|
+
@profile ? [cucumber_opts, '--profile', @profile] : cucumber_opts
|
155
|
+
end
|
156
|
+
|
157
|
+
def feature_files #:nodoc:
|
158
|
+
make_command_line_safe(FileList[ ENV['FEATURE'] || [] ])
|
159
|
+
end
|
160
|
+
|
161
|
+
def make_command_line_safe(list)
|
162
|
+
list.map{|string| string.gsub(' ', '\ ')}
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module RbSupport
|
3
|
+
# This module defines the methods you can use to define pure Ruby
|
4
|
+
# Step Definitions and Hooks. This module is mixed into the toplevel
|
5
|
+
# object.
|
6
|
+
module RbDsl
|
7
|
+
class << self
|
8
|
+
attr_writer :rb_language
|
9
|
+
|
10
|
+
def alias_adverb(adverb)
|
11
|
+
alias_method adverb, :register_rb_step_definition
|
12
|
+
end
|
13
|
+
|
14
|
+
def build_rb_world_factory(world_modules, proc)
|
15
|
+
@rb_language.build_rb_world_factory(world_modules, proc)
|
16
|
+
end
|
17
|
+
|
18
|
+
def register_rb_hook(phase, tag_names, proc)
|
19
|
+
@rb_language.register_rb_hook(phase, tag_names, proc)
|
20
|
+
end
|
21
|
+
|
22
|
+
def register_rb_transform(regexp, proc)
|
23
|
+
@rb_language.register_rb_transform(regexp, proc)
|
24
|
+
end
|
25
|
+
|
26
|
+
def register_rb_step_definition(regexp, proc)
|
27
|
+
@rb_language.register_rb_step_definition(regexp, proc)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Registers any number of +world_modules+ (Ruby Modules) and/or a Proc.
|
32
|
+
# The +proc+ will be executed once before each scenario to create an
|
33
|
+
# Object that the scenario's steps will run within. Any +world_modules+
|
34
|
+
# will be mixed into this Object (via Object#extend).
|
35
|
+
#
|
36
|
+
# This method is typically called from one or more Ruby scripts under
|
37
|
+
# <tt>features/support</tt>. You can call this method as many times as you
|
38
|
+
# like (to register more modules), but if you try to register more than
|
39
|
+
# one Proc you will get an error.
|
40
|
+
#
|
41
|
+
# Cucumber will not yield anything to the +proc+. Examples:
|
42
|
+
#
|
43
|
+
# World do
|
44
|
+
# MyClass.new
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# World(MyModule)
|
48
|
+
#
|
49
|
+
def World(*world_modules, &proc)
|
50
|
+
RbDsl.build_rb_world_factory(world_modules, proc)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Registers a proc that will run before each Scenario. You can register as
|
54
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
55
|
+
def Before(*tag_names, &proc)
|
56
|
+
RbDsl.register_rb_hook('before', tag_names, proc)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Registers a proc that will run after each Scenario. You can register as
|
60
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
61
|
+
def After(*tag_names, &proc)
|
62
|
+
RbDsl.register_rb_hook('after', tag_names, proc)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Registers a proc that will run after each Step. You can register as
|
66
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
67
|
+
def AfterStep(*tag_names, &proc)
|
68
|
+
RbDsl.register_rb_hook('after_step', tag_names, proc)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Registers a proc that will be called with a step definition argument if it
|
72
|
+
# matches the pattern passed as the first argument to Transform. Alternatively, if
|
73
|
+
# the pattern contains captures then they will be yielded as arguments to the
|
74
|
+
# provided proc. The return value of the proc is consequently yielded to the
|
75
|
+
# step definition.
|
76
|
+
def Transform(regexp, &proc)
|
77
|
+
RbDsl.register_rb_transform(regexp, proc)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Registers a proc that will run after Cucumber is configured. You can register as
|
81
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
82
|
+
def AfterConfiguration(&proc)
|
83
|
+
RbDsl.register_rb_hook('after_configuration', [], proc)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Registers a new Ruby StepDefinition. This method is aliased
|
87
|
+
# to <tt>Given</tt>, <tt>When</tt> and <tt>Then</tt>, and
|
88
|
+
# also to the i18n translations whenever a feature of a
|
89
|
+
# new language is loaded.
|
90
|
+
#
|
91
|
+
# The +&proc+ gets executed in the context of a <tt>World</tt>
|
92
|
+
# object, which is defined by #World. A new <tt>World</tt>
|
93
|
+
# object is created for each scenario and is shared across
|
94
|
+
# step definitions within that scenario.
|
95
|
+
def register_rb_step_definition(regexp, &proc)
|
96
|
+
RbDsl.register_rb_step_definition(regexp, proc)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
extend(Cucumber::RbSupport::RbDsl)
|