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,100 @@
|
|
|
1
|
+
require 'cucumber/rb_support/rb_hook'
|
|
2
|
+
|
|
3
|
+
module Cucumber
|
|
4
|
+
module RbSupport
|
|
5
|
+
# This module defines the methods you can use to define pure Ruby
|
|
6
|
+
# Step Definitions and Hooks. This module is mixed into the toplevel
|
|
7
|
+
# object.
|
|
8
|
+
module RbDsl
|
|
9
|
+
class << self
|
|
10
|
+
attr_writer :rb_language
|
|
11
|
+
|
|
12
|
+
def alias_adverb(adverb)
|
|
13
|
+
alias_method adverb, :register_rb_step_definition
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def build_rb_world_factory(world_modules, proc)
|
|
17
|
+
@rb_language.build_rb_world_factory(world_modules, proc)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def register_rb_hook(phase, tag_names, proc)
|
|
21
|
+
@rb_language.register_rb_hook(phase, tag_names, proc)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def register_rb_step_definition(regexp, proc)
|
|
25
|
+
@rb_language.register_rb_step_definition(regexp, proc)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Registers any number of +world_modules+ (Ruby Modules) and/or a Proc.
|
|
30
|
+
# The +proc+ will be executed once before each scenario to create an
|
|
31
|
+
# Object that the scenario's steps will run within. Any +world_modules+
|
|
32
|
+
# will be mixed into this Object (via Object#extend).
|
|
33
|
+
#
|
|
34
|
+
# This method is typically called from one or more Ruby scripts under
|
|
35
|
+
# <tt>features/support</tt>. You can call this method as many times as you
|
|
36
|
+
# like (to register more modules), but if you try to register more than
|
|
37
|
+
# one Proc you will get an error.
|
|
38
|
+
#
|
|
39
|
+
# Cucumber will not yield anything to the +proc+. Examples:
|
|
40
|
+
#
|
|
41
|
+
# World do
|
|
42
|
+
# MyClass.new
|
|
43
|
+
# end
|
|
44
|
+
#
|
|
45
|
+
# World(MyModule)
|
|
46
|
+
#
|
|
47
|
+
def World(*world_modules, &proc)
|
|
48
|
+
RbDsl.build_rb_world_factory(world_modules, proc)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Registers a proc that will run before each Scenario. You can register as
|
|
52
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
53
|
+
def Before(*tag_names, &proc)
|
|
54
|
+
RbDsl.register_rb_hook('before', tag_names, proc)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Registers a proc that will run after each Scenario. You can register as
|
|
58
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
59
|
+
def After(*tag_names, &proc)
|
|
60
|
+
RbDsl.register_rb_hook('after', tag_names, proc)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Registers a proc that will run after each Step. You can register as
|
|
64
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
65
|
+
def AfterStep(*tag_names, &proc)
|
|
66
|
+
RbDsl.register_rb_hook('after_step', tag_names, proc)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Registers a proc that will be called with a step definition argument if it
|
|
70
|
+
# matches the pattern passed as the first argument to Transform. Alternatively, if
|
|
71
|
+
# the pattern contains captures then they will be yielded as arguments to the
|
|
72
|
+
# provided proc. The return value of the proc is consequently yielded to the
|
|
73
|
+
# step definition.
|
|
74
|
+
def Transform(*args, &proc)
|
|
75
|
+
StepMother.register_transform(*args, &proc)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Registers a proc that will run after Cucumber is configured. You can register as
|
|
79
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
80
|
+
def AfterConfiguration(&proc)
|
|
81
|
+
RbDsl.register_rb_hook('after_configuration', [], proc)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Registers a new Ruby StepDefinition. This method is aliased
|
|
85
|
+
# to <tt>Given</tt>, <tt>When</tt> and <tt>Then</tt>, and
|
|
86
|
+
# also to the i18n translations whenever a feature of a
|
|
87
|
+
# new language is loaded.
|
|
88
|
+
#
|
|
89
|
+
# The +&proc+ gets executed in the context of a <tt>World</tt>
|
|
90
|
+
# object, which is defined by #World. A new <tt>World</tt>
|
|
91
|
+
# object is created for each scenario and is shared across
|
|
92
|
+
# step definitions within that scenario.
|
|
93
|
+
def register_rb_step_definition(regexp, &proc)
|
|
94
|
+
RbDsl.register_rb_step_definition(regexp, proc)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
extend(Cucumber::RbSupport::RbDsl)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Cucumber
|
|
2
|
+
module RbSupport
|
|
3
|
+
# Wrapper for Before, After and AfterStep hooks
|
|
4
|
+
class RbHook
|
|
5
|
+
attr_reader :tag_names
|
|
6
|
+
|
|
7
|
+
def initialize(rb_language, tag_names, proc)
|
|
8
|
+
@rb_language = rb_language
|
|
9
|
+
@tag_names = tag_names
|
|
10
|
+
@proc = proc
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def invoke(location, argument)
|
|
14
|
+
@rb_language.current_world.cucumber_instance_exec(false, location, argument, &@proc)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
require 'cucumber/rb_support/rb_dsl'
|
|
2
|
+
require 'cucumber/rb_support/rb_world'
|
|
3
|
+
require 'cucumber/rb_support/rb_step_definition'
|
|
4
|
+
|
|
5
|
+
module Cucumber
|
|
6
|
+
module RbSupport
|
|
7
|
+
# Raised if a World block returns Nil.
|
|
8
|
+
class NilWorld < StandardError
|
|
9
|
+
def initialize
|
|
10
|
+
super("World procs should never return nil")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Raised if there are 2 or more World blocks.
|
|
15
|
+
class MultipleWorld < StandardError
|
|
16
|
+
def initialize(first_proc, second_proc)
|
|
17
|
+
message = "You can only pass a proc to #World once, but it's happening\n"
|
|
18
|
+
message << "in 2 places:\n\n"
|
|
19
|
+
message << first_proc.backtrace_line('World') << "\n"
|
|
20
|
+
message << second_proc.backtrace_line('World') << "\n\n"
|
|
21
|
+
message << "Use Ruby modules instead to extend your worlds. See the Cucumber::RbSupport::RbDsl#World RDoc\n"
|
|
22
|
+
message << "or http://wiki.github.com/aslakhellesoy/cucumber/a-whole-new-world.\n\n"
|
|
23
|
+
super(message)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# The Ruby implementation of the programming language API.
|
|
28
|
+
class RbLanguage
|
|
29
|
+
include LanguageSupport::LanguageMethods
|
|
30
|
+
attr_reader :current_world
|
|
31
|
+
|
|
32
|
+
def initialize(step_mother)
|
|
33
|
+
@step_mother = step_mother
|
|
34
|
+
RbDsl.rb_language = self
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def alias_adverbs(adverbs)
|
|
38
|
+
adverbs.each do |adverb|
|
|
39
|
+
RbDsl.alias_adverb(adverb)
|
|
40
|
+
RbWorld.alias_adverb(adverb)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def step_definitions_for(code_file)
|
|
45
|
+
begin
|
|
46
|
+
load_code_file(code_file)
|
|
47
|
+
step_definitions
|
|
48
|
+
rescue LoadError => e
|
|
49
|
+
e.message << "\nFailed to load #{code_file}"
|
|
50
|
+
raise e
|
|
51
|
+
ensure
|
|
52
|
+
@step_definitions = nil
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def snippet_text(step_keyword, step_name, multiline_arg_class = nil)
|
|
57
|
+
escaped = Regexp.escape(step_name).gsub('\ ', ' ').gsub('/', '\/')
|
|
58
|
+
escaped = escaped.gsub(PARAM_PATTERN, ESCAPED_PARAM_PATTERN)
|
|
59
|
+
|
|
60
|
+
n = 0
|
|
61
|
+
block_args = escaped.scan(ESCAPED_PARAM_PATTERN).map do |a|
|
|
62
|
+
n += 1
|
|
63
|
+
"arg#{n}"
|
|
64
|
+
end
|
|
65
|
+
block_args << multiline_arg_class.default_arg_name unless multiline_arg_class.nil?
|
|
66
|
+
block_arg_string = block_args.empty? ? "" : " |#{block_args.join(", ")}|"
|
|
67
|
+
multiline_class_comment = ""
|
|
68
|
+
if(multiline_arg_class == Ast::Table)
|
|
69
|
+
multiline_class_comment = "# #{multiline_arg_class.default_arg_name} is a #{multiline_arg_class.to_s}\n "
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
"#{step_keyword} /^#{escaped}$/ do#{block_arg_string}\n #{multiline_class_comment}pending\nend"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def begin_rb_scenario
|
|
76
|
+
create_world
|
|
77
|
+
extend_world
|
|
78
|
+
connect_world
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def register_rb_hook(phase, tag_names, proc)
|
|
82
|
+
add_hook(phase, RbHook.new(self, tag_names, proc))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def register_rb_step_definition(regexp, proc)
|
|
86
|
+
add_step_definition(RbStepDefinition.new(self, regexp, proc))
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def build_rb_world_factory(world_modules, proc)
|
|
90
|
+
if(proc)
|
|
91
|
+
raise MultipleWorld.new(@world_proc, proc) if @world_proc
|
|
92
|
+
@world_proc = proc
|
|
93
|
+
end
|
|
94
|
+
@world_modules ||= []
|
|
95
|
+
@world_modules += world_modules
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
protected
|
|
99
|
+
|
|
100
|
+
def load_code_file(code_file)
|
|
101
|
+
require code_file # This will cause self.add_step_definition and self.add_hook to be called from RbDsl
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def begin_scenario
|
|
105
|
+
begin_rb_scenario
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def end_scenario
|
|
109
|
+
@current_world = nil
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
private
|
|
113
|
+
|
|
114
|
+
PARAM_PATTERN = /"([^\"]*)"/
|
|
115
|
+
ESCAPED_PARAM_PATTERN = '"([^\\"]*)"'
|
|
116
|
+
|
|
117
|
+
def create_world
|
|
118
|
+
if(@world_proc)
|
|
119
|
+
@current_world = @world_proc.call
|
|
120
|
+
check_nil(@current_world, @world_proc)
|
|
121
|
+
else
|
|
122
|
+
@current_world = Object.new
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def extend_world
|
|
127
|
+
@current_world.extend(RbWorld)
|
|
128
|
+
@current_world.extend(::Spec::Matchers) if defined?(::Spec::Matchers)
|
|
129
|
+
(@world_modules || []).each do |mod|
|
|
130
|
+
@current_world.extend(mod)
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def connect_world
|
|
135
|
+
@current_world.__cucumber_step_mother = @step_mother
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def check_nil(o, proc)
|
|
139
|
+
if o.nil?
|
|
140
|
+
begin
|
|
141
|
+
raise NilWorld.new
|
|
142
|
+
rescue NilWorld => e
|
|
143
|
+
e.backtrace.clear
|
|
144
|
+
e.backtrace.push(proc.backtrace_line("World"))
|
|
145
|
+
raise e
|
|
146
|
+
end
|
|
147
|
+
else
|
|
148
|
+
o
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'cucumber/step_match'
|
|
2
|
+
require 'cucumber/core_ext/string'
|
|
3
|
+
require 'cucumber/core_ext/proc'
|
|
4
|
+
|
|
5
|
+
module Cucumber
|
|
6
|
+
module RbSupport
|
|
7
|
+
# A Ruby Step Definition holds a Regexp and a Proc, and is created
|
|
8
|
+
# by calling <tt>Given</tt>, <tt>When</tt> or <tt>Then</tt>
|
|
9
|
+
# in the <tt>step_definitions</tt> ruby files. See also RbDsl.
|
|
10
|
+
#
|
|
11
|
+
# Example:
|
|
12
|
+
#
|
|
13
|
+
# Given /I have (\d+) cucumbers in my belly/ do
|
|
14
|
+
# # some code here
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
class RbStepDefinition
|
|
18
|
+
include LanguageSupport::StepDefinitionMethods
|
|
19
|
+
|
|
20
|
+
class MissingProc < StandardError
|
|
21
|
+
def message
|
|
22
|
+
"Step definitions must always have a proc"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
attr_reader :proc
|
|
27
|
+
|
|
28
|
+
def initialize(rb_language, pattern, proc)
|
|
29
|
+
raise MissingProc if proc.nil?
|
|
30
|
+
if String === pattern
|
|
31
|
+
p = pattern.gsub(/\$\w+/, '(.*)') # Replace $var with (.*)
|
|
32
|
+
pattern = Regexp.new("^#{p}$")
|
|
33
|
+
end
|
|
34
|
+
@rb_language, @regexp, @proc = rb_language, pattern, proc
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def regexp
|
|
38
|
+
@regexp
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def invoke(args)
|
|
42
|
+
args = args.map{|arg| Ast::PyString === arg ? arg.to_s : arg}
|
|
43
|
+
begin
|
|
44
|
+
@rb_language.current_world.cucumber_instance_exec(true, regexp.inspect, *args, &@proc)
|
|
45
|
+
rescue Cucumber::ArityMismatchError => e
|
|
46
|
+
e.backtrace.unshift(self.backtrace_line)
|
|
47
|
+
raise e
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def file_colon_line
|
|
52
|
+
@proc.file_colon_line
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def file
|
|
56
|
+
@file ||= file_colon_line.split(':')[0]
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module Cucumber
|
|
2
|
+
module RbSupport
|
|
3
|
+
# All steps are run in the context of an object that extends this module.
|
|
4
|
+
module RbWorld
|
|
5
|
+
class << self
|
|
6
|
+
def alias_adverb(adverb)
|
|
7
|
+
alias_method adverb, :__cucumber_invoke
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
attr_writer :__cucumber_step_mother
|
|
12
|
+
|
|
13
|
+
# Call a step from within a step definition. This method is aliased to
|
|
14
|
+
# the same i18n as RbDsl.
|
|
15
|
+
def __cucumber_invoke(name, multiline_argument=nil) #:nodoc:
|
|
16
|
+
begin
|
|
17
|
+
step_match = @__cucumber_step_mother.step_match(name)
|
|
18
|
+
step_match.invoke(multiline_argument)
|
|
19
|
+
rescue Exception => e
|
|
20
|
+
e.nested! if Undefined === e
|
|
21
|
+
raise e
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Returns a Cucumber::Ast::Table for +text_or_table+, which can either
|
|
26
|
+
# be a String:
|
|
27
|
+
#
|
|
28
|
+
# table(%{
|
|
29
|
+
# | account | description | amount |
|
|
30
|
+
# | INT-100 | Taxi | 114 |
|
|
31
|
+
# | CUC-101 | Peeler | 22 |
|
|
32
|
+
# })
|
|
33
|
+
#
|
|
34
|
+
# or a 2D Array:
|
|
35
|
+
#
|
|
36
|
+
# table([
|
|
37
|
+
# %w{ account description amount },
|
|
38
|
+
# %w{ INT-100 Taxi 114 },
|
|
39
|
+
# %w{ CUC-101 Peeler 22 }
|
|
40
|
+
# ])
|
|
41
|
+
#
|
|
42
|
+
def table(text_or_table, file=nil, line_offset=0)
|
|
43
|
+
if Array === text_or_table
|
|
44
|
+
Ast::Table.new(text_or_table)
|
|
45
|
+
else
|
|
46
|
+
@table_parser ||= Parser::TableParser.new
|
|
47
|
+
@table_parser.parse_or_fail(text_or_table.strip, file, line_offset)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Output +announcement+ alongside the formatted output.
|
|
52
|
+
# This is an alternative to using Kernel#puts - it will display
|
|
53
|
+
# nicer, and in all outputs (in case you use several formatters)
|
|
54
|
+
#
|
|
55
|
+
# Beware that the output will be printed *before* the corresponding
|
|
56
|
+
# step. This is because the step itself will not be printed until
|
|
57
|
+
# after it has run, so it can be coloured according to its status.
|
|
58
|
+
def announce(announcement)
|
|
59
|
+
@__cucumber_step_mother.announce(announcement)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Mark the matched step as pending.
|
|
63
|
+
def pending(message = "TODO")
|
|
64
|
+
if block_given?
|
|
65
|
+
begin
|
|
66
|
+
yield
|
|
67
|
+
rescue Exception => e
|
|
68
|
+
raise Pending.new(message)
|
|
69
|
+
end
|
|
70
|
+
raise Pending.new("Expected pending '#{message}' to fail. No Error was raised. No longer pending?")
|
|
71
|
+
else
|
|
72
|
+
raise Pending.new(message)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# The default implementation of Object#inspect recursively
|
|
77
|
+
# traverses all instance variables and invokes inspect.
|
|
78
|
+
# This can be time consuming if the object graph is large.
|
|
79
|
+
#
|
|
80
|
+
# This can cause unnecessary delays when certain exceptions
|
|
81
|
+
# occur. For example, MRI internally invokes #inspect on an
|
|
82
|
+
# object that raises a NoMethodError. (JRuby does not do this).
|
|
83
|
+
#
|
|
84
|
+
# A World object can have many references created by the user
|
|
85
|
+
# or frameworks (Rails), so to avoid long waiting times on
|
|
86
|
+
# such errors in World we define it to just return a simple String.
|
|
87
|
+
#
|
|
88
|
+
def inspect #:nodoc:
|
|
89
|
+
sprintf("#<%s:0x%x>", self.class, self.object_id)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module Spec #:nodoc:
|
|
4
|
+
module Runner #:nodoc:
|
|
5
|
+
# Neuters RSpec's option parser.
|
|
6
|
+
# (RSpec's option parser tries to parse ARGV, which
|
|
7
|
+
# will fail when running cucumber)
|
|
8
|
+
class OptionParser < ::OptionParser #:nodoc:
|
|
9
|
+
NEUTERED_RSPEC = Object.new
|
|
10
|
+
def NEUTERED_RSPEC.method_missing(m, *args); self; end
|
|
11
|
+
|
|
12
|
+
def self.method_added(m)
|
|
13
|
+
unless @__neutering_rspec
|
|
14
|
+
@__neutering_rspec = true
|
|
15
|
+
define_method(m) do |*a|
|
|
16
|
+
NEUTERED_RSPEC
|
|
17
|
+
end
|
|
18
|
+
@__neutering_rspec = false
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|