stefl-cucumber 0.10.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 +24 -0
- data/.rspec +1 -0
- data/Gemfile +7 -0
- data/History.txt +1613 -0
- data/LICENSE +22 -0
- data/README.rdoc +26 -0
- data/Rakefile +12 -0
- data/bin/cucumber +22 -0
- data/cucumber.gemspec +50 -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/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 +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/custom_formatter.feature +41 -0
- data/features/execute_with_tag_filter.feature +63 -0
- data/features/hooks.feature +59 -0
- data/features/json_formatter.feature +249 -0
- data/features/stats_formatters.feature +70 -0
- data/features/step_definitions/cucumber_steps.rb +8 -0
- data/features/support/env.rb +31 -0
- data/features/tagged_hooks.feature +217 -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 +5 -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/env.rb +18 -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 +19 -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/sdoc.rake +12 -0
- data/legacy_features/announce.feature +164 -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 +67 -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 +550 -0
- data/legacy_features/junit_formatter.feature +92 -0
- data/legacy_features/language_from_header.feature +30 -0
- data/legacy_features/language_help.feature +78 -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 +45 -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 +168 -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_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 +99 -0
- data/lib/cucumber/ast/comment.rb +31 -0
- data/lib/cucumber/ast/examples.rb +43 -0
- data/lib/cucumber/ast/feature.rb +103 -0
- data/lib/cucumber/ast/feature_element.rb +78 -0
- data/lib/cucumber/ast/features.rb +35 -0
- data/lib/cucumber/ast/outline_table.rb +187 -0
- data/lib/cucumber/ast/py_string.rb +80 -0
- data/lib/cucumber/ast/scenario.rb +117 -0
- data/lib/cucumber/ast/scenario_outline.rb +122 -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 +199 -0
- data/lib/cucumber/ast/table.rb +689 -0
- data/lib/cucumber/ast/tags.rb +28 -0
- data/lib/cucumber/ast/tree_walker.rb +184 -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 +406 -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_unit_autorun.rb +14 -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 +62 -0
- data/lib/cucumber/formatter/ansicolor.rb +160 -0
- data/lib/cucumber/formatter/console.rb +177 -0
- data/lib/cucumber/formatter/cucumber.css +275 -0
- data/lib/cucumber/formatter/cucumber.sass +271 -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 +84 -0
- data/lib/cucumber/formatter/gpretty.rb +24 -0
- data/lib/cucumber/formatter/html.rb +644 -0
- data/lib/cucumber/formatter/io.rb +31 -0
- data/lib/cucumber/formatter/jquery-min.js +154 -0
- data/lib/cucumber/formatter/json.rb +29 -0
- data/lib/cucumber/formatter/json_pretty.rb +13 -0
- data/lib/cucumber/formatter/junit.rb +150 -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 +55 -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 +130 -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 +170 -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 +37 -0
- data/lib/cucumber/rb_support/rb_world.rb +95 -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 +65 -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 +80 -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 +30 -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 +110 -0
- data/spec/cucumber/ast/feature_factory.rb +60 -0
- data/spec/cucumber/ast/feature_spec.rb +63 -0
- data/spec/cucumber/ast/outline_table_spec.rb +21 -0
- data/spec/cucumber/ast/py_string_spec.rb +40 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +68 -0
- data/spec/cucumber/ast/scenario_spec.rb +43 -0
- data/spec/cucumber/ast/step_spec.rb +66 -0
- data/spec/cucumber/ast/table_spec.rb +474 -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 +77 -0
- data/spec/cucumber/cli/main_spec.rb +137 -0
- data/spec/cucumber/cli/options_spec.rb +351 -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 +258 -0
- data/spec/cucumber/formatter/junit_spec.rb +111 -0
- data/spec/cucumber/formatter/progress_spec.rb +38 -0
- data/spec/cucumber/formatter/spec_helper.rb +51 -0
- data/spec/cucumber/rb_support/rb_language_spec.rb +283 -0
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +99 -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 +10 -0
- metadata +884 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Cli
|
5
|
+
|
6
|
+
class ProfileLoader
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@cucumber_yml = nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def args_from(profile)
|
13
|
+
unless cucumber_yml.has_key?(profile)
|
14
|
+
raise(ProfileNotFound, <<-END_OF_ERROR)
|
15
|
+
Could not find profile: '#{profile}'
|
16
|
+
|
17
|
+
Defined profiles in cucumber.yml:
|
18
|
+
* #{cucumber_yml.keys.join("\n * ")}
|
19
|
+
END_OF_ERROR
|
20
|
+
end
|
21
|
+
|
22
|
+
args_from_yml = cucumber_yml[profile] || ''
|
23
|
+
|
24
|
+
case(args_from_yml)
|
25
|
+
when String
|
26
|
+
raise YmlLoadError, "The '#{profile}' profile in cucumber.yml was blank. Please define the command line arguments for the '#{profile}' profile in cucumber.yml.\n" if args_from_yml =~ /^\s*$/
|
27
|
+
if(Cucumber::WINDOWS)
|
28
|
+
#Shellwords treats backslash as an escape character so here's a rudimentary approximation of the same code
|
29
|
+
args_from_yml = args_from_yml.split
|
30
|
+
args_from_yml = args_from_yml.collect {|x| x.gsub(/^\"(.*)\"/,'\1') }
|
31
|
+
else
|
32
|
+
require 'shellwords'
|
33
|
+
args_from_yml = Shellwords.shellwords(args_from_yml)
|
34
|
+
end
|
35
|
+
when Array
|
36
|
+
raise YmlLoadError, "The '#{profile}' profile in cucumber.yml was empty. Please define the command line arguments for the '#{profile}' profile in cucumber.yml.\n" if args_from_yml.empty?
|
37
|
+
else
|
38
|
+
raise YmlLoadError, "The '#{profile}' profile in cucumber.yml was a #{args_from_yml.class}. It must be a String or Array"
|
39
|
+
end
|
40
|
+
args_from_yml
|
41
|
+
end
|
42
|
+
|
43
|
+
def has_profile?(profile)
|
44
|
+
cucumber_yml.has_key?(profile)
|
45
|
+
end
|
46
|
+
|
47
|
+
def cucumber_yml_defined?
|
48
|
+
cucumber_file && File.exist?(cucumber_file)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# Loads the profile, processing it through ERB and YAML, and returns it as a hash.
|
54
|
+
def cucumber_yml
|
55
|
+
return @cucumber_yml if @cucumber_yml
|
56
|
+
unless cucumber_yml_defined?
|
57
|
+
raise(ProfilesNotDefinedError,"cucumber.yml was not found. Current directory is #{Dir.pwd}. Please refer to cucumber's documentation on defining profiles in cucumber.yml. You must define a 'default' profile to use the cucumber command without any arguments.\nType 'cucumber --help' for usage.\n")
|
58
|
+
end
|
59
|
+
|
60
|
+
require 'erb'
|
61
|
+
require 'yaml'
|
62
|
+
begin
|
63
|
+
@cucumber_erb = ERB.new(IO.read(cucumber_file)).result(binding)
|
64
|
+
rescue Exception => e
|
65
|
+
raise(YmlLoadError,"cucumber.yml was found, but could not be parsed with ERB. Please refer to cucumber's documentation on correct profile usage.\n#{$!.inspect}")
|
66
|
+
end
|
67
|
+
|
68
|
+
begin
|
69
|
+
@cucumber_yml = YAML::load(@cucumber_erb)
|
70
|
+
rescue StandardError => e
|
71
|
+
raise(YmlLoadError,"cucumber.yml was found, but could not be parsed. Please refer to cucumber's documentation on correct profile usage.\n")
|
72
|
+
end
|
73
|
+
|
74
|
+
if @cucumber_yml.nil? || !@cucumber_yml.is_a?(Hash)
|
75
|
+
raise(YmlLoadError,"cucumber.yml was found, but was blank or malformed. Please refer to cucumber's documentation on correct profile usage.\n")
|
76
|
+
end
|
77
|
+
|
78
|
+
return @cucumber_yml
|
79
|
+
end
|
80
|
+
|
81
|
+
# Locates cucumber.yml file. The file can end in .yml or .yaml,
|
82
|
+
# and be located in the current directory (eg. project root) or
|
83
|
+
# in a .config/ or config/ subdirectory of the current directory.
|
84
|
+
def cucumber_file
|
85
|
+
@cucumber_file ||= Dir.glob('{,.config/,config/}cucumber{.yml,.yaml}').first
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Cucumber
|
2
|
+
# The base class for configuring settings for a Cucumber run.
|
3
|
+
class Configuration
|
4
|
+
def self.default
|
5
|
+
new
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.parse(argument)
|
9
|
+
return new(argument) if argument.is_a?(Hash)
|
10
|
+
argument
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(user_options = {})
|
14
|
+
@options = default_options.merge(user_options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def dry_run?
|
18
|
+
@options[:dry_run]
|
19
|
+
end
|
20
|
+
|
21
|
+
def guess?
|
22
|
+
@options[:guess]
|
23
|
+
end
|
24
|
+
|
25
|
+
def strict?
|
26
|
+
@options[:strict]
|
27
|
+
end
|
28
|
+
|
29
|
+
def expand?
|
30
|
+
@options[:expand]
|
31
|
+
end
|
32
|
+
|
33
|
+
def paths
|
34
|
+
@options[:paths]
|
35
|
+
end
|
36
|
+
|
37
|
+
def autoload_code_paths
|
38
|
+
@options[:autoload_code_paths]
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def default_options
|
44
|
+
{
|
45
|
+
:autoload_code_paths => ['features/support', 'features/step_definitions']
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Cucumber
|
2
|
+
module Constantize #:nodoc:
|
3
|
+
def constantize(camel_cased_word)
|
4
|
+
try = 0
|
5
|
+
begin
|
6
|
+
try += 1
|
7
|
+
names = camel_cased_word.split('::')
|
8
|
+
names.shift if names.empty? || names.first.empty?
|
9
|
+
|
10
|
+
constant = Object
|
11
|
+
names.each do |name|
|
12
|
+
constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
|
13
|
+
end
|
14
|
+
constant
|
15
|
+
rescue NameError => e
|
16
|
+
require underscore(camel_cased_word)
|
17
|
+
if try < 2
|
18
|
+
retry
|
19
|
+
else
|
20
|
+
raise e
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Snagged from active_support
|
26
|
+
def underscore(camel_cased_word)
|
27
|
+
camel_cased_word.to_s.gsub(/::/, '/').
|
28
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
29
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
30
|
+
tr("-", "_").
|
31
|
+
downcase
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Why: http://groups.google.com/group/cukes/browse_thread/thread/5682d41436e235d7
|
2
|
+
begin
|
3
|
+
require 'minitest/unit'
|
4
|
+
class MiniTest::Unit
|
5
|
+
class << self
|
6
|
+
@@installed_at_exit = true
|
7
|
+
end
|
8
|
+
|
9
|
+
def run(*)
|
10
|
+
0
|
11
|
+
end
|
12
|
+
end
|
13
|
+
rescue LoadError => ignore
|
14
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'cucumber/platform'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
# Raised if the number of a StepDefinition's Regexp match groups
|
5
|
+
# is different from the number of Proc arguments.
|
6
|
+
class ArityMismatchError < StandardError
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Object #:nodoc:
|
11
|
+
unless defined? instance_exec # 1.9
|
12
|
+
# http://eigenclass.org/hiki/bounded+space+instance_exec
|
13
|
+
module InstanceExecHelper #:nodoc:
|
14
|
+
end
|
15
|
+
include InstanceExecHelper
|
16
|
+
def instance_exec(*args, &block)
|
17
|
+
begin
|
18
|
+
old_critical, Thread.critical = Thread.critical, true
|
19
|
+
n = 0
|
20
|
+
n += 1 while respond_to?(mname="__instance_exec#{n}")
|
21
|
+
InstanceExecHelper.module_eval{ define_method(mname, &block) }
|
22
|
+
ensure
|
23
|
+
Thread.critical = old_critical
|
24
|
+
end
|
25
|
+
begin
|
26
|
+
ret = send(mname, *args)
|
27
|
+
ensure
|
28
|
+
InstanceExecHelper.module_eval{ remove_method(mname) } rescue nil
|
29
|
+
end
|
30
|
+
ret
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# TODO: Move most of this stuff out to an InstanceExecutor class.
|
35
|
+
def cucumber_instance_exec(check_arity, pseudo_method, *args, &block)
|
36
|
+
cucumber_run_with_backtrace_filtering(pseudo_method) do
|
37
|
+
if check_arity && !cucumber_compatible_arity?(args, block)
|
38
|
+
instance_exec do
|
39
|
+
ari = cucumber_arity(block)
|
40
|
+
ari = ari < 0 ? (ari.abs-1).to_s+"+" : ari
|
41
|
+
s1 = ari == 1 ? "" : "s"
|
42
|
+
s2 = args.length == 1 ? "" : "s"
|
43
|
+
raise Cucumber::ArityMismatchError.new(
|
44
|
+
"Your block takes #{ari} argument#{s1}, but the Regexp matched #{args.length} argument#{s2}."
|
45
|
+
)
|
46
|
+
end
|
47
|
+
else
|
48
|
+
instance_exec(*args, &block)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def cucumber_arity(block)
|
56
|
+
a = block.arity
|
57
|
+
Cucumber::RUBY_1_9 ? a : (a == -1 ? 0 : a)
|
58
|
+
end
|
59
|
+
|
60
|
+
def cucumber_compatible_arity?(args, block)
|
61
|
+
ari = cucumber_arity(block)
|
62
|
+
len = args.length
|
63
|
+
return true if ari == len or ari < 0 && len >= ari.abs-1
|
64
|
+
false
|
65
|
+
end
|
66
|
+
|
67
|
+
def cucumber_run_with_backtrace_filtering(pseudo_method)
|
68
|
+
begin
|
69
|
+
yield
|
70
|
+
rescue Exception => e
|
71
|
+
instance_exec_invocation_line = "#{__FILE__}:#{__LINE__ - 2}:in `cucumber_run_with_backtrace_filtering'"
|
72
|
+
replace_instance_exec_invocation_line!((e.backtrace || []), instance_exec_invocation_line, pseudo_method)
|
73
|
+
raise e
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
INSTANCE_EXEC_OFFSET = (Cucumber::RUBY_1_9 || Cucumber::RUBY_1_8_7 || Cucumber::JRUBY) ? -3 : -4
|
78
|
+
|
79
|
+
def replace_instance_exec_invocation_line!(backtrace, instance_exec_invocation_line, pseudo_method)
|
80
|
+
return if Cucumber.use_full_backtrace
|
81
|
+
|
82
|
+
instance_exec_pos = backtrace.index(instance_exec_invocation_line)
|
83
|
+
if instance_exec_pos
|
84
|
+
replacement_line = instance_exec_pos + INSTANCE_EXEC_OFFSET
|
85
|
+
if Cucumber::RUBY_1_8_7
|
86
|
+
backtrace[replacement_line] += ":in `#{pseudo_method}'" if pseudo_method
|
87
|
+
else
|
88
|
+
backtrace[replacement_line].gsub!(/`.*'/, "`#{pseudo_method}'") if pseudo_method
|
89
|
+
end
|
90
|
+
backtrace[replacement_line+1..-1] = nil
|
91
|
+
|
92
|
+
backtrace.compact!
|
93
|
+
else
|
94
|
+
# This happens with rails, because they screw up the backtrace
|
95
|
+
# before we get here (injecting erb stacktrace and such)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Proc extension to get more location info out of a proc
|
2
|
+
class Proc #:nodoc:
|
3
|
+
PROC_PATTERN = /[\d\w]+@(.+):(\d+).*>/
|
4
|
+
PWD = Dir.pwd
|
5
|
+
|
6
|
+
def to_comment_line
|
7
|
+
"# #{file_colon_line}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def backtrace_line(name)
|
11
|
+
"#{file_colon_line}:in `#{name}'"
|
12
|
+
end
|
13
|
+
|
14
|
+
if Proc.new{}.to_s =~ PROC_PATTERN
|
15
|
+
def file_colon_line
|
16
|
+
path, line = *to_s.match(PROC_PATTERN)[1..2]
|
17
|
+
path = File.expand_path(path)
|
18
|
+
pwd = File.expand_path(PWD)
|
19
|
+
if path.index(pwd)
|
20
|
+
path = path[pwd.length+1..-1]
|
21
|
+
elsif path =~ /.*\/gems\/(.*\.rb)$/
|
22
|
+
path = $1
|
23
|
+
end
|
24
|
+
"#{path}:#{line}"
|
25
|
+
end
|
26
|
+
else
|
27
|
+
# This Ruby implementation doesn't implement Proc#to_s correctly
|
28
|
+
STDERR.puts "*** THIS RUBY IMPLEMENTATION DOESN'T REPORT FILE AND LINE FOR PROCS ***"
|
29
|
+
|
30
|
+
def file_colon_line
|
31
|
+
"UNKNOWN:-1"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Cucumber
|
2
|
+
# Raised when there is no matching StepDefinition for a step.
|
3
|
+
class Undefined < StandardError
|
4
|
+
attr_reader :step_name
|
5
|
+
|
6
|
+
def initialize(step_name)
|
7
|
+
super %{Undefined step: "#{step_name}"}
|
8
|
+
@step_name = step_name
|
9
|
+
end
|
10
|
+
|
11
|
+
def nested!
|
12
|
+
@nested = true
|
13
|
+
end
|
14
|
+
|
15
|
+
def nested?
|
16
|
+
@nested
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Raised when a StepDefinition's block invokes World#pending
|
21
|
+
class Pending < StandardError
|
22
|
+
end
|
23
|
+
|
24
|
+
# Raised when a step matches 2 or more StepDefinitions
|
25
|
+
class Ambiguous < StandardError
|
26
|
+
def initialize(step_name, step_definitions, used_guess)
|
27
|
+
message = "Ambiguous match of \"#{step_name}\":\n\n"
|
28
|
+
message << step_definitions.map{|sd| sd.backtrace_line}.join("\n")
|
29
|
+
message << "\n\n"
|
30
|
+
message << "You can run again with --guess to make Cucumber be more smart about it\n" unless used_guess
|
31
|
+
super(message)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class TagExcess < StandardError
|
36
|
+
def initialize(messages)
|
37
|
+
super(messages.join("\n"))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'cucumber/parser/gherkin_builder'
|
2
|
+
require 'gherkin/formatter/filter_formatter'
|
3
|
+
require 'gherkin/formatter/tag_count_formatter'
|
4
|
+
require 'gherkin/parser/parser'
|
5
|
+
|
6
|
+
module Cucumber
|
7
|
+
class FeatureFile
|
8
|
+
FILE_COLON_LINE_PATTERN = /^([\w\W]*?):([\d:]+)$/ #:nodoc:
|
9
|
+
LANGUAGE_PATTERN = /language:\s*(.*)/ #:nodoc:
|
10
|
+
|
11
|
+
# The +uri+ argument is the location of the source. It can be a path
|
12
|
+
# or a path:line1:line2 etc. If +source+ is passed, +uri+ is ignored.
|
13
|
+
def initialize(uri, source=nil)
|
14
|
+
@source = source
|
15
|
+
_, @path, @lines = *FILE_COLON_LINE_PATTERN.match(uri)
|
16
|
+
if @path
|
17
|
+
@lines = @lines.split(':').map { |line| line.to_i }
|
18
|
+
else
|
19
|
+
@path = uri
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Parses a file and returns a Cucumber::Ast
|
24
|
+
# If +configuration_filters+ contains any filters, the result will
|
25
|
+
# be filtered.
|
26
|
+
def parse(configuration_filters, tag_counts)
|
27
|
+
filters = @lines || configuration_filters
|
28
|
+
|
29
|
+
builder = Cucumber::Parser::GherkinBuilder.new
|
30
|
+
filter_formatter = filters.empty? ? builder : Gherkin::Formatter::FilterFormatter.new(builder, filters)
|
31
|
+
tag_count_formatter = Gherkin::Formatter::TagCountFormatter.new(filter_formatter, tag_counts)
|
32
|
+
parser = Gherkin::Parser::Parser.new(tag_count_formatter, true, "root", false)
|
33
|
+
|
34
|
+
begin
|
35
|
+
parser.parse(source, @path, 0)
|
36
|
+
ast = builder.ast
|
37
|
+
return nil if ast.nil? # Filter caused nothing to match
|
38
|
+
ast.language = parser.i18n_language
|
39
|
+
ast.file = @path
|
40
|
+
ast
|
41
|
+
rescue Gherkin::Lexer::LexingError, Gherkin::Parser::ParseError => e
|
42
|
+
e.message.insert(0, "#{@path}: ")
|
43
|
+
raise e
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def source
|
48
|
+
@source ||= if @path =~ /^http/
|
49
|
+
require 'open-uri'
|
50
|
+
open(@path).read
|
51
|
+
else
|
52
|
+
begin
|
53
|
+
File.open(@path, Cucumber.file_mode('r')).read
|
54
|
+
rescue Errno::EACCES => e
|
55
|
+
p = File.expand_path(@path)
|
56
|
+
e.message << "\nCouldn't open #{p}"
|
57
|
+
raise e
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
begin
|
2
|
+
require 'term/ansicolor'
|
3
|
+
rescue LoadError
|
4
|
+
require 'rubygems'
|
5
|
+
require 'term/ansicolor'
|
6
|
+
end
|
7
|
+
require 'cucumber/platform'
|
8
|
+
|
9
|
+
if Cucumber::IRONRUBY
|
10
|
+
begin
|
11
|
+
require 'iron-term-ansicolor'
|
12
|
+
rescue LoadError
|
13
|
+
STDERR.puts %{*** WARNING: You must "igem install iron-term-ansicolor" to get coloured ouput in on IronRuby}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
if Cucumber::WINDOWS_MRI
|
18
|
+
unless ENV['ANSICON']
|
19
|
+
STDERR.puts %{*** WARNING: You must use ANSICON 1.31 or higher (http://adoxa.110mb.com/ansicon) to get coloured output on Windows}
|
20
|
+
Term::ANSIColor.coloring = false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Term::ANSIColor.coloring = false if !STDOUT.tty? && !ENV.has_key?("AUTOTEST")
|
25
|
+
|
26
|
+
module Cucumber
|
27
|
+
module Formatter
|
28
|
+
# Defines aliases for coloured output. You don't invoke any methods from this
|
29
|
+
# module directly, but you can change the output colours by defining
|
30
|
+
# a <tt>CUCUMBER_COLORS</tt> variable in your shell, very much like how you can
|
31
|
+
# tweak the familiar POSIX command <tt>ls</tt> with
|
32
|
+
# <a href="http://mipsisrisc.com/rambling/2008/06/27/lscolorsls_colors-now-with-linux-support/">$LSCOLORS/$LS_COLORS</a>
|
33
|
+
#
|
34
|
+
# The colours that you can change are:
|
35
|
+
#
|
36
|
+
# * <tt>undefined</tt> - defaults to <tt>yellow</tt>
|
37
|
+
# * <tt>pending</tt> - defaults to <tt>yellow</tt>
|
38
|
+
# * <tt>pending_param</tt> - defaults to <tt>yellow,bold</tt>
|
39
|
+
# * <tt>failed</tt> - defaults to <tt>red</tt>
|
40
|
+
# * <tt>failed_param</tt> - defaults to <tt>red,bold</tt>
|
41
|
+
# * <tt>passed</tt> - defaults to <tt>green</tt>
|
42
|
+
# * <tt>passed_param</tt> - defaults to <tt>green,bold</tt>
|
43
|
+
# * <tt>outline</tt> - defaults to <tt>cyan</tt>
|
44
|
+
# * <tt>outline_param</tt> - defaults to <tt>cyan,bold</tt>
|
45
|
+
# * <tt>skipped</tt> - defaults to <tt>cyan</tt>
|
46
|
+
# * <tt>skipped_param</tt> - defaults to <tt>cyan,bold</tt>
|
47
|
+
# * <tt>comment</tt> - defaults to <tt>grey</tt>
|
48
|
+
# * <tt>tag</tt> - defaults to <tt>cyan</tt>
|
49
|
+
#
|
50
|
+
# For instance, if your shell has a black background and a green font (like the
|
51
|
+
# "Homebrew" settings for OS X' Terminal.app), you may want to override passed
|
52
|
+
# steps to be white instead of green. Examples:
|
53
|
+
#
|
54
|
+
# export CUCUMBER_COLORS="passed=white"
|
55
|
+
# export CUCUMBER_COLORS="passed=white,bold:passed_param=white,bold,underline"
|
56
|
+
#
|
57
|
+
# (If you're on Windows, use SET instead of export).
|
58
|
+
# To see what colours and effects are available, just run this in your shell:
|
59
|
+
#
|
60
|
+
# ruby -e "require 'rubygems'; require 'term/ansicolor'; puts Term::ANSIColor.attributes"
|
61
|
+
#
|
62
|
+
# Although not listed, you can also use <tt>grey</tt>
|
63
|
+
module ANSIColor
|
64
|
+
include Term::ANSIColor
|
65
|
+
|
66
|
+
ALIASES = Hash.new do |h,k|
|
67
|
+
if k.to_s =~ /(.*)_param/
|
68
|
+
h[$1] + ',bold'
|
69
|
+
end
|
70
|
+
end.merge({
|
71
|
+
'undefined' => 'yellow',
|
72
|
+
'pending' => 'yellow',
|
73
|
+
'failed' => 'red',
|
74
|
+
'passed' => 'green',
|
75
|
+
'outline' => 'cyan',
|
76
|
+
'skipped' => 'cyan',
|
77
|
+
'comment' => 'grey',
|
78
|
+
'tag' => 'cyan'
|
79
|
+
})
|
80
|
+
|
81
|
+
if ENV['CUCUMBER_COLORS'] # Example: export CUCUMBER_COLORS="passed=red:failed=yellow"
|
82
|
+
ENV['CUCUMBER_COLORS'].split(':').each do |pair|
|
83
|
+
a = pair.split('=')
|
84
|
+
ALIASES[a[0]] = a[1]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
ALIASES.each do |method, color|
|
89
|
+
unless method =~ /.*_param/
|
90
|
+
code = <<-EOF
|
91
|
+
def #{method}(string=nil, &proc)
|
92
|
+
#{ALIASES[method].split(",").join("(") + "(string, &proc" + ")" * ALIASES[method].split(",").length}
|
93
|
+
end
|
94
|
+
# This resets the colour to the non-param colour
|
95
|
+
def #{method}_param(string=nil, &proc)
|
96
|
+
#{ALIASES[method+'_param'].split(",").join("(") + "(string, &proc" + ")" * ALIASES[method+'_param'].split(",").length} + #{ALIASES[method].split(",").join(' + ')}
|
97
|
+
end
|
98
|
+
EOF
|
99
|
+
eval(code)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.define_grey #:nodoc:
|
104
|
+
begin
|
105
|
+
gem 'genki-ruby-terminfo'
|
106
|
+
require 'terminfo'
|
107
|
+
case TermInfo.default_object.tigetnum("colors")
|
108
|
+
when 0
|
109
|
+
raise "Your terminal doesn't support colours"
|
110
|
+
when 1
|
111
|
+
::Term::ANSIColor.coloring = false
|
112
|
+
alias grey white
|
113
|
+
when 2..8
|
114
|
+
alias grey white
|
115
|
+
else
|
116
|
+
define_real_grey
|
117
|
+
end
|
118
|
+
rescue Exception => e
|
119
|
+
if e.class.name == 'TermInfo::TermInfoError'
|
120
|
+
STDERR.puts "*** WARNING ***"
|
121
|
+
STDERR.puts "You have the genki-ruby-terminfo gem installed, but you haven't set your TERM variable."
|
122
|
+
STDERR.puts "Try setting it to TERM=xterm-256color to get grey colour in output"
|
123
|
+
STDERR.puts "\n"
|
124
|
+
alias grey white
|
125
|
+
else
|
126
|
+
define_real_grey
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def self.define_real_grey #:nodoc:
|
132
|
+
def grey(m) #:nodoc:
|
133
|
+
if ::Term::ANSIColor.coloring?
|
134
|
+
"\e[90m#{m}\e[0m"
|
135
|
+
else
|
136
|
+
m
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
define_grey
|
142
|
+
|
143
|
+
def cukes(n)
|
144
|
+
("(::) " * n).strip
|
145
|
+
end
|
146
|
+
|
147
|
+
def green_cukes(n)
|
148
|
+
blink(green(cukes(n)))
|
149
|
+
end
|
150
|
+
|
151
|
+
def red_cukes(n)
|
152
|
+
blink(red(cukes(n)))
|
153
|
+
end
|
154
|
+
|
155
|
+
def yellow_cukes(n)
|
156
|
+
blink(yellow(cukes(n)))
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|