engineyard-cucumber 0.3.101
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/History.txt +1073 -0
- data/License.txt +22 -0
- data/Manifest.txt +453 -0
- data/README.txt +4 -0
- data/Rakefile +9 -0
- data/bin/cucumber +17 -0
- data/config/hoe.rb +78 -0
- data/config/requirements.rb +15 -0
- data/cucumber.yml +2 -0
- data/examples/cs/README.textile +1 -0
- data/examples/cs/Rakefile +12 -0
- data/examples/cs/compile.bat +1 -0
- data/examples/cs/features/addition.feature +16 -0
- data/examples/cs/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/cs/src/demo/Calculator.cs +20 -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/step_definitons/kalkulator_steps.rb +24 -0
- data/examples/i18n/da/features/summering.feature +18 -0
- data/examples/i18n/da/lib/kalkulator.rb +11 -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 +6 -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/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/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/step_definitions/calculatrice_steps.rb +25 -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/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/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/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/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/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/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/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/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 +6 -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/Rakefile +6 -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/java/README.textile +18 -0
- data/examples/java/build.xml +33 -0
- data/examples/java/features/hello.feature +11 -0
- data/examples/java/features/step_definitons/hello_steps.rb +23 -0
- data/examples/java/features/step_definitons/tree_steps.rb +14 -0
- data/examples/java/features/tree.feature +9 -0
- data/examples/java/src/cucumber/demo/Hello.java +16 -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/pure_java/README.textile +5 -0
- data/examples/python/features/fibonacci.feature +19 -0
- data/examples/python/features/step_definitions/fib_steps.py +3 -0
- data/examples/python/features/step_definitions/fib_steps.rb +7 -0
- data/examples/python/features/support/env.rb +21 -0
- data/examples/python/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/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 +93 -0
- data/examples/self_test/features/support/env.rb +24 -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/transform_sample.feature +10 -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 +32 -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/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 +16 -0
- data/examples/tickets/features/172.feature +28 -0
- data/examples/tickets/features/177/1.feature +29 -0
- data/examples/tickets/features/177/2.feature +21 -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 +13 -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 +6 -0
- data/examples/watir/features/search.feature +12 -0
- data/examples/watir/features/step_definitons/search_steps.rb +26 -0
- data/examples/watir/features/support/env.rb +32 -0
- data/features/background.feature +311 -0
- data/features/bug_371.feature +32 -0
- data/features/cucumber_cli.feature +667 -0
- data/features/cucumber_cli_diff_disabled.feature +54 -0
- data/features/cucumber_cli_outlines.feature +109 -0
- data/features/custom_formatter.feature +11 -0
- data/features/drb_server_integration.feature +173 -0
- data/features/exception_in_after_block.feature +102 -0
- data/features/exception_in_after_step_block.feature +104 -0
- data/features/exception_in_before_block.feature +47 -0
- data/features/exclude_files.feature +20 -0
- data/features/expand.feature +49 -0
- data/features/html_formatter.feature +7 -0
- data/features/html_formatter/a.html +183 -0
- data/features/junit_formatter.feature +89 -0
- data/features/language_from_header.feature +30 -0
- data/features/multiline_names.feature +43 -0
- data/features/post_configuration_hook.feature +37 -0
- data/features/profiles.feature +112 -0
- data/features/rake_task.feature +178 -0
- data/features/report_called_undefined_steps.feature +35 -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/steps_formatter.feature +25 -0
- data/features/support/env.rb +139 -0
- data/features/table_diffing.feature +45 -0
- data/features/transform.feature +24 -0
- data/features/unicode_table.feature +35 -0
- data/features/usage.feature +132 -0
- data/features/work_in_progress.feature +158 -0
- data/gem_tasks/contributors.rake +12 -0
- data/gem_tasks/deployment.rake +11 -0
- data/gem_tasks/environment.rake +7 -0
- data/gem_tasks/features.rake +11 -0
- data/gem_tasks/fix_cr_lf.rake +10 -0
- data/gem_tasks/flog.rake +4 -0
- data/gem_tasks/gemspec.rake +10 -0
- data/gem_tasks/rspec.rake +45 -0
- data/gem_tasks/sass.rake +4 -0
- data/gem_tasks/sdoc.rake +7 -0
- data/lib/README.rdoc +12 -0
- data/lib/autotest/cucumber.rb +6 -0
- data/lib/autotest/cucumber_mixin.rb +125 -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 +10 -0
- data/lib/cucumber/ast.rb +29 -0
- data/lib/cucumber/ast/background.rb +63 -0
- data/lib/cucumber/ast/comment.rb +31 -0
- data/lib/cucumber/ast/examples.rb +32 -0
- data/lib/cucumber/ast/feature.rb +81 -0
- data/lib/cucumber/ast/feature_element.rb +61 -0
- data/lib/cucumber/ast/features.rb +40 -0
- data/lib/cucumber/ast/outline_table.rb +146 -0
- data/lib/cucumber/ast/py_string.rb +57 -0
- data/lib/cucumber/ast/scenario.rb +108 -0
- data/lib/cucumber/ast/scenario_outline.rb +96 -0
- data/lib/cucumber/ast/step.rb +116 -0
- data/lib/cucumber/ast/step_collection.rb +76 -0
- data/lib/cucumber/ast/step_invocation.rb +166 -0
- data/lib/cucumber/ast/table.rb +626 -0
- data/lib/cucumber/ast/tags.rb +44 -0
- data/lib/cucumber/ast/visitor.rb +115 -0
- data/lib/cucumber/broadcaster.rb +13 -0
- data/lib/cucumber/cli/configuration.rb +190 -0
- data/lib/cucumber/cli/drb_client.rb +26 -0
- data/lib/cucumber/cli/language_help_formatter.rb +61 -0
- data/lib/cucumber/cli/main.rb +116 -0
- data/lib/cucumber/cli/options.rb +394 -0
- data/lib/cucumber/cli/profile_loader.rb +70 -0
- data/lib/cucumber/constantize.rb +28 -0
- data/lib/cucumber/core_ext/instance_exec.rb +93 -0
- data/lib/cucumber/core_ext/proc.rb +29 -0
- data/lib/cucumber/core_ext/string.rb +48 -0
- data/lib/cucumber/feature_file.rb +54 -0
- data/lib/cucumber/filter.rb +52 -0
- data/lib/cucumber/formatter/ansicolor.rb +143 -0
- data/lib/cucumber/formatter/color_io.rb +23 -0
- data/lib/cucumber/formatter/console.rb +185 -0
- data/lib/cucumber/formatter/cucumber.css +132 -0
- data/lib/cucumber/formatter/cucumber.sass +139 -0
- data/lib/cucumber/formatter/duration.rb +13 -0
- data/lib/cucumber/formatter/html.rb +261 -0
- data/lib/cucumber/formatter/junit.rb +121 -0
- data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
- data/lib/cucumber/formatter/pdf.rb +217 -0
- data/lib/cucumber/formatter/pretty.rb +222 -0
- data/lib/cucumber/formatter/profile.rb +78 -0
- data/lib/cucumber/formatter/progress.rb +67 -0
- data/lib/cucumber/formatter/rerun.rb +46 -0
- data/lib/cucumber/formatter/steps.rb +50 -0
- data/lib/cucumber/formatter/tag_cloud.rb +29 -0
- data/lib/cucumber/formatter/unicode.rb +35 -0
- data/lib/cucumber/formatter/usage.rb +86 -0
- data/lib/cucumber/formatters/unicode.rb +7 -0
- data/lib/cucumber/language_support.rb +30 -0
- data/lib/cucumber/language_support/language_methods.rb +75 -0
- data/lib/cucumber/language_support/step_definition_methods.rb +46 -0
- data/lib/cucumber/languages.yml +561 -0
- data/lib/cucumber/parser.rb +6 -0
- data/lib/cucumber/parser/feature.rb +1838 -0
- data/lib/cucumber/parser/feature.tt +351 -0
- data/lib/cucumber/parser/i18n.tt +42 -0
- data/lib/cucumber/parser/natural_language.rb +72 -0
- data/lib/cucumber/parser/table.rb +417 -0
- data/lib/cucumber/parser/table.tt +71 -0
- data/lib/cucumber/parser/treetop_ext.rb +53 -0
- data/lib/cucumber/platform.rb +27 -0
- data/lib/cucumber/py_support/py_dsl.py +8 -0
- data/lib/cucumber/py_support/py_language.py +2 -0
- data/lib/cucumber/py_support/py_language.rb +68 -0
- data/lib/cucumber/rails/rspec.rb +10 -0
- data/lib/cucumber/rails/world.rb +100 -0
- data/lib/cucumber/rake/task.rb +241 -0
- data/lib/cucumber/rb_support/rb_dsl.rb +100 -0
- data/lib/cucumber/rb_support/rb_hook.rb +18 -0
- data/lib/cucumber/rb_support/rb_language.rb +153 -0
- data/lib/cucumber/rb_support/rb_step_definition.rb +60 -0
- data/lib/cucumber/rb_support/rb_world.rb +93 -0
- data/lib/cucumber/rspec_neuter.rb +23 -0
- data/lib/cucumber/step_match.rb +61 -0
- data/lib/cucumber/step_mother.rb +307 -0
- data/lib/cucumber/version.rb +10 -0
- data/lib/cucumber/webrat/element_locator.rb +87 -0
- data/lib/cucumber/webrat/table_locator.rb +1 -0
- data/rails_generators/cucumber/USAGE +11 -0
- data/rails_generators/cucumber/cucumber_generator.rb +70 -0
- data/rails_generators/cucumber/templates/cucumber +9 -0
- data/rails_generators/cucumber/templates/cucumber.rake +36 -0
- data/rails_generators/cucumber/templates/cucumber_environment.rb +26 -0
- data/rails_generators/cucumber/templates/env.rb +27 -0
- data/rails_generators/cucumber/templates/paths.rb +27 -0
- data/rails_generators/cucumber/templates/spork_env.rb +35 -0
- data/rails_generators/cucumber/templates/webrat_steps.rb +236 -0
- data/rails_generators/feature/USAGE +12 -0
- data/rails_generators/feature/feature_generator.rb +40 -0
- data/rails_generators/feature/templates/feature.erb +31 -0
- data/rails_generators/feature/templates/steps.erb +14 -0
- data/spec/cucumber/ast/background_spec.rb +60 -0
- data/spec/cucumber/ast/feature_element_spec.rb +40 -0
- data/spec/cucumber/ast/feature_factory.rb +62 -0
- data/spec/cucumber/ast/feature_spec.rb +44 -0
- data/spec/cucumber/ast/py_string_spec.rb +51 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +72 -0
- data/spec/cucumber/ast/scenario_spec.rb +43 -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 +394 -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 +331 -0
- data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
- data/spec/cucumber/core_ext/proc_spec.rb +68 -0
- data/spec/cucumber/core_ext/string_spec.rb +43 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
- data/spec/cucumber/formatter/color_io_spec.rb +27 -0
- data/spec/cucumber/formatter/duration_spec.rb +22 -0
- data/spec/cucumber/formatter/html_spec.rb +18 -0
- data/spec/cucumber/formatter/progress_spec.rb +33 -0
- data/spec/cucumber/parser/feature_parser_spec.rb +396 -0
- data/spec/cucumber/parser/table_parser_spec.rb +52 -0
- data/spec/cucumber/rails/stubs/mini_rails.rb +18 -0
- data/spec/cucumber/rails/stubs/test_help.rb +1 -0
- data/spec/cucumber/rails/world_spec.rb +16 -0
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +123 -0
- data/spec/cucumber/sell_cucumbers.feature +19 -0
- data/spec/cucumber/step_mother_spec.rb +282 -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/world/pending_spec.rb +46 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +18 -0
- metadata +561 -0
|
@@ -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,27 @@
|
|
|
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
|
+
LANGUAGE_FILE = File.expand_path(File.dirname(__FILE__) + '/languages.yml')
|
|
8
|
+
LANGUAGES = YAML.load_file(LANGUAGE_FILE)
|
|
9
|
+
BINARY = File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
|
|
10
|
+
LIBDIR = File.expand_path(File.dirname(__FILE__) + '/../../lib')
|
|
11
|
+
JRUBY = defined?(JRUBY_VERSION)
|
|
12
|
+
IRONRUBY = Config::CONFIG['sitedir'] =~ /IronRuby/
|
|
13
|
+
WINDOWS = Config::CONFIG['host_os'] =~ /mswin|mingw/
|
|
14
|
+
WINDOWS_MRI = WINDOWS && !JRUBY && !IRONRUBY
|
|
15
|
+
RAILS = defined?(Rails)
|
|
16
|
+
RUBY_BINARY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
|
|
17
|
+
RUBY_1_9 = RUBY_VERSION =~ /^1\.9/
|
|
18
|
+
|
|
19
|
+
class << self
|
|
20
|
+
attr_accessor :use_full_backtrace
|
|
21
|
+
|
|
22
|
+
def file_mode(m) #:nodoc:
|
|
23
|
+
RUBY_1_9 ? "#{m}:UTF-8" : m
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
self.use_full_backtrace = false
|
|
27
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'rubypython'
|
|
2
|
+
|
|
3
|
+
module Cucumber
|
|
4
|
+
module PySupport
|
|
5
|
+
class PyLanguage
|
|
6
|
+
# include LanguageSupport::LanguageMethods
|
|
7
|
+
|
|
8
|
+
def initialize(step_mother)
|
|
9
|
+
@python_path = ENV['PYTHONPATH'] ? ENV['PYTHONPATH'].split(':') : []
|
|
10
|
+
add_to_python_path(File.dirname(__FILE__))
|
|
11
|
+
|
|
12
|
+
RubyPython.start
|
|
13
|
+
at_exit{RubyPython.stop}
|
|
14
|
+
|
|
15
|
+
import(File.dirname(__FILE__) + '/py_language.py')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def alias_adverbs(adverbs)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def step_definitions_for(py_file)
|
|
22
|
+
mod = import(py_file)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def snippet_text(step_keyword, step_name, multiline_arg_class = nil)
|
|
26
|
+
"python snippet: #{step_keyword}, #{step_name}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
protected
|
|
30
|
+
|
|
31
|
+
def begin_scenario
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def end_scenario
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def import(path)
|
|
40
|
+
modname = File.basename(path)[0...-File.extname(path).length]
|
|
41
|
+
begin
|
|
42
|
+
mod = RubyPython.import(modname)
|
|
43
|
+
rescue PythonError => e
|
|
44
|
+
e.message << "Couldn't load #{path}\nConsider adding #{File.expand_path(File.dirname(path))} to your PYTHONPATH"
|
|
45
|
+
raise e
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def add_to_python_path(dir)
|
|
50
|
+
dir = File.expand_path(dir)
|
|
51
|
+
@python_path.unshift(dir)
|
|
52
|
+
@python_path.uniq!
|
|
53
|
+
ENV['PYTHONPATH'] = @python_path.join(':')
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class String #:nodoc:
|
|
60
|
+
# RubyPython incorrectly to expects String#end_with? to exist.
|
|
61
|
+
unless defined? end_with? # 1.9
|
|
62
|
+
def end_with?(str) #:nodoc:
|
|
63
|
+
str = str.to_str
|
|
64
|
+
tail = self[-str.length, str.length]
|
|
65
|
+
tail == str
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require 'cucumber/rails/world'
|
|
2
|
+
require 'spec/expectations'
|
|
3
|
+
require 'spec/rails/matchers'
|
|
4
|
+
|
|
5
|
+
[Cucumber::Rails::World, ActionController::Integration::Session].each do |klass|
|
|
6
|
+
klass.class_eval do
|
|
7
|
+
include Spec::Matchers
|
|
8
|
+
include Spec::Rails::Matchers
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Based on code from Brian Takita, Yurii Rashkovskii and Ben Mabey
|
|
2
|
+
# Adapted by Aslak Hellesøy
|
|
3
|
+
|
|
4
|
+
if defined?(ActiveRecord::Base)
|
|
5
|
+
require 'test_help'
|
|
6
|
+
else
|
|
7
|
+
require 'action_controller/test_process'
|
|
8
|
+
require 'action_controller/integration'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
begin
|
|
12
|
+
require 'test/unit/testresult'
|
|
13
|
+
rescue LoadError => e
|
|
14
|
+
e.message << "\nYou must gem install test-unit. For more info see https://rspec.lighthouseapp.com/projects/16211/tickets/292"
|
|
15
|
+
e.message << "\nAlso make sure you have rack 1.0.0 or higher."
|
|
16
|
+
raise e
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# So that Test::Unit doesn't launch at the end - makes it think it has already been run.
|
|
20
|
+
Test::Unit.run = true if Test::Unit.respond_to?(:run=)
|
|
21
|
+
|
|
22
|
+
$__cucumber_toplevel = self
|
|
23
|
+
|
|
24
|
+
module Cucumber #:nodoc:
|
|
25
|
+
module Rails
|
|
26
|
+
# All scenarios will execute in the context of a new instance of Cucumber::Rails:World if this file
|
|
27
|
+
# is loaded. This gives Step Definitions access to all the methods from Rails' ActionController::IntegrationTest
|
|
28
|
+
class World < ActionController::IntegrationTest
|
|
29
|
+
if defined?(ActiveRecord::Base)
|
|
30
|
+
self.use_transactional_fixtures = false
|
|
31
|
+
else
|
|
32
|
+
def self.fixture_table_names; []; end # Workaround for projects that don't use ActiveRecord
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def initialize #:nodoc:
|
|
36
|
+
@_result = Test::Unit::TestResult.new
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.use_transactional_fixtures
|
|
41
|
+
|
|
42
|
+
unless ::Rails.configuration.cache_classes
|
|
43
|
+
warn "WARNING: You have set Rails' config.cache_classes to false (most likely in config/environments/test.rb). This setting is known to break Cucumber's use_transactional_fixtures method. Set config.cache_classes to true if you want to use transactional fixtures. For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165."
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
World.use_transactional_fixtures = true
|
|
47
|
+
if defined?(ActiveRecord::Base)
|
|
48
|
+
$__cucumber_toplevel.Before do
|
|
49
|
+
@__cucumber_ar_connection = ActiveRecord::Base.connection
|
|
50
|
+
if @__cucumber_ar_connection.respond_to?(:increment_open_transactions)
|
|
51
|
+
@__cucumber_ar_connection.increment_open_transactions
|
|
52
|
+
else
|
|
53
|
+
ActiveRecord::Base.__send__(:increment_open_transactions)
|
|
54
|
+
end
|
|
55
|
+
@__cucumber_ar_connection.begin_db_transaction
|
|
56
|
+
ActionMailer::Base.deliveries = [] if defined?(ActionMailer::Base)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
$__cucumber_toplevel.After do
|
|
60
|
+
@__cucumber_ar_connection.rollback_db_transaction
|
|
61
|
+
if @__cucumber_ar_connection.respond_to?(:decrement_open_transactions)
|
|
62
|
+
@__cucumber_ar_connection.decrement_open_transactions
|
|
63
|
+
else
|
|
64
|
+
ActiveRecord::Base.__send__(:decrement_open_transactions)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def self.bypass_rescue
|
|
71
|
+
ActionController::Base.class_eval do
|
|
72
|
+
alias_method :rescue_action_without_bypass, :rescue_action
|
|
73
|
+
|
|
74
|
+
def rescue_action(exception)
|
|
75
|
+
raise exception
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
begin
|
|
80
|
+
ActionController::Failsafe.class_eval do
|
|
81
|
+
alias_method :failsafe_response_without_bypass, :failsafe_response
|
|
82
|
+
|
|
83
|
+
def failsafe_response(exception)
|
|
84
|
+
raise exception
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
rescue NameError # Failsafe was introduced in Rails 2.3.2
|
|
88
|
+
ActionController::Dispatcher.class_eval do
|
|
89
|
+
def self.failsafe_response(output, status, exception = nil)
|
|
90
|
+
raise exception
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
World do
|
|
99
|
+
Cucumber::Rails::World.new
|
|
100
|
+
end
|
|
@@ -0,0 +1,241 @@
|
|
|
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
|
+
# TODO: remove depreated accessors for 0.4.0
|
|
88
|
+
def self.deprecate_accessor(attribute) #:nodoc:
|
|
89
|
+
attr_reader attribute
|
|
90
|
+
class_eval <<-EOF, __FILE__, __LINE__ + 1
|
|
91
|
+
def #{attribute}=(value)
|
|
92
|
+
@#{attribute} = value
|
|
93
|
+
warn("\nWARNING: Cucumber::Rake::Task##{attribute} is deprecated and will be removed in 0.4.0. Please use profiles for complex settings: http://wiki.github.com/aslakhellesoy/cucumber/using-rake#profiles\n")
|
|
94
|
+
end
|
|
95
|
+
EOF
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Directories to add to the Ruby $LOAD_PATH
|
|
99
|
+
attr_accessor :libs
|
|
100
|
+
|
|
101
|
+
# Name of the cucumber binary to use for running features. Defaults to Cucumber::BINARY
|
|
102
|
+
attr_accessor :binary
|
|
103
|
+
|
|
104
|
+
# Array of paths to specific step definition files to use
|
|
105
|
+
deprecate_accessor :step_list
|
|
106
|
+
|
|
107
|
+
# File pattern for finding step definitions. Defaults to
|
|
108
|
+
# 'features/**/*.rb'.
|
|
109
|
+
deprecate_accessor :step_pattern
|
|
110
|
+
|
|
111
|
+
# Array of paths to specific features to run.
|
|
112
|
+
deprecate_accessor :feature_list
|
|
113
|
+
|
|
114
|
+
# File pattern for finding features to run. Defaults to
|
|
115
|
+
# 'features/**/*.feature'. Can be overridden by the FEATURE environment variable.
|
|
116
|
+
deprecate_accessor :feature_pattern
|
|
117
|
+
|
|
118
|
+
# Extra options to pass to the cucumber binary. Can be overridden by the CUCUMBER_OPTS environment variable.
|
|
119
|
+
# It's recommended to pass an Array, but if it's a String it will be #split by ' '.
|
|
120
|
+
attr_accessor :cucumber_opts
|
|
121
|
+
def cucumber_opts=(opts) #:nodoc:
|
|
122
|
+
@cucumber_opts = String === opts ? opts.split(' ') : opts
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Run cucumber with RCov? Defaults to false. If you set this to
|
|
126
|
+
# true, +fork+ is implicit.
|
|
127
|
+
attr_accessor :rcov
|
|
128
|
+
|
|
129
|
+
# Extra options to pass to rcov.
|
|
130
|
+
# It's recommended to pass an Array, but if it's a String it will be #split by ' '.
|
|
131
|
+
attr_accessor :rcov_opts
|
|
132
|
+
def rcov_opts=(opts) #:nodoc:
|
|
133
|
+
@rcov_opts = String === opts ? opts.split(' ') : opts
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Whether or not to fork a new ruby interpreter. Defaults to true. You may gain
|
|
137
|
+
# some startup speed if you set it to false, but this may also cause issues with
|
|
138
|
+
# your load path and gems.
|
|
139
|
+
attr_accessor :fork
|
|
140
|
+
|
|
141
|
+
# Define what profile to be used. When used with cucumber_opts it is simply appended to it. Will be ignored when CUCUMBER_OPTS is used.
|
|
142
|
+
attr_accessor :profile
|
|
143
|
+
def profile=(profile) #:nodoc:
|
|
144
|
+
@profile = profile
|
|
145
|
+
unless feature_list
|
|
146
|
+
# TODO: remove once we completely remove these from the rake task.
|
|
147
|
+
@step_list = []
|
|
148
|
+
@feature_list = [] # Don't use accessor to avoid deprecation warning.
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Define Cucumber Rake task
|
|
153
|
+
def initialize(task_name = "cucumber", desc = "Run Cucumber features")
|
|
154
|
+
@task_name, @desc = task_name, desc
|
|
155
|
+
@fork = true
|
|
156
|
+
@libs = ['lib']
|
|
157
|
+
@rcov_opts = %w{--rails --exclude osx\/objc,gems\/}
|
|
158
|
+
|
|
159
|
+
yield self if block_given?
|
|
160
|
+
|
|
161
|
+
@feature_pattern = "features/**/*.feature" if feature_pattern.nil? && feature_list.nil?
|
|
162
|
+
@step_pattern = "features/**/*.rb" if step_pattern.nil? && step_list.nil?
|
|
163
|
+
|
|
164
|
+
@binary = binary.nil? ? Cucumber::BINARY : File.expand_path(binary)
|
|
165
|
+
@libs.insert(0, LIB) if binary == Cucumber::BINARY
|
|
166
|
+
|
|
167
|
+
define_task
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def define_task #:nodoc:
|
|
171
|
+
desc @desc
|
|
172
|
+
task @task_name do
|
|
173
|
+
runner.run
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def runner(task_args = nil) #:nodoc:
|
|
178
|
+
cucumber_opts = [(ENV['CUCUMBER_OPTS'] ? ENV['CUCUMBER_OPTS'].split(/\s+/) : nil) || cucumber_opts_with_profile]
|
|
179
|
+
if(@rcov)
|
|
180
|
+
RCovCucumberRunner.new(libs, binary, cucumber_opts, feature_files(task_args), rcov_opts)
|
|
181
|
+
elsif(@fork)
|
|
182
|
+
ForkedCucumberRunner.new(libs, binary, cucumber_opts, feature_files(task_args))
|
|
183
|
+
else
|
|
184
|
+
InProcessCucumberRunner.new(libs, cucumber_opts, feature_files(task_args))
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def cucumber_opts_with_profile #:nodoc:
|
|
189
|
+
@profile ? [cucumber_opts, '--profile', @profile] : cucumber_opts
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def feature_files(task_args = nil) #:nodoc:
|
|
193
|
+
if ENV['FEATURE']
|
|
194
|
+
FileList[ ENV['FEATURE'] ]
|
|
195
|
+
else
|
|
196
|
+
result = []
|
|
197
|
+
result += feature_list.to_a if feature_list
|
|
198
|
+
result += FileList[feature_pattern].to_a if feature_pattern
|
|
199
|
+
result = make_command_line_safe(result)
|
|
200
|
+
FileList[result]
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def step_files(task_args = nil) #:nodoc:
|
|
205
|
+
if ENV['STEPS']
|
|
206
|
+
FileList[ ENV['STEPS'] ]
|
|
207
|
+
else
|
|
208
|
+
result = []
|
|
209
|
+
result += Array(step_list) if step_list
|
|
210
|
+
result += Array(FileList[step_pattern]) if step_pattern
|
|
211
|
+
FileList[result]
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
private
|
|
216
|
+
def make_command_line_safe(list)
|
|
217
|
+
list.map{|string| string.gsub(' ', '\ ')}
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
class FeatureTask < Task
|
|
222
|
+
|
|
223
|
+
def initialize(task_name = "feature", desc = "Run a specified feature with Cucumber. #{task_name}[feature_name]")
|
|
224
|
+
super(task_name, desc)
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def define_task #:nodoc:
|
|
228
|
+
desc @desc
|
|
229
|
+
task @task_name, :feature_name do |t, args|
|
|
230
|
+
runner(args).run
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def feature_files(task_arguments) #:nodoc:
|
|
235
|
+
FileList[File.join("features", "**", "#{task_arguments[:feature_name]}.feature")]
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
end
|
|
241
|
+
end
|