kbaum-cucumber 0.4.5.pre
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/.gitattributes +1 -0
- data/.gitignore +18 -0
- data/Caliper.yml +5 -0
- data/History.txt +1292 -0
- data/LICENSE +22 -0
- data/README.rdoc +26 -0
- data/Rakefile +63 -0
- data/VERSION.yml +5 -0
- data/bin/cucumber +16 -0
- data/cucumber.gemspec +741 -0
- data/cucumber.yml +10 -0
- data/examples/dos_line_endings/Rakefile +6 -0
- data/examples/dos_line_endings/features/dos_line_endings.feature +9 -0
- data/examples/i18n/README.textile +18 -0
- data/examples/i18n/Rakefile +32 -0
- data/examples/i18n/ar/Rakefile +6 -0
- data/examples/i18n/ar/features/addition.feature +17 -0
- data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ar/lib/calculator.rb +11 -0
- data/examples/i18n/bg/Rakefile +6 -0
- data/examples/i18n/bg/features/addition.feature +12 -0
- data/examples/i18n/bg/features/consecutive_calculations.feature +19 -0
- data/examples/i18n/bg/features/division.feature +17 -0
- data/examples/i18n/bg/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/bg/features/support/env.rb +6 -0
- data/examples/i18n/bg/features/support/world.rb +8 -0
- data/examples/i18n/bg/lib/calculator.rb +24 -0
- data/examples/i18n/cat/Rakefile +6 -0
- data/examples/i18n/cat/features/step_definitons/calculator_steps.rb +21 -0
- data/examples/i18n/cat/features/suma.feature +17 -0
- data/examples/i18n/cat/lib/calculadora.rb +16 -0
- data/examples/i18n/da/Rakefile +6 -0
- data/examples/i18n/da/features/sammenlaegning.feature +18 -0
- data/examples/i18n/da/features/step_definitons/lommeregner_steps.rb +24 -0
- data/examples/i18n/da/lib/lommeregner.rb +11 -0
- data/examples/i18n/de/.gitignore +1 -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 +4 -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/.gitignore +1 -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/.gitignore +1 -0
- data/examples/i18n/fi/Rakefile +6 -0
- data/examples/i18n/fi/features/jakolasku.feature +10 -0
- data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
- data/examples/i18n/fi/features/yhteenlasku.feature +17 -0
- data/examples/i18n/fi/lib/laskin.rb +14 -0
- data/examples/i18n/fr/Rakefile +6 -0
- data/examples/i18n/fr/features/addition.feature +18 -0
- data/examples/i18n/fr/features/addition2.feature +17 -0
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +38 -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/.gitignore +1 -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/.gitignore +1 -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/.gitignore +1 -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/.gitignore +1 -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/.gitignore +1 -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/.gitignore +1 -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/.gitignore +1 -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/sr-latn/Rakefile +6 -0
- data/examples/i18n/sr-latn/features/sabiranje.feature +18 -0
- data/examples/i18n/sr-latn/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/sr-latn/lib/calculator.rb +12 -0
- data/examples/i18n/sr/Rakefile +6 -0
- data/examples/i18n/sr/features/sabiranje.feature +18 -0
- data/examples/i18n/sr/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/sr/lib/calculator.rb +12 -0
- data/examples/i18n/tr/.gitignore +1 -0
- data/examples/i18n/tr/Rakefile +6 -0
- data/examples/i18n/tr/features/bolme.feature +10 -0
- data/examples/i18n/tr/features/step_definitons/hesap_makinesi_adimlari.rb +24 -0
- data/examples/i18n/tr/features/toplama.feature +18 -0
- data/examples/i18n/tr/lib/hesap_makinesi.rb +15 -0
- data/examples/i18n/uz/Rakefile +6 -0
- data/examples/i18n/uz/features/addition.feature +10 -0
- data/examples/i18n/uz/features/consecutive_calculations.feature +17 -0
- data/examples/i18n/uz/features/division.feature +17 -0
- data/examples/i18n/uz/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/uz/features/support/env.rb +6 -0
- data/examples/i18n/uz/features/support/world.rb +8 -0
- data/examples/i18n/uz/lib/calculator.rb +24 -0
- data/examples/i18n/zh-CN/Rakefile +4 -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/.gitignore +1 -0
- data/examples/i18n/zh-TW/Rakefile +4 -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/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/python/features/fibonacci.feature +19 -0
- data/examples/python/features/step_definitions/fib_steps.py +11 -0
- data/examples/python/lib/.gitignore +1 -0
- data/examples/python/lib/fib.py +7 -0
- data/examples/ramaze/README.textile +7 -0
- data/examples/ramaze/Rakefile +6 -0
- data/examples/ramaze/app.rb +21 -0
- data/examples/ramaze/features/add.feature +11 -0
- data/examples/ramaze/features/step_definitions/add_steps.rb +15 -0
- data/examples/ramaze/features/support/env.rb +32 -0
- data/examples/ramaze/layout/default.html.erb +8 -0
- data/examples/ramaze/view/index.html.erb +5 -0
- data/examples/ruby2python/features/fibonacci.feature +19 -0
- data/examples/ruby2python/features/step_definitions/fib_steps.rb +7 -0
- data/examples/ruby2python/features/support/env.rb +21 -0
- data/examples/ruby2python/lib/.gitignore +1 -0
- data/examples/ruby2python/lib/fib.py +7 -0
- data/examples/selenium/Rakefile +6 -0
- data/examples/selenium/features/search.feature +9 -0
- data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium/features/support/env.rb +19 -0
- data/examples/selenium_webrat/Rakefile +6 -0
- data/examples/selenium_webrat/config.ru +0 -0
- data/examples/selenium_webrat/features/search.feature +9 -0
- data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium_webrat/features/support/env.rb +45 -0
- data/examples/self_test/.gitignore +1 -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 +18 -0
- data/examples/self_test/features/tags_sample.feature +17 -0
- data/examples/self_test/features/tons_of_cukes.feature +52 -0
- data/examples/self_test/features/undefined_multiline_args.feature +12 -0
- data/examples/self_test/list-of-features.txt +1 -0
- data/examples/sinatra/README.textile +13 -0
- data/examples/sinatra/Rakefile +6 -0
- data/examples/sinatra/app.rb +14 -0
- data/examples/sinatra/features/add.feature +11 -0
- data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
- data/examples/sinatra/features/support/env.rb +30 -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/tcl/README.textile +11 -0
- data/examples/tcl/Rakefile +6 -0
- data/examples/tcl/features/fibonnacci.feature +17 -0
- data/examples/tcl/features/step_definitions/fib_steps.rb +7 -0
- data/examples/tcl/features/support/env.rb +6 -0
- data/examples/tcl/src/fib.tcl +3 -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 +20 -0
- data/examples/tickets/features.html +138 -0
- data/examples/tickets/features/172.feature +28 -0
- data/examples/tickets/features/177/1.feature +28 -0
- data/examples/tickets/features/177/2.feature +20 -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 +12 -0
- data/examples/tickets/features/246.feature +4 -0
- data/examples/tickets/features/248.feature +11 -0
- data/examples/tickets/features/270/back.feature +14 -0
- data/examples/tickets/features/270/back.steps.rb +14 -0
- data/examples/tickets/features/272/hooks.feature +26 -0
- data/examples/tickets/features/272/hooks_steps.rb +53 -0
- data/examples/tickets/features/279/py_string_indent.feature +25 -0
- data/examples/tickets/features/279/py_string_indent.steps.rb +12 -0
- data/examples/tickets/features/279/wrong.feature_ +11 -0
- data/examples/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
- data/examples/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
- data/examples/tickets/features/306/only_background.feature +4 -0
- data/examples/tickets/features/lib/eatting_machine.rb +18 -0
- data/examples/tickets/features/lib/pantry.rb +20 -0
- data/examples/tickets/features/scenario_outline.feature +95 -0
- data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
- data/examples/tickets/features/step_definitons/248_steps.rb +15 -0
- data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
- data/examples/tickets/features/step_definitons/tickets_steps.rb +81 -0
- data/examples/tickets/features/table_diffing.feature +13 -0
- data/examples/tickets/features/tickets.feature +28 -0
- data/examples/watir/README.textile +16 -0
- data/examples/watir/Rakefile +10 -0
- data/examples/watir/features/search.feature +12 -0
- data/examples/watir/features/step_definitions/search_steps.rb +26 -0
- data/examples/watir/features/support/env.rb +32 -0
- data/examples/watir/features/support/screenshots.rb +44 -0
- data/examples/webrat/features/search.feature +12 -0
- data/examples/webrat/features/step_definitions/kvasir_steps.rb +14 -0
- data/examples/webrat/features/support/env.rb +17 -0
- data/features/announce.feature +122 -0
- data/features/background.feature +308 -0
- data/features/bug_371.feature +32 -0
- data/features/bug_464.feature +16 -0
- data/features/bug_475.feature +43 -0
- data/features/call_many_steps.feature +124 -0
- data/features/cucumber_cli.feature +654 -0
- data/features/cucumber_cli_diff_disabled.feature +52 -0
- data/features/cucumber_cli_outlines.feature +105 -0
- data/features/custom_formatter.feature +47 -0
- data/features/default_snippets.feature +42 -0
- data/features/drb_server_integration.feature +174 -0
- data/features/exception_in_after_block.feature +100 -0
- data/features/exception_in_after_step_block.feature +102 -0
- data/features/exception_in_before_block.feature +78 -0
- data/features/exclude_files.feature +20 -0
- data/features/expand.feature +60 -0
- data/features/html_formatter.feature +7 -0
- data/features/html_formatter/a.html +400 -0
- data/features/junit_formatter.feature +88 -0
- data/features/language_from_header.feature +30 -0
- data/features/language_help.feature +68 -0
- data/features/listener_debugger_formatter.feature +41 -0
- data/features/multiline_names.feature +43 -0
- data/features/negative_tagged_hooks.feature +61 -0
- data/features/post_configuration_hook.feature +37 -0
- data/features/profiles.feature +112 -0
- data/features/rake_task.feature +152 -0
- data/features/report_called_undefined_steps.feature +34 -0
- data/features/simplest.feature +11 -0
- data/features/snippet.feature +22 -0
- data/features/step_definitions/cucumber_steps.rb +154 -0
- data/features/step_definitions/extra_steps.rb +2 -0
- data/features/step_definitions/simplest_steps.rb +3 -0
- data/features/step_definitions/wire_steps.rb +14 -0
- data/features/support/env.rb +141 -0
- data/features/support/env.rb.simplest +7 -0
- data/features/support/fake_wire_server.rb +63 -0
- data/features/table_diffing.feature +45 -0
- data/features/table_mapping.feature +35 -0
- data/features/tag_logic.feature +258 -0
- data/features/transform.feature +245 -0
- data/features/unicode_table.feature +35 -0
- data/features/usage_and_stepdefs_formatter.feature +169 -0
- data/features/wire_protocol.feature +177 -0
- data/features/work_in_progress.feature +156 -0
- data/gem_tasks/contributors.rake +13 -0
- data/gem_tasks/environment.rake +7 -0
- data/gem_tasks/features.rake +18 -0
- data/gem_tasks/fix_cr_lf.rake +10 -0
- data/gem_tasks/flog.rake +4 -0
- data/gem_tasks/rspec.rake +15 -0
- data/gem_tasks/sass.rake +4 -0
- data/gem_tasks/sdoc.rake +12 -0
- data/lib/README.rdoc +12 -0
- data/lib/autotest/cucumber.rb +6 -0
- data/lib/autotest/cucumber_mixin.rb +131 -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 +15 -0
- data/lib/cucumber/ast.rb +30 -0
- data/lib/cucumber/ast/background.rb +75 -0
- data/lib/cucumber/ast/comment.rb +31 -0
- data/lib/cucumber/ast/examples.rb +36 -0
- data/lib/cucumber/ast/feature.rb +85 -0
- data/lib/cucumber/ast/feature_element.rb +68 -0
- data/lib/cucumber/ast/features.rb +40 -0
- data/lib/cucumber/ast/outline_table.rb +166 -0
- data/lib/cucumber/ast/py_string.rb +59 -0
- data/lib/cucumber/ast/scenario.rb +111 -0
- data/lib/cucumber/ast/scenario_outline.rb +100 -0
- data/lib/cucumber/ast/step.rb +121 -0
- data/lib/cucumber/ast/step_collection.rb +76 -0
- data/lib/cucumber/ast/step_invocation.rb +190 -0
- data/lib/cucumber/ast/table.rb +655 -0
- data/lib/cucumber/ast/tags.rb +122 -0
- data/lib/cucumber/ast/tree_walker.rb +201 -0
- data/lib/cucumber/ast/visitor.rb +11 -0
- data/lib/cucumber/broadcaster.rb +13 -0
- data/lib/cucumber/cli/configuration.rb +180 -0
- data/lib/cucumber/cli/drb_client.rb +32 -0
- data/lib/cucumber/cli/language_help_formatter.rb +72 -0
- data/lib/cucumber/cli/main.rb +121 -0
- data/lib/cucumber/cli/options.rb +404 -0
- data/lib/cucumber/cli/profile_loader.rb +82 -0
- data/lib/cucumber/constantize.rb +34 -0
- data/lib/cucumber/core_ext/instance_exec.rb +98 -0
- data/lib/cucumber/core_ext/proc.rb +30 -0
- data/lib/cucumber/core_ext/string.rb +16 -0
- data/lib/cucumber/feature_file.rb +54 -0
- data/lib/cucumber/filter.rb +41 -0
- data/lib/cucumber/formatter/ansicolor.rb +157 -0
- data/lib/cucumber/formatter/color_io.rb +23 -0
- data/lib/cucumber/formatter/console.rb +205 -0
- data/lib/cucumber/formatter/cucumber.css +248 -0
- data/lib/cucumber/formatter/cucumber.sass +241 -0
- data/lib/cucumber/formatter/debug.rb +33 -0
- data/lib/cucumber/formatter/duration.rb +13 -0
- data/lib/cucumber/formatter/html.rb +545 -0
- data/lib/cucumber/formatter/io.rb +33 -0
- data/lib/cucumber/formatter/junit.rb +149 -0
- data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
- data/lib/cucumber/formatter/pdf.rb +234 -0
- data/lib/cucumber/formatter/pretty.rb +237 -0
- data/lib/cucumber/formatter/progress.rb +75 -0
- data/lib/cucumber/formatter/rerun.rb +50 -0
- data/lib/cucumber/formatter/stepdefs.rb +14 -0
- data/lib/cucumber/formatter/steps.rb +49 -0
- data/lib/cucumber/formatter/summary.rb +35 -0
- data/lib/cucumber/formatter/tag_cloud.rb +34 -0
- data/lib/cucumber/formatter/unicode.rb +35 -0
- data/lib/cucumber/formatter/usage.rb +127 -0
- data/lib/cucumber/language_support.rb +30 -0
- data/lib/cucumber/language_support/language_methods.rb +110 -0
- data/lib/cucumber/languages.yml +535 -0
- data/lib/cucumber/parser.rb +8 -0
- data/lib/cucumber/parser/common.rb +170 -0
- data/lib/cucumber/parser/common.tt +21 -0
- data/lib/cucumber/parser/feature.rb +1783 -0
- data/lib/cucumber/parser/feature.tt +317 -0
- data/lib/cucumber/parser/i18n.tt +34 -0
- data/lib/cucumber/parser/natural_language.rb +108 -0
- data/lib/cucumber/parser/py_string.rb +276 -0
- data/lib/cucumber/parser/py_string.tt +45 -0
- data/lib/cucumber/parser/table.rb +305 -0
- data/lib/cucumber/parser/table.tt +60 -0
- data/lib/cucumber/parser/treetop_ext.rb +53 -0
- data/lib/cucumber/platform.rb +31 -0
- data/lib/cucumber/py_support/py_dsl.py +10 -0
- data/lib/cucumber/py_support/py_language.py +10 -0
- data/lib/cucumber/py_support/py_language.rb +81 -0
- data/lib/cucumber/rake/task.rb +166 -0
- data/lib/cucumber/rb_support/rb_dsl.rb +102 -0
- data/lib/cucumber/rb_support/rb_hook.rb +19 -0
- data/lib/cucumber/rb_support/rb_language.rb +179 -0
- data/lib/cucumber/rb_support/rb_step_definition.rb +75 -0
- data/lib/cucumber/rb_support/rb_transform.rb +37 -0
- data/lib/cucumber/rb_support/rb_world.rb +81 -0
- data/lib/cucumber/rb_support/regexp_argument_matcher.rb +21 -0
- data/lib/cucumber/rspec_neuter.rb +23 -0
- data/lib/cucumber/step_argument.rb +9 -0
- data/lib/cucumber/step_definition_light.rb +20 -0
- data/lib/cucumber/step_match.rb +107 -0
- data/lib/cucumber/step_mother.rb +350 -0
- data/lib/cucumber/webrat/element_locator.rb +93 -0
- data/lib/cucumber/webrat/table_locator.rb +1 -0
- data/lib/cucumber/wire_support/connection.rb +42 -0
- data/lib/cucumber/wire_support/request_handler.rb +19 -0
- data/lib/cucumber/wire_support/wire_exception.rb +10 -0
- data/lib/cucumber/wire_support/wire_language.rb +52 -0
- data/lib/cucumber/wire_support/wire_packet.rb +34 -0
- data/lib/cucumber/wire_support/wire_protocol.rb +64 -0
- data/lib/cucumber/wire_support/wire_step_definition.rb +21 -0
- data/spec/cucumber/ast/background_spec.rb +54 -0
- data/spec/cucumber/ast/feature_element_spec.rb +41 -0
- data/spec/cucumber/ast/feature_factory.rb +62 -0
- data/spec/cucumber/ast/feature_spec.rb +44 -0
- data/spec/cucumber/ast/outline_table_spec.rb +21 -0
- data/spec/cucumber/ast/py_string_spec.rb +51 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +73 -0
- data/spec/cucumber/ast/scenario_spec.rb +45 -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 +422 -0
- data/spec/cucumber/ast/tags_spec.rb +29 -0
- data/spec/cucumber/ast/tree_walker_spec.rb +11 -0
- data/spec/cucumber/broadcaster_spec.rb +15 -0
- data/spec/cucumber/cli/configuration_spec.rb +396 -0
- data/spec/cucumber/cli/drb_client_spec.rb +77 -0
- data/spec/cucumber/cli/main_spec.rb +172 -0
- data/spec/cucumber/cli/options_spec.rb +335 -0
- data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
- data/spec/cucumber/core_ext/proc_spec.rb +68 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
- data/spec/cucumber/formatter/color_io_spec.rb +27 -0
- data/spec/cucumber/formatter/console_spec.rb +20 -0
- data/spec/cucumber/formatter/duration_spec.rb +22 -0
- data/spec/cucumber/formatter/html_spec.rb +213 -0
- data/spec/cucumber/formatter/junit_spec.rb +110 -0
- data/spec/cucumber/formatter/progress_spec.rb +38 -0
- data/spec/cucumber/formatter/spec_helper.rb +50 -0
- data/spec/cucumber/parser/feature_parser_spec.rb +400 -0
- data/spec/cucumber/parser/table_parser_spec.rb +52 -0
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +132 -0
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +18 -0
- data/spec/cucumber/sell_cucumbers.feature +19 -0
- data/spec/cucumber/step_match_spec.rb +56 -0
- data/spec/cucumber/step_mother_spec.rb +270 -0
- data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
- data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
- data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
- data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
- data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
- data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
- data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
- data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
- data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
- data/spec/cucumber/treetop_parser/spaces.feature +12 -0
- data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
- data/spec/cucumber/treetop_parser/with_comments.feature +23 -0
- data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
- data/spec/cucumber/wire_support/wire_language_spec.rb +47 -0
- data/spec/cucumber/wire_support/wire_packet_spec.rb +26 -0
- data/spec/cucumber/world/pending_spec.rb +46 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +18 -0
- metadata +813 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
Feature: Unicode in tables
|
|
2
|
+
In order to please the whole world,
|
|
3
|
+
unicode characters in tables should be
|
|
4
|
+
properly aligned
|
|
5
|
+
|
|
6
|
+
Scenario: All sorts of weird stuff
|
|
7
|
+
Given a standard Cucumber project directory structure
|
|
8
|
+
And a file named "features/unicode.feature" with:
|
|
9
|
+
"""
|
|
10
|
+
Feature: Featuring unicode
|
|
11
|
+
|
|
12
|
+
Scenario: So what, whatever
|
|
13
|
+
Given passing
|
|
14
|
+
| Brüno | abc |
|
|
15
|
+
| Bruno | æøå |
|
|
16
|
+
"""
|
|
17
|
+
And a file named "features/env.rb" with:
|
|
18
|
+
"""
|
|
19
|
+
$KCODE='u'
|
|
20
|
+
"""
|
|
21
|
+
When I run cucumber -q --dry-run features/unicode.feature
|
|
22
|
+
Then it should pass with
|
|
23
|
+
"""
|
|
24
|
+
Feature: Featuring unicode
|
|
25
|
+
|
|
26
|
+
Scenario: So what, whatever
|
|
27
|
+
Given passing
|
|
28
|
+
| Brüno | abc |
|
|
29
|
+
| Bruno | æøå |
|
|
30
|
+
|
|
31
|
+
1 scenario (1 undefined)
|
|
32
|
+
1 step (1 undefined)
|
|
33
|
+
|
|
34
|
+
"""
|
|
35
|
+
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
Feature: Cucumber command line
|
|
2
|
+
In order to be able to write an editor plugin that can jump between
|
|
3
|
+
steps and step definitions, Cucumber must provide a way to
|
|
4
|
+
display how they are related.
|
|
5
|
+
|
|
6
|
+
Scenario: List usage of step definitions
|
|
7
|
+
When I run cucumber features --format usage --dry-run
|
|
8
|
+
Then STDERR should be empty
|
|
9
|
+
And it should pass with
|
|
10
|
+
"""
|
|
11
|
+
-------------------------------------UU-U--------------UUUUU---------U-------U--------------U-UU-------------------------------------------------UU
|
|
12
|
+
|
|
13
|
+
/^'(.+)' cukes$/ # features/step_definitions/sample_steps.rb:27
|
|
14
|
+
Given '10' cukes # features/background/background_with_name.feature:4
|
|
15
|
+
Given '10' cukes # features/background/background_with_name.feature:4
|
|
16
|
+
And '10' cukes # features/background/failing_background.feature:6
|
|
17
|
+
And '10' cukes # features/background/failing_background.feature:6
|
|
18
|
+
And '10' cukes # features/background/failing_background.feature:6
|
|
19
|
+
Given '10' cukes # features/background/passing_background.feature:4
|
|
20
|
+
Given '10' cukes # features/background/passing_background.feature:4
|
|
21
|
+
Given '10' cukes # features/background/passing_background.feature:4
|
|
22
|
+
Given '10' cukes # features/background/scenario_outline_passing_background.feature:4
|
|
23
|
+
Given '2' cukes # features/tons_of_cukes.feature:4
|
|
24
|
+
Given '2' cukes # features/tons_of_cukes.feature:5
|
|
25
|
+
Given '2' cukes # features/tons_of_cukes.feature:6
|
|
26
|
+
Given '2' cukes # features/tons_of_cukes.feature:7
|
|
27
|
+
Given '2' cukes # features/tons_of_cukes.feature:8
|
|
28
|
+
Given '2' cukes # features/tons_of_cukes.feature:9
|
|
29
|
+
Given '2' cukes # features/tons_of_cukes.feature:10
|
|
30
|
+
Given '2' cukes # features/tons_of_cukes.feature:11
|
|
31
|
+
Given '2' cukes # features/tons_of_cukes.feature:12
|
|
32
|
+
Given '2' cukes # features/tons_of_cukes.feature:13
|
|
33
|
+
Given '2' cukes # features/tons_of_cukes.feature:14
|
|
34
|
+
Given '2' cukes # features/tons_of_cukes.feature:15
|
|
35
|
+
Given '2' cukes # features/tons_of_cukes.feature:16
|
|
36
|
+
Given '2' cukes # features/tons_of_cukes.feature:17
|
|
37
|
+
Given '2' cukes # features/tons_of_cukes.feature:18
|
|
38
|
+
Given '2' cukes # features/tons_of_cukes.feature:19
|
|
39
|
+
Given '2' cukes # features/tons_of_cukes.feature:20
|
|
40
|
+
Given '2' cukes # features/tons_of_cukes.feature:21
|
|
41
|
+
Given '2' cukes # features/tons_of_cukes.feature:22
|
|
42
|
+
Given '2' cukes # features/tons_of_cukes.feature:23
|
|
43
|
+
Given '2' cukes # features/tons_of_cukes.feature:24
|
|
44
|
+
Given '2' cukes # features/tons_of_cukes.feature:25
|
|
45
|
+
Given '2' cukes # features/tons_of_cukes.feature:26
|
|
46
|
+
Given '2' cukes # features/tons_of_cukes.feature:27
|
|
47
|
+
Given '2' cukes # features/tons_of_cukes.feature:28
|
|
48
|
+
Given '2' cukes # features/tons_of_cukes.feature:29
|
|
49
|
+
Given '2' cukes # features/tons_of_cukes.feature:30
|
|
50
|
+
Given '2' cukes # features/tons_of_cukes.feature:31
|
|
51
|
+
Given '2' cukes # features/tons_of_cukes.feature:32
|
|
52
|
+
Given '2' cukes # features/tons_of_cukes.feature:33
|
|
53
|
+
Given '2' cukes # features/tons_of_cukes.feature:34
|
|
54
|
+
Given '2' cukes # features/tons_of_cukes.feature:35
|
|
55
|
+
Given '2' cukes # features/tons_of_cukes.feature:36
|
|
56
|
+
Given '2' cukes # features/tons_of_cukes.feature:37
|
|
57
|
+
Given '2' cukes # features/tons_of_cukes.feature:38
|
|
58
|
+
Given '2' cukes # features/tons_of_cukes.feature:39
|
|
59
|
+
Given '2' cukes # features/tons_of_cukes.feature:40
|
|
60
|
+
Given '2' cukes # features/tons_of_cukes.feature:41
|
|
61
|
+
Given '2' cukes # features/tons_of_cukes.feature:42
|
|
62
|
+
Given '2' cukes # features/tons_of_cukes.feature:43
|
|
63
|
+
Given '2' cukes # features/tons_of_cukes.feature:44
|
|
64
|
+
Given '2' cukes # features/tons_of_cukes.feature:45
|
|
65
|
+
Given '2' cukes # features/tons_of_cukes.feature:46
|
|
66
|
+
Given '2' cukes # features/tons_of_cukes.feature:47
|
|
67
|
+
Given '2' cukes # features/tons_of_cukes.feature:48
|
|
68
|
+
Given '2' cukes # features/tons_of_cukes.feature:49
|
|
69
|
+
Given '2' cukes # features/tons_of_cukes.feature:50
|
|
70
|
+
Given '2' cukes # features/tons_of_cukes.feature:51
|
|
71
|
+
Given '2' cukes # features/tons_of_cukes.feature:52
|
|
72
|
+
/^'(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:35
|
|
73
|
+
And '10' global cukes # features/background/failing_background_after_success.feature:5
|
|
74
|
+
And '10' global cukes # features/background/failing_background_after_success.feature:5
|
|
75
|
+
And '10' global cukes # features/background/failing_background_after_success.feature:5
|
|
76
|
+
/^I should have '(.+)' cukes$/ # features/step_definitions/sample_steps.rb:31
|
|
77
|
+
Then I should have '10' cukes # features/background/background_with_name.feature:7
|
|
78
|
+
Then I should have '10' cukes # features/background/failing_background.feature:9
|
|
79
|
+
Then I should have '10' cukes # features/background/failing_background.feature:12
|
|
80
|
+
Then I should have '10' cukes # features/background/passing_background.feature:7
|
|
81
|
+
Then I should have '10' cukes # features/background/passing_background.feature:10
|
|
82
|
+
Then I should have '10' cukes # features/background/pending_background.feature:7
|
|
83
|
+
Then I should have '10' cukes # features/background/pending_background.feature:10
|
|
84
|
+
/^I should have '(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:42
|
|
85
|
+
Then I should have '10' global cukes # features/background/failing_background_after_success.feature:8
|
|
86
|
+
Then I should have '10' global cukes # features/background/failing_background_after_success.feature:11
|
|
87
|
+
/^a step definition that calls an undefined step$/ # features/step_definitions/sample_steps.rb:19
|
|
88
|
+
Given a step definition that calls an undefined step # features/call_undefined_step_from_step_def.feature:4
|
|
89
|
+
/^another unused$/ # features/step_definitions/sample_steps.rb:69
|
|
90
|
+
NOT MATCHED BY ANY STEPS
|
|
91
|
+
/^call step "(.*)"$/ # features/step_definitions/sample_steps.rb:23
|
|
92
|
+
Given call step "a step definition that calls an undefined step" # features/call_undefined_step_from_step_def.feature:7
|
|
93
|
+
/^failing expectation$/ # features/step_definitions/sample_steps.rb:62
|
|
94
|
+
Given failing expectation # features/failing_expectation.feature:4
|
|
95
|
+
/^failing without a table$/ # features/step_definitions/sample_steps.rb:15
|
|
96
|
+
Given failing without a table # features/background/failing_background.feature:5
|
|
97
|
+
Given failing without a table # features/background/failing_background.feature:5
|
|
98
|
+
Given failing without a table # features/background/failing_background.feature:5
|
|
99
|
+
Given failing without a table # features/background/scenario_outline_failing_background.feature:4
|
|
100
|
+
Given failing without a table # features/search_sample.feature:10
|
|
101
|
+
/^failing$/ # features/step_definitions/sample_steps.rb:8
|
|
102
|
+
Given failing # features/sample.feature:18
|
|
103
|
+
/^multiline string$/ # features/step_definitions/sample_steps.rb:50
|
|
104
|
+
And multiline string # features/background/multiline_args_background.feature:7
|
|
105
|
+
And multiline string # features/background/multiline_args_background.feature:7
|
|
106
|
+
And multiline string # features/background/multiline_args_background.feature:7
|
|
107
|
+
/^passing without a table$/ # features/step_definitions/sample_steps.rb:12
|
|
108
|
+
Given passing without a table # features/background/background_tagged_before_on_outline.feature:5
|
|
109
|
+
Given passing without a table # features/background/failing_background_after_success.feature:4
|
|
110
|
+
Given passing without a table # features/background/failing_background_after_success.feature:4
|
|
111
|
+
Given passing without a table # features/background/failing_background_after_success.feature:4
|
|
112
|
+
Given passing without a table # features/multiline_name.feature:6
|
|
113
|
+
Given passing without a table # features/multiline_name.feature:6
|
|
114
|
+
Given passing without a table # features/multiline_name.feature:11
|
|
115
|
+
Given passing without a table # features/search_sample.feature:4
|
|
116
|
+
Given passing without a table # features/search_sample.feature:4
|
|
117
|
+
Given passing without a table # features/search_sample.feature:7
|
|
118
|
+
Given passing without a table # features/search_sample.feature:4
|
|
119
|
+
/^passing$/ # features/step_definitions/sample_steps.rb:5
|
|
120
|
+
Given passing # features/sample.feature:12
|
|
121
|
+
/^table$/ # features/step_definitions/sample_steps.rb:46
|
|
122
|
+
Given table # features/background/multiline_args_background.feature:4
|
|
123
|
+
Given table # features/background/multiline_args_background.feature:4
|
|
124
|
+
Given table # features/background/multiline_args_background.feature:4
|
|
125
|
+
/^the multiline string should be$/ # features/step_definitions/sample_steps.rb:58
|
|
126
|
+
Then the multiline string should be # features/background/multiline_args_background.feature:17
|
|
127
|
+
Then the multiline string should be # features/background/multiline_args_background.feature:27
|
|
128
|
+
/^the table should be$/ # features/step_definitions/sample_steps.rb:54
|
|
129
|
+
Then the table should be # features/background/multiline_args_background.feature:14
|
|
130
|
+
Then the table should be # features/background/multiline_args_background.feature:24
|
|
131
|
+
/^unused$/ # features/step_definitions/sample_steps.rb:66
|
|
132
|
+
NOT MATCHED BY ANY STEPS
|
|
133
|
+
|
|
134
|
+
43 scenarios (32 skipped, 10 undefined, 1 passed)
|
|
135
|
+
131 steps (117 skipped, 14 undefined)
|
|
136
|
+
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
Scenario: --format steps
|
|
140
|
+
When I run cucumber features --format stepdefs --dry-run
|
|
141
|
+
Then STDERR should be empty
|
|
142
|
+
And it should pass with
|
|
143
|
+
"""
|
|
144
|
+
-------------------------------------UU-U--------------UUUUU---------U-------U--------------U-UU-------------------------------------------------UU
|
|
145
|
+
|
|
146
|
+
/^'(.+)' cukes$/ # features/step_definitions/sample_steps.rb:27
|
|
147
|
+
/^'(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:35
|
|
148
|
+
/^I should have '(.+)' cukes$/ # features/step_definitions/sample_steps.rb:31
|
|
149
|
+
/^I should have '(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:42
|
|
150
|
+
/^a step definition that calls an undefined step$/ # features/step_definitions/sample_steps.rb:19
|
|
151
|
+
/^another unused$/ # features/step_definitions/sample_steps.rb:69
|
|
152
|
+
NOT MATCHED BY ANY STEPS
|
|
153
|
+
/^call step "(.*)"$/ # features/step_definitions/sample_steps.rb:23
|
|
154
|
+
/^failing expectation$/ # features/step_definitions/sample_steps.rb:62
|
|
155
|
+
/^failing without a table$/ # features/step_definitions/sample_steps.rb:15
|
|
156
|
+
/^failing$/ # features/step_definitions/sample_steps.rb:8
|
|
157
|
+
/^multiline string$/ # features/step_definitions/sample_steps.rb:50
|
|
158
|
+
/^passing without a table$/ # features/step_definitions/sample_steps.rb:12
|
|
159
|
+
/^passing$/ # features/step_definitions/sample_steps.rb:5
|
|
160
|
+
/^table$/ # features/step_definitions/sample_steps.rb:46
|
|
161
|
+
/^the multiline string should be$/ # features/step_definitions/sample_steps.rb:58
|
|
162
|
+
/^the table should be$/ # features/step_definitions/sample_steps.rb:54
|
|
163
|
+
/^unused$/ # features/step_definitions/sample_steps.rb:66
|
|
164
|
+
NOT MATCHED BY ANY STEPS
|
|
165
|
+
|
|
166
|
+
43 scenarios (32 skipped, 10 undefined, 1 passed)
|
|
167
|
+
131 steps (117 skipped, 14 undefined)
|
|
168
|
+
|
|
169
|
+
"""
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
@wire
|
|
2
|
+
Feature: Wire Protocol
|
|
3
|
+
In order to be allow Cucumber to touch my app in intimate places
|
|
4
|
+
As a developer on platform which doesn't support Ruby
|
|
5
|
+
I want a low-level protocol which Cucumber can use to run steps within my app
|
|
6
|
+
|
|
7
|
+
#
|
|
8
|
+
# Cucumber's wire protocol is an implementation of Cucumber's internal 'programming language' abstraction,
|
|
9
|
+
# and allows step definitions to be implemented and invoked on any platform.
|
|
10
|
+
#
|
|
11
|
+
# Communication is over a TCP socket, which Cucumber connects to when it finds a definition file with the
|
|
12
|
+
# .wire extension in the step_definitions folder (or other load path).
|
|
13
|
+
#
|
|
14
|
+
# There are currently two messages which Cucumber sends over the wire:
|
|
15
|
+
#
|
|
16
|
+
# * step_matches : this is used to find out whether the wire end has a definition for a given step
|
|
17
|
+
# * invoke : this is used to ask for a step definition to be invoked
|
|
18
|
+
#
|
|
19
|
+
# Message packets are formatted as JSON-encoded strings, with a newline character signalling the end of a
|
|
20
|
+
# packet. These messages are described below, with examples.
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
Background:
|
|
24
|
+
Given a standard Cucumber project directory structure
|
|
25
|
+
And a file named "features/wired.feature" with:
|
|
26
|
+
"""
|
|
27
|
+
Scenario: Wired
|
|
28
|
+
Given we're all wired
|
|
29
|
+
|
|
30
|
+
"""
|
|
31
|
+
And a file named "features/step_definitions/some_remote_place.wire" with:
|
|
32
|
+
"""
|
|
33
|
+
host: localhost
|
|
34
|
+
port: 54321
|
|
35
|
+
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# step_matches
|
|
41
|
+
#
|
|
42
|
+
# When the features have been parsed, Cucumber will send a step_matches message to ask the wire end
|
|
43
|
+
# if it can match a step name. This happens for each of the steps in each of the features.
|
|
44
|
+
# The wire end replies with a step_match array, containing the IDs of any step definitions that could
|
|
45
|
+
# be invoked for the given step name.
|
|
46
|
+
|
|
47
|
+
Scenario: Dry run finds no step match
|
|
48
|
+
Given there is a wire server running on port 54321 which understands the following protocol:
|
|
49
|
+
| request | response |
|
|
50
|
+
| ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[]] |
|
|
51
|
+
When I run cucumber --dry-run -f progress features
|
|
52
|
+
And it should pass with
|
|
53
|
+
"""
|
|
54
|
+
U
|
|
55
|
+
|
|
56
|
+
1 scenario (1 undefined)
|
|
57
|
+
1 step (1 undefined)
|
|
58
|
+
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
# When a step match is returned, it contains an identifier for the step definition to be used
|
|
62
|
+
# later when referring to this step definition again if it needs to be invoked. The identifier
|
|
63
|
+
# can take any form (as long as it's within a string) and is simply used for the wire end's own
|
|
64
|
+
# reference.
|
|
65
|
+
# The step match also contains any argument values as parsed out by the wire end's own regular
|
|
66
|
+
# expression or other argument matching process.
|
|
67
|
+
Scenario: Dry run finds a step match
|
|
68
|
+
Given there is a wire server running on port 54321 which understands the following protocol:
|
|
69
|
+
| request | response |
|
|
70
|
+
| ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[{"id":"1", "args":[]}]] |
|
|
71
|
+
When I run cucumber --dry-run -f progress features
|
|
72
|
+
And it should pass with
|
|
73
|
+
"""
|
|
74
|
+
-
|
|
75
|
+
|
|
76
|
+
1 scenario (1 skipped)
|
|
77
|
+
1 step (1 skipped)
|
|
78
|
+
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
#
|
|
83
|
+
# invoke
|
|
84
|
+
#
|
|
85
|
+
# Assuming a step_match was returned for a given step name, when it's time to invoke that
|
|
86
|
+
# step definition, Cucumber will send an invoke message.
|
|
87
|
+
# The message contains the ID of the step definition, as returned by the wire end from the
|
|
88
|
+
# step_matches call, along with the arguments that were parsed from the step name during the
|
|
89
|
+
# same step_matches call.
|
|
90
|
+
# The wire end will reply with either a step_failed or a success message.
|
|
91
|
+
|
|
92
|
+
Scenario: Invoke a step definition which passes
|
|
93
|
+
Given there is a wire server running on port 54321 which understands the following protocol:
|
|
94
|
+
| request | response |
|
|
95
|
+
| ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[{"id":"1", "args":[]}]] |
|
|
96
|
+
| ["begin_scenario",null] | ["success",null] |
|
|
97
|
+
| ["invoke",{"id":"1","args":[]}] | ["success",null] |
|
|
98
|
+
| ["end_scenario",null] | ["success",null] |
|
|
99
|
+
When I run cucumber -f progress --backtrace features
|
|
100
|
+
And it should pass with
|
|
101
|
+
"""
|
|
102
|
+
.
|
|
103
|
+
|
|
104
|
+
1 scenario (1 passed)
|
|
105
|
+
1 step (1 passed)
|
|
106
|
+
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
# When a step definition fails, it can return details of the exception in the reply to invoke. These
|
|
110
|
+
# will then be passed by Cucumber to the formatters for display to the user.
|
|
111
|
+
#
|
|
112
|
+
Scenario: Invoke a step definition which fails
|
|
113
|
+
Given there is a wire server running on port 54321 which understands the following protocol:
|
|
114
|
+
| request | response |
|
|
115
|
+
| ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[{"id":"1", "args":[]}]] |
|
|
116
|
+
| ["begin_scenario",null] | ["success",null] |
|
|
117
|
+
| ["invoke",{"id":"1","args":[]}] | ["step_failed",{"message":"The wires are down"}] |
|
|
118
|
+
| ["end_scenario",null] | ["success",null] |
|
|
119
|
+
When I run cucumber -f progress features
|
|
120
|
+
Then STDERR should be empty
|
|
121
|
+
And it should fail with
|
|
122
|
+
"""
|
|
123
|
+
F
|
|
124
|
+
|
|
125
|
+
(::) failed steps (::)
|
|
126
|
+
|
|
127
|
+
The wires are down (Cucumber::WireSupport::WireException)
|
|
128
|
+
features/wired.feature:2:in `Given we're all wired'
|
|
129
|
+
|
|
130
|
+
Failing Scenarios:
|
|
131
|
+
cucumber features/wired.feature:1 # Scenario: Wired
|
|
132
|
+
|
|
133
|
+
1 scenario (1 failed)
|
|
134
|
+
1 step (1 failed)
|
|
135
|
+
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
# Imagine we have a step definition like:
|
|
139
|
+
#
|
|
140
|
+
# Given /we're all (.*)/ do |what_we_are|
|
|
141
|
+
# end
|
|
142
|
+
#
|
|
143
|
+
# When this step definition matches the step name in our feature, the word 'wired' will be parsed as an
|
|
144
|
+
# argument.
|
|
145
|
+
#
|
|
146
|
+
# Cucumber expects this StepArgument to be returned in the StepMatch. The keys have the following meanings:
|
|
147
|
+
# * val : the value of the string captured for that argument from the step name passed in step_matches
|
|
148
|
+
# * pos : the position within the step name that the argument was matched (used for formatter highlighting)
|
|
149
|
+
#
|
|
150
|
+
Scenario: Invoke a step definition which takes arguments (and passes)
|
|
151
|
+
Given there is a wire server running on port 54321 which understands the following protocol:
|
|
152
|
+
| request | response |
|
|
153
|
+
| ["step_matches",{"name_to_match":"we're all wired"}] | ["step_matches",[{"id":"1", "args":[{"val":"wired", "pos":10}]}]] |
|
|
154
|
+
| ["begin_scenario",null] | ["success",null] |
|
|
155
|
+
| ["invoke",{"id":"1","args":["wired"]}] | ["success",null] |
|
|
156
|
+
| ["end_scenario",null] | ["success",null] |
|
|
157
|
+
When I run cucumber -f progress --backtrace features
|
|
158
|
+
Then STDERR should be empty
|
|
159
|
+
And it should pass with
|
|
160
|
+
"""
|
|
161
|
+
.
|
|
162
|
+
|
|
163
|
+
1 scenario (1 passed)
|
|
164
|
+
1 step (1 passed)
|
|
165
|
+
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
Scenario: Unexpected response
|
|
170
|
+
Given there is a wire server running on port 54321 which understands the following protocol:
|
|
171
|
+
| request | response |
|
|
172
|
+
| ["begin_scenario",null] | ["yikes"] |
|
|
173
|
+
When I run cucumber -f progress features
|
|
174
|
+
Then STDERR should match
|
|
175
|
+
"""
|
|
176
|
+
undefined method `handle_yikes'
|
|
177
|
+
"""
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
Feature: Cucumber --work-in-progress switch
|
|
2
|
+
In order to ensure that feature scenarios do not pass until they are expected to
|
|
3
|
+
Developers should be able to run cucumber in a mode that
|
|
4
|
+
- will fail if any scenario passes completely
|
|
5
|
+
- will not fail otherwise
|
|
6
|
+
|
|
7
|
+
Background: A passing and a pending feature
|
|
8
|
+
Given a standard Cucumber project directory structure
|
|
9
|
+
Given a file named "features/wip.feature" with:
|
|
10
|
+
"""
|
|
11
|
+
Feature: WIP
|
|
12
|
+
@failing
|
|
13
|
+
Scenario: Failing
|
|
14
|
+
Given a failing step
|
|
15
|
+
|
|
16
|
+
@undefined
|
|
17
|
+
Scenario: Undefined
|
|
18
|
+
Given an undefined step
|
|
19
|
+
|
|
20
|
+
@pending
|
|
21
|
+
Scenario: Pending
|
|
22
|
+
Given a pending step
|
|
23
|
+
|
|
24
|
+
@passing
|
|
25
|
+
Scenario: Passing
|
|
26
|
+
Given a passing step
|
|
27
|
+
"""
|
|
28
|
+
And a file named "features/passing_outline.feature" with:
|
|
29
|
+
"""
|
|
30
|
+
Feature: Not WIP
|
|
31
|
+
Scenario Outline: Passing
|
|
32
|
+
Given a <what> step
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
| what |
|
|
36
|
+
| passing |
|
|
37
|
+
"""
|
|
38
|
+
And a file named "features/step_definitions/steps.rb" with:
|
|
39
|
+
"""
|
|
40
|
+
Given /^a failing step$/ do
|
|
41
|
+
raise "I fail"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Given /^a passing step$/ do
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
Given /^a pending step$/ do
|
|
48
|
+
pending
|
|
49
|
+
end
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
Scenario: Pass with Failing Scenarios
|
|
53
|
+
When I run cucumber -q -w -t @failing features/wip.feature
|
|
54
|
+
Then STDERR should be empty
|
|
55
|
+
Then it should pass with
|
|
56
|
+
"""
|
|
57
|
+
Feature: WIP
|
|
58
|
+
|
|
59
|
+
@failing
|
|
60
|
+
Scenario: Failing
|
|
61
|
+
Given a failing step
|
|
62
|
+
I fail (RuntimeError)
|
|
63
|
+
./features/step_definitions/steps.rb:2:in `/^a failing step$/'
|
|
64
|
+
features/wip.feature:4:in `Given a failing step'
|
|
65
|
+
|
|
66
|
+
Failing Scenarios:
|
|
67
|
+
cucumber features/wip.feature:3 # Scenario: Failing
|
|
68
|
+
|
|
69
|
+
1 scenario (1 failed)
|
|
70
|
+
1 step (1 failed)
|
|
71
|
+
|
|
72
|
+
The --wip switch was used, so the failures were expected. All is good.
|
|
73
|
+
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
Scenario: Pass with Undefined Scenarios
|
|
77
|
+
When I run cucumber -q -w -t @undefined features/wip.feature
|
|
78
|
+
Then it should pass with
|
|
79
|
+
"""
|
|
80
|
+
Feature: WIP
|
|
81
|
+
|
|
82
|
+
@undefined
|
|
83
|
+
Scenario: Undefined
|
|
84
|
+
Given an undefined step
|
|
85
|
+
|
|
86
|
+
1 scenario (1 undefined)
|
|
87
|
+
1 step (1 undefined)
|
|
88
|
+
|
|
89
|
+
The --wip switch was used, so the failures were expected. All is good.
|
|
90
|
+
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
Scenario: Pass with Undefined Scenarios
|
|
94
|
+
When I run cucumber -q -w -t @pending features/wip.feature
|
|
95
|
+
Then it should pass with
|
|
96
|
+
"""
|
|
97
|
+
Feature: WIP
|
|
98
|
+
|
|
99
|
+
@pending
|
|
100
|
+
Scenario: Pending
|
|
101
|
+
Given a pending step
|
|
102
|
+
TODO (Cucumber::Pending)
|
|
103
|
+
./features/step_definitions/steps.rb:9:in `/^a pending step$/'
|
|
104
|
+
features/wip.feature:12:in `Given a pending step'
|
|
105
|
+
|
|
106
|
+
1 scenario (1 pending)
|
|
107
|
+
1 step (1 pending)
|
|
108
|
+
|
|
109
|
+
The --wip switch was used, so the failures were expected. All is good.
|
|
110
|
+
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
Scenario: Fail with Passing Scenarios
|
|
114
|
+
When I run cucumber -q -w -t @passing features/wip.feature
|
|
115
|
+
Then it should fail with
|
|
116
|
+
"""
|
|
117
|
+
Feature: WIP
|
|
118
|
+
|
|
119
|
+
@passing
|
|
120
|
+
Scenario: Passing
|
|
121
|
+
Given a passing step
|
|
122
|
+
|
|
123
|
+
1 scenario (1 passed)
|
|
124
|
+
1 step (1 passed)
|
|
125
|
+
|
|
126
|
+
The --wip switch was used, so I didn't expect anything to pass. These scenarios passed:
|
|
127
|
+
(::) passed scenarios (::)
|
|
128
|
+
|
|
129
|
+
features/wip.feature:15:in `Scenario: Passing'
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
Scenario: Fail with Passing Scenario Outline
|
|
135
|
+
When I run cucumber -q -w features/passing_outline.feature
|
|
136
|
+
Then it should fail with
|
|
137
|
+
"""
|
|
138
|
+
Feature: Not WIP
|
|
139
|
+
|
|
140
|
+
Scenario Outline: Passing
|
|
141
|
+
Given a <what> step
|
|
142
|
+
|
|
143
|
+
Examples:
|
|
144
|
+
| what |
|
|
145
|
+
| passing |
|
|
146
|
+
|
|
147
|
+
1 scenario (1 passed)
|
|
148
|
+
1 step (1 passed)
|
|
149
|
+
|
|
150
|
+
The --wip switch was used, so I didn't expect anything to pass. These scenarios passed:
|
|
151
|
+
(::) passed scenarios (::)
|
|
152
|
+
|
|
153
|
+
features/passing_outline.feature:7:in `| passing |'
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
"""
|