square-cucumber 0.3.12.2
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-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 +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/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.feature +7 -0
- data/features/html_formatter/a.html +185 -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/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.rb +11 -0
- data/lib/cucumber/ast.rb +29 -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/broadcaster.rb +13 -0
- data/lib/cucumber/cli/configuration.rb +425 -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/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.rb +6 -0
- data/lib/cucumber/parser/feature.rb +1787 -0
- data/lib/cucumber/parser/feature.tt +324 -0
- data/lib/cucumber/parser/i18n.tt +42 -0
- data/lib/cucumber/parser/i18n/language.rb +80 -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/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/webrat/mechanize_world.rb +82 -0
- data/lib/cucumber/world.rb +53 -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 +504 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
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
|
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
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'cucumber/step_match'
|
2
|
+
require 'cucumber/core_ext/string'
|
3
|
+
require 'cucumber/core_ext/proc'
|
4
|
+
|
5
|
+
module Cucumber
|
6
|
+
module StepDefinitionMethods
|
7
|
+
def step_match(name_to_match, name_to_report)
|
8
|
+
if(match = name_to_match.match(regexp))
|
9
|
+
StepMatch.new(self, name_to_match, name_to_report, match.captures)
|
10
|
+
else
|
11
|
+
nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Formats the matched arguments of the associated Step. This method
|
16
|
+
# is usually called from visitors, which render output.
|
17
|
+
#
|
18
|
+
# The +format+ can either be a String or a Proc.
|
19
|
+
#
|
20
|
+
# If it is a String it should be a format string according to
|
21
|
+
# <tt>Kernel#sprinf</tt>, for example:
|
22
|
+
#
|
23
|
+
# '<span class="param">%s</span></tt>'
|
24
|
+
#
|
25
|
+
# If it is a Proc, it should take one argument and return the formatted
|
26
|
+
# argument, for example:
|
27
|
+
#
|
28
|
+
# lambda { |param| "[#{param}]" }
|
29
|
+
#
|
30
|
+
def format_args(step_name, format)
|
31
|
+
step_name.gzub(regexp, format)
|
32
|
+
end
|
33
|
+
|
34
|
+
def match(step_name)
|
35
|
+
case step_name
|
36
|
+
when String then regexp.match(step_name)
|
37
|
+
when Regexp then regexp == step_name
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def backtrace_line
|
42
|
+
"#{file_colon_line}:in `#{regexp.inspect}'"
|
43
|
+
end
|
44
|
+
|
45
|
+
def text_length
|
46
|
+
regexp.inspect.jlength
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# A Step Definition holds a Regexp and a Proc, and is created
|
51
|
+
# by calling <tt>Given</tt>, <tt>When</tt> or <tt>Then</tt>
|
52
|
+
# in the <tt>step_definitions</tt> ruby files - for example:
|
53
|
+
#
|
54
|
+
# Given /I have (\d+) cucumbers in my belly/ do
|
55
|
+
# # some code here
|
56
|
+
# end
|
57
|
+
#
|
58
|
+
class StepDefinition
|
59
|
+
PARAM_PATTERN = /"([^\"]*)"/
|
60
|
+
ESCAPED_PARAM_PATTERN = '"([^\\"]*)"'
|
61
|
+
|
62
|
+
def self.snippet_text(step_keyword, step_name, multiline_arg_class = nil)
|
63
|
+
escaped = Regexp.escape(step_name).gsub('\ ', ' ').gsub('/', '\/')
|
64
|
+
escaped = escaped.gsub(PARAM_PATTERN, ESCAPED_PARAM_PATTERN)
|
65
|
+
|
66
|
+
n = 0
|
67
|
+
block_args = escaped.scan(ESCAPED_PARAM_PATTERN).map do |a|
|
68
|
+
n += 1
|
69
|
+
"arg#{n}"
|
70
|
+
end
|
71
|
+
block_args << multiline_arg_class.default_arg_name unless multiline_arg_class.nil?
|
72
|
+
block_arg_string = block_args.empty? ? "" : " |#{block_args.join(", ")}|"
|
73
|
+
multiline_class_comment = ""
|
74
|
+
if(multiline_arg_class == Ast::Table)
|
75
|
+
multiline_class_comment = "# #{multiline_arg_class.default_arg_name} is a #{multiline_arg_class.to_s}\n "
|
76
|
+
end
|
77
|
+
|
78
|
+
"#{step_keyword} /^#{escaped}$/ do#{block_arg_string}\n #{multiline_class_comment}pending\nend"
|
79
|
+
end
|
80
|
+
|
81
|
+
class MissingProc < StandardError
|
82
|
+
def message
|
83
|
+
"Step definitions must always have a proc"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
include StepDefinitionMethods
|
88
|
+
|
89
|
+
attr_reader :regexp, :proc
|
90
|
+
|
91
|
+
def initialize(pattern, &proc)
|
92
|
+
raise MissingProc if proc.nil?
|
93
|
+
if String === pattern
|
94
|
+
p = pattern.gsub(/\$\w+/, '(.*)') # Replace $var with (.*)
|
95
|
+
pattern = Regexp.new("^#{p}$")
|
96
|
+
end
|
97
|
+
@regexp, @proc = pattern, proc
|
98
|
+
end
|
99
|
+
|
100
|
+
def regexp
|
101
|
+
@regexp
|
102
|
+
end
|
103
|
+
|
104
|
+
def invoke(world, args)
|
105
|
+
args = args.map{|arg| Ast::PyString === arg ? arg.to_s : arg}
|
106
|
+
begin
|
107
|
+
world.cucumber_instance_exec(true, regexp.inspect, *args, &@proc)
|
108
|
+
rescue Cucumber::ArityMismatchError => e
|
109
|
+
e.backtrace.unshift(self.backtrace_line)
|
110
|
+
raise e
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def file_colon_line
|
115
|
+
@proc.file_colon_line
|
116
|
+
end
|
117
|
+
|
118
|
+
def file
|
119
|
+
@file ||= file_colon_line.split(':')[0]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Cucumber
|
2
|
+
class StepMatch
|
3
|
+
attr_reader :step_definition, :args
|
4
|
+
|
5
|
+
def initialize(step_definition, step_name, formatted_step_name, args)
|
6
|
+
@step_definition, @step_name, @formatted_step_name, @args = step_definition, step_name, formatted_step_name, args
|
7
|
+
end
|
8
|
+
|
9
|
+
def name
|
10
|
+
@formatted_step_name
|
11
|
+
end
|
12
|
+
|
13
|
+
def invoke(world, multiline_arg)
|
14
|
+
all_args = @args.dup
|
15
|
+
all_args << multiline_arg if multiline_arg
|
16
|
+
@step_definition.invoke(world, all_args)
|
17
|
+
end
|
18
|
+
|
19
|
+
def format_args(format = lambda{|a| a})
|
20
|
+
@formatted_step_name || @step_definition.format_args(@step_name, format)
|
21
|
+
end
|
22
|
+
|
23
|
+
def file_colon_line
|
24
|
+
@step_definition.file_colon_line
|
25
|
+
end
|
26
|
+
|
27
|
+
def backtrace_line
|
28
|
+
@step_definition.backtrace_line
|
29
|
+
end
|
30
|
+
|
31
|
+
def text_length
|
32
|
+
@step_definition.text_length
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class NoStepMatch
|
37
|
+
attr_reader :step_definition
|
38
|
+
|
39
|
+
def initialize(step, name)
|
40
|
+
@step = step
|
41
|
+
@name = name
|
42
|
+
end
|
43
|
+
|
44
|
+
def format_args(format)
|
45
|
+
@name
|
46
|
+
end
|
47
|
+
|
48
|
+
def file_colon_line
|
49
|
+
raise "No file:line for #{@step}" unless @step.file_colon_line
|
50
|
+
@step.file_colon_line
|
51
|
+
end
|
52
|
+
|
53
|
+
def backtrace_line
|
54
|
+
@step.backtrace_line
|
55
|
+
end
|
56
|
+
|
57
|
+
def text_length
|
58
|
+
@step.text_length
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -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
|