dwaite-cucumber 0.3.101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +1067 -0
- data/License.txt +22 -0
- data/Manifest.txt +453 -0
- data/README.txt +4 -0
- data/Rakefile +9 -0
- data/bin/cucumber +17 -0
- data/config/hoe.rb +78 -0
- data/config/requirements.rb +15 -0
- data/cucumber.yml +2 -0
- data/examples/cs/README.textile +1 -0
- data/examples/cs/Rakefile +12 -0
- data/examples/cs/compile.bat +1 -0
- data/examples/cs/features/addition.feature +16 -0
- data/examples/cs/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/cs/src/demo/Calculator.cs +20 -0
- data/examples/dos_line_endings/Rakefile +6 -0
- data/examples/dos_line_endings/features/dos_line_endings.feature +9 -0
- data/examples/i18n/README.textile +18 -0
- data/examples/i18n/Rakefile +32 -0
- data/examples/i18n/ar/Rakefile +6 -0
- data/examples/i18n/ar/features/addition.feature +17 -0
- data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ar/lib/calculator.rb +11 -0
- data/examples/i18n/bg/Rakefile +6 -0
- data/examples/i18n/bg/features/addition.feature +12 -0
- data/examples/i18n/bg/features/consecutive_calculations.feature +19 -0
- data/examples/i18n/bg/features/division.feature +17 -0
- data/examples/i18n/bg/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/bg/features/support/env.rb +6 -0
- data/examples/i18n/bg/features/support/world.rb +8 -0
- data/examples/i18n/bg/lib/calculator.rb +24 -0
- data/examples/i18n/cat/Rakefile +6 -0
- data/examples/i18n/cat/features/step_definitons/calculator_steps.rb +21 -0
- data/examples/i18n/cat/features/suma.feature +17 -0
- data/examples/i18n/cat/lib/calculadora.rb +16 -0
- data/examples/i18n/da/Rakefile +6 -0
- data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +24 -0
- data/examples/i18n/da/features/summering.feature +18 -0
- data/examples/i18n/da/lib/kalkulator.rb +11 -0
- data/examples/i18n/de/Rakefile +6 -0
- data/examples/i18n/de/features/addition.feature +17 -0
- data/examples/i18n/de/features/division.feature +10 -0
- data/examples/i18n/de/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/de/lib/calculator.rb +14 -0
- data/examples/i18n/en/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 +17 -0
- data/examples/i18n/fi/lib/laskin.rb +14 -0
- data/examples/i18n/fr/Rakefile +6 -0
- data/examples/i18n/fr/features/addition.feature +18 -0
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +25 -0
- data/examples/i18n/fr/lib/calculatrice.rb +10 -0
- data/examples/i18n/he/Rakefile +6 -0
- data/examples/i18n/he/features/addition.feature +17 -0
- data/examples/i18n/he/features/division.feature +10 -0
- data/examples/i18n/he/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/he/lib/calculator.rb +14 -0
- data/examples/i18n/hu/Rakefile +6 -0
- data/examples/i18n/hu/features/addition.feature +17 -0
- data/examples/i18n/hu/features/division.feature +10 -0
- data/examples/i18n/hu/features/step_definitons/calculator_steps.rb +25 -0
- data/examples/i18n/hu/lib/calculator.rb +14 -0
- data/examples/i18n/id/Rakefile +6 -0
- data/examples/i18n/id/features/addition.feature +17 -0
- data/examples/i18n/id/features/division.feature +10 -0
- data/examples/i18n/id/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/id/lib/calculator.rb +14 -0
- data/examples/i18n/it/Rakefile +6 -0
- data/examples/i18n/it/features/somma.feature +11 -0
- data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +24 -0
- data/examples/i18n/it/lib/calcolatrice.rb +11 -0
- data/examples/i18n/ja/Rakefile +6 -0
- data/examples/i18n/ja/features/addition.feature +17 -0
- data/examples/i18n/ja/features/division.feature +10 -0
- data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ja/lib/calculator.rb +14 -0
- data/examples/i18n/ko/Rakefile +6 -0
- data/examples/i18n/ko/features/addition.feature +17 -0
- data/examples/i18n/ko/features/division.feature +11 -0
- data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ko/lib/calculator.rb +14 -0
- data/examples/i18n/lt/Rakefile +6 -0
- data/examples/i18n/lt/features/addition.feature +17 -0
- data/examples/i18n/lt/features/division.feature +10 -0
- data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/lt/lib/calculator.rb +14 -0
- data/examples/i18n/lv/Rakefile +6 -0
- data/examples/i18n/lv/features/addition.feature +17 -0
- data/examples/i18n/lv/features/division.feature +10 -0
- data/examples/i18n/lv/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/lv/lib/calculator.rb +14 -0
- data/examples/i18n/no/Rakefile +6 -0
- data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +17 -0
- data/examples/i18n/no/features/summering.feature +19 -0
- data/examples/i18n/no/features/support/env.rb +6 -0
- data/examples/i18n/no/lib/kalkulator.rb +11 -0
- data/examples/i18n/pl/Rakefile +6 -0
- data/examples/i18n/pl/features/addition.feature +17 -0
- data/examples/i18n/pl/features/division.feature +10 -0
- data/examples/i18n/pl/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/pl/features/support/env.rb +6 -0
- data/examples/i18n/pl/lib/calculator.rb +14 -0
- data/examples/i18n/pt/Rakefile +6 -0
- data/examples/i18n/pt/features/adicao.feature +11 -0
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +20 -0
- data/examples/i18n/pt/features/support/env.rb +6 -0
- data/examples/i18n/pt/lib/calculadora.rb +10 -0
- data/examples/i18n/ro/Rakefile +6 -0
- data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ro/features/suma.feature +11 -0
- data/examples/i18n/ro/lib/calculator.rb +11 -0
- data/examples/i18n/ru/Rakefile +6 -0
- data/examples/i18n/ru/features/addition.feature +11 -0
- data/examples/i18n/ru/features/consecutive_calculations.feature +17 -0
- data/examples/i18n/ru/features/division.feature +16 -0
- data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/ru/features/support/env.rb +6 -0
- data/examples/i18n/ru/features/support/world.rb +8 -0
- data/examples/i18n/ru/lib/calculator.rb +24 -0
- data/examples/i18n/se/Rakefile +6 -0
- data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +24 -0
- data/examples/i18n/se/features/summering.feature +18 -0
- data/examples/i18n/se/lib/kalkulator.rb +11 -0
- data/examples/i18n/sk/Rakefile +6 -0
- data/examples/i18n/sk/features/addition.feature +17 -0
- data/examples/i18n/sk/features/division.feature +10 -0
- data/examples/i18n/sk/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/sk/lib/calculator.rb +14 -0
- data/examples/i18n/uz/Rakefile +6 -0
- data/examples/i18n/uz/features/addition.feature +10 -0
- data/examples/i18n/uz/features/consecutive_calculations.feature +17 -0
- data/examples/i18n/uz/features/division.feature +17 -0
- data/examples/i18n/uz/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/uz/features/support/env.rb +6 -0
- data/examples/i18n/uz/features/support/world.rb +8 -0
- data/examples/i18n/uz/lib/calculator.rb +24 -0
- data/examples/i18n/zh-CN/Rakefile +6 -0
- data/examples/i18n/zh-CN/features/addition.feature +18 -0
- data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +26 -0
- data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
- data/examples/i18n/zh-TW/Rakefile +6 -0
- data/examples/i18n/zh-TW/features/addition.feature +17 -0
- data/examples/i18n/zh-TW/features/division.feature +11 -0
- data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
- data/examples/java/README.textile +18 -0
- data/examples/java/build.xml +33 -0
- data/examples/java/features/hello.feature +11 -0
- data/examples/java/features/step_definitons/hello_steps.rb +23 -0
- data/examples/java/features/step_definitons/tree_steps.rb +14 -0
- data/examples/java/features/tree.feature +9 -0
- data/examples/java/src/cucumber/demo/Hello.java +16 -0
- data/examples/junit/features/one_passing_one_failing.feature +8 -0
- data/examples/junit/features/pending.feature +5 -0
- data/examples/junit/features/step_definitions/steps.rb +11 -0
- data/examples/pure_java/README.textile +5 -0
- data/examples/python/features/fibonacci.feature +19 -0
- data/examples/python/features/step_definitions/fib_steps.py +3 -0
- data/examples/python/features/step_definitions/fib_steps.rb +7 -0
- data/examples/python/features/support/env.rb +21 -0
- data/examples/python/lib/fib.py +7 -0
- data/examples/selenium/Rakefile +6 -0
- data/examples/selenium/features/search.feature +9 -0
- data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium/features/support/env.rb +19 -0
- data/examples/selenium_webrat/Rakefile +6 -0
- data/examples/selenium_webrat/config.ru +0 -0
- data/examples/selenium_webrat/features/search.feature +9 -0
- data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium_webrat/features/support/env.rb +45 -0
- data/examples/self_test/README.textile +6 -0
- data/examples/self_test/Rakefile +6 -0
- data/examples/self_test/features/background/background_tagged_before_on_outline.feature +12 -0
- data/examples/self_test/features/background/background_with_name.feature +7 -0
- data/examples/self_test/features/background/failing_background.feature +12 -0
- data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
- data/examples/self_test/features/background/multiline_args_background.feature +32 -0
- data/examples/self_test/features/background/passing_background.feature +10 -0
- data/examples/self_test/features/background/pending_background.feature +10 -0
- data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
- data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
- data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
- data/examples/self_test/features/failing_expectation.feature +4 -0
- data/examples/self_test/features/lots_of_undefined.feature +8 -0
- data/examples/self_test/features/multiline_name.feature +27 -0
- data/examples/self_test/features/outline_sample.feature +15 -0
- data/examples/self_test/features/sample.feature +21 -0
- data/examples/self_test/features/search_sample.feature +32 -0
- data/examples/self_test/features/step_definitions/sample_steps.rb +93 -0
- data/examples/self_test/features/support/env.rb +24 -0
- data/examples/self_test/features/tags_sample.feature +17 -0
- data/examples/self_test/features/tons_of_cukes.feature +52 -0
- data/examples/self_test/features/transform_sample.feature +10 -0
- data/examples/self_test/features/undefined_multiline_args.feature +12 -0
- data/examples/self_test/list-of-features.txt +1 -0
- data/examples/sinatra/README.textile +13 -0
- data/examples/sinatra/Rakefile +6 -0
- data/examples/sinatra/app.rb +14 -0
- data/examples/sinatra/features/add.feature +11 -0
- data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
- data/examples/sinatra/features/support/env.rb +32 -0
- data/examples/sinatra/views/add.erb +5 -0
- data/examples/sinatra/views/layout.erb +8 -0
- data/examples/steps_library/features/step_definitions/steps_lib1.rb +8 -0
- data/examples/steps_library/features/step_definitions/steps_lib2.rb +8 -0
- data/examples/test_unit/Rakefile +6 -0
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +23 -0
- data/examples/test_unit/features/test_unit.feature +9 -0
- data/examples/tickets/Rakefile +16 -0
- data/examples/tickets/features/172.feature +28 -0
- data/examples/tickets/features/177/1.feature +29 -0
- data/examples/tickets/features/177/2.feature +21 -0
- data/examples/tickets/features/177/3.feature +18 -0
- data/examples/tickets/features/180.feature +7 -0
- data/examples/tickets/features/229/tagged_hooks.feature +8 -0
- data/examples/tickets/features/229/tagged_hooks.rb +14 -0
- data/examples/tickets/features/236.feature +13 -0
- data/examples/tickets/features/241.feature +13 -0
- data/examples/tickets/features/246.feature +4 -0
- data/examples/tickets/features/248.feature +11 -0
- data/examples/tickets/features/270/back.feature +14 -0
- data/examples/tickets/features/270/back.steps.rb +14 -0
- data/examples/tickets/features/272/hooks.feature +26 -0
- data/examples/tickets/features/272/hooks_steps.rb +53 -0
- data/examples/tickets/features/279/py_string_indent.feature +25 -0
- data/examples/tickets/features/279/py_string_indent.steps.rb +12 -0
- data/examples/tickets/features/279/wrong.feature_ +11 -0
- data/examples/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
- data/examples/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
- data/examples/tickets/features/306/only_background.feature +4 -0
- data/examples/tickets/features/lib/eatting_machine.rb +18 -0
- data/examples/tickets/features/lib/pantry.rb +20 -0
- data/examples/tickets/features/scenario_outline.feature +95 -0
- data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
- data/examples/tickets/features/step_definitons/248_steps.rb +15 -0
- data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
- data/examples/tickets/features/step_definitons/tickets_steps.rb +81 -0
- data/examples/tickets/features/table_diffing.feature +13 -0
- data/examples/tickets/features/tickets.feature +28 -0
- data/examples/watir/README.textile +16 -0
- data/examples/watir/Rakefile +6 -0
- data/examples/watir/features/search.feature +12 -0
- data/examples/watir/features/step_definitons/search_steps.rb +26 -0
- data/examples/watir/features/support/env.rb +32 -0
- data/features/background.feature +311 -0
- data/features/bug_371.feature +32 -0
- data/features/cucumber_cli.feature +667 -0
- data/features/cucumber_cli_diff_disabled.feature +54 -0
- data/features/cucumber_cli_outlines.feature +109 -0
- data/features/custom_formatter.feature +11 -0
- data/features/drb_server_integration.feature +173 -0
- data/features/exception_in_after_block.feature +102 -0
- data/features/exception_in_after_step_block.feature +104 -0
- data/features/exception_in_before_block.feature +47 -0
- data/features/exclude_files.feature +20 -0
- data/features/expand.feature +49 -0
- data/features/html_formatter/a.html +183 -0
- data/features/html_formatter.feature +7 -0
- data/features/junit_formatter.feature +89 -0
- data/features/language_from_header.feature +30 -0
- data/features/multiline_names.feature +43 -0
- data/features/post_configuration_hook.feature +37 -0
- data/features/profiles.feature +112 -0
- data/features/rake_task.feature +178 -0
- data/features/report_called_undefined_steps.feature +35 -0
- data/features/snippet.feature +22 -0
- data/features/step_definitions/cucumber_steps.rb +154 -0
- data/features/step_definitions/extra_steps.rb +2 -0
- data/features/steps_formatter.feature +25 -0
- data/features/support/env.rb +139 -0
- data/features/table_diffing.feature +45 -0
- data/features/transform.feature +24 -0
- data/features/unicode_table.feature +35 -0
- data/features/usage.feature +132 -0
- data/features/work_in_progress.feature +158 -0
- data/gem_tasks/contributors.rake +12 -0
- data/gem_tasks/deployment.rake +11 -0
- data/gem_tasks/environment.rake +7 -0
- data/gem_tasks/features.rake +11 -0
- data/gem_tasks/fix_cr_lf.rake +10 -0
- data/gem_tasks/flog.rake +4 -0
- data/gem_tasks/gemspec.rake +10 -0
- data/gem_tasks/rspec.rake +45 -0
- data/gem_tasks/sass.rake +4 -0
- data/gem_tasks/sdoc.rake +7 -0
- data/lib/README.rdoc +12 -0
- data/lib/autotest/cucumber.rb +6 -0
- data/lib/autotest/cucumber_mixin.rb +125 -0
- data/lib/autotest/cucumber_rails.rb +6 -0
- data/lib/autotest/cucumber_rails_rspec.rb +6 -0
- data/lib/autotest/cucumber_rspec.rb +6 -0
- data/lib/autotest/discover.rb +9 -0
- data/lib/cucumber/ast/background.rb +63 -0
- data/lib/cucumber/ast/comment.rb +31 -0
- data/lib/cucumber/ast/examples.rb +32 -0
- data/lib/cucumber/ast/feature.rb +81 -0
- data/lib/cucumber/ast/feature_element.rb +61 -0
- data/lib/cucumber/ast/features.rb +40 -0
- data/lib/cucumber/ast/outline_table.rb +146 -0
- data/lib/cucumber/ast/py_string.rb +57 -0
- data/lib/cucumber/ast/scenario.rb +108 -0
- data/lib/cucumber/ast/scenario_outline.rb +96 -0
- data/lib/cucumber/ast/step.rb +116 -0
- data/lib/cucumber/ast/step_collection.rb +76 -0
- data/lib/cucumber/ast/step_invocation.rb +166 -0
- data/lib/cucumber/ast/table.rb +626 -0
- data/lib/cucumber/ast/tags.rb +44 -0
- data/lib/cucumber/ast/visitor.rb +115 -0
- data/lib/cucumber/ast.rb +29 -0
- data/lib/cucumber/broadcaster.rb +13 -0
- data/lib/cucumber/cli/configuration.rb +190 -0
- data/lib/cucumber/cli/drb_client.rb +26 -0
- data/lib/cucumber/cli/language_help_formatter.rb +61 -0
- data/lib/cucumber/cli/main.rb +116 -0
- data/lib/cucumber/cli/options.rb +394 -0
- data/lib/cucumber/cli/profile_loader.rb +70 -0
- data/lib/cucumber/constantize.rb +28 -0
- data/lib/cucumber/core_ext/instance_exec.rb +93 -0
- data/lib/cucumber/core_ext/proc.rb +29 -0
- data/lib/cucumber/core_ext/string.rb +48 -0
- data/lib/cucumber/feature_file.rb +54 -0
- data/lib/cucumber/filter.rb +52 -0
- data/lib/cucumber/formatter/ansicolor.rb +143 -0
- data/lib/cucumber/formatter/color_io.rb +23 -0
- data/lib/cucumber/formatter/console.rb +185 -0
- data/lib/cucumber/formatter/cucumber.css +132 -0
- data/lib/cucumber/formatter/cucumber.sass +139 -0
- data/lib/cucumber/formatter/duration.rb +13 -0
- data/lib/cucumber/formatter/html.rb +261 -0
- data/lib/cucumber/formatter/junit.rb +121 -0
- data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
- data/lib/cucumber/formatter/pdf.rb +217 -0
- data/lib/cucumber/formatter/pretty.rb +222 -0
- data/lib/cucumber/formatter/profile.rb +78 -0
- data/lib/cucumber/formatter/progress.rb +67 -0
- data/lib/cucumber/formatter/rerun.rb +46 -0
- data/lib/cucumber/formatter/steps.rb +50 -0
- data/lib/cucumber/formatter/tag_cloud.rb +29 -0
- data/lib/cucumber/formatter/unicode.rb +35 -0
- data/lib/cucumber/formatter/usage.rb +86 -0
- data/lib/cucumber/formatters/unicode.rb +7 -0
- data/lib/cucumber/language_support/language_methods.rb +75 -0
- data/lib/cucumber/language_support/step_definition_methods.rb +46 -0
- data/lib/cucumber/language_support.rb +30 -0
- data/lib/cucumber/languages.yml +561 -0
- data/lib/cucumber/parser/feature.rb +1838 -0
- data/lib/cucumber/parser/feature.tt +351 -0
- data/lib/cucumber/parser/i18n.tt +42 -0
- data/lib/cucumber/parser/natural_language.rb +72 -0
- data/lib/cucumber/parser/table.rb +417 -0
- data/lib/cucumber/parser/table.tt +71 -0
- data/lib/cucumber/parser/treetop_ext.rb +53 -0
- data/lib/cucumber/parser.rb +6 -0
- data/lib/cucumber/platform.rb +27 -0
- data/lib/cucumber/py_support/py_dsl.py +8 -0
- data/lib/cucumber/py_support/py_language.py +2 -0
- data/lib/cucumber/py_support/py_language.rb +68 -0
- data/lib/cucumber/rails/rspec.rb +10 -0
- data/lib/cucumber/rails/world.rb +100 -0
- data/lib/cucumber/rake/task.rb +241 -0
- data/lib/cucumber/rb_support/rb_dsl.rb +100 -0
- data/lib/cucumber/rb_support/rb_hook.rb +18 -0
- data/lib/cucumber/rb_support/rb_language.rb +153 -0
- data/lib/cucumber/rb_support/rb_step_definition.rb +60 -0
- data/lib/cucumber/rb_support/rb_world.rb +93 -0
- data/lib/cucumber/rspec_neuter.rb +23 -0
- data/lib/cucumber/step_match.rb +61 -0
- data/lib/cucumber/step_mother.rb +307 -0
- data/lib/cucumber/version.rb +10 -0
- data/lib/cucumber/webrat/element_locator.rb +87 -0
- data/lib/cucumber/webrat/table_locator.rb +1 -0
- data/lib/cucumber.rb +10 -0
- data/rails_generators/cucumber/USAGE +11 -0
- data/rails_generators/cucumber/cucumber_generator.rb +70 -0
- data/rails_generators/cucumber/templates/cucumber +9 -0
- data/rails_generators/cucumber/templates/cucumber.rake +36 -0
- data/rails_generators/cucumber/templates/cucumber_environment.rb +26 -0
- data/rails_generators/cucumber/templates/env.rb +27 -0
- data/rails_generators/cucumber/templates/paths.rb +27 -0
- data/rails_generators/cucumber/templates/spork_env.rb +35 -0
- data/rails_generators/cucumber/templates/webrat_steps.rb +236 -0
- data/rails_generators/feature/USAGE +12 -0
- data/rails_generators/feature/feature_generator.rb +40 -0
- data/rails_generators/feature/templates/feature.erb +31 -0
- data/rails_generators/feature/templates/steps.erb +14 -0
- data/spec/cucumber/ast/background_spec.rb +60 -0
- data/spec/cucumber/ast/feature_element_spec.rb +40 -0
- data/spec/cucumber/ast/feature_factory.rb +62 -0
- data/spec/cucumber/ast/feature_spec.rb +44 -0
- data/spec/cucumber/ast/py_string_spec.rb +51 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +72 -0
- data/spec/cucumber/ast/scenario_spec.rb +43 -0
- data/spec/cucumber/ast/step_collection_spec.rb +17 -0
- data/spec/cucumber/ast/step_spec.rb +66 -0
- data/spec/cucumber/ast/table_spec.rb +394 -0
- data/spec/cucumber/broadcaster_spec.rb +15 -0
- data/spec/cucumber/cli/configuration_spec.rb +396 -0
- data/spec/cucumber/cli/drb_client_spec.rb +77 -0
- data/spec/cucumber/cli/main_spec.rb +172 -0
- data/spec/cucumber/cli/options_spec.rb +331 -0
- data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
- data/spec/cucumber/core_ext/proc_spec.rb +68 -0
- data/spec/cucumber/core_ext/string_spec.rb +43 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
- data/spec/cucumber/formatter/color_io_spec.rb +27 -0
- data/spec/cucumber/formatter/duration_spec.rb +22 -0
- data/spec/cucumber/formatter/html_spec.rb +18 -0
- data/spec/cucumber/formatter/progress_spec.rb +33 -0
- data/spec/cucumber/parser/feature_parser_spec.rb +396 -0
- data/spec/cucumber/parser/table_parser_spec.rb +52 -0
- data/spec/cucumber/rails/stubs/mini_rails.rb +18 -0
- data/spec/cucumber/rails/stubs/test_help.rb +1 -0
- data/spec/cucumber/rails/world_spec.rb +16 -0
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +123 -0
- data/spec/cucumber/sell_cucumbers.feature +19 -0
- data/spec/cucumber/step_mother_spec.rb +282 -0
- data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
- data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
- data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
- data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
- data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
- data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
- data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
- data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
- data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
- data/spec/cucumber/treetop_parser/spaces.feature +12 -0
- data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
- data/spec/cucumber/treetop_parser/with_comments.feature +23 -0
- data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
- data/spec/cucumber/world/pending_spec.rb +46 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +18 -0
- metadata +561 -0
@@ -0,0 +1,132 @@
|
|
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
|
+
@mri186
|
7
|
+
Scenario: List usage of step definitions
|
8
|
+
When I run cucumber features --format usage --dry-run
|
9
|
+
Then it should pass with
|
10
|
+
"""
|
11
|
+
/^passing without a table$/ # features/step_definitions/sample_steps.rb:12
|
12
|
+
Given <other_state> without a table # features/outline_sample.feature:7
|
13
|
+
Given <state> without a table # features/multiline_name.feature:16
|
14
|
+
Given <state> without a table # features/multiline_name.feature:22
|
15
|
+
Given <state> without a table # features/outline_sample.feature:6
|
16
|
+
Given <state> without a table # features/search_sample.feature:19
|
17
|
+
Given <state> without a table # features/search_sample.feature:25
|
18
|
+
Given passing without a table # features/background/background_tagged_before_on_outline.feature:5
|
19
|
+
Given passing without a table # features/background/failing_background_after_success.feature:4
|
20
|
+
Given passing without a table # features/multiline_name.feature:11
|
21
|
+
Given passing without a table # features/multiline_name.feature:6
|
22
|
+
Given passing without a table # features/search_sample.feature:4
|
23
|
+
Given passing without a table # features/search_sample.feature:7
|
24
|
+
/^failing without a table$/ # features/step_definitions/sample_steps.rb:15
|
25
|
+
Given <state> without a table # features/search_sample.feature:13
|
26
|
+
Given failing without a table # features/background/failing_background.feature:5
|
27
|
+
Given failing without a table # features/background/scenario_outline_failing_background.feature:4
|
28
|
+
Given failing without a table # features/search_sample.feature:10
|
29
|
+
/^a step definition that calls an undefined step$/ # features/step_definitions/sample_steps.rb:19
|
30
|
+
Given a step definition that calls an undefined step # features/call_undefined_step_from_step_def.feature:4
|
31
|
+
/^call step "(.*)"$/ # features/step_definitions/sample_steps.rb:23
|
32
|
+
Given call step "a step definition that calls an undefined step" # features/call_undefined_step_from_step_def.feature:7
|
33
|
+
/^'(.+)' cukes$/ # features/step_definitions/sample_steps.rb:27
|
34
|
+
And '10' cukes # features/background/failing_background.feature:6
|
35
|
+
Given '10' cukes # features/background/background_with_name.feature:4
|
36
|
+
Given '10' cukes # features/background/passing_background.feature:4
|
37
|
+
Given '10' cukes # features/background/scenario_outline_passing_background.feature:4
|
38
|
+
Given '2' cukes # features/tons_of_cukes.feature:10
|
39
|
+
Given '2' cukes # features/tons_of_cukes.feature:11
|
40
|
+
Given '2' cukes # features/tons_of_cukes.feature:12
|
41
|
+
Given '2' cukes # features/tons_of_cukes.feature:13
|
42
|
+
Given '2' cukes # features/tons_of_cukes.feature:14
|
43
|
+
Given '2' cukes # features/tons_of_cukes.feature:15
|
44
|
+
Given '2' cukes # features/tons_of_cukes.feature:16
|
45
|
+
Given '2' cukes # features/tons_of_cukes.feature:17
|
46
|
+
Given '2' cukes # features/tons_of_cukes.feature:18
|
47
|
+
Given '2' cukes # features/tons_of_cukes.feature:19
|
48
|
+
Given '2' cukes # features/tons_of_cukes.feature:20
|
49
|
+
Given '2' cukes # features/tons_of_cukes.feature:21
|
50
|
+
Given '2' cukes # features/tons_of_cukes.feature:22
|
51
|
+
Given '2' cukes # features/tons_of_cukes.feature:23
|
52
|
+
Given '2' cukes # features/tons_of_cukes.feature:24
|
53
|
+
Given '2' cukes # features/tons_of_cukes.feature:25
|
54
|
+
Given '2' cukes # features/tons_of_cukes.feature:26
|
55
|
+
Given '2' cukes # features/tons_of_cukes.feature:27
|
56
|
+
Given '2' cukes # features/tons_of_cukes.feature:28
|
57
|
+
Given '2' cukes # features/tons_of_cukes.feature:29
|
58
|
+
Given '2' cukes # features/tons_of_cukes.feature:30
|
59
|
+
Given '2' cukes # features/tons_of_cukes.feature:31
|
60
|
+
Given '2' cukes # features/tons_of_cukes.feature:32
|
61
|
+
Given '2' cukes # features/tons_of_cukes.feature:33
|
62
|
+
Given '2' cukes # features/tons_of_cukes.feature:34
|
63
|
+
Given '2' cukes # features/tons_of_cukes.feature:35
|
64
|
+
Given '2' cukes # features/tons_of_cukes.feature:36
|
65
|
+
Given '2' cukes # features/tons_of_cukes.feature:37
|
66
|
+
Given '2' cukes # features/tons_of_cukes.feature:38
|
67
|
+
Given '2' cukes # features/tons_of_cukes.feature:39
|
68
|
+
Given '2' cukes # features/tons_of_cukes.feature:4
|
69
|
+
Given '2' cukes # features/tons_of_cukes.feature:40
|
70
|
+
Given '2' cukes # features/tons_of_cukes.feature:41
|
71
|
+
Given '2' cukes # features/tons_of_cukes.feature:42
|
72
|
+
Given '2' cukes # features/tons_of_cukes.feature:43
|
73
|
+
Given '2' cukes # features/tons_of_cukes.feature:44
|
74
|
+
Given '2' cukes # features/tons_of_cukes.feature:45
|
75
|
+
Given '2' cukes # features/tons_of_cukes.feature:46
|
76
|
+
Given '2' cukes # features/tons_of_cukes.feature:47
|
77
|
+
Given '2' cukes # features/tons_of_cukes.feature:48
|
78
|
+
Given '2' cukes # features/tons_of_cukes.feature:49
|
79
|
+
Given '2' cukes # features/tons_of_cukes.feature:5
|
80
|
+
Given '2' cukes # features/tons_of_cukes.feature:50
|
81
|
+
Given '2' cukes # features/tons_of_cukes.feature:51
|
82
|
+
Given '2' cukes # features/tons_of_cukes.feature:52
|
83
|
+
Given '2' cukes # features/tons_of_cukes.feature:6
|
84
|
+
Given '2' cukes # features/tons_of_cukes.feature:7
|
85
|
+
Given '2' cukes # features/tons_of_cukes.feature:8
|
86
|
+
Given '2' cukes # features/tons_of_cukes.feature:9
|
87
|
+
/^I should have '(.+)' cukes$/ # features/step_definitions/sample_steps.rb:31
|
88
|
+
Then I should have '10' cukes # features/background/background_with_name.feature:7
|
89
|
+
Then I should have '10' cukes # features/background/failing_background.feature:12
|
90
|
+
Then I should have '10' cukes # features/background/failing_background.feature:9
|
91
|
+
Then I should have '10' cukes # features/background/passing_background.feature:10
|
92
|
+
Then I should have '10' cukes # features/background/passing_background.feature:7
|
93
|
+
Then I should have '10' cukes # features/background/pending_background.feature:10
|
94
|
+
Then I should have '10' cukes # features/background/pending_background.feature:7
|
95
|
+
Then I should have '<count>' cukes # features/background/background_tagged_before_on_outline.feature:8
|
96
|
+
Then I should have '<count>' cukes # features/background/scenario_outline_failing_background.feature:13
|
97
|
+
Then I should have '<count>' cukes # features/background/scenario_outline_failing_background.feature:7
|
98
|
+
Then I should have '<count>' cukes # features/background/scenario_outline_passing_background.feature:13
|
99
|
+
Then I should have '<count>' cukes # features/background/scenario_outline_passing_background.feature:7
|
100
|
+
/^'(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:35
|
101
|
+
And '10' global cukes # features/background/failing_background_after_success.feature:5
|
102
|
+
/^I should have '(.+)' global cukes$/ # features/step_definitions/sample_steps.rb:42
|
103
|
+
Then I should have '10' global cukes # features/background/failing_background_after_success.feature:11
|
104
|
+
Then I should have '10' global cukes # features/background/failing_background_after_success.feature:8
|
105
|
+
/^table$/ # features/step_definitions/sample_steps.rb:46
|
106
|
+
Given table # features/background/multiline_args_background.feature:4
|
107
|
+
/^multiline string$/ # features/step_definitions/sample_steps.rb:50
|
108
|
+
And multiline string # features/background/multiline_args_background.feature:7
|
109
|
+
/^the table should be$/ # features/step_definitions/sample_steps.rb:54
|
110
|
+
Then the table should be # features/background/multiline_args_background.feature:14
|
111
|
+
Then the table should be # features/background/multiline_args_background.feature:24
|
112
|
+
/^the multiline string should be$/ # features/step_definitions/sample_steps.rb:58
|
113
|
+
Then the multiline string should be # features/background/multiline_args_background.feature:17
|
114
|
+
Then the multiline string should be # features/background/multiline_args_background.feature:27
|
115
|
+
/^passing$/ # features/step_definitions/sample_steps.rb:5
|
116
|
+
Given passing # features/sample.feature:12
|
117
|
+
/^failing expectation$/ # features/step_definitions/sample_steps.rb:62
|
118
|
+
Given failing expectation # features/failing_expectation.feature:4
|
119
|
+
/^I should transform ('\d+' to an Integer)$/ # features/step_definitions/sample_steps.rb:83
|
120
|
+
Then I should transform '10' to an Integer # features/transform_sample.feature:4
|
121
|
+
/^I should transform ('\w+' to a Symbol)$/ # features/step_definitions/sample_steps.rb:87
|
122
|
+
Then I should transform 'abc' to a Symbol # features/transform_sample.feature:7
|
123
|
+
/^failing$/ # features/step_definitions/sample_steps.rb:8
|
124
|
+
Given failing # features/sample.feature:18
|
125
|
+
/^I should not transform ('\d+') to an Integer$/ # features/step_definitions/sample_steps.rb:91
|
126
|
+
Then I should not transform '10' to an Integer # features/transform_sample.feature:10
|
127
|
+
(::) UNUSED (::)
|
128
|
+
/^unused$/ # features/step_definitions/sample_steps.rb:66
|
129
|
+
/^another unused$/ # features/step_definitions/sample_steps.rb:69
|
130
|
+
|
131
|
+
"""
|
132
|
+
|
@@ -0,0 +1,158 @@
|
|
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
|
+
@mri186
|
53
|
+
Scenario: Pass with Failing Scenarios
|
54
|
+
When I run cucumber -q -w -t @failing features/wip.feature
|
55
|
+
Then STDERR should be empty
|
56
|
+
Then it should pass with
|
57
|
+
"""
|
58
|
+
Feature: WIP
|
59
|
+
|
60
|
+
@failing
|
61
|
+
Scenario: Failing
|
62
|
+
Given a failing step
|
63
|
+
I fail (RuntimeError)
|
64
|
+
./features/step_definitions/steps.rb:2:in `/^a failing step$/'
|
65
|
+
features/wip.feature:4:in `Given a failing step'
|
66
|
+
|
67
|
+
Failing Scenarios:
|
68
|
+
cucumber features/wip.feature:3 # Scenario: Failing
|
69
|
+
|
70
|
+
1 scenario (1 failed)
|
71
|
+
1 step (1 failed)
|
72
|
+
|
73
|
+
The --wip switch was used, so the failures were expected. All is good.
|
74
|
+
|
75
|
+
"""
|
76
|
+
|
77
|
+
Scenario: Pass with Undefined Scenarios
|
78
|
+
When I run cucumber -q -w -t @undefined features/wip.feature
|
79
|
+
Then it should pass with
|
80
|
+
"""
|
81
|
+
Feature: WIP
|
82
|
+
|
83
|
+
@undefined
|
84
|
+
Scenario: Undefined
|
85
|
+
Given an undefined step
|
86
|
+
|
87
|
+
1 scenario (1 undefined)
|
88
|
+
1 step (1 undefined)
|
89
|
+
|
90
|
+
The --wip switch was used, so the failures were expected. All is good.
|
91
|
+
|
92
|
+
"""
|
93
|
+
|
94
|
+
@mri186
|
95
|
+
Scenario: Pass with Undefined Scenarios
|
96
|
+
When I run cucumber -q -w -t @pending features/wip.feature
|
97
|
+
Then it should pass with
|
98
|
+
"""
|
99
|
+
Feature: WIP
|
100
|
+
|
101
|
+
@pending
|
102
|
+
Scenario: Pending
|
103
|
+
Given a pending step
|
104
|
+
TODO (Cucumber::Pending)
|
105
|
+
./features/step_definitions/steps.rb:9:in `/^a pending step$/'
|
106
|
+
features/wip.feature:12:in `Given a pending step'
|
107
|
+
|
108
|
+
1 scenario (1 pending)
|
109
|
+
1 step (1 pending)
|
110
|
+
|
111
|
+
The --wip switch was used, so the failures were expected. All is good.
|
112
|
+
|
113
|
+
"""
|
114
|
+
|
115
|
+
Scenario: Fail with Passing Scenarios
|
116
|
+
When I run cucumber -q -w -t @passing features/wip.feature
|
117
|
+
Then it should fail with
|
118
|
+
"""
|
119
|
+
Feature: WIP
|
120
|
+
|
121
|
+
@passing
|
122
|
+
Scenario: Passing
|
123
|
+
Given a passing step
|
124
|
+
|
125
|
+
1 scenario (1 passed)
|
126
|
+
1 step (1 passed)
|
127
|
+
|
128
|
+
The --wip switch was used, so I didn't expect anything to pass. These scenarios passed:
|
129
|
+
(::) passed scenarios (::)
|
130
|
+
|
131
|
+
features/wip.feature:15:in `Scenario: Passing'
|
132
|
+
|
133
|
+
|
134
|
+
"""
|
135
|
+
|
136
|
+
Scenario: Fail with Passing Scenario Outline
|
137
|
+
When I run cucumber -q -w features/passing_outline.feature
|
138
|
+
Then it should fail with
|
139
|
+
"""
|
140
|
+
Feature: Not WIP
|
141
|
+
|
142
|
+
Scenario Outline: Passing
|
143
|
+
Given a <what> step
|
144
|
+
|
145
|
+
Examples:
|
146
|
+
| what |
|
147
|
+
| passing |
|
148
|
+
|
149
|
+
1 scenario (1 passed)
|
150
|
+
1 step (1 passed)
|
151
|
+
|
152
|
+
The --wip switch was used, so I didn't expect anything to pass. These scenarios passed:
|
153
|
+
(::) passed scenarios (::)
|
154
|
+
|
155
|
+
features/passing_outline.feature:7:in `| passing |'
|
156
|
+
|
157
|
+
|
158
|
+
"""
|
@@ -0,0 +1,12 @@
|
|
1
|
+
task :contributors do
|
2
|
+
contributors = `git log --pretty=short --no-merges | git shortlog -ne | egrep -ve '^ +' | egrep -ve '^$'`
|
3
|
+
puts contributors.split("\n").length
|
4
|
+
end
|
5
|
+
|
6
|
+
task :codeswarm do
|
7
|
+
sh "code_swarm --reload" rescue nil # Fails because of encoding - which we'll fix
|
8
|
+
sh "iconv -f latin1 -t utf-8 .git/.code_swarm/log.xml > tmp.xml && mv tmp.xml .git/.code_swarm/log.xml"
|
9
|
+
sh "sed -e 's/Aslak\ Hellesøy@.BEKK.no/aslak.hellesoy@gmail.com/g' .git/.code_swarm/log.xml > tmp.xml && mv tmp.xml .git/.code_swarm/log.xml"
|
10
|
+
sh "sed -e 's/josephwilk@joesniff.co.uk/joe@josephwilk.net/g' .git/.code_swarm/log.xml > tmp.xml && mv tmp.xml .git/.code_swarm/log.xml"
|
11
|
+
sh "code_swarm"
|
12
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
|
2
|
+
task :install_gem_no_doc => [:clean, :package] do
|
3
|
+
sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
|
4
|
+
end
|
5
|
+
|
6
|
+
namespace :manifest do
|
7
|
+
desc 'Recreate Manifest.txt to include ALL files'
|
8
|
+
task :refresh => :clobber do
|
9
|
+
`rake check_manifest | patch -p0 > Manifest.txt`
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
|
+
require 'cucumber/rake/task'
|
3
|
+
|
4
|
+
Cucumber::Rake::Task.new do |t|
|
5
|
+
t.cucumber_opts = %w{--format progress}
|
6
|
+
t.rcov = ENV['RCOV']
|
7
|
+
end
|
8
|
+
|
9
|
+
Cucumber::Rake::Task.new('pretty') do |t|
|
10
|
+
t.cucumber_opts = %w{--format pretty}
|
11
|
+
end
|
data/gem_tasks/flog.rake
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
namespace :gemspec do
|
2
|
+
desc 'Refresh cucumber.gemspec to include ALL files'
|
3
|
+
task :refresh => 'manifest:refresh' do
|
4
|
+
File.open('cucumber.gemspec', 'w') {|io| io.write($hoe.spec.to_ruby)}
|
5
|
+
puts "1) git commit -a -m \"Release #{Cucumber::VERSION::STRING}\""
|
6
|
+
puts "2) git tag -a \"v#{Cucumber::VERSION::STRING}\" -m \"Release #{Cucumber::VERSION::STRING}\""
|
7
|
+
puts "3) git push"
|
8
|
+
puts "4) git push --tags"
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
def unable_to_load
|
2
|
+
STDERR.puts <<-EOS
|
3
|
+
To use rspec for testing you must install rspec gem:
|
4
|
+
gem install rspec
|
5
|
+
|
6
|
+
EOS
|
7
|
+
nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def require_spec
|
11
|
+
require 'spec/expectations'
|
12
|
+
rescue LoadError
|
13
|
+
require_spec_with_rubygems
|
14
|
+
end
|
15
|
+
|
16
|
+
def require_spec_with_rubygems
|
17
|
+
require 'rubygems'
|
18
|
+
require 'spec/expectations'
|
19
|
+
rescue LoadError
|
20
|
+
unable_to_load
|
21
|
+
end
|
22
|
+
|
23
|
+
if require_spec
|
24
|
+
begin
|
25
|
+
require 'spec/rake/spectask'
|
26
|
+
rescue LoadError
|
27
|
+
unable_to_load
|
28
|
+
end
|
29
|
+
|
30
|
+
def undefine_task(*names)
|
31
|
+
app = Rake.application
|
32
|
+
tasks = app.instance_variable_get('@tasks')
|
33
|
+
names.flatten.each { |name| tasks.delete(name) }
|
34
|
+
end
|
35
|
+
undefine_task('spec') # Hoe 1.2.12 is broken - it defines a spec task that we can't tweak.
|
36
|
+
|
37
|
+
desc "Run the Cucumber specs"
|
38
|
+
Spec::Rake::SpecTask.new do |t|
|
39
|
+
t.spec_opts = ['--options', "spec/spec.opts"]
|
40
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
41
|
+
t.rcov = ENV['RCOV']
|
42
|
+
t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/}
|
43
|
+
t.verbose = true
|
44
|
+
end
|
45
|
+
end
|
data/gem_tasks/sass.rake
ADDED
data/gem_tasks/sdoc.rake
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'sdoc' # and use your RDoc task the same way you used it before
|
2
|
+
|
3
|
+
Rake::RDocTask.new(:sdoc) do |rdoc|
|
4
|
+
rdoc.rdoc_dir = 'doc/sdoc'
|
5
|
+
rdoc.options += %w{--fmt shtml -N --webcvs=http://github.com/aslakhellesoy/cucumber/blob/v0.3.96/%s --title "Cucumber API" --threads 4 --main README --exclude cucumber/parser lib}
|
6
|
+
rdoc.template = 'direct' # lighter template used on railsapi.com
|
7
|
+
end
|
data/lib/README.rdoc
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
= Cucumber API
|
2
|
+
|
3
|
+
This is the public API of Cucumber. The public API includes the classes, modules
|
4
|
+
and methods you can use if you are a user of Cucumber. It also applies to you if
|
5
|
+
you're developing a 3rd party tool that integrates with Cucumber.
|
6
|
+
|
7
|
+
== Internal API
|
8
|
+
|
9
|
+
Cucumber has more classes, modules and methods than what you can see in the public
|
10
|
+
API. If you decide to dive into the source code and make use of an API that isn't
|
11
|
+
part of this documentation - beware that this API might change at any time. If you
|
12
|
+
want a particular internal API to be promoted to the public API - let us know.
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'autotest'
|
2
|
+
require 'tempfile'
|
3
|
+
require 'yaml'
|
4
|
+
require 'cucumber'
|
5
|
+
|
6
|
+
module Autotest::CucumberMixin
|
7
|
+
def self.included(receiver)
|
8
|
+
receiver::ALL_HOOKS << [:run_features, :ran_features]
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_accessor :features_to_run
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
super
|
15
|
+
reset_features
|
16
|
+
end
|
17
|
+
|
18
|
+
def run
|
19
|
+
hook :initialize
|
20
|
+
reset
|
21
|
+
reset_features
|
22
|
+
add_sigint_handler
|
23
|
+
|
24
|
+
self.last_mtime = Time.now if $f
|
25
|
+
|
26
|
+
loop do # ^c handler
|
27
|
+
begin
|
28
|
+
get_to_green
|
29
|
+
if self.tainted then
|
30
|
+
rerun_all_tests
|
31
|
+
rerun_all_features if all_good
|
32
|
+
else
|
33
|
+
hook :all_good
|
34
|
+
end
|
35
|
+
wait_for_changes
|
36
|
+
# Once tests and features are green, reset features every
|
37
|
+
# time a file is changed to see if anything breaks.
|
38
|
+
reset_features
|
39
|
+
rescue Interrupt
|
40
|
+
break if self.wants_to_quit
|
41
|
+
reset
|
42
|
+
reset_features
|
43
|
+
end
|
44
|
+
end
|
45
|
+
hook :quit
|
46
|
+
end
|
47
|
+
|
48
|
+
def all_features_good
|
49
|
+
features_to_run == ""
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_to_green
|
53
|
+
begin
|
54
|
+
super
|
55
|
+
run_features
|
56
|
+
wait_for_changes unless all_features_good
|
57
|
+
end until all_features_good
|
58
|
+
end
|
59
|
+
|
60
|
+
def rerun_all_features
|
61
|
+
reset_features
|
62
|
+
run_features
|
63
|
+
end
|
64
|
+
|
65
|
+
def reset_features
|
66
|
+
self.features_to_run = :all
|
67
|
+
end
|
68
|
+
|
69
|
+
def run_features
|
70
|
+
hook :run_features
|
71
|
+
Tempfile.open('autotest-cucumber') do |dirty_features_file|
|
72
|
+
cmd = self.make_cucumber_cmd(self.features_to_run, dirty_features_file.path)
|
73
|
+
return if cmd.empty?
|
74
|
+
puts cmd unless $q
|
75
|
+
old_sync = $stdout.sync
|
76
|
+
$stdout.sync = true
|
77
|
+
self.results = []
|
78
|
+
line = []
|
79
|
+
begin
|
80
|
+
open("| #{cmd}", "r") do |f|
|
81
|
+
until f.eof? do
|
82
|
+
c = f.getc
|
83
|
+
putc c
|
84
|
+
line << c
|
85
|
+
if c == ?\n then
|
86
|
+
self.results << if RUBY_VERSION >= "1.9" then
|
87
|
+
line.join
|
88
|
+
else
|
89
|
+
line.pack "c*"
|
90
|
+
end
|
91
|
+
line.clear
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
ensure
|
96
|
+
$stdout.sync = old_sync
|
97
|
+
end
|
98
|
+
self.features_to_run = dirty_features_file.read.strip
|
99
|
+
self.tainted = true unless self.features_to_run == ''
|
100
|
+
end
|
101
|
+
hook :ran_features
|
102
|
+
end
|
103
|
+
|
104
|
+
def make_cucumber_cmd(features_to_run, dirty_features_filename)
|
105
|
+
return '' if features_to_run == ''
|
106
|
+
|
107
|
+
profiles = YAML.load_file("cucumber.yml").keys rescue []
|
108
|
+
|
109
|
+
profile ||= "autotest-all" if profiles.include?("autotest-all") and features_to_run == :all
|
110
|
+
profile ||= "autotest" if profiles.include?("autotest")
|
111
|
+
profile ||= nil
|
112
|
+
|
113
|
+
if profile
|
114
|
+
args = ["--profile", profile]
|
115
|
+
else
|
116
|
+
args = %w{--format} << (features_to_run == :all ? "progress" : "pretty")
|
117
|
+
end
|
118
|
+
# No --color option as some IDEs (Netbeans) don't output them very well ([31m1 failed step[0m)
|
119
|
+
args += %w{--format rerun --out} << dirty_features_filename
|
120
|
+
args << (features_to_run == :all ? "features" : features_to_run)
|
121
|
+
args = args.join(' ')
|
122
|
+
|
123
|
+
return "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{args}"
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'cucumber/ast/feature_element'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Ast
|
5
|
+
class Background #:nodoc:
|
6
|
+
include FeatureElement
|
7
|
+
attr_reader :feature_elements
|
8
|
+
|
9
|
+
def initialize(comment, line, keyword, name, steps)
|
10
|
+
@comment, @line, @keyword, @name, @steps = comment, line, keyword, name, StepCollection.new(steps)
|
11
|
+
attach_steps(steps)
|
12
|
+
@step_invocations = @steps.step_invocations(true)
|
13
|
+
@feature_elements = []
|
14
|
+
end
|
15
|
+
|
16
|
+
def step_collection(step_invocations)
|
17
|
+
unless(@first_collection_created)
|
18
|
+
@first_collection_created = true
|
19
|
+
@step_invocations.dup(step_invocations)
|
20
|
+
else
|
21
|
+
@steps.step_invocations(true).dup(step_invocations)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def accept(visitor)
|
26
|
+
return if $cucumber_interrupted
|
27
|
+
visitor.visit_comment(@comment) unless @comment.empty?
|
28
|
+
visitor.visit_background_name(@keyword, @name, file_colon_line(@line), source_indent(first_line_length))
|
29
|
+
visitor.step_mother.before(hook_context)
|
30
|
+
visitor.visit_steps(@step_invocations)
|
31
|
+
@failed = @step_invocations.detect{|step_invocation| step_invocation.exception}
|
32
|
+
visitor.step_mother.after(hook_context) if @failed || @feature_elements.empty?
|
33
|
+
end
|
34
|
+
|
35
|
+
def accept_hook?(hook)
|
36
|
+
if hook_context != self
|
37
|
+
hook_context.accept_hook?(hook)
|
38
|
+
else
|
39
|
+
# We have no scenarios, just ask our feature
|
40
|
+
@feature.accept_hook?(hook)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def failed?
|
45
|
+
@failed
|
46
|
+
end
|
47
|
+
|
48
|
+
def hook_context
|
49
|
+
@feature_elements.first || self
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_sexp
|
53
|
+
sexp = [:background, @line, @keyword]
|
54
|
+
sexp += [@name] unless @name.empty?
|
55
|
+
comment = @comment.to_sexp
|
56
|
+
sexp += [comment] if comment
|
57
|
+
steps = @steps.to_sexp
|
58
|
+
sexp += steps if steps.any?
|
59
|
+
sexp
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|