casecumber 1.0.2.1
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 +26 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +7 -0
- data/.yardopts +0 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +115 -0
- data/History.md +1702 -0
- data/LICENSE +22 -0
- data/README.md +25 -0
- data/Rakefile +12 -0
- data/bin/cucumber +22 -0
- data/cucumber.gemspec +60 -0
- data/cucumber.yml +20 -0
- data/examples/i18n/README.textile +18 -0
- data/examples/i18n/Rakefile +33 -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 +5 -0
- data/examples/i18n/bg/features/support/world.rb +8 -0
- data/examples/i18n/bg/lib/calculator.rb +24 -0
- data/examples/i18n/ca/Rakefile +6 -0
- data/examples/i18n/ca/features/step_definitons/calculator_steps.rb +21 -0
- data/examples/i18n/ca/features/suma.feature +17 -0
- data/examples/i18n/ca/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 +7 -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/eo/.gitignore +1 -0
- data/examples/i18n/eo/Rakefile +6 -0
- data/examples/i18n/eo/features/adicio.feature +17 -0
- data/examples/i18n/eo/features/divido.feature +10 -0
- data/examples/i18n/eo/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/eo/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 +32 -0
- data/examples/i18n/fr/features/support/env.rb +5 -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 +15 -0
- data/examples/i18n/hu/.gitignore +1 -0
- data/examples/i18n/hu/Rakefile +6 -0
- data/examples/i18n/hu/features/osszeadas.feature +17 -0
- data/examples/i18n/hu/features/osztas.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 +19 -0
- data/examples/i18n/ja/features/support/env.rb +5 -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 +5 -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 +5 -0
- data/examples/i18n/pt/lib/calculadora.rb +10 -0
- data/examples/i18n/ro/Rakefile +6 -0
- data/examples/i18n/ro/features/adunare.feature +12 -0
- data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +21 -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 +5 -0
- data/examples/i18n/ru/features/support/world.rb +8 -0
- data/examples/i18n/ru/lib/calculator.rb +24 -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-Cyrl/Rakefile +6 -0
- data/examples/i18n/sr-Cyrl/features/sabiranje.feature +18 -0
- data/examples/i18n/sr-Cyrl/features/step_definitons/calculator_steps.rb +20 -0
- data/examples/i18n/sr-Cyrl/features/support/env.rb +5 -0
- data/examples/i18n/sr-Cyrl/lib/calculator.rb +12 -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/sv/Rakefile +6 -0
- data/examples/i18n/sv/features/step_definitons/kalkulator_steps.rb +24 -0
- data/examples/i18n/sv/features/summering.feature +18 -0
- data/examples/i18n/sv/lib/kalkulator.rb +11 -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/uk/Rakefile +6 -0
- data/examples/i18n/uk/features/addition.feature +11 -0
- data/examples/i18n/uk/features/consecutive_calculations.feature +17 -0
- data/examples/i18n/uk/features/division.feature +16 -0
- data/examples/i18n/uk/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/uk/features/support/env.rb +5 -0
- data/examples/i18n/uk/features/support/world.rb +8 -0
- data/examples/i18n/uk/lib/calculator.rb +24 -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 +5 -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/python/README.textile +7 -0
- data/examples/python/Rakefile +4 -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/rspec_doubles/Rakefile +4 -0
- data/examples/rspec_doubles/features/mocking.feature +9 -0
- data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +19 -0
- data/examples/rspec_doubles/features/support/env.rb +12 -0
- data/examples/ruby2python/README.textile +7 -0
- data/examples/ruby2python/Rakefile +4 -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/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 +10 -0
- data/examples/sinatra/views/add.erb +7 -0
- data/examples/sinatra/views/layout.erb +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/v8/Rakefile +6 -0
- data/examples/v8/features/fibonacci.feature +43 -0
- data/examples/v8/features/step_definitions/fib_steps.js +49 -0
- data/examples/v8/features/support/env.js +14 -0
- data/examples/v8/lib/fibonacci.js +19 -0
- data/examples/watir/.gitignore +2 -0
- data/examples/watir/README.textile +16 -0
- data/examples/watir/Rakefile +12 -0
- data/examples/watir/cucumber.yml +1 -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 +47 -0
- data/features/background.feature +498 -0
- data/features/bootstrap.feature +13 -0
- data/features/custom_formatter.feature +41 -0
- data/features/execute_with_tag_filter.feature +63 -0
- data/features/hooks.feature +59 -0
- data/features/iso-8859-1.feature +6 -0
- data/features/json_formatter.feature +248 -0
- data/features/stats_formatters.feature +70 -0
- data/features/step_definitions/cucumber-features/cucumber_ruby_mappings.rb +168 -0
- data/features/step_definitions/cucumber_steps.rb +23 -0
- data/features/step_definitions/iso-8859-1_steps.rb +24 -0
- data/features/support/env.rb +26 -0
- data/features/tagged_hooks.feature +217 -0
- data/features/transforms.feature +63 -0
- data/fixtures/json/features/background.feature +7 -0
- data/fixtures/json/features/embed.feature +4 -0
- data/fixtures/json/features/one_passing_one_failing.feature +11 -0
- data/fixtures/json/features/step_definitions/steps.rb +32 -0
- data/fixtures/json/features/tables.feature +13 -0
- data/fixtures/junit/features/one_passing_one_failing.feature +8 -0
- data/fixtures/junit/features/pending.feature +7 -0
- data/fixtures/junit/features/scenario_outline.feature +9 -0
- data/fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature +8 -0
- data/fixtures/junit/features/step_definitions/steps.rb +11 -0
- data/fixtures/self_test/.gitignore +1 -0
- data/fixtures/self_test/README.textile +6 -0
- data/fixtures/self_test/Rakefile +6 -0
- data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +7 -0
- data/fixtures/self_test/features/failing_expectation.feature +4 -0
- data/fixtures/self_test/features/lots_of_undefined.feature +8 -0
- data/fixtures/self_test/features/multiline_name.feature +27 -0
- data/fixtures/self_test/features/outline_sample.feature +15 -0
- data/fixtures/self_test/features/sample.feature +21 -0
- data/fixtures/self_test/features/search_sample.feature +32 -0
- data/fixtures/self_test/features/step_definitions/sample_steps.rb +84 -0
- data/fixtures/self_test/features/support/bubble_256x256.png +0 -0
- data/fixtures/self_test/features/support/env.rb +26 -0
- data/fixtures/self_test/features/tags_sample.feature +17 -0
- data/fixtures/self_test/features/tons_of_cukes.feature +52 -0
- data/fixtures/self_test/features/undefined_multiline_args.feature +12 -0
- data/fixtures/self_test/list-of-features.txt +1 -0
- data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +8 -0
- data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +8 -0
- data/fixtures/tickets/Rakefile +20 -0
- data/fixtures/tickets/features.html +138 -0
- data/fixtures/tickets/features/172.feature +28 -0
- data/fixtures/tickets/features/177/1.feature +28 -0
- data/fixtures/tickets/features/177/2.feature +20 -0
- data/fixtures/tickets/features/177/3.feature +18 -0
- data/fixtures/tickets/features/180.feature +7 -0
- data/fixtures/tickets/features/229/tagged_hooks.feature +8 -0
- data/fixtures/tickets/features/229/tagged_hooks.rb +14 -0
- data/fixtures/tickets/features/236.feature +13 -0
- data/fixtures/tickets/features/241.feature +12 -0
- data/fixtures/tickets/features/246.feature +4 -0
- data/fixtures/tickets/features/248.feature +11 -0
- data/fixtures/tickets/features/270/back.feature +14 -0
- data/fixtures/tickets/features/270/back.steps.rb +14 -0
- data/fixtures/tickets/features/272/hooks.feature +26 -0
- data/fixtures/tickets/features/272/hooks_steps.rb +53 -0
- data/fixtures/tickets/features/279/py_string_indent.feature +25 -0
- data/fixtures/tickets/features/279/py_string_indent.steps.rb +12 -0
- data/fixtures/tickets/features/279/wrong.feature_ +11 -0
- data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
- data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
- data/fixtures/tickets/features/306/only_background.feature +4 -0
- data/fixtures/tickets/features/around_timeout.feature +6 -0
- data/fixtures/tickets/features/gherkin_67.feature +12 -0
- data/fixtures/tickets/features/gherkin_68.feature +4 -0
- data/fixtures/tickets/features/half_manual.feature +11 -0
- data/fixtures/tickets/features/lib/eatting_machine.rb +18 -0
- data/fixtures/tickets/features/lib/pantry.rb +20 -0
- data/fixtures/tickets/features/scenario_outline.feature +95 -0
- data/fixtures/tickets/features/step_definitons/246_steps.rb +3 -0
- data/fixtures/tickets/features/step_definitons/248_steps.rb +15 -0
- data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +9 -0
- data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +11 -0
- data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
- data/fixtures/tickets/features/step_definitons/tickets_steps.rb +88 -0
- data/fixtures/tickets/features/table_diffing.feature +13 -0
- data/fixtures/tickets/features/tickets.feature +28 -0
- data/gem_tasks/contributors.rake +15 -0
- data/gem_tasks/cucumber.rake +21 -0
- data/gem_tasks/downloads.rb +7 -0
- data/gem_tasks/environment.rake +7 -0
- data/gem_tasks/examples.rake +11 -0
- data/gem_tasks/fix_cr_lf.rake +10 -0
- data/gem_tasks/flog.rake +4 -0
- data/gem_tasks/rspec.rake +8 -0
- data/gem_tasks/sass.rake +4 -0
- data/gem_tasks/stats +14 -0
- data/gem_tasks/versions.txt +74 -0
- data/gem_tasks/yard.rake +0 -0
- data/gem_tasks/yard/default/layout/html/bubble_32x32.png +0 -0
- data/gem_tasks/yard/default/layout/html/footer.erb +5 -0
- data/gem_tasks/yard/default/layout/html/index.erb +1 -0
- data/gem_tasks/yard/default/layout/html/layout.erb +25 -0
- data/gem_tasks/yard/default/layout/html/logo.erb +1 -0
- data/gem_tasks/yard/default/layout/html/setup.rb +4 -0
- data/legacy_features/announce.feature +152 -0
- data/legacy_features/api/list_step_defs_as_json.feature +50 -0
- data/legacy_features/api/run_cli_main_with_existing_runtime.feature +34 -0
- data/legacy_features/around_hooks.feature +232 -0
- data/legacy_features/bug_371.feature +32 -0
- data/legacy_features/bug_464.feature +16 -0
- data/legacy_features/bug_475.feature +42 -0
- data/legacy_features/bug_585_tab_indentation.feature +22 -0
- data/legacy_features/bug_600.feature +73 -0
- data/legacy_features/call_steps_from_stepdefs.feature +154 -0
- data/legacy_features/cucumber_cli.feature +591 -0
- data/legacy_features/cucumber_cli_outlines.feature +117 -0
- data/legacy_features/default_snippets.feature +42 -0
- data/legacy_features/diffing.feature +25 -0
- data/legacy_features/drb_server_integration.feature +174 -0
- data/legacy_features/exception_in_after_block.feature +127 -0
- data/legacy_features/exception_in_after_step_block.feature +104 -0
- data/legacy_features/exception_in_before_block.feature +98 -0
- data/legacy_features/exclude_files.feature +20 -0
- data/legacy_features/expand.feature +60 -0
- data/legacy_features/html_formatter.feature +8 -0
- data/legacy_features/html_formatter/a.html +561 -0
- data/legacy_features/junit_formatter.feature +164 -0
- data/legacy_features/language_from_header.feature +30 -0
- data/legacy_features/language_help.feature +77 -0
- data/legacy_features/listener_debugger_formatter.feature +42 -0
- data/legacy_features/multiline_names.feature +44 -0
- data/legacy_features/post_configuration_hook.feature +50 -0
- data/legacy_features/profiles.feature +126 -0
- data/legacy_features/rake_task.feature +152 -0
- data/legacy_features/report_called_undefined_steps.feature +34 -0
- data/legacy_features/rerun_formatter.feature +52 -0
- data/legacy_features/simplest.feature +11 -0
- data/legacy_features/snippet.feature +23 -0
- data/legacy_features/snippets_when_using_star_keyword.feature +36 -0
- data/legacy_features/step_definitions/cucumber_steps.rb +172 -0
- data/legacy_features/step_definitions/extra_steps.rb +2 -0
- data/legacy_features/step_definitions/simplest_steps.rb +3 -0
- data/legacy_features/step_definitions/wire_steps.rb +34 -0
- data/legacy_features/support/env.rb +157 -0
- data/legacy_features/support/env.rb.simplest +7 -0
- data/legacy_features/support/fake_wire_server.rb +77 -0
- data/legacy_features/table_diffing.feature +45 -0
- data/legacy_features/table_mapping.feature +34 -0
- data/legacy_features/transform.feature +245 -0
- data/legacy_features/unicode_table.feature +35 -0
- data/legacy_features/wire_protocol.feature +332 -0
- data/legacy_features/wire_protocol_erb.feature +57 -0
- data/legacy_features/wire_protocol_table_diffing.feature +119 -0
- data/legacy_features/wire_protocol_tags.feature +87 -0
- data/legacy_features/wire_protocol_timeouts.feature +63 -0
- data/legacy_features/work_in_progress.feature +156 -0
- data/lib/README.rdoc +12 -0
- data/lib/autotest/cucumber.rb +6 -0
- data/lib/autotest/cucumber_mixin.rb +135 -0
- data/lib/autotest/cucumber_rails.rb +6 -0
- data/lib/autotest/cucumber_rails_rspec.rb +6 -0
- data/lib/autotest/cucumber_rails_rspec2.rb +6 -0
- data/lib/autotest/cucumber_rspec.rb +6 -0
- data/lib/autotest/cucumber_rspec2.rb +6 -0
- data/lib/autotest/discover.rb +9 -0
- data/lib/cucumber.rb +27 -0
- data/lib/cucumber/ast.rb +30 -0
- data/lib/cucumber/ast/background.rb +101 -0
- data/lib/cucumber/ast/comment.rb +31 -0
- data/lib/cucumber/ast/doc_string.rb +80 -0
- data/lib/cucumber/ast/examples.rb +46 -0
- data/lib/cucumber/ast/feature.rb +106 -0
- data/lib/cucumber/ast/feature_element.rb +78 -0
- data/lib/cucumber/ast/features.rb +35 -0
- data/lib/cucumber/ast/names.rb +13 -0
- data/lib/cucumber/ast/outline_table.rb +187 -0
- data/lib/cucumber/ast/scenario.rb +119 -0
- data/lib/cucumber/ast/scenario_outline.rb +125 -0
- data/lib/cucumber/ast/step.rb +126 -0
- data/lib/cucumber/ast/step_collection.rb +76 -0
- data/lib/cucumber/ast/step_invocation.rb +206 -0
- data/lib/cucumber/ast/table.rb +689 -0
- data/lib/cucumber/ast/tags.rb +28 -0
- data/lib/cucumber/ast/tree_walker.rb +183 -0
- data/lib/cucumber/ast/visitor.rb +11 -0
- data/lib/cucumber/broadcaster.rb +13 -0
- data/lib/cucumber/cli/configuration.rb +209 -0
- data/lib/cucumber/cli/drb_client.rb +43 -0
- data/lib/cucumber/cli/main.rb +78 -0
- data/lib/cucumber/cli/options.rb +410 -0
- data/lib/cucumber/cli/profile_loader.rb +91 -0
- data/lib/cucumber/configuration.rb +49 -0
- data/lib/cucumber/constantize.rb +34 -0
- data/lib/cucumber/core_ext/disable_mini_and_test_unit_autorun.rb +25 -0
- data/lib/cucumber/core_ext/instance_exec.rb +98 -0
- data/lib/cucumber/core_ext/proc.rb +34 -0
- data/lib/cucumber/core_ext/string.rb +9 -0
- data/lib/cucumber/errors.rb +40 -0
- data/lib/cucumber/feature_file.rb +101 -0
- data/lib/cucumber/formatter/ansicolor.rb +160 -0
- data/lib/cucumber/formatter/console.rb +187 -0
- data/lib/cucumber/formatter/cucumber.css +279 -0
- data/lib/cucumber/formatter/cucumber.sass +247 -0
- data/lib/cucumber/formatter/debug.rb +33 -0
- data/lib/cucumber/formatter/duration.rb +13 -0
- data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +83 -0
- data/lib/cucumber/formatter/gpretty.rb +24 -0
- data/lib/cucumber/formatter/html.rb +649 -0
- data/lib/cucumber/formatter/io.rb +31 -0
- data/lib/cucumber/formatter/jquery-min.js +154 -0
- data/lib/cucumber/formatter/json.rb +31 -0
- data/lib/cucumber/formatter/json_pretty.rb +13 -0
- data/lib/cucumber/formatter/junit.rb +155 -0
- data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
- data/lib/cucumber/formatter/pdf.rb +244 -0
- data/lib/cucumber/formatter/pretty.rb +237 -0
- data/lib/cucumber/formatter/progress.rb +92 -0
- data/lib/cucumber/formatter/rerun.rb +68 -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/unicode.rb +79 -0
- data/lib/cucumber/formatter/usage.rb +127 -0
- data/lib/cucumber/js_support/js_dsl.js +57 -0
- data/lib/cucumber/js_support/js_language.rb +185 -0
- data/lib/cucumber/js_support/js_snippets.rb +27 -0
- data/lib/cucumber/language_support.rb +30 -0
- data/lib/cucumber/language_support/language_methods.rb +129 -0
- data/lib/cucumber/parser.rb +2 -0
- data/lib/cucumber/parser/gherkin_builder.rb +129 -0
- data/lib/cucumber/platform.rb +29 -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 +84 -0
- data/lib/cucumber/rake/task.rb +225 -0
- data/lib/cucumber/rb_support/rb_dsl.rb +112 -0
- data/lib/cucumber/rb_support/rb_hook.rb +18 -0
- data/lib/cucumber/rb_support/rb_language.rb +195 -0
- data/lib/cucumber/rb_support/rb_step_definition.rb +82 -0
- data/lib/cucumber/rb_support/rb_transform.rb +54 -0
- data/lib/cucumber/rb_support/rb_world.rb +103 -0
- data/lib/cucumber/rb_support/regexp_argument_matcher.rb +21 -0
- data/lib/cucumber/rspec/disable_option_parser.rb +23 -0
- data/lib/cucumber/rspec/doubles.rb +16 -0
- data/lib/cucumber/runtime.rb +145 -0
- data/lib/cucumber/runtime/features_loader.rb +62 -0
- data/lib/cucumber/runtime/for_programming_languages.rb +67 -0
- data/lib/cucumber/runtime/results.rb +64 -0
- data/lib/cucumber/runtime/support_code.rb +203 -0
- data/lib/cucumber/runtime/user_interface.rb +81 -0
- data/lib/cucumber/step_argument.rb +9 -0
- data/lib/cucumber/step_definition_light.rb +20 -0
- data/lib/cucumber/step_definitions.rb +14 -0
- data/lib/cucumber/step_match.rb +115 -0
- data/lib/cucumber/step_mother.rb +10 -0
- data/lib/cucumber/wire_support/configuration.rb +31 -0
- data/lib/cucumber/wire_support/connection.rb +55 -0
- data/lib/cucumber/wire_support/request_handler.rb +32 -0
- data/lib/cucumber/wire_support/wire_exception.rb +32 -0
- data/lib/cucumber/wire_support/wire_language.rb +54 -0
- data/lib/cucumber/wire_support/wire_packet.rb +32 -0
- data/lib/cucumber/wire_support/wire_protocol.rb +44 -0
- data/lib/cucumber/wire_support/wire_protocol/requests.rb +123 -0
- data/lib/cucumber/wire_support/wire_step_definition.rb +26 -0
- data/spec/cucumber/ast/background_spec.rb +115 -0
- data/spec/cucumber/ast/doc_string_spec.rb +40 -0
- data/spec/cucumber/ast/feature_factory.rb +61 -0
- data/spec/cucumber/ast/feature_spec.rb +63 -0
- data/spec/cucumber/ast/outline_table_spec.rb +21 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +69 -0
- data/spec/cucumber/ast/step_spec.rb +66 -0
- data/spec/cucumber/ast/table_spec.rb +484 -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 +431 -0
- data/spec/cucumber/cli/drb_client_spec.rb +76 -0
- data/spec/cucumber/cli/main_spec.rb +137 -0
- data/spec/cucumber/cli/options_spec.rb +358 -0
- data/spec/cucumber/cli/profile_loader_spec.rb +35 -0
- data/spec/cucumber/configuration_spec.rb +23 -0
- data/spec/cucumber/core_ext/proc_spec.rb +68 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
- data/spec/cucumber/formatter/duration_spec.rb +22 -0
- data/spec/cucumber/formatter/html_spec.rb +256 -0
- data/spec/cucumber/formatter/junit_spec.rb +125 -0
- data/spec/cucumber/formatter/progress_spec.rb +38 -0
- data/spec/cucumber/formatter/spec_helper.rb +52 -0
- data/spec/cucumber/rake/forked_spec.rb +62 -0
- data/spec/cucumber/rake/rcov_spec.rb +71 -0
- data/spec/cucumber/rb_support/rb_language_spec.rb +282 -0
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +98 -0
- data/spec/cucumber/rb_support/rb_transform_spec.rb +21 -0
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +18 -0
- data/spec/cucumber/runtime/support_code_spec.rb +112 -0
- data/spec/cucumber/runtime_spec.rb +41 -0
- data/spec/cucumber/sell_cucumbers.feature +19 -0
- data/spec/cucumber/step_match_spec.rb +69 -0
- data/spec/cucumber/wire_support/configuration_spec.rb +51 -0
- data/spec/cucumber/wire_support/connection_spec.rb +46 -0
- data/spec/cucumber/wire_support/wire_exception_spec.rb +44 -0
- data/spec/cucumber/wire_support/wire_language_spec.rb +47 -0
- data/spec/cucumber/wire_support/wire_packet_spec.rb +40 -0
- data/spec/cucumber/wire_support/wire_step_definition_spec.rb +20 -0
- data/spec/cucumber/world/pending_spec.rb +46 -0
- data/spec/spec_helper.rb +22 -0
- metadata +1044 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
require 'cucumber/platform'
|
|
2
|
+
require 'gherkin/formatter/ansi_escapes'
|
|
3
|
+
begin
|
|
4
|
+
# Support Rake > 0.8.7
|
|
5
|
+
require 'rake/dsl_definition'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module Cucumber
|
|
10
|
+
module Rake
|
|
11
|
+
# Defines a Rake task for running features.
|
|
12
|
+
#
|
|
13
|
+
# The simplest use of it goes something like:
|
|
14
|
+
#
|
|
15
|
+
# Cucumber::Rake::Task.new
|
|
16
|
+
#
|
|
17
|
+
# This will define a task named <tt>cucumber</tt> described as 'Run Cucumber features'.
|
|
18
|
+
# It will use steps from 'features/**/*.rb' and features in 'features/**/*.feature'.
|
|
19
|
+
#
|
|
20
|
+
# To further configure the task, you can pass a block:
|
|
21
|
+
#
|
|
22
|
+
# Cucumber::Rake::Task.new do |t|
|
|
23
|
+
# t.cucumber_opts = %w{--format progress}
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
# This task can also be configured to be run with RCov:
|
|
27
|
+
#
|
|
28
|
+
# Cucumber::Rake::Task.new do |t|
|
|
29
|
+
# t.rcov = true
|
|
30
|
+
# end
|
|
31
|
+
#
|
|
32
|
+
# See the attributes for additional configuration possibilities.
|
|
33
|
+
class Task
|
|
34
|
+
include Gherkin::Formatter::AnsiEscapes
|
|
35
|
+
include ::Rake::DSL if defined?(::Rake::DSL)
|
|
36
|
+
|
|
37
|
+
class InProcessCucumberRunner #:nodoc:
|
|
38
|
+
include ::Rake::DSL if defined?(::Rake::DSL)
|
|
39
|
+
|
|
40
|
+
attr_reader :args
|
|
41
|
+
|
|
42
|
+
def initialize(libs, cucumber_opts, feature_files)
|
|
43
|
+
raise "libs must be an Array when running in-process" unless Array === libs
|
|
44
|
+
libs.reverse.each{|lib| $LOAD_PATH.unshift(lib)}
|
|
45
|
+
@args = (
|
|
46
|
+
cucumber_opts +
|
|
47
|
+
feature_files
|
|
48
|
+
).flatten.compact
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def run
|
|
52
|
+
require 'cucumber/cli/main'
|
|
53
|
+
failure = Cucumber::Cli::Main.execute(args)
|
|
54
|
+
raise "Cucumber failed" if failure
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class ForkedCucumberRunner #:nodoc:
|
|
59
|
+
include ::Rake::DSL if defined?(::Rake::DSL)
|
|
60
|
+
|
|
61
|
+
def initialize(libs, cucumber_bin, cucumber_opts, bundler, feature_files)
|
|
62
|
+
@libs = libs
|
|
63
|
+
@cucumber_bin = cucumber_bin
|
|
64
|
+
@cucumber_opts = cucumber_opts
|
|
65
|
+
@bundler = bundler
|
|
66
|
+
@feature_files = feature_files
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def load_path(libs)
|
|
70
|
+
['"%s"' % @libs.join(File::PATH_SEPARATOR)]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def quoted_binary(cucumber_bin)
|
|
74
|
+
['"%s"' % cucumber_bin]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def use_bundler
|
|
78
|
+
@bundler.nil? ? File.exist?("./Gemfile") && gem_available?("bundler") : @bundler
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def gem_available?(gemname)
|
|
82
|
+
gem_available_new_rubygems?(gemname) || gem_available_old_rubygems?(gemname)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def gem_available_old_rubygems?(gemname)
|
|
86
|
+
Gem.available?(gemname)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def gem_available_new_rubygems?(gemname)
|
|
90
|
+
Gem::Specification.respond_to?(:find_all_by_name) && Gem::Specification.find_all_by_name(gemname).any?
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def cmd
|
|
94
|
+
if use_bundler
|
|
95
|
+
[ Cucumber::RUBY_BINARY, '-S', 'bundle', 'exec', 'cucumber', @cucumber_opts,
|
|
96
|
+
@feature_files ].flatten
|
|
97
|
+
else
|
|
98
|
+
[ Cucumber::RUBY_BINARY, '-I', load_path(@libs), quoted_binary(@cucumber_bin),
|
|
99
|
+
@cucumber_opts, @feature_files ].flatten
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def run
|
|
104
|
+
sh(cmd.join(" "))
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
class RCovCucumberRunner < ForkedCucumberRunner #:nodoc:
|
|
109
|
+
|
|
110
|
+
def initialize(libs, cucumber_bin, cucumber_opts, bundler, feature_files, rcov_opts)
|
|
111
|
+
super( libs, cucumber_bin, cucumber_opts, bundler, feature_files )
|
|
112
|
+
@rcov_opts = rcov_opts
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def cmd
|
|
116
|
+
if use_bundler
|
|
117
|
+
[Cucumber::RUBY_BINARY, '-S', 'bundle', 'exec', 'rcov', @rcov_opts,
|
|
118
|
+
quoted_binary(@cucumber_bin), '--', @cucumber_opts, @feature_files].flatten
|
|
119
|
+
else
|
|
120
|
+
[Cucumber::RUBY_BINARY, '-I', load_path(@libs), '-S', 'rcov', @rcov_opts,
|
|
121
|
+
quoted_binary(@cucumber_bin), '--', @cucumber_opts, @feature_files].flatten
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
LIB = File.expand_path(File.dirname(__FILE__) + '/../..') #:nodoc:
|
|
128
|
+
|
|
129
|
+
# Directories to add to the Ruby $LOAD_PATH
|
|
130
|
+
attr_accessor :libs
|
|
131
|
+
|
|
132
|
+
# Name of the cucumber binary to use for running features. Defaults to Cucumber::BINARY
|
|
133
|
+
attr_accessor :binary
|
|
134
|
+
|
|
135
|
+
# Extra options to pass to the cucumber binary. Can be overridden by the CUCUMBER_OPTS environment variable.
|
|
136
|
+
# It's recommended to pass an Array, but if it's a String it will be #split by ' '.
|
|
137
|
+
attr_accessor :cucumber_opts
|
|
138
|
+
def cucumber_opts=(opts) #:nodoc:
|
|
139
|
+
@cucumber_opts = String === opts ? opts.split(' ') : opts
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Run cucumber with RCov? Defaults to false. If you set this to
|
|
143
|
+
# true, +fork+ is implicit.
|
|
144
|
+
attr_accessor :rcov
|
|
145
|
+
def rcov=(flag)
|
|
146
|
+
if(flag && Cucumber::RUBY_1_9)
|
|
147
|
+
raise failed + "RCov only works on Ruby 1.8.x. You may want to use SimpleCov: https://github.com/colszowka/simplecov" + reset
|
|
148
|
+
end
|
|
149
|
+
@rcov = flag
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Extra options to pass to rcov.
|
|
153
|
+
# It's recommended to pass an Array, but if it's a String it will be #split by ' '.
|
|
154
|
+
attr_accessor :rcov_opts
|
|
155
|
+
def rcov_opts=(opts) #:nodoc:
|
|
156
|
+
@rcov_opts = String === opts ? opts.split(' ') : opts
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Whether or not to fork a new ruby interpreter. Defaults to true. You may gain
|
|
160
|
+
# some startup speed if you set it to false, but this may also cause issues with
|
|
161
|
+
# your load path and gems.
|
|
162
|
+
attr_accessor :fork
|
|
163
|
+
|
|
164
|
+
# Define what profile to be used. When used with cucumber_opts it is simply appended
|
|
165
|
+
# to it. Will be ignored when CUCUMBER_OPTS is used.
|
|
166
|
+
attr_accessor :profile
|
|
167
|
+
|
|
168
|
+
# Whether or not to run with bundler (bundle exec). Setting this to false may speed
|
|
169
|
+
# up the execution. The default value is true if Bundler is installed and you have
|
|
170
|
+
# a Gemfile, false otherwise.
|
|
171
|
+
#
|
|
172
|
+
# Note that this attribute has no effect if you don't run in forked mode.
|
|
173
|
+
attr_accessor :bundler
|
|
174
|
+
|
|
175
|
+
# Define Cucumber Rake task
|
|
176
|
+
def initialize(task_name = "cucumber", desc = "Run Cucumber features")
|
|
177
|
+
@task_name, @desc = task_name, desc
|
|
178
|
+
@fork = true
|
|
179
|
+
@libs = ['lib']
|
|
180
|
+
@rcov_opts = %w{--rails --exclude osx\/objc,gems\/}
|
|
181
|
+
|
|
182
|
+
yield self if block_given?
|
|
183
|
+
|
|
184
|
+
@binary = binary.nil? ? Cucumber::BINARY : File.expand_path(binary)
|
|
185
|
+
@libs.insert(0, LIB) if binary == Cucumber::BINARY
|
|
186
|
+
|
|
187
|
+
define_task
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def define_task #:nodoc:
|
|
191
|
+
desc @desc
|
|
192
|
+
task @task_name do
|
|
193
|
+
runner.run
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def runner(task_args = nil) #:nodoc:
|
|
198
|
+
cucumber_opts = [(ENV['CUCUMBER_OPTS'] ? ENV['CUCUMBER_OPTS'].split(/\s+/) : nil) || cucumber_opts_with_profile]
|
|
199
|
+
if(@rcov)
|
|
200
|
+
RCovCucumberRunner.new(libs, binary, cucumber_opts, bundler, feature_files, rcov_opts)
|
|
201
|
+
elsif(@fork)
|
|
202
|
+
ForkedCucumberRunner.new(libs, binary, cucumber_opts, bundler, feature_files)
|
|
203
|
+
else
|
|
204
|
+
InProcessCucumberRunner.new(libs, cucumber_opts, feature_files)
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def cucumber_opts_with_profile #:nodoc:
|
|
209
|
+
@profile ? [cucumber_opts, '--profile', @profile] : cucumber_opts
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def feature_files #:nodoc:
|
|
213
|
+
if ENV['FEATURES']
|
|
214
|
+
make_command_line_safe(ENV['FEATURES'].split(','))
|
|
215
|
+
else
|
|
216
|
+
make_command_line_safe(FileList[ ENV['FEATURE'] || [] ])
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def make_command_line_safe(list)
|
|
221
|
+
list.map{|string| string.gsub(' ', '\ ')}
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
module Cucumber
|
|
2
|
+
module RbSupport
|
|
3
|
+
# This module defines the methods you can use to define pure Ruby
|
|
4
|
+
# Step Definitions and Hooks. This module is mixed into the toplevel
|
|
5
|
+
# object.
|
|
6
|
+
module RbDsl
|
|
7
|
+
class << self
|
|
8
|
+
attr_writer :rb_language
|
|
9
|
+
|
|
10
|
+
def alias_adverb(adverb)
|
|
11
|
+
alias_method adverb, :register_rb_step_definition
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def build_rb_world_factory(world_modules, proc)
|
|
15
|
+
@rb_language.build_rb_world_factory(world_modules, proc)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def register_rb_hook(phase, tag_names, proc)
|
|
19
|
+
@rb_language.register_rb_hook(phase, tag_names, proc)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def register_rb_transform(regexp, proc)
|
|
23
|
+
@rb_language.register_rb_transform(regexp, proc)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def register_rb_step_definition(regexp, proc)
|
|
27
|
+
@rb_language.register_rb_step_definition(regexp, proc)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Registers any number of +world_modules+ (Ruby Modules) and/or a Proc.
|
|
32
|
+
# The +proc+ will be executed once before each scenario to create an
|
|
33
|
+
# Object that the scenario's steps will run within. Any +world_modules+
|
|
34
|
+
# will be mixed into this Object (via Object#extend).
|
|
35
|
+
#
|
|
36
|
+
# This method is typically called from one or more Ruby scripts under
|
|
37
|
+
# <tt>features/support</tt>. You can call this method as many times as you
|
|
38
|
+
# like (to register more modules), but if you try to register more than
|
|
39
|
+
# one Proc you will get an error.
|
|
40
|
+
#
|
|
41
|
+
# Cucumber will not yield anything to the +proc+. Examples:
|
|
42
|
+
#
|
|
43
|
+
# World do
|
|
44
|
+
# MyClass.new
|
|
45
|
+
# end
|
|
46
|
+
#
|
|
47
|
+
# World(MyModule)
|
|
48
|
+
#
|
|
49
|
+
def World(*world_modules, &proc)
|
|
50
|
+
RbDsl.build_rb_world_factory(world_modules, proc)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Registers a proc that will run before each Scenario. You can register as many
|
|
54
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
55
|
+
def Before(*tag_expressions, &proc)
|
|
56
|
+
RbDsl.register_rb_hook('before', tag_expressions, proc)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Registers a proc that will run after each Scenario. You can register as many
|
|
60
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
61
|
+
def After(*tag_expressions, &proc)
|
|
62
|
+
RbDsl.register_rb_hook('after', tag_expressions, proc)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Registers a proc that will be wrapped around each scenario. The proc
|
|
66
|
+
# should accept two arguments: two arguments: the scenario and a "block"
|
|
67
|
+
# argument (but passed as a regular argument, since blocks cannot accept
|
|
68
|
+
# blocks in 1.8), on which it should call the .call method. You can register
|
|
69
|
+
# as many as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
70
|
+
def Around(*tag_expressions, &proc)
|
|
71
|
+
RbDsl.register_rb_hook('around', tag_expressions, proc)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Registers a proc that will run after each Step. You can register as
|
|
75
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
76
|
+
def AfterStep(*tag_expressions, &proc)
|
|
77
|
+
RbDsl.register_rb_hook('after_step', tag_expressions, proc)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Registers a proc that will be called with a step definition argument if it
|
|
81
|
+
# matches the pattern passed as the first argument to Transform. Alternatively, if
|
|
82
|
+
# the pattern contains captures then they will be yielded as arguments to the
|
|
83
|
+
# provided proc. The return value of the proc is consequently yielded to the
|
|
84
|
+
# step definition.
|
|
85
|
+
def Transform(regexp, &proc)
|
|
86
|
+
RbDsl.register_rb_transform(regexp, proc)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Registers a proc that will run after Cucumber is configured. You can register as
|
|
90
|
+
# as you want (typically from ruby scripts under <tt>support/hooks.rb</tt>).
|
|
91
|
+
# TODO: Deprecate this
|
|
92
|
+
def AfterConfiguration(&proc)
|
|
93
|
+
RbDsl.register_rb_hook('after_configuration', [], proc)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Registers a new Ruby StepDefinition. This method is aliased
|
|
97
|
+
# to <tt>Given</tt>, <tt>When</tt> and <tt>Then</tt>, and
|
|
98
|
+
# also to the i18n translations whenever a feature of a
|
|
99
|
+
# new language is loaded.
|
|
100
|
+
#
|
|
101
|
+
# The +&proc+ gets executed in the context of a <tt>World</tt>
|
|
102
|
+
# object, which is defined by #World. A new <tt>World</tt>
|
|
103
|
+
# object is created for each scenario and is shared across
|
|
104
|
+
# step definitions within that scenario.
|
|
105
|
+
def register_rb_step_definition(regexp, &proc)
|
|
106
|
+
RbDsl.register_rb_step_definition(regexp, proc)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
extend(Cucumber::RbSupport::RbDsl)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Cucumber
|
|
2
|
+
module RbSupport
|
|
3
|
+
# Wrapper for Before, After and AfterStep hooks
|
|
4
|
+
class RbHook
|
|
5
|
+
attr_reader :tag_expressions
|
|
6
|
+
|
|
7
|
+
def initialize(rb_language, tag_expressions, proc)
|
|
8
|
+
@rb_language = rb_language
|
|
9
|
+
@tag_expressions = tag_expressions
|
|
10
|
+
@proc = proc
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def invoke(location, argument, &block)
|
|
14
|
+
@rb_language.current_world.cucumber_instance_exec(false, location, *[argument, block].compact, &@proc)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
require 'cucumber/core_ext/instance_exec'
|
|
2
|
+
require 'cucumber/rb_support/rb_dsl'
|
|
3
|
+
require 'cucumber/rb_support/rb_world'
|
|
4
|
+
require 'cucumber/rb_support/rb_step_definition'
|
|
5
|
+
require 'cucumber/rb_support/rb_hook'
|
|
6
|
+
require 'cucumber/rb_support/rb_transform'
|
|
7
|
+
|
|
8
|
+
module Cucumber
|
|
9
|
+
module RbSupport
|
|
10
|
+
# Raised if a World block returns Nil.
|
|
11
|
+
class NilWorld < StandardError
|
|
12
|
+
def initialize
|
|
13
|
+
super("World procs should never return nil")
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Raised if there are 2 or more World blocks.
|
|
18
|
+
class MultipleWorld < StandardError
|
|
19
|
+
def initialize(first_proc, second_proc)
|
|
20
|
+
message = "You can only pass a proc to #World once, but it's happening\n"
|
|
21
|
+
message << "in 2 places:\n\n"
|
|
22
|
+
message << first_proc.backtrace_line('World') << "\n"
|
|
23
|
+
message << second_proc.backtrace_line('World') << "\n\n"
|
|
24
|
+
message << "Use Ruby modules instead to extend your worlds. See the Cucumber::RbSupport::RbDsl#World RDoc\n"
|
|
25
|
+
message << "or http://wiki.github.com/cucumber/cucumber/a-whole-new-world.\n\n"
|
|
26
|
+
super(message)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# The Ruby implementation of the programming language API.
|
|
31
|
+
class RbLanguage
|
|
32
|
+
include LanguageSupport::LanguageMethods
|
|
33
|
+
attr_reader :current_world,
|
|
34
|
+
:step_definitions
|
|
35
|
+
|
|
36
|
+
Gherkin::I18n.code_keywords.each do |adverb|
|
|
37
|
+
RbDsl.alias_adverb(adverb)
|
|
38
|
+
RbWorld.alias_adverb(adverb)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def initialize(step_mother)
|
|
42
|
+
@step_mother = step_mother
|
|
43
|
+
@step_definitions = []
|
|
44
|
+
RbDsl.rb_language = self
|
|
45
|
+
@world_proc = @world_modules = nil
|
|
46
|
+
enable_rspec_expectations_if_available
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def enable_rspec_expectations_if_available
|
|
50
|
+
begin
|
|
51
|
+
# RSpec >=2.0
|
|
52
|
+
require 'rspec/expectations'
|
|
53
|
+
@rspec_matchers = ::RSpec::Matchers
|
|
54
|
+
rescue LoadError => try_rspec_1_2_4_or_higher
|
|
55
|
+
begin
|
|
56
|
+
require 'spec/expectations'
|
|
57
|
+
require 'spec/runner/differs/default'
|
|
58
|
+
require 'ostruct'
|
|
59
|
+
options = OpenStruct.new(:diff_format => :unified, :context_lines => 3)
|
|
60
|
+
Spec::Expectations.differ = Spec::Expectations::Differs::Default.new(options)
|
|
61
|
+
@rspec_matchers = ::Spec::Matchers
|
|
62
|
+
rescue LoadError => give_up
|
|
63
|
+
@rspec_matchers = Module.new{}
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Gets called for each file under features (or whatever is overridden
|
|
69
|
+
# with --require).
|
|
70
|
+
def step_definitions_for(rb_file) # Looks Unused - Delete?
|
|
71
|
+
begin
|
|
72
|
+
require rb_file # This will cause self.add_step_definition and self.add_hook to be called from RbDsl
|
|
73
|
+
step_definitions
|
|
74
|
+
rescue LoadError => e
|
|
75
|
+
e.message << "\nFailed to load #{code_file}"
|
|
76
|
+
raise e
|
|
77
|
+
ensure
|
|
78
|
+
@step_definitions = nil
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def step_matches(name_to_match, name_to_format)
|
|
83
|
+
@step_definitions.map do |step_definition|
|
|
84
|
+
if(arguments = step_definition.arguments_from(name_to_match))
|
|
85
|
+
StepMatch.new(step_definition, name_to_match, name_to_format, arguments)
|
|
86
|
+
else
|
|
87
|
+
nil
|
|
88
|
+
end
|
|
89
|
+
end.compact
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
ARGUMENT_PATTERNS = ['"([^"]*)"', '(\d+)']
|
|
93
|
+
|
|
94
|
+
def snippet_text(code_keyword, step_name, multiline_arg_class)
|
|
95
|
+
snippet_pattern = Regexp.escape(step_name).gsub('\ ', ' ').gsub('/', '\/')
|
|
96
|
+
arg_count = 0
|
|
97
|
+
ARGUMENT_PATTERNS.each do |pattern|
|
|
98
|
+
snippet_pattern = snippet_pattern.gsub(Regexp.new(pattern), pattern)
|
|
99
|
+
arg_count += snippet_pattern.scan(pattern).length
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
block_args = (0...arg_count).map {|n| "arg#{n+1}"}
|
|
103
|
+
block_args << multiline_arg_class.default_arg_name unless multiline_arg_class.nil?
|
|
104
|
+
block_arg_string = block_args.empty? ? "" : " |#{block_args.join(", ")}|"
|
|
105
|
+
multiline_class_comment = ""
|
|
106
|
+
if(multiline_arg_class == Ast::Table)
|
|
107
|
+
multiline_class_comment = "# #{multiline_arg_class.default_arg_name} is a #{multiline_arg_class.to_s}\n "
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
"#{code_keyword} /^#{snippet_pattern}$/ do#{block_arg_string}\n #{multiline_class_comment}pending # express the regexp above with the code you wish you had\nend"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def begin_rb_scenario(scenario)
|
|
114
|
+
create_world
|
|
115
|
+
extend_world
|
|
116
|
+
connect_world(scenario)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def register_rb_hook(phase, tag_expressions, proc)
|
|
120
|
+
add_hook(phase, RbHook.new(self, tag_expressions, proc))
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def register_rb_transform(regexp, proc)
|
|
124
|
+
add_transform(RbTransform.new(self, regexp, proc))
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def register_rb_step_definition(regexp, proc)
|
|
128
|
+
step_definition = RbStepDefinition.new(self, regexp, proc)
|
|
129
|
+
@step_definitions << step_definition
|
|
130
|
+
step_definition
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def build_rb_world_factory(world_modules, proc)
|
|
134
|
+
if(proc)
|
|
135
|
+
raise MultipleWorld.new(@world_proc, proc) if @world_proc
|
|
136
|
+
@world_proc = proc
|
|
137
|
+
end
|
|
138
|
+
@world_modules ||= []
|
|
139
|
+
@world_modules += world_modules
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def load_code_file(code_file)
|
|
143
|
+
load File.expand_path(code_file) # This will cause self.add_step_definition, self.add_hook, and self.add_transform to be called from RbDsl
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
protected
|
|
147
|
+
|
|
148
|
+
def begin_scenario(scenario)
|
|
149
|
+
begin_rb_scenario(scenario)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def end_scenario
|
|
153
|
+
@current_world = nil
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
private
|
|
157
|
+
|
|
158
|
+
def create_world
|
|
159
|
+
if(@world_proc)
|
|
160
|
+
@current_world = @world_proc.call
|
|
161
|
+
check_nil(@current_world, @world_proc)
|
|
162
|
+
else
|
|
163
|
+
@current_world = Object.new
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def extend_world
|
|
168
|
+
@current_world.extend(RbWorld)
|
|
169
|
+
@current_world.extend(@rspec_matchers)
|
|
170
|
+
(@world_modules || []).each do |mod|
|
|
171
|
+
@current_world.extend(mod)
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def connect_world(scenario)
|
|
176
|
+
@current_world.__cucumber_step_mother = @step_mother
|
|
177
|
+
@current_world.__natural_language = scenario.language
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def check_nil(o, proc)
|
|
181
|
+
if o.nil?
|
|
182
|
+
begin
|
|
183
|
+
raise NilWorld.new
|
|
184
|
+
rescue NilWorld => e
|
|
185
|
+
e.backtrace.clear
|
|
186
|
+
e.backtrace.push(proc.backtrace_line("World"))
|
|
187
|
+
raise e
|
|
188
|
+
end
|
|
189
|
+
else
|
|
190
|
+
o
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|