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,136 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module Ast
|
3
|
+
class StepInvocation
|
4
|
+
attr_writer :step_collection, :background
|
5
|
+
attr_reader :name, :matched_cells, :status, :reported_exception
|
6
|
+
attr_accessor :exception
|
7
|
+
|
8
|
+
def initialize(step, name, multiline_arg, matched_cells)
|
9
|
+
@step, @name, @multiline_arg, @matched_cells = step, name, multiline_arg, matched_cells
|
10
|
+
status!(:skipped)
|
11
|
+
end
|
12
|
+
|
13
|
+
def background?
|
14
|
+
@background
|
15
|
+
end
|
16
|
+
|
17
|
+
def skip_invoke!
|
18
|
+
@skip_invoke = true
|
19
|
+
end
|
20
|
+
|
21
|
+
def accept(visitor)
|
22
|
+
invoke(visitor.step_mother, visitor.options)
|
23
|
+
visit_step_result(visitor)
|
24
|
+
end
|
25
|
+
|
26
|
+
def visit_step_result(visitor)
|
27
|
+
visitor.visit_step_result(keyword, @step_match, @multiline_arg, @status, @reported_exception, source_indent, @background)
|
28
|
+
end
|
29
|
+
|
30
|
+
def invoke(step_mother, options)
|
31
|
+
find_step_match!(step_mother)
|
32
|
+
unless @skip_invoke || options[:dry_run] || @exception || @step_collection.exception
|
33
|
+
@skip_invoke = true
|
34
|
+
begin
|
35
|
+
step_mother.current_world.__cucumber_current_step = self if step_mother.current_world # Nil in Pure Java
|
36
|
+
@step_match.invoke(step_mother.current_world, @multiline_arg)
|
37
|
+
step_mother.after_step
|
38
|
+
status!(:passed)
|
39
|
+
rescue Pending => e
|
40
|
+
failed(options, e, false)
|
41
|
+
status!(:pending)
|
42
|
+
rescue Undefined => e
|
43
|
+
failed(options, e, false)
|
44
|
+
status!(:undefined)
|
45
|
+
rescue Exception => e
|
46
|
+
failed(options, e, false)
|
47
|
+
status!(:failed)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def find_step_match!(step_mother)
|
53
|
+
return if @step_match
|
54
|
+
begin
|
55
|
+
@step_match = step_mother.step_match(@name)
|
56
|
+
rescue Undefined => e
|
57
|
+
failed(step_mother.options, e, true)
|
58
|
+
status!(:undefined)
|
59
|
+
@step_match = NoStepMatch.new(@step, @name)
|
60
|
+
rescue Ambiguous => e
|
61
|
+
failed(step_mother.options, e, false)
|
62
|
+
status!(:failed)
|
63
|
+
@step_match = NoStepMatch.new(@step, @name)
|
64
|
+
end
|
65
|
+
step_mother.step_visited(self)
|
66
|
+
end
|
67
|
+
|
68
|
+
def failed(options, e, clear_backtrace)
|
69
|
+
e.set_backtrace([]) if clear_backtrace
|
70
|
+
e.backtrace << @step.backtrace_line unless @step.backtrace_line.nil?
|
71
|
+
@exception = e
|
72
|
+
if(options[:strict] || !(Undefined === e) || e.nested?)
|
73
|
+
@reported_exception = e
|
74
|
+
else
|
75
|
+
@reported_exception = nil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def status!(status)
|
80
|
+
@status = status
|
81
|
+
@matched_cells.each do |cell|
|
82
|
+
cell.status = status
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def previous
|
87
|
+
@step_collection.previous_step(self)
|
88
|
+
end
|
89
|
+
|
90
|
+
def actual_keyword
|
91
|
+
repeat_keywords = [language.but_keywords, language.and_keywords].flatten
|
92
|
+
if repeat_keywords.index(@step.keyword) && previous
|
93
|
+
previous.actual_keyword
|
94
|
+
else
|
95
|
+
keyword
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def source_indent
|
100
|
+
@step.feature_element.source_indent(text_length)
|
101
|
+
end
|
102
|
+
|
103
|
+
def text_length
|
104
|
+
@step.text_length(@name)
|
105
|
+
end
|
106
|
+
|
107
|
+
def keyword
|
108
|
+
@step.keyword
|
109
|
+
end
|
110
|
+
|
111
|
+
def multiline_arg
|
112
|
+
@step.multiline_arg
|
113
|
+
end
|
114
|
+
|
115
|
+
def file_colon_line
|
116
|
+
@step.file_colon_line
|
117
|
+
end
|
118
|
+
|
119
|
+
def dom_id
|
120
|
+
@step.dom_id
|
121
|
+
end
|
122
|
+
|
123
|
+
def backtrace_line
|
124
|
+
@step.backtrace_line
|
125
|
+
end
|
126
|
+
|
127
|
+
def language
|
128
|
+
@step.language
|
129
|
+
end
|
130
|
+
|
131
|
+
def to_sexp
|
132
|
+
[:step_invocation, @step.line, @step.keyword, @name, (@multiline_arg.nil? ? nil : @multiline_arg.to_sexp)].compact
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,334 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module Ast
|
3
|
+
# Holds the data of a table parsed from a feature file:
|
4
|
+
#
|
5
|
+
# | a | b |
|
6
|
+
# | c | d |
|
7
|
+
#
|
8
|
+
# This gets parsed into a Table holding the values <tt>[['a', 'b'], ['c', 'd']]</tt>
|
9
|
+
#
|
10
|
+
class Table
|
11
|
+
NULL_CONVERSIONS = Hash.new(lambda{ |cell_value| cell_value }).freeze
|
12
|
+
|
13
|
+
attr_accessor :file
|
14
|
+
|
15
|
+
def self.default_arg_name
|
16
|
+
"table"
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(raw, conversions = NULL_CONVERSIONS.dup)
|
20
|
+
# Verify that it's square
|
21
|
+
raw.transpose
|
22
|
+
@raw = raw
|
23
|
+
@cells_class = Cells
|
24
|
+
@cell_class = Cell
|
25
|
+
@conversion_procs = conversions
|
26
|
+
end
|
27
|
+
|
28
|
+
# Creates a copy of this table, inheriting the column mappings.
|
29
|
+
def dup
|
30
|
+
self.class.new(@raw.dup, @conversion_procs.dup)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns a new, transposed table. Example:
|
34
|
+
#
|
35
|
+
# | a | 7 | 4 |
|
36
|
+
# | b | 9 | 2 |
|
37
|
+
#
|
38
|
+
# Gets converted into the following:
|
39
|
+
#
|
40
|
+
# | a | b |
|
41
|
+
# | 7 | 9 |
|
42
|
+
# | 4 | 2 |
|
43
|
+
#
|
44
|
+
def transpose
|
45
|
+
self.class.new(@raw.transpose, @conversion_procs.dup)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Converts this table into an Array of Hash where the keys of each
|
49
|
+
# Hash are the headers in the table. For example, a Table built from
|
50
|
+
# the following plain text:
|
51
|
+
#
|
52
|
+
# | a | b | sum |
|
53
|
+
# | 2 | 3 | 5 |
|
54
|
+
# | 7 | 9 | 16 |
|
55
|
+
#
|
56
|
+
# Gets converted into the following:
|
57
|
+
#
|
58
|
+
# [{'a' => '2', 'b' => '3', 'sum' => '5'}, {'a' => '7', 'b' => '9', 'sum' => '16'}]
|
59
|
+
#
|
60
|
+
# Use #map_column! to specify how values in a column are converted.
|
61
|
+
#
|
62
|
+
def hashes
|
63
|
+
@hashes ||= cells_rows[1..-1].map do |row|
|
64
|
+
row.to_hash
|
65
|
+
end.freeze
|
66
|
+
end
|
67
|
+
|
68
|
+
# Converts this table into a Hash where the first column is
|
69
|
+
# used as keys and the second column is used as values
|
70
|
+
#
|
71
|
+
# | a | 2 |
|
72
|
+
# | b | 3 |
|
73
|
+
#
|
74
|
+
# Gets converted into the following:
|
75
|
+
#
|
76
|
+
# {'a' => '2', 'b' => '3'}
|
77
|
+
#
|
78
|
+
# The table must be exactly two columns wide
|
79
|
+
#
|
80
|
+
def rows_hash
|
81
|
+
verify_table_width(2)
|
82
|
+
@rows_hash = self.transpose.hashes[0]
|
83
|
+
end
|
84
|
+
|
85
|
+
# Gets the raw data of this table. For example, a Table built from
|
86
|
+
# the following plain text:
|
87
|
+
#
|
88
|
+
# | a | b |
|
89
|
+
# | c | d |
|
90
|
+
#
|
91
|
+
# Get converted into the following:
|
92
|
+
#
|
93
|
+
# [['a', 'b], ['c', 'd']]
|
94
|
+
#
|
95
|
+
def raw
|
96
|
+
@raw
|
97
|
+
end
|
98
|
+
|
99
|
+
# Same as #raw, but skips the first (header) row
|
100
|
+
def rows
|
101
|
+
@raw[1..-1]
|
102
|
+
end
|
103
|
+
|
104
|
+
def each_cells_row(&proc)
|
105
|
+
cells_rows.each(&proc)
|
106
|
+
end
|
107
|
+
|
108
|
+
def accept(visitor)
|
109
|
+
cells_rows.each do |row|
|
110
|
+
visitor.visit_table_row(row)
|
111
|
+
end
|
112
|
+
nil
|
113
|
+
end
|
114
|
+
|
115
|
+
# For testing only
|
116
|
+
def to_sexp #:nodoc:
|
117
|
+
[:table, *cells_rows.map{|row| row.to_sexp}]
|
118
|
+
end
|
119
|
+
|
120
|
+
# Returns a new Table where the headers are redefined. This makes it
|
121
|
+
# possible to use prettier header names in the features. Example:
|
122
|
+
#
|
123
|
+
# | Phone Number | Address |
|
124
|
+
# | 123456 | xyz |
|
125
|
+
# | 345678 | abc |
|
126
|
+
#
|
127
|
+
# A StepDefinition receiving this table can then map the columns:
|
128
|
+
#
|
129
|
+
# mapped_table = table.map_columns('Phone Number' => :phone, 'Address' => :address)
|
130
|
+
# hashes = mapped_table.hashes
|
131
|
+
# # => [{:phone => '123456', :address => 'xyz'}, {:phone => '345678', :address => 'abc'}]
|
132
|
+
#
|
133
|
+
def map_headers(mappings)
|
134
|
+
table = self.dup
|
135
|
+
table.map_headers!(mappings)
|
136
|
+
table
|
137
|
+
end
|
138
|
+
|
139
|
+
# Change how #hashes converts column values. The +column_name+ argument identifies the column
|
140
|
+
# and +conversion_proc+ performs the conversion for each cell in that column. If +strict+ is
|
141
|
+
# true, an error will be raised if the column named +column_name+ is not found. If +strict+
|
142
|
+
# is false, no error will be raised. Example:
|
143
|
+
#
|
144
|
+
# Given /^an expense report for (.*) with the following posts:$/ do |table|
|
145
|
+
# posts_table.map_column!('amount') { |a| a.to_i }
|
146
|
+
# posts_table.hashes.each do |post|
|
147
|
+
# # post['amount'] is a Fixnum, rather than a String
|
148
|
+
# end
|
149
|
+
# end
|
150
|
+
#
|
151
|
+
def map_column!(column_name, strict=true, &conversion_proc)
|
152
|
+
verify_column(column_name) if strict
|
153
|
+
@conversion_procs[column_name] = conversion_proc
|
154
|
+
end
|
155
|
+
|
156
|
+
def to_hash(cells) #:nodoc:
|
157
|
+
hash = Hash.new do |hash, key|
|
158
|
+
hash[key.to_s] if key.is_a?(Symbol)
|
159
|
+
end
|
160
|
+
@raw[0].each_with_index do |column_name, column_index|
|
161
|
+
value = @conversion_procs[column_name].call(cells.value(column_index))
|
162
|
+
hash[column_name] = value
|
163
|
+
end
|
164
|
+
hash
|
165
|
+
end
|
166
|
+
|
167
|
+
def index(cells) #:nodoc:
|
168
|
+
cells_rows.index(cells)
|
169
|
+
end
|
170
|
+
|
171
|
+
def verify_column(column_name)
|
172
|
+
raise %{The column named "#{column_name}" does not exist} unless @raw[0].include?(column_name)
|
173
|
+
end
|
174
|
+
|
175
|
+
def verify_table_width(width)
|
176
|
+
raise %{The table must have exactly #{width} columns} unless @raw[0].size == width
|
177
|
+
end
|
178
|
+
|
179
|
+
def arguments_replaced(arguments) #:nodoc:
|
180
|
+
raw_with_replaced_args = raw.map do |row|
|
181
|
+
row.map do |cell|
|
182
|
+
cell_with_replaced_args = cell
|
183
|
+
arguments.each do |name, value|
|
184
|
+
if cell_with_replaced_args && cell_with_replaced_args.include?(name)
|
185
|
+
cell_with_replaced_args = value ? cell_with_replaced_args.gsub(name, value) : nil
|
186
|
+
end
|
187
|
+
end
|
188
|
+
cell_with_replaced_args
|
189
|
+
end
|
190
|
+
end
|
191
|
+
Table.new(raw_with_replaced_args)
|
192
|
+
end
|
193
|
+
|
194
|
+
def has_text?(text)
|
195
|
+
raw.flatten.compact.detect{|cell_value| cell_value.index(text)}
|
196
|
+
end
|
197
|
+
|
198
|
+
def cells_rows
|
199
|
+
@rows ||= cell_matrix.map do |cell_row|
|
200
|
+
@cells_class.new(self, cell_row)
|
201
|
+
end.freeze
|
202
|
+
end
|
203
|
+
|
204
|
+
def headers
|
205
|
+
@raw.first
|
206
|
+
end
|
207
|
+
|
208
|
+
def header_cell(col)
|
209
|
+
cells_rows[0][col]
|
210
|
+
end
|
211
|
+
|
212
|
+
protected
|
213
|
+
|
214
|
+
def map_headers!(mappings)
|
215
|
+
headers = @raw[0]
|
216
|
+
mappings.each_pair do |pre, post|
|
217
|
+
headers[headers.index(pre)] = post
|
218
|
+
if @conversion_procs.has_key?(pre)
|
219
|
+
@conversion_procs[post] = @conversion_procs.delete(pre)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
private
|
225
|
+
|
226
|
+
def col_width(col)
|
227
|
+
columns[col].__send__(:width)
|
228
|
+
end
|
229
|
+
|
230
|
+
def columns
|
231
|
+
@columns ||= cell_matrix.transpose.map do |cell_row|
|
232
|
+
@cells_class.new(self, cell_row)
|
233
|
+
end.freeze
|
234
|
+
end
|
235
|
+
|
236
|
+
def cell_matrix
|
237
|
+
row = -1
|
238
|
+
@cell_matrix ||= @raw.map do |raw_row|
|
239
|
+
line = raw_row.line rescue -1
|
240
|
+
row += 1
|
241
|
+
col = -1
|
242
|
+
raw_row.map do |raw_cell|
|
243
|
+
col += 1
|
244
|
+
@cell_class.new(raw_cell, self, row, col, line)
|
245
|
+
end
|
246
|
+
end.freeze
|
247
|
+
end
|
248
|
+
|
249
|
+
# Represents a row of cells or columns of cells
|
250
|
+
class Cells
|
251
|
+
include Enumerable
|
252
|
+
attr_reader :exception
|
253
|
+
|
254
|
+
def initialize(table, cells)
|
255
|
+
@table, @cells = table, cells
|
256
|
+
end
|
257
|
+
|
258
|
+
def accept(visitor)
|
259
|
+
each do |cell|
|
260
|
+
visitor.visit_table_cell(cell)
|
261
|
+
end
|
262
|
+
nil
|
263
|
+
end
|
264
|
+
|
265
|
+
# For testing only
|
266
|
+
def to_sexp #:nodoc:
|
267
|
+
[:row, line, *@cells.map{|cell| cell.to_sexp}]
|
268
|
+
end
|
269
|
+
|
270
|
+
def to_hash #:nodoc:
|
271
|
+
@to_hash ||= @table.to_hash(self).freeze
|
272
|
+
end
|
273
|
+
|
274
|
+
def value(n) #:nodoc:
|
275
|
+
self[n].value
|
276
|
+
end
|
277
|
+
|
278
|
+
def [](n)
|
279
|
+
@cells[n]
|
280
|
+
end
|
281
|
+
|
282
|
+
def line
|
283
|
+
@cells[0].line
|
284
|
+
end
|
285
|
+
|
286
|
+
def dom_id
|
287
|
+
"row_#{line}"
|
288
|
+
end
|
289
|
+
|
290
|
+
private
|
291
|
+
|
292
|
+
def index
|
293
|
+
@table.index(self)
|
294
|
+
end
|
295
|
+
|
296
|
+
def width
|
297
|
+
map{|cell| cell.value ? cell.value.to_s.jlength : 0}.max
|
298
|
+
end
|
299
|
+
|
300
|
+
def each(&proc)
|
301
|
+
@cells.each(&proc)
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
class Cell
|
306
|
+
attr_reader :value, :line
|
307
|
+
attr_writer :status
|
308
|
+
|
309
|
+
def initialize(value, table, row, col, line)
|
310
|
+
@value, @table, @row, @col, @line = value, table, row, col, line
|
311
|
+
end
|
312
|
+
|
313
|
+
def accept(visitor)
|
314
|
+
visitor.visit_table_cell_value(@value, col_width, @status)
|
315
|
+
end
|
316
|
+
|
317
|
+
def header_cell
|
318
|
+
@table.header_cell(@col)
|
319
|
+
end
|
320
|
+
|
321
|
+
# For testing only
|
322
|
+
def to_sexp #:nodoc:
|
323
|
+
[:cell, @value]
|
324
|
+
end
|
325
|
+
|
326
|
+
private
|
327
|
+
|
328
|
+
def col_width
|
329
|
+
@col_width ||= @table.__send__(:col_width, @col).freeze
|
330
|
+
end
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module Ast
|
3
|
+
# Holds the names of tags parsed from a feature file:
|
4
|
+
#
|
5
|
+
# @invoice @release_2
|
6
|
+
#
|
7
|
+
# This gets stored internally as <tt>["invoice", "release_2"]</tt>
|
8
|
+
#
|
9
|
+
class Tags
|
10
|
+
def self.strip_prefix(tag_name)
|
11
|
+
tag_name =~ /^@(.*)/ ? $1 : tag_name
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(line, tag_names)
|
15
|
+
@line, @tag_names = line, tag_names
|
16
|
+
end
|
17
|
+
|
18
|
+
def accept(visitor)
|
19
|
+
@tag_names.each do |tag_name|
|
20
|
+
visitor.visit_tag_name(tag_name)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def accept_hook?(hook)
|
25
|
+
hook.matches_tag_names?(@tag_names)
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_sexp
|
29
|
+
@tag_names.map{|tag_name| [:tag, tag_name]}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module Ast
|
3
|
+
# A dumb visitor that implements the whole Visitor API and just walks the tree.
|
4
|
+
class Visitor
|
5
|
+
attr_accessor :options
|
6
|
+
attr_reader :step_mother
|
7
|
+
|
8
|
+
def initialize(step_mother)
|
9
|
+
@options = {}
|
10
|
+
@step_mother = step_mother
|
11
|
+
end
|
12
|
+
|
13
|
+
def matches_scenario_names?(node)
|
14
|
+
scenario_name_regexps = options[:name_regexps] || []
|
15
|
+
scenario_name_regexps.empty? || node.matches_scenario_names?(scenario_name_regexps)
|
16
|
+
end
|
17
|
+
|
18
|
+
def visit_features(features)
|
19
|
+
features.accept(self)
|
20
|
+
end
|
21
|
+
|
22
|
+
def visit_feature(feature)
|
23
|
+
feature.accept(self)
|
24
|
+
end
|
25
|
+
|
26
|
+
def visit_comment(comment)
|
27
|
+
comment.accept(self)
|
28
|
+
end
|
29
|
+
|
30
|
+
def visit_comment_line(comment_line)
|
31
|
+
end
|
32
|
+
|
33
|
+
def visit_tags(tags)
|
34
|
+
tags.accept(self)
|
35
|
+
end
|
36
|
+
|
37
|
+
def visit_tag_name(tag_name)
|
38
|
+
end
|
39
|
+
|
40
|
+
def visit_feature_name(name)
|
41
|
+
end
|
42
|
+
|
43
|
+
# +feature_element+ is either Scenario or ScenarioOutline
|
44
|
+
def visit_feature_element(feature_element)
|
45
|
+
feature_element.accept(self)
|
46
|
+
end
|
47
|
+
|
48
|
+
def visit_background(background)
|
49
|
+
background.accept(self)
|
50
|
+
end
|
51
|
+
|
52
|
+
def visit_background_name(keyword, name, file_colon_line, source_indent)
|
53
|
+
end
|
54
|
+
|
55
|
+
def visit_examples_array(examples_array)
|
56
|
+
examples_array.accept(self)
|
57
|
+
end
|
58
|
+
|
59
|
+
def visit_examples(examples)
|
60
|
+
examples.accept(self)
|
61
|
+
end
|
62
|
+
|
63
|
+
def visit_examples_name(keyword, name)
|
64
|
+
end
|
65
|
+
|
66
|
+
def visit_outline_table(outline_table)
|
67
|
+
outline_table.accept(self)
|
68
|
+
end
|
69
|
+
|
70
|
+
def visit_scenario_name(keyword, name, file_colon_line, source_indent)
|
71
|
+
end
|
72
|
+
|
73
|
+
def visit_steps(steps)
|
74
|
+
steps.accept(self)
|
75
|
+
end
|
76
|
+
|
77
|
+
def visit_step(step)
|
78
|
+
step.accept(self)
|
79
|
+
end
|
80
|
+
|
81
|
+
def visit_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background)
|
82
|
+
visit_step_name(keyword, step_match, status, source_indent, background)
|
83
|
+
visit_multiline_arg(multiline_arg) if multiline_arg
|
84
|
+
visit_exception(exception, status) if exception
|
85
|
+
end
|
86
|
+
|
87
|
+
def visit_step_name(keyword, step_match, status, source_indent, background) #:nodoc:
|
88
|
+
end
|
89
|
+
|
90
|
+
def visit_multiline_arg(multiline_arg) #:nodoc:
|
91
|
+
multiline_arg.accept(self)
|
92
|
+
end
|
93
|
+
|
94
|
+
def visit_exception(exception, status) #:nodoc:
|
95
|
+
end
|
96
|
+
|
97
|
+
def visit_py_string(string)
|
98
|
+
end
|
99
|
+
|
100
|
+
def visit_table_row(table_row)
|
101
|
+
table_row.accept(self)
|
102
|
+
end
|
103
|
+
|
104
|
+
def visit_table_cell(table_cell)
|
105
|
+
table_cell.accept(self)
|
106
|
+
end
|
107
|
+
|
108
|
+
def visit_table_cell_value(value, width, status)
|
109
|
+
end
|
110
|
+
|
111
|
+
def announce(announcement)
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
data/lib/cucumber/ast.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'cucumber/ast/comment'
|
2
|
+
require 'cucumber/ast/tags'
|
3
|
+
require 'cucumber/ast/features'
|
4
|
+
require 'cucumber/ast/feature'
|
5
|
+
require 'cucumber/ast/background'
|
6
|
+
require 'cucumber/ast/scenario'
|
7
|
+
require 'cucumber/ast/scenario_outline'
|
8
|
+
require 'cucumber/ast/step_invocation'
|
9
|
+
require 'cucumber/ast/step_collection'
|
10
|
+
require 'cucumber/ast/step'
|
11
|
+
require 'cucumber/ast/table'
|
12
|
+
require 'cucumber/ast/py_string'
|
13
|
+
require 'cucumber/ast/outline_table'
|
14
|
+
require 'cucumber/ast/examples'
|
15
|
+
require 'cucumber/ast/visitor'
|
16
|
+
|
17
|
+
module Cucumber
|
18
|
+
# Classes in this module represent the Abstract Syntax Tree (AST)
|
19
|
+
# that gets built when feature files are parsed.
|
20
|
+
#
|
21
|
+
# AST classes don't expose any internal data directly. This is
|
22
|
+
# in order to encourage a less coupled design in the classes
|
23
|
+
# that operate on the AST. The only public method is #accept.
|
24
|
+
#
|
25
|
+
# The AST can be traversed with a visitor. See Cucumber::Format::Pretty
|
26
|
+
# for an example.
|
27
|
+
module Ast
|
28
|
+
end
|
29
|
+
end
|