jwilger-cucumber 0.3.11.200906161550
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 +830 -0
- data/License.txt +20 -0
- data/Manifest.txt +410 -0
- data/README.txt +4 -0
- data/Rakefile +9 -0
- data/bin/cucumber +17 -0
- data/config/hoe.rb +76 -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 +30 -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/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/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/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 +16 -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/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/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 +81 -0
- data/examples/self_test/features/support/env.rb +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/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 +28 -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 +66 -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 +22 -0
- data/examples/watir/features/support/env.rb +32 -0
- data/features/after_block_exceptions.feature +102 -0
- data/features/after_step_block_exceptions.feature +104 -0
- data/features/background.feature +311 -0
- data/features/bug_371.feature +32 -0
- data/features/cucumber_cli.feature +549 -0
- data/features/cucumber_cli_diff_disabled.feature +53 -0
- data/features/cucumber_cli_outlines.feature +109 -0
- data/features/custom_formatter.feature +11 -0
- data/features/drb_server_integration.feature +115 -0
- data/features/exclude_files.feature +20 -0
- data/features/expand.feature +49 -0
- data/features/html_formatter/a.html +185 -0
- data/features/html_formatter.feature +7 -0
- data/features/junit_formatter.feature +71 -0
- data/features/language_from_header.feature +30 -0
- data/features/multiline_names.feature +43 -0
- data/features/rake_task.feature +150 -0
- data/features/report_called_undefined_steps.feature +35 -0
- data/features/snippet.feature +22 -0
- data/features/step_definitions/cucumber_steps.rb +130 -0
- data/features/step_definitions/extra_steps.rb +2 -0
- data/features/steps_formatter.feature +25 -0
- data/features/support/env.rb +120 -0
- data/features/usage.feature +126 -0
- data/features/work_in_progress.feature +151 -0
- data/gem_tasks/deployment.rake +11 -0
- data/gem_tasks/environment.rake +7 -0
- data/gem_tasks/features.rake +10 -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/yard.rake +8 -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/ast/background.rb +62 -0
- data/lib/cucumber/ast/comment.rb +30 -0
- data/lib/cucumber/ast/examples.rb +26 -0
- data/lib/cucumber/ast/feature.rb +58 -0
- data/lib/cucumber/ast/feature_element.rb +57 -0
- data/lib/cucumber/ast/features.rb +30 -0
- data/lib/cucumber/ast/outline_table.rb +143 -0
- data/lib/cucumber/ast/py_string.rb +57 -0
- data/lib/cucumber/ast/scenario.rb +83 -0
- data/lib/cucumber/ast/scenario_outline.rb +93 -0
- data/lib/cucumber/ast/step.rb +112 -0
- data/lib/cucumber/ast/step_collection.rb +75 -0
- data/lib/cucumber/ast/step_invocation.rb +136 -0
- data/lib/cucumber/ast/table.rb +334 -0
- data/lib/cucumber/ast/tags.rb +33 -0
- data/lib/cucumber/ast/visitor.rb +116 -0
- data/lib/cucumber/ast.rb +29 -0
- data/lib/cucumber/broadcaster.rb +13 -0
- data/lib/cucumber/cli/configuration.rb +427 -0
- data/lib/cucumber/cli/drb_client.rb +20 -0
- data/lib/cucumber/cli/language_help_formatter.rb +59 -0
- data/lib/cucumber/cli/main.rb +136 -0
- data/lib/cucumber/core_ext/exception.rb +53 -0
- data/lib/cucumber/core_ext/instance_exec.rb +67 -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 +47 -0
- data/lib/cucumber/filter.rb +50 -0
- data/lib/cucumber/formatter/ansicolor.rb +110 -0
- data/lib/cucumber/formatter/color_io.rb +23 -0
- data/lib/cucumber/formatter/console.rb +149 -0
- data/lib/cucumber/formatter/cucumber.css +132 -0
- data/lib/cucumber/formatter/cucumber.sass +139 -0
- data/lib/cucumber/formatter/duration.rb +10 -0
- data/lib/cucumber/formatter/html.rb +258 -0
- data/lib/cucumber/formatter/junit.rb +75 -0
- data/lib/cucumber/formatter/pretty.rb +188 -0
- data/lib/cucumber/formatter/profile.rb +77 -0
- data/lib/cucumber/formatter/progress.rb +60 -0
- data/lib/cucumber/formatter/rerun.rb +44 -0
- data/lib/cucumber/formatter/steps.rb +49 -0
- data/lib/cucumber/formatter/tag_cloud.rb +28 -0
- data/lib/cucumber/formatter/unicode.rb +35 -0
- data/lib/cucumber/formatter/usage.rb +85 -0
- data/lib/cucumber/formatters/unicode.rb +7 -0
- data/lib/cucumber/languages.yml +532 -0
- data/lib/cucumber/parser/feature.rb +1787 -0
- data/lib/cucumber/parser/feature.tt +324 -0
- data/lib/cucumber/parser/i18n/language.rb +80 -0
- data/lib/cucumber/parser/i18n.tt +42 -0
- data/lib/cucumber/parser/table.rb +414 -0
- data/lib/cucumber/parser/table.tt +71 -0
- data/lib/cucumber/parser/treetop_ext.rb +52 -0
- data/lib/cucumber/parser.rb +6 -0
- data/lib/cucumber/platform.rb +23 -0
- data/lib/cucumber/rails/rspec.rb +10 -0
- data/lib/cucumber/rails/world.rb +99 -0
- data/lib/cucumber/rake/task.rb +233 -0
- data/lib/cucumber/rspec_neuter.rb +23 -0
- data/lib/cucumber/step_definition.rb +122 -0
- data/lib/cucumber/step_match.rb +61 -0
- data/lib/cucumber/step_mother.rb +362 -0
- data/lib/cucumber/version.rb +10 -0
- data/lib/cucumber/world.rb +53 -0
- data/lib/cucumber.rb +11 -0
- data/rails_generators/cucumber/USAGE +11 -0
- data/rails_generators/cucumber/cucumber_generator.rb +66 -0
- data/rails_generators/cucumber/templates/cucumber +8 -0
- data/rails_generators/cucumber/templates/cucumber.rake +20 -0
- data/rails_generators/cucumber/templates/cucumber_environment.rb +23 -0
- data/rails_generators/cucumber/templates/env.rb +26 -0
- data/rails_generators/cucumber/templates/paths.rb +27 -0
- data/rails_generators/cucumber/templates/spork_env.rb +36 -0
- data/rails_generators/cucumber/templates/webrat_steps.rb +147 -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 +20 -0
- data/spec/cucumber/ast/background_spec.rb +50 -0
- data/spec/cucumber/ast/feature_element_spec.rb +40 -0
- data/spec/cucumber/ast/feature_factory.rb +63 -0
- data/spec/cucumber/ast/feature_spec.rb +38 -0
- data/spec/cucumber/ast/py_string_spec.rb +51 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +67 -0
- data/spec/cucumber/ast/scenario_spec.rb +38 -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 +186 -0
- data/spec/cucumber/ast/visitor_spec.rb +27 -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 +43 -0
- data/spec/cucumber/cli/main_spec.rb +140 -0
- data/spec/cucumber/core_ext/proc_spec.rb +54 -0
- data/spec/cucumber/core_ext/string_spec.rb +42 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +35 -0
- data/spec/cucumber/formatter/color_io_spec.rb +27 -0
- data/spec/cucumber/formatter/duration_spec.rb +22 -0
- data/spec/cucumber/formatter/progress_spec.rb +36 -0
- data/spec/cucumber/parser/feature_parser_spec.rb +387 -0
- data/spec/cucumber/parser/table_parser_spec.rb +48 -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 +11 -0
- data/spec/cucumber/sell_cucumbers.feature +19 -0
- data/spec/cucumber/step_definition_spec.rb +101 -0
- data/spec/cucumber/step_mother_spec.rb +155 -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 +10 -0
- data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
- data/spec/cucumber/world/pending_spec.rb +47 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +13 -0
- metadata +506 -0
@@ -0,0 +1,362 @@
|
|
1
|
+
require 'cucumber/step_definition'
|
2
|
+
require 'cucumber/world'
|
3
|
+
require 'cucumber/core_ext/instance_exec'
|
4
|
+
|
5
|
+
module Cucumber
|
6
|
+
class Undefined < StandardError
|
7
|
+
attr_reader :step_name
|
8
|
+
|
9
|
+
def initialize(step_name)
|
10
|
+
super %{Undefined step: "#{step_name}"}
|
11
|
+
@step_name = step_name
|
12
|
+
end
|
13
|
+
|
14
|
+
def nested!
|
15
|
+
@nested = true
|
16
|
+
end
|
17
|
+
|
18
|
+
def nested?
|
19
|
+
@nested
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Raised when a StepDefinition's block invokes World#pending
|
24
|
+
class Pending < StandardError
|
25
|
+
end
|
26
|
+
|
27
|
+
# Raised when a step matches 2 or more StepDefinition
|
28
|
+
class Ambiguous < StandardError
|
29
|
+
def initialize(step_name, step_definitions, used_guess)
|
30
|
+
message = "Ambiguous match of \"#{step_name}\":\n\n"
|
31
|
+
message << step_definitions.map{|sd| sd.backtrace_line}.join("\n")
|
32
|
+
message << "\n\n"
|
33
|
+
message << "You can run again with --guess to make Cucumber be more smart about it\n" unless used_guess
|
34
|
+
super(message)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Raised when 2 or more StepDefinition have the same Regexp
|
39
|
+
class Redundant < StandardError
|
40
|
+
def initialize(step_def_1, step_def_2)
|
41
|
+
message = "Multiple step definitions have the same Regexp:\n\n"
|
42
|
+
message << step_def_1.backtrace_line << "\n"
|
43
|
+
message << step_def_2.backtrace_line << "\n\n"
|
44
|
+
super(message)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class NilWorld < StandardError
|
49
|
+
def initialize
|
50
|
+
super("World procs should never return nil")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class MultipleWorld < StandardError
|
55
|
+
def initialize(first_proc, second_proc)
|
56
|
+
message = "You can only pass a proc to #World once, but it's happening\n"
|
57
|
+
message << "in 2 places:\n\n"
|
58
|
+
message << first_proc.backtrace_line('World') << "\n"
|
59
|
+
message << second_proc.backtrace_line('World') << "\n\n"
|
60
|
+
message << "Use Ruby modules instead to extend your worlds. See the Cucumber::StepMother#World RDoc\n"
|
61
|
+
message << "or http://wiki.github.com/aslakhellesoy/cucumber/a-whole-new-world.\n\n"
|
62
|
+
super(message)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# This is the main interface for registering step definitions, which is done
|
67
|
+
# from <tt>*_steps.rb</tt> files. This module is included right at the top-level
|
68
|
+
# so #register_step_definition (and more interestingly - its aliases) are
|
69
|
+
# available from the top-level.
|
70
|
+
module StepMother
|
71
|
+
class Hook
|
72
|
+
def initialize(tag_names, proc)
|
73
|
+
@tag_names = tag_names.map{|tag| Ast::Tags.strip_prefix(tag)}
|
74
|
+
@proc = proc
|
75
|
+
end
|
76
|
+
|
77
|
+
def matches_tag_names?(tag_names)
|
78
|
+
@tag_names.empty? || (@tag_names & tag_names).any?
|
79
|
+
end
|
80
|
+
|
81
|
+
def execute_in(world, scenario, location, exception_fails_scenario = true)
|
82
|
+
begin
|
83
|
+
world.cucumber_instance_exec(false, location, scenario, &@proc)
|
84
|
+
rescue Exception => exception
|
85
|
+
if exception_fails_scenario
|
86
|
+
scenario.fail!(exception)
|
87
|
+
else
|
88
|
+
raise
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class << self
|
95
|
+
def alias_adverb(adverb)
|
96
|
+
adverb = adverb.gsub(/\s/, '')
|
97
|
+
alias_method adverb, :register_step_definition
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
attr_writer :snippet_generator, :options, :visitor
|
102
|
+
|
103
|
+
def options
|
104
|
+
@options ||= {}
|
105
|
+
end
|
106
|
+
|
107
|
+
def step_visited(step)
|
108
|
+
steps << step unless steps.index(step)
|
109
|
+
end
|
110
|
+
|
111
|
+
def steps(status = nil)
|
112
|
+
@steps ||= []
|
113
|
+
if(status)
|
114
|
+
@steps.select{|step| step.status == status}
|
115
|
+
else
|
116
|
+
@steps
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def scenarios(status = nil)
|
121
|
+
@scenarios ||= []
|
122
|
+
if(status)
|
123
|
+
@scenarios.select{|scenario| scenario.status == status}
|
124
|
+
else
|
125
|
+
@scenarios
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Registers a new StepDefinition. This method is aliased
|
130
|
+
# to <tt>Given</tt>, <tt>When</tt> and <tt>Then</tt>.
|
131
|
+
#
|
132
|
+
# See Cucumber#alias_steps for details on how to
|
133
|
+
# create your own aliases.
|
134
|
+
#
|
135
|
+
# The +&proc+ gets executed in the context of a <tt>world</tt>
|
136
|
+
# object, which is defined by #World. A new <tt>world</tt>
|
137
|
+
# object is created for each scenario and is shared across
|
138
|
+
# step definitions within that scenario.
|
139
|
+
def register_step_definition(regexp, &proc)
|
140
|
+
step_definition = StepDefinition.new(regexp, &proc)
|
141
|
+
step_definitions.each do |already|
|
142
|
+
raise Redundant.new(already, step_definition) if already.match(regexp)
|
143
|
+
end
|
144
|
+
step_definitions << step_definition
|
145
|
+
step_definition
|
146
|
+
end
|
147
|
+
|
148
|
+
# Registers a Before proc. You can call this method as many times as you
|
149
|
+
# want (typically from ruby scripts under <tt>support</tt>).
|
150
|
+
def Before(*tag_names, &proc)
|
151
|
+
register_hook(:before, tag_names, proc)
|
152
|
+
end
|
153
|
+
|
154
|
+
def After(*tag_names, &proc)
|
155
|
+
register_hook(:after, tag_names, proc)
|
156
|
+
end
|
157
|
+
|
158
|
+
def AfterStep(*tag_names, &proc)
|
159
|
+
register_hook(:after_step, tag_names, proc)
|
160
|
+
end
|
161
|
+
|
162
|
+
def register_hook(phase, tags, proc)
|
163
|
+
hook = Hook.new(tags, proc)
|
164
|
+
hooks[phase] << hook
|
165
|
+
hook
|
166
|
+
end
|
167
|
+
|
168
|
+
def hooks
|
169
|
+
@hooks ||= Hash.new {|hash, phase| hash[phase] = []}
|
170
|
+
end
|
171
|
+
|
172
|
+
def hooks_for(phase, scenario)
|
173
|
+
hooks[phase].select{|hook| scenario.accept_hook?(hook)}
|
174
|
+
end
|
175
|
+
|
176
|
+
# Registers any number of +world_modules+ (Ruby Modules) and/or a Proc.
|
177
|
+
# The +proc+ will be executed once before each scenario to create an
|
178
|
+
# Object that the scenario's steps will run within. Any +world_modules+
|
179
|
+
# will be mixed into this Object (via Object#extend).
|
180
|
+
#
|
181
|
+
# This method is typically called from one or more Ruby scripts under
|
182
|
+
# <tt>features/support</tt>. You can call this method as many times as you
|
183
|
+
# like (to register more modules), but if you try to register more than
|
184
|
+
# one Proc you will get an error.
|
185
|
+
#
|
186
|
+
# Cucumber will not yield anything to the +proc+ (like it used to do before v0.3).
|
187
|
+
#
|
188
|
+
# In earlier versions of Cucumber (before 0.3) you could not register
|
189
|
+
# any +world_modules+. Instead you would register several Proc objects (by
|
190
|
+
# calling the method several times). The result of each +proc+ would be yielded
|
191
|
+
# to the next +proc+. Example:
|
192
|
+
#
|
193
|
+
# World do |world| # NOT SUPPORTED FROM 0.3
|
194
|
+
# MyClass.new
|
195
|
+
# end
|
196
|
+
#
|
197
|
+
# World do |world| # NOT SUPPORTED FROM 0.3
|
198
|
+
# world.extend(MyModule)
|
199
|
+
# end
|
200
|
+
#
|
201
|
+
# From Cucumber 0.3 the recommended way to do this is:
|
202
|
+
#
|
203
|
+
# World do
|
204
|
+
# MyClass.new
|
205
|
+
# end
|
206
|
+
#
|
207
|
+
# World(MyModule)
|
208
|
+
#
|
209
|
+
def World(*world_modules, &proc)
|
210
|
+
if(proc)
|
211
|
+
raise MultipleWorld.new(@world_proc, proc) if @world_proc
|
212
|
+
@world_proc = proc
|
213
|
+
end
|
214
|
+
@world_modules ||= []
|
215
|
+
@world_modules += world_modules
|
216
|
+
end
|
217
|
+
|
218
|
+
def current_world
|
219
|
+
@current_world
|
220
|
+
end
|
221
|
+
|
222
|
+
def step_match(step_name, formatted_step_name=nil)
|
223
|
+
matches = step_definitions.map { |d| d.step_match(step_name, formatted_step_name) }.compact
|
224
|
+
raise Undefined.new(step_name) if matches.empty?
|
225
|
+
matches = best_matches(step_name, matches) if matches.size > 1 && options[:guess]
|
226
|
+
raise Ambiguous.new(step_name, matches, options[:guess]) if matches.size > 1
|
227
|
+
matches[0]
|
228
|
+
end
|
229
|
+
|
230
|
+
def best_matches(step_name, step_matches)
|
231
|
+
max_arg_length = step_matches.map {|step_match| step_match.args.length }.max
|
232
|
+
top_groups = step_matches.select {|step_match| step_match.args.length == max_arg_length }
|
233
|
+
|
234
|
+
if top_groups.length > 1
|
235
|
+
shortest_capture_length = top_groups.map {|step_match| step_match.args.inject(0) {|sum, c| sum + c.length } }.min
|
236
|
+
top_groups.select {|step_match| step_match.args.inject(0) {|sum, c| sum + c.length } == shortest_capture_length }
|
237
|
+
else
|
238
|
+
top_groups
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
def clear!
|
243
|
+
step_definitions.clear
|
244
|
+
hooks.clear
|
245
|
+
steps.clear
|
246
|
+
scenarios.clear
|
247
|
+
end
|
248
|
+
|
249
|
+
def step_definitions
|
250
|
+
@step_definitions ||= []
|
251
|
+
end
|
252
|
+
|
253
|
+
def snippet_text(step_keyword, step_name, multiline_arg_class)
|
254
|
+
@snippet_generator.snippet_text(step_keyword, step_name, multiline_arg_class)
|
255
|
+
end
|
256
|
+
|
257
|
+
def before_and_after(scenario, skip_hooks=false)
|
258
|
+
before(scenario) unless skip_hooks
|
259
|
+
@current_scenario = scenario
|
260
|
+
yield scenario
|
261
|
+
@current_scenario = nil
|
262
|
+
after(scenario) unless skip_hooks
|
263
|
+
scenario_visited(scenario)
|
264
|
+
end
|
265
|
+
|
266
|
+
def before(scenario)
|
267
|
+
unless current_world
|
268
|
+
new_world!
|
269
|
+
execute_before(scenario)
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
def after(scenario)
|
274
|
+
execute_after(scenario)
|
275
|
+
nil_world!
|
276
|
+
end
|
277
|
+
|
278
|
+
def after_step
|
279
|
+
execute_after_step(@current_scenario)
|
280
|
+
end
|
281
|
+
|
282
|
+
private
|
283
|
+
|
284
|
+
def max_step_definition_length
|
285
|
+
@max_step_definition_length ||= step_definitions.map{|step_definition| step_definition.text_length}.max
|
286
|
+
end
|
287
|
+
|
288
|
+
# Creates a new world instance
|
289
|
+
def new_world!
|
290
|
+
return if options[:dry_run]
|
291
|
+
create_world!
|
292
|
+
extend_world
|
293
|
+
connect_world
|
294
|
+
@current_world
|
295
|
+
end
|
296
|
+
|
297
|
+
def create_world!
|
298
|
+
if(@world_proc)
|
299
|
+
@current_world = @world_proc.call
|
300
|
+
check_nil(@current_world, @world_proc)
|
301
|
+
else
|
302
|
+
@current_world = Object.new
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def extend_world
|
307
|
+
@current_world.extend(World)
|
308
|
+
@current_world.extend(::Spec::Matchers) if defined?(::Spec::Matchers)
|
309
|
+
(@world_modules || []).each do |mod|
|
310
|
+
@current_world.extend(mod)
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
def connect_world
|
315
|
+
@current_world.__cucumber_step_mother = self
|
316
|
+
@current_world.__cucumber_visitor = @visitor
|
317
|
+
end
|
318
|
+
|
319
|
+
def check_nil(o, proc)
|
320
|
+
if o.nil?
|
321
|
+
begin
|
322
|
+
raise NilWorld.new
|
323
|
+
rescue NilWorld => e
|
324
|
+
e.backtrace.clear
|
325
|
+
e.backtrace.push(proc.backtrace_line("World"))
|
326
|
+
raise e
|
327
|
+
end
|
328
|
+
else
|
329
|
+
o
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
def nil_world!
|
334
|
+
@current_world = nil
|
335
|
+
end
|
336
|
+
|
337
|
+
def execute_before(scenario)
|
338
|
+
return if options[:dry_run]
|
339
|
+
hooks_for(:before, scenario).each do |hook|
|
340
|
+
hook.execute_in(@current_world, scenario, 'Before')
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
def execute_after(scenario)
|
345
|
+
return if options[:dry_run]
|
346
|
+
hooks_for(:after, scenario).each do |hook|
|
347
|
+
hook.execute_in(@current_world, scenario, 'After')
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
def execute_after_step(scenario)
|
352
|
+
return if options[:dry_run]
|
353
|
+
hooks_for(:after_step, scenario).each do |hook|
|
354
|
+
hook.execute_in(@current_world, scenario, 'AfterStep', false)
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
def scenario_visited(scenario)
|
359
|
+
scenarios << scenario unless scenarios.index(scenario)
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Cucumber
|
2
|
+
# All steps are run in the context of an object that extends this module
|
3
|
+
module World
|
4
|
+
class << self
|
5
|
+
def alias_adverb(adverb)
|
6
|
+
alias_method adverb, :__cucumber_invoke
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_writer :__cucumber_step_mother, :__cucumber_visitor, :__cucumber_current_step
|
11
|
+
|
12
|
+
# Call a step from within a step definition
|
13
|
+
def __cucumber_invoke(name, multiline_argument=nil) #:nodoc:
|
14
|
+
begin
|
15
|
+
step_match = @__cucumber_step_mother.step_match(name)
|
16
|
+
step_match.invoke(self, multiline_argument)
|
17
|
+
rescue Exception => e
|
18
|
+
e.nested! if Undefined === e
|
19
|
+
@__cucumber_current_step.exception = e if @__cucumber_current_step
|
20
|
+
raise e
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def table(text, file=nil, line_offset=0)
|
25
|
+
@table_parser ||= Parser::TableParser.new
|
26
|
+
@table_parser.parse_or_fail(text.strip, file, line_offset)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Output +announcement+ alongside the formatted output.
|
30
|
+
# This is an alternative to using Kernel#puts - it will display
|
31
|
+
# nicer, and in all outputs (in case you use several formatters)
|
32
|
+
#
|
33
|
+
# Beware that the output will be printed *before* the corresponding
|
34
|
+
# step. This is because the step itself will not be printed until
|
35
|
+
# after it has run, so it can be coloured according to its status.
|
36
|
+
def announce(announcement)
|
37
|
+
@__cucumber_visitor.announce(announcement)
|
38
|
+
end
|
39
|
+
|
40
|
+
def pending(message = "TODO")
|
41
|
+
if block_given?
|
42
|
+
begin
|
43
|
+
yield
|
44
|
+
rescue Exception => e
|
45
|
+
raise Pending.new(message)
|
46
|
+
end
|
47
|
+
raise Pending.new("Expected pending '#{message}' to fail. No Error was raised. No longer pending?")
|
48
|
+
else
|
49
|
+
raise Pending.new(message)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/cucumber.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
|
4
|
+
require 'yaml'
|
5
|
+
require 'cucumber/platform'
|
6
|
+
require 'cucumber/parser'
|
7
|
+
require 'cucumber/version'
|
8
|
+
require 'cucumber/step_mother'
|
9
|
+
require 'cucumber/cli/main'
|
10
|
+
require 'cucumber/broadcaster'
|
11
|
+
require 'cucumber/core_ext/exception'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Description:
|
2
|
+
Sets up Cucumber in your Rails project. After running this generator you will
|
3
|
+
get a new rake task called features.
|
4
|
+
|
5
|
+
This also generates the necessary files in the features directory.
|
6
|
+
|
7
|
+
Also see the feature generator, which you can use to generate skeletons
|
8
|
+
for new features.
|
9
|
+
|
10
|
+
Examples:
|
11
|
+
`./script/generate cucumber`
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
require 'cucumber/version'
|
3
|
+
|
4
|
+
# This generator bootstraps a Rails project for use with Cucumber
|
5
|
+
class CucumberGenerator < Rails::Generator::Base
|
6
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
7
|
+
Config::CONFIG['ruby_install_name'])
|
8
|
+
|
9
|
+
attr_accessor :framework
|
10
|
+
|
11
|
+
def manifest
|
12
|
+
record do |m|
|
13
|
+
m.directory 'features/step_definitions'
|
14
|
+
m.template 'webrat_steps.rb', 'features/step_definitions/webrat_steps.rb'
|
15
|
+
m.template 'cucumber_environment.rb', 'config/environments/cucumber.rb',
|
16
|
+
:assigns => { :cucumber_version => ::Cucumber::VERSION::STRING }
|
17
|
+
|
18
|
+
m.gsub_file 'config/database.yml', /test:.*\n/, "test: &TEST\n"
|
19
|
+
m.gsub_file 'config/database.yml', /\z/, "\ncucumber:\n <<: *TEST"
|
20
|
+
|
21
|
+
m.directory 'features/support'
|
22
|
+
|
23
|
+
if options[:spork]
|
24
|
+
m.template 'spork_env.rb', 'features/support/env.rb'
|
25
|
+
else
|
26
|
+
m.template 'env.rb', 'features/support/env.rb'
|
27
|
+
end
|
28
|
+
|
29
|
+
m.file 'paths.rb', 'features/support/paths.rb'
|
30
|
+
|
31
|
+
m.directory 'lib/tasks'
|
32
|
+
m.template 'cucumber.rake', 'lib/tasks/cucumber.rake'
|
33
|
+
|
34
|
+
m.file 'cucumber', 'script/cucumber', {
|
35
|
+
:chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang]
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def framework
|
41
|
+
options[:framework] || :rspec
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def banner
|
47
|
+
"Usage: #{$0} cucumber"
|
48
|
+
end
|
49
|
+
|
50
|
+
def add_options!(opt)
|
51
|
+
opt.separator ''
|
52
|
+
opt.separator 'Options:'
|
53
|
+
opt.on('--rspec', 'Setup cucumber for use with RSpec (default)') do |value|
|
54
|
+
options[:framework] = :rspec
|
55
|
+
end
|
56
|
+
|
57
|
+
opt.on('--testunit', 'Setup cucumber for use with test/unit') do |value|
|
58
|
+
options[:framework] = :testunit
|
59
|
+
end
|
60
|
+
|
61
|
+
opt.on('--spork', 'Setup cucumber for use with Spork') do |value|
|
62
|
+
options[:spork] = true
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
$LOAD_PATH.unshift(RAILS_ROOT + '/vendor/plugins/cucumber/lib') if File.directory?(RAILS_ROOT + '/vendor/plugins/cucumber/lib')
|
2
|
+
|
3
|
+
unless ARGV.any? {|a| a =~ /^gems/}
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'cucumber/rake/task'
|
7
|
+
|
8
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
9
|
+
t.fork = true
|
10
|
+
t.cucumber_opts = [<%= options[:spork] ? "'--drb', " : "" %>'--format', (ENV['CUCUMBER_FORMAT'] || 'pretty')]
|
11
|
+
end
|
12
|
+
task :features => 'db:test:prepare'
|
13
|
+
rescue LoadError
|
14
|
+
desc 'Cucumber rake task not available'
|
15
|
+
task :features do
|
16
|
+
abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
config.cache_classes = true # This must be true for Cucumber to operate correctly!
|
2
|
+
|
3
|
+
# Log error messages when you accidentally call methods on nil.
|
4
|
+
config.whiny_nils = true
|
5
|
+
|
6
|
+
# Show full error reports and disable caching
|
7
|
+
config.action_controller.consider_all_requests_local = true
|
8
|
+
config.action_controller.perform_caching = false
|
9
|
+
|
10
|
+
# Disable request forgery protection in test environment
|
11
|
+
config.action_controller.allow_forgery_protection = false
|
12
|
+
|
13
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
14
|
+
# The :test delivery method accumulates sent emails in the
|
15
|
+
# ActionMailer::Base.deliveries array.
|
16
|
+
config.action_mailer.delivery_method = :test
|
17
|
+
|
18
|
+
config.gem "cucumber", :lib => false, :version => ">=<%= cucumber_version %>" unless File.directory?(File.join(Rails.root, 'vendor/plugins/cucumber'))
|
19
|
+
config.gem "webrat", :lib => false, :version => ">=0.4.4" unless File.directory?(File.join(Rails.root, 'vendor/plugins/webrat'))
|
20
|
+
<% if framework == :rspec -%>
|
21
|
+
config.gem "rspec", :lib => false, :version => ">=1.2.6" unless File.directory?(File.join(Rails.root, 'vendor/plugins/rspec'))
|
22
|
+
config.gem "rspec-rails", :lib => 'spec/rails', :version => ">=1.2.6" unless File.directory?(File.join(Rails.root, 'vendor/plugins/rspec-rails'))
|
23
|
+
<% end %>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Sets up the Rails environment for Cucumber
|
2
|
+
ENV["RAILS_ENV"] ||= "cucumber"
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
|
4
|
+
require 'cucumber/rails/world'
|
5
|
+
|
6
|
+
# Comment out the next line if you don't want Cucumber Unicode support
|
7
|
+
require 'cucumber/formatter/unicode'
|
8
|
+
|
9
|
+
# Comment out the next line if you don't want transactions to
|
10
|
+
# open/roll back around each scenario
|
11
|
+
Cucumber::Rails.use_transactional_fixtures
|
12
|
+
|
13
|
+
# Comment out the next line if you want Rails' own error handling
|
14
|
+
# (e.g. rescue_action_in_public / rescue_responses / rescue_from)
|
15
|
+
Cucumber::Rails.bypass_rescue
|
16
|
+
|
17
|
+
require 'webrat'
|
18
|
+
|
19
|
+
Webrat.configure do |config|
|
20
|
+
config.mode = :rails
|
21
|
+
end
|
22
|
+
<% if framework == :rspec -%>
|
23
|
+
|
24
|
+
require 'cucumber/rails/rspec'
|
25
|
+
require 'webrat/core/matchers'
|
26
|
+
<% end -%>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module NavigationHelpers
|
2
|
+
# Maps a name to a path. Used by the
|
3
|
+
#
|
4
|
+
# When /^I go to (.+)$/ do |page_name|
|
5
|
+
#
|
6
|
+
# step definition in webrat_steps.rb
|
7
|
+
#
|
8
|
+
def path_to(page_name)
|
9
|
+
case page_name
|
10
|
+
|
11
|
+
when /the homepage/
|
12
|
+
'/'
|
13
|
+
|
14
|
+
# Add more mappings here.
|
15
|
+
# Here is a more fancy example:
|
16
|
+
#
|
17
|
+
# when /^(.*)'s profile page$/i
|
18
|
+
# user_profile_path(User.find_by_login($1))
|
19
|
+
|
20
|
+
else
|
21
|
+
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
22
|
+
"Now, go and add a mapping in #{__FILE__}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
World(NavigationHelpers)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spork'
|
3
|
+
|
4
|
+
Spork.prefork do
|
5
|
+
# Sets up the Rails environment for Cucumber
|
6
|
+
ENV["RAILS_ENV"] = "cucumber"
|
7
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
|
8
|
+
|
9
|
+
require 'webrat'
|
10
|
+
|
11
|
+
Webrat.configure do |config|
|
12
|
+
config.mode = :rails
|
13
|
+
end
|
14
|
+
|
15
|
+
require 'webrat/core/matchers'
|
16
|
+
require 'cucumber'
|
17
|
+
|
18
|
+
# Comment out the next line if you don't want Cucumber Unicode support
|
19
|
+
require 'cucumber/formatter/unicode'
|
20
|
+
|
21
|
+
require 'spec/rails'
|
22
|
+
require 'cucumber/rails/rspec'
|
23
|
+
end
|
24
|
+
|
25
|
+
Spork.each_run do
|
26
|
+
# This code will be run each time you run your specs.
|
27
|
+
require 'cucumber/rails/world'
|
28
|
+
|
29
|
+
# Comment out the next line if you don't want transactions to
|
30
|
+
# open/roll back around each scenario
|
31
|
+
Cucumber::Rails.use_transactional_fixtures
|
32
|
+
|
33
|
+
# Comment out the next line if you want Rails' own error handling
|
34
|
+
# (e.g. rescue_action_in_public / rescue_responses / rescue_from)
|
35
|
+
Cucumber::Rails.bypass_rescue
|
36
|
+
end
|