jwilger-cucumber 0.3.11.200906161550
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +830 -0
- data/License.txt +20 -0
- data/Manifest.txt +410 -0
- data/README.txt +4 -0
- data/Rakefile +9 -0
- data/bin/cucumber +17 -0
- data/config/hoe.rb +76 -0
- data/config/requirements.rb +15 -0
- data/cucumber.yml +2 -0
- data/examples/cs/README.textile +1 -0
- data/examples/cs/Rakefile +12 -0
- data/examples/cs/compile.bat +1 -0
- data/examples/cs/features/addition.feature +16 -0
- data/examples/cs/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/cs/src/demo/Calculator.cs +20 -0
- data/examples/dos_line_endings/Rakefile +6 -0
- data/examples/dos_line_endings/features/dos_line_endings.feature +9 -0
- data/examples/i18n/README.textile +18 -0
- data/examples/i18n/Rakefile +30 -0
- data/examples/i18n/ar/Rakefile +6 -0
- data/examples/i18n/ar/features/addition.feature +17 -0
- data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ar/lib/calculator.rb +11 -0
- data/examples/i18n/bg/Rakefile +6 -0
- data/examples/i18n/bg/features/addition.feature +12 -0
- data/examples/i18n/bg/features/consecutive_calculations.feature +19 -0
- data/examples/i18n/bg/features/division.feature +17 -0
- data/examples/i18n/bg/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/bg/features/support/env.rb +6 -0
- data/examples/i18n/bg/features/support/world.rb +8 -0
- data/examples/i18n/bg/lib/calculator.rb +24 -0
- data/examples/i18n/cat/Rakefile +6 -0
- data/examples/i18n/cat/features/step_definitons/calculator_steps.rb +21 -0
- data/examples/i18n/cat/features/suma.feature +17 -0
- data/examples/i18n/cat/lib/calculadora.rb +16 -0
- data/examples/i18n/da/Rakefile +6 -0
- data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +24 -0
- data/examples/i18n/da/features/summering.feature +18 -0
- data/examples/i18n/da/lib/kalkulator.rb +11 -0
- data/examples/i18n/de/Rakefile +6 -0
- data/examples/i18n/de/features/addition.feature +17 -0
- data/examples/i18n/de/features/division.feature +10 -0
- data/examples/i18n/de/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/de/lib/calculator.rb +14 -0
- data/examples/i18n/en/Rakefile +6 -0
- data/examples/i18n/en/features/addition.feature +17 -0
- data/examples/i18n/en/features/division.feature +10 -0
- data/examples/i18n/en/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/en/lib/calculator.rb +14 -0
- data/examples/i18n/en-lol/Rakefile +6 -0
- data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
- data/examples/i18n/en-lol/features/stuffing.feature +8 -0
- data/examples/i18n/en-lol/features/support/env.rb +8 -0
- data/examples/i18n/en-lol/lib/basket.rb +12 -0
- data/examples/i18n/en-lol/lib/belly.rb +11 -0
- data/examples/i18n/es/Rakefile +6 -0
- data/examples/i18n/es/features/adicion.feature +17 -0
- data/examples/i18n/es/features/step_definitons/calculador_steps.rb +21 -0
- data/examples/i18n/es/lib/calculador.rb +14 -0
- data/examples/i18n/et/Rakefile +6 -0
- data/examples/i18n/et/features/jagamine.feature +10 -0
- data/examples/i18n/et/features/liitmine.feature +17 -0
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +24 -0
- data/examples/i18n/et/lib/kalkulaator.rb +14 -0
- data/examples/i18n/fi/Rakefile +6 -0
- data/examples/i18n/fi/features/jakolasku.feature +10 -0
- data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
- data/examples/i18n/fi/features/yhteenlasku.feature +16 -0
- data/examples/i18n/fi/lib/laskin.rb +14 -0
- data/examples/i18n/fr/Rakefile +6 -0
- data/examples/i18n/fr/features/addition.feature +18 -0
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +25 -0
- data/examples/i18n/fr/lib/calculatrice.rb +10 -0
- data/examples/i18n/he/Rakefile +6 -0
- data/examples/i18n/he/features/addition.feature +17 -0
- data/examples/i18n/he/features/division.feature +10 -0
- data/examples/i18n/he/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/he/lib/calculator.rb +14 -0
- data/examples/i18n/hu/Rakefile +6 -0
- data/examples/i18n/hu/features/addition.feature +17 -0
- data/examples/i18n/hu/features/division.feature +10 -0
- data/examples/i18n/hu/features/step_definitons/calculator_steps.rb +25 -0
- data/examples/i18n/hu/lib/calculator.rb +14 -0
- data/examples/i18n/id/Rakefile +6 -0
- data/examples/i18n/id/features/addition.feature +17 -0
- data/examples/i18n/id/features/division.feature +10 -0
- data/examples/i18n/id/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/id/lib/calculator.rb +14 -0
- data/examples/i18n/it/Rakefile +6 -0
- data/examples/i18n/it/features/somma.feature +11 -0
- data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +24 -0
- data/examples/i18n/it/lib/calcolatrice.rb +11 -0
- data/examples/i18n/ja/Rakefile +6 -0
- data/examples/i18n/ja/features/addition.feature +17 -0
- data/examples/i18n/ja/features/division.feature +10 -0
- data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ja/lib/calculator.rb +14 -0
- data/examples/i18n/ko/Rakefile +6 -0
- data/examples/i18n/ko/features/addition.feature +17 -0
- data/examples/i18n/ko/features/division.feature +11 -0
- data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ko/lib/calculator.rb +14 -0
- data/examples/i18n/lt/Rakefile +6 -0
- data/examples/i18n/lt/features/addition.feature +17 -0
- data/examples/i18n/lt/features/division.feature +10 -0
- data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/lt/lib/calculator.rb +14 -0
- data/examples/i18n/lv/Rakefile +6 -0
- data/examples/i18n/lv/features/addition.feature +17 -0
- data/examples/i18n/lv/features/division.feature +10 -0
- data/examples/i18n/lv/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/lv/lib/calculator.rb +14 -0
- data/examples/i18n/no/Rakefile +6 -0
- data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +17 -0
- data/examples/i18n/no/features/summering.feature +19 -0
- data/examples/i18n/no/features/support/env.rb +6 -0
- data/examples/i18n/no/lib/kalkulator.rb +11 -0
- data/examples/i18n/pl/Rakefile +6 -0
- data/examples/i18n/pl/features/addition.feature +17 -0
- data/examples/i18n/pl/features/division.feature +10 -0
- data/examples/i18n/pl/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/pl/features/support/env.rb +6 -0
- data/examples/i18n/pl/lib/calculator.rb +14 -0
- data/examples/i18n/pt/Rakefile +6 -0
- data/examples/i18n/pt/features/adicao.feature +11 -0
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +20 -0
- data/examples/i18n/pt/features/support/env.rb +6 -0
- data/examples/i18n/pt/lib/calculadora.rb +10 -0
- data/examples/i18n/ro/Rakefile +6 -0
- data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/ro/features/suma.feature +11 -0
- data/examples/i18n/ro/lib/calculator.rb +11 -0
- data/examples/i18n/ru/Rakefile +6 -0
- data/examples/i18n/ru/features/addition.feature +11 -0
- data/examples/i18n/ru/features/consecutive_calculations.feature +17 -0
- data/examples/i18n/ru/features/division.feature +16 -0
- data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/ru/features/support/env.rb +6 -0
- data/examples/i18n/ru/features/support/world.rb +8 -0
- data/examples/i18n/ru/lib/calculator.rb +24 -0
- data/examples/i18n/se/Rakefile +6 -0
- data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +24 -0
- data/examples/i18n/se/features/summering.feature +18 -0
- data/examples/i18n/se/lib/kalkulator.rb +11 -0
- data/examples/i18n/sk/Rakefile +6 -0
- data/examples/i18n/sk/features/addition.feature +17 -0
- data/examples/i18n/sk/features/division.feature +10 -0
- data/examples/i18n/sk/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/sk/lib/calculator.rb +14 -0
- data/examples/i18n/zh-CN/Rakefile +6 -0
- data/examples/i18n/zh-CN/features/addition.feature +18 -0
- data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +26 -0
- data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
- data/examples/i18n/zh-TW/Rakefile +6 -0
- data/examples/i18n/zh-TW/features/addition.feature +17 -0
- data/examples/i18n/zh-TW/features/division.feature +11 -0
- data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
- data/examples/java/README.textile +18 -0
- data/examples/java/build.xml +33 -0
- data/examples/java/features/hello.feature +11 -0
- data/examples/java/features/step_definitons/hello_steps.rb +23 -0
- data/examples/java/features/step_definitons/tree_steps.rb +14 -0
- data/examples/java/features/tree.feature +9 -0
- data/examples/java/src/cucumber/demo/Hello.java +16 -0
- data/examples/junit/features/one_passing_one_failing.feature +8 -0
- data/examples/junit/features/pending.feature +5 -0
- data/examples/junit/features/step_definitions/steps.rb +11 -0
- data/examples/pure_java/README.textile +5 -0
- data/examples/selenium/Rakefile +6 -0
- data/examples/selenium/features/search.feature +9 -0
- data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium/features/support/env.rb +19 -0
- data/examples/selenium_webrat/Rakefile +6 -0
- data/examples/selenium_webrat/config.ru +0 -0
- data/examples/selenium_webrat/features/search.feature +9 -0
- data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium_webrat/features/support/env.rb +45 -0
- data/examples/self_test/README.textile +6 -0
- data/examples/self_test/Rakefile +6 -0
- data/examples/self_test/features/background/background_tagged_before_on_outline.feature +12 -0
- data/examples/self_test/features/background/background_with_name.feature +7 -0
- data/examples/self_test/features/background/failing_background.feature +12 -0
- data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
- data/examples/self_test/features/background/multiline_args_background.feature +32 -0
- data/examples/self_test/features/background/passing_background.feature +10 -0
- data/examples/self_test/features/background/pending_background.feature +10 -0
- data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
- data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
- data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
- data/examples/self_test/features/failing_expectation.feature +4 -0
- data/examples/self_test/features/lots_of_undefined.feature +8 -0
- data/examples/self_test/features/multiline_name.feature +27 -0
- data/examples/self_test/features/outline_sample.feature +15 -0
- data/examples/self_test/features/sample.feature +21 -0
- data/examples/self_test/features/search_sample.feature +32 -0
- data/examples/self_test/features/step_definitions/sample_steps.rb +81 -0
- data/examples/self_test/features/support/env.rb +17 -0
- data/examples/self_test/features/tons_of_cukes.feature +52 -0
- data/examples/self_test/features/undefined_multiline_args.feature +12 -0
- data/examples/sinatra/Rakefile +6 -0
- data/examples/sinatra/app.rb +14 -0
- data/examples/sinatra/features/add.feature +11 -0
- data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
- data/examples/sinatra/features/support/env.rb +28 -0
- data/examples/sinatra/views/add.erb +5 -0
- data/examples/sinatra/views/layout.erb +8 -0
- data/examples/steps_library/features/step_definitions/steps_lib1.rb +8 -0
- data/examples/steps_library/features/step_definitions/steps_lib2.rb +8 -0
- data/examples/test_unit/Rakefile +6 -0
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +23 -0
- data/examples/test_unit/features/test_unit.feature +9 -0
- data/examples/tickets/Rakefile +16 -0
- data/examples/tickets/features/172.feature +28 -0
- data/examples/tickets/features/177/1.feature +29 -0
- data/examples/tickets/features/177/2.feature +21 -0
- data/examples/tickets/features/177/3.feature +18 -0
- data/examples/tickets/features/180.feature +7 -0
- data/examples/tickets/features/229/tagged_hooks.feature +8 -0
- data/examples/tickets/features/229/tagged_hooks.rb +14 -0
- data/examples/tickets/features/236.feature +13 -0
- data/examples/tickets/features/241.feature +13 -0
- data/examples/tickets/features/246.feature +4 -0
- data/examples/tickets/features/248.feature +11 -0
- data/examples/tickets/features/270/back.feature +14 -0
- data/examples/tickets/features/270/back.steps.rb +14 -0
- data/examples/tickets/features/272/hooks.feature +26 -0
- data/examples/tickets/features/272/hooks_steps.rb +53 -0
- data/examples/tickets/features/279/py_string_indent.feature +25 -0
- data/examples/tickets/features/279/py_string_indent.steps.rb +12 -0
- data/examples/tickets/features/279/wrong.feature_ +11 -0
- data/examples/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
- data/examples/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
- data/examples/tickets/features/306/only_background.feature +4 -0
- data/examples/tickets/features/lib/eatting_machine.rb +18 -0
- data/examples/tickets/features/lib/pantry.rb +20 -0
- data/examples/tickets/features/scenario_outline.feature +95 -0
- data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
- data/examples/tickets/features/step_definitons/248_steps.rb +15 -0
- data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
- data/examples/tickets/features/step_definitons/tickets_steps.rb +66 -0
- data/examples/tickets/features/tickets.feature +28 -0
- data/examples/watir/README.textile +16 -0
- data/examples/watir/Rakefile +6 -0
- data/examples/watir/features/search.feature +12 -0
- data/examples/watir/features/step_definitons/search_steps.rb +22 -0
- data/examples/watir/features/support/env.rb +32 -0
- data/features/after_block_exceptions.feature +102 -0
- data/features/after_step_block_exceptions.feature +104 -0
- data/features/background.feature +311 -0
- data/features/bug_371.feature +32 -0
- data/features/cucumber_cli.feature +549 -0
- data/features/cucumber_cli_diff_disabled.feature +53 -0
- data/features/cucumber_cli_outlines.feature +109 -0
- data/features/custom_formatter.feature +11 -0
- data/features/drb_server_integration.feature +115 -0
- data/features/exclude_files.feature +20 -0
- data/features/expand.feature +49 -0
- data/features/html_formatter/a.html +185 -0
- data/features/html_formatter.feature +7 -0
- data/features/junit_formatter.feature +71 -0
- data/features/language_from_header.feature +30 -0
- data/features/multiline_names.feature +43 -0
- data/features/rake_task.feature +150 -0
- data/features/report_called_undefined_steps.feature +35 -0
- data/features/snippet.feature +22 -0
- data/features/step_definitions/cucumber_steps.rb +130 -0
- data/features/step_definitions/extra_steps.rb +2 -0
- data/features/steps_formatter.feature +25 -0
- data/features/support/env.rb +120 -0
- data/features/usage.feature +126 -0
- data/features/work_in_progress.feature +151 -0
- data/gem_tasks/deployment.rake +11 -0
- data/gem_tasks/environment.rake +7 -0
- data/gem_tasks/features.rake +10 -0
- data/gem_tasks/fix_cr_lf.rake +10 -0
- data/gem_tasks/flog.rake +4 -0
- data/gem_tasks/gemspec.rake +10 -0
- data/gem_tasks/rspec.rake +45 -0
- data/gem_tasks/sass.rake +4 -0
- data/gem_tasks/yard.rake +8 -0
- data/lib/autotest/cucumber.rb +6 -0
- data/lib/autotest/cucumber_mixin.rb +125 -0
- data/lib/autotest/cucumber_rails.rb +6 -0
- data/lib/autotest/cucumber_rails_rspec.rb +6 -0
- data/lib/autotest/cucumber_rspec.rb +6 -0
- data/lib/autotest/discover.rb +9 -0
- data/lib/cucumber/ast/background.rb +62 -0
- data/lib/cucumber/ast/comment.rb +30 -0
- data/lib/cucumber/ast/examples.rb +26 -0
- data/lib/cucumber/ast/feature.rb +58 -0
- data/lib/cucumber/ast/feature_element.rb +57 -0
- data/lib/cucumber/ast/features.rb +30 -0
- data/lib/cucumber/ast/outline_table.rb +143 -0
- data/lib/cucumber/ast/py_string.rb +57 -0
- data/lib/cucumber/ast/scenario.rb +83 -0
- data/lib/cucumber/ast/scenario_outline.rb +93 -0
- data/lib/cucumber/ast/step.rb +112 -0
- data/lib/cucumber/ast/step_collection.rb +75 -0
- data/lib/cucumber/ast/step_invocation.rb +136 -0
- data/lib/cucumber/ast/table.rb +334 -0
- data/lib/cucumber/ast/tags.rb +33 -0
- data/lib/cucumber/ast/visitor.rb +116 -0
- data/lib/cucumber/ast.rb +29 -0
- data/lib/cucumber/broadcaster.rb +13 -0
- data/lib/cucumber/cli/configuration.rb +427 -0
- data/lib/cucumber/cli/drb_client.rb +20 -0
- data/lib/cucumber/cli/language_help_formatter.rb +59 -0
- data/lib/cucumber/cli/main.rb +136 -0
- data/lib/cucumber/core_ext/exception.rb +53 -0
- data/lib/cucumber/core_ext/instance_exec.rb +67 -0
- data/lib/cucumber/core_ext/proc.rb +29 -0
- data/lib/cucumber/core_ext/string.rb +48 -0
- data/lib/cucumber/feature_file.rb +47 -0
- data/lib/cucumber/filter.rb +50 -0
- data/lib/cucumber/formatter/ansicolor.rb +110 -0
- data/lib/cucumber/formatter/color_io.rb +23 -0
- data/lib/cucumber/formatter/console.rb +149 -0
- data/lib/cucumber/formatter/cucumber.css +132 -0
- data/lib/cucumber/formatter/cucumber.sass +139 -0
- data/lib/cucumber/formatter/duration.rb +10 -0
- data/lib/cucumber/formatter/html.rb +258 -0
- data/lib/cucumber/formatter/junit.rb +75 -0
- data/lib/cucumber/formatter/pretty.rb +188 -0
- data/lib/cucumber/formatter/profile.rb +77 -0
- data/lib/cucumber/formatter/progress.rb +60 -0
- data/lib/cucumber/formatter/rerun.rb +44 -0
- data/lib/cucumber/formatter/steps.rb +49 -0
- data/lib/cucumber/formatter/tag_cloud.rb +28 -0
- data/lib/cucumber/formatter/unicode.rb +35 -0
- data/lib/cucumber/formatter/usage.rb +85 -0
- data/lib/cucumber/formatters/unicode.rb +7 -0
- data/lib/cucumber/languages.yml +532 -0
- data/lib/cucumber/parser/feature.rb +1787 -0
- data/lib/cucumber/parser/feature.tt +324 -0
- data/lib/cucumber/parser/i18n/language.rb +80 -0
- data/lib/cucumber/parser/i18n.tt +42 -0
- data/lib/cucumber/parser/table.rb +414 -0
- data/lib/cucumber/parser/table.tt +71 -0
- data/lib/cucumber/parser/treetop_ext.rb +52 -0
- data/lib/cucumber/parser.rb +6 -0
- data/lib/cucumber/platform.rb +23 -0
- data/lib/cucumber/rails/rspec.rb +10 -0
- data/lib/cucumber/rails/world.rb +99 -0
- data/lib/cucumber/rake/task.rb +233 -0
- data/lib/cucumber/rspec_neuter.rb +23 -0
- data/lib/cucumber/step_definition.rb +122 -0
- data/lib/cucumber/step_match.rb +61 -0
- data/lib/cucumber/step_mother.rb +362 -0
- data/lib/cucumber/version.rb +10 -0
- data/lib/cucumber/world.rb +53 -0
- data/lib/cucumber.rb +11 -0
- data/rails_generators/cucumber/USAGE +11 -0
- data/rails_generators/cucumber/cucumber_generator.rb +66 -0
- data/rails_generators/cucumber/templates/cucumber +8 -0
- data/rails_generators/cucumber/templates/cucumber.rake +20 -0
- data/rails_generators/cucumber/templates/cucumber_environment.rb +23 -0
- data/rails_generators/cucumber/templates/env.rb +26 -0
- data/rails_generators/cucumber/templates/paths.rb +27 -0
- data/rails_generators/cucumber/templates/spork_env.rb +36 -0
- data/rails_generators/cucumber/templates/webrat_steps.rb +147 -0
- data/rails_generators/feature/USAGE +12 -0
- data/rails_generators/feature/feature_generator.rb +40 -0
- data/rails_generators/feature/templates/feature.erb +31 -0
- data/rails_generators/feature/templates/steps.erb +20 -0
- data/spec/cucumber/ast/background_spec.rb +50 -0
- data/spec/cucumber/ast/feature_element_spec.rb +40 -0
- data/spec/cucumber/ast/feature_factory.rb +63 -0
- data/spec/cucumber/ast/feature_spec.rb +38 -0
- data/spec/cucumber/ast/py_string_spec.rb +51 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +67 -0
- data/spec/cucumber/ast/scenario_spec.rb +38 -0
- data/spec/cucumber/ast/step_collection_spec.rb +17 -0
- data/spec/cucumber/ast/step_spec.rb +66 -0
- data/spec/cucumber/ast/table_spec.rb +186 -0
- data/spec/cucumber/ast/visitor_spec.rb +27 -0
- data/spec/cucumber/broadcaster_spec.rb +15 -0
- data/spec/cucumber/cli/configuration_spec.rb +396 -0
- data/spec/cucumber/cli/drb_client_spec.rb +43 -0
- data/spec/cucumber/cli/main_spec.rb +140 -0
- data/spec/cucumber/core_ext/proc_spec.rb +54 -0
- data/spec/cucumber/core_ext/string_spec.rb +42 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +35 -0
- data/spec/cucumber/formatter/color_io_spec.rb +27 -0
- data/spec/cucumber/formatter/duration_spec.rb +22 -0
- data/spec/cucumber/formatter/progress_spec.rb +36 -0
- data/spec/cucumber/parser/feature_parser_spec.rb +387 -0
- data/spec/cucumber/parser/table_parser_spec.rb +48 -0
- data/spec/cucumber/rails/stubs/mini_rails.rb +18 -0
- data/spec/cucumber/rails/stubs/test_help.rb +1 -0
- data/spec/cucumber/rails/world_spec.rb +11 -0
- data/spec/cucumber/sell_cucumbers.feature +19 -0
- data/spec/cucumber/step_definition_spec.rb +101 -0
- data/spec/cucumber/step_mother_spec.rb +155 -0
- data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
- data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
- data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
- data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
- data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
- data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
- data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
- data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
- data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
- data/spec/cucumber/treetop_parser/spaces.feature +12 -0
- data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
- data/spec/cucumber/treetop_parser/with_comments.feature +10 -0
- data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
- data/spec/cucumber/world/pending_spec.rb +47 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +13 -0
- metadata +506 -0
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'cucumber/step_mother'
|
3
|
+
require 'cucumber/ast'
|
4
|
+
require 'cucumber/core_ext/string'
|
5
|
+
|
6
|
+
module Cucumber
|
7
|
+
module Ast
|
8
|
+
describe Step do
|
9
|
+
it "should replace arguments in name" do
|
10
|
+
step = Step.new(1, 'Given', 'a <color> cucumber')
|
11
|
+
|
12
|
+
invocation_table = Table.new([
|
13
|
+
%w{color taste},
|
14
|
+
%w{green juicy}
|
15
|
+
])
|
16
|
+
cells = invocation_table.cells_rows[1]
|
17
|
+
step_invocation = step.step_invocation_from_cells(cells)
|
18
|
+
|
19
|
+
step_invocation.name.should == 'a green cucumber'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should use empty string for the replacement of arguments in name when replace value is nil" do
|
23
|
+
step = Step.new(1, 'Given', 'a <color>cucumber')
|
24
|
+
|
25
|
+
invocation_table = Table.new([
|
26
|
+
['color'],
|
27
|
+
[nil]
|
28
|
+
])
|
29
|
+
cells = invocation_table.cells_rows[1]
|
30
|
+
step_invocation = step.step_invocation_from_cells(cells)
|
31
|
+
|
32
|
+
step_invocation.name.should == 'a cucumber'
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should replace arguments in table arg" do
|
36
|
+
arg_table = Table.new([%w{taste_<taste> color_<color>}])
|
37
|
+
|
38
|
+
step = Step.new(1, 'Given', 'a <color> cucumber', arg_table)
|
39
|
+
|
40
|
+
invocation_table = Table.new([
|
41
|
+
%w{color taste},
|
42
|
+
%w{green juicy}
|
43
|
+
])
|
44
|
+
cells = invocation_table.cells_rows[1]
|
45
|
+
step_invocation = step.step_invocation_from_cells(cells)
|
46
|
+
|
47
|
+
step_invocation.instance_variable_get('@multiline_arg').raw.should == [%w{taste_juicy color_green}]
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should replace arguments in py string arg" do
|
51
|
+
py_string = PyString.new(1, 2, 'taste_<taste> color_<color>', 0)
|
52
|
+
|
53
|
+
step = Step.new(1, 'Given', 'a <color> cucumber', py_string)
|
54
|
+
|
55
|
+
invocation_table = Table.new([
|
56
|
+
%w{color taste},
|
57
|
+
%w{green juicy}
|
58
|
+
])
|
59
|
+
cells = invocation_table.cells_rows[1]
|
60
|
+
step_invocation = step.step_invocation_from_cells(cells)
|
61
|
+
|
62
|
+
step_invocation.instance_variable_get('@multiline_arg').to_s.should == 'taste_juicy color_green'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'cucumber/ast/table'
|
3
|
+
|
4
|
+
module Cucumber
|
5
|
+
module Ast
|
6
|
+
describe Table do
|
7
|
+
before do
|
8
|
+
@table = Table.new([
|
9
|
+
%w{one four seven},
|
10
|
+
%w{4444 55555 666666}
|
11
|
+
])
|
12
|
+
def @table.cells_rows; super; end
|
13
|
+
def @table.columns; super; end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should have rows" do
|
17
|
+
@table.cells_rows[0].map{|cell| cell.value}.should == %w{one four seven}
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should have columns" do
|
21
|
+
@table.columns[1].map{|cell| cell.value}.should == %w{four 55555}
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should have headers" do
|
25
|
+
@table.headers.should == %w{one four seven}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have same cell objects in rows and columns" do
|
29
|
+
# 666666
|
30
|
+
@table.cells_rows[1].__send__(:[], 2).should equal(@table.columns[2].__send__(:[], 1))
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should know about max width of a row" do
|
34
|
+
@table.columns[1].__send__(:width).should == 5
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be convertible to an array of hashes" do
|
38
|
+
@table.hashes.should == [
|
39
|
+
{'one' => '4444', 'four' => '55555', 'seven' => '666666'}
|
40
|
+
]
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should accept symbols as keys for the hashes" do
|
44
|
+
@table.hashes.first[:one].should == '4444'
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should allow map'ing columns" do
|
48
|
+
@table.map_column!('one') { |v| v.to_i }
|
49
|
+
@table.hashes.first['one'].should == 4444
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should pass silently if a mapped column does not exist in non-strict mode" do
|
53
|
+
lambda {
|
54
|
+
@table.map_column!('two', false) { |v| v.to_i }
|
55
|
+
}.should_not raise_error
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should fail if a mapped column does not exist in strict mode" do
|
59
|
+
lambda {
|
60
|
+
@table.map_column!('two', true) { |v| v.to_i }
|
61
|
+
}.should raise_error('The column named "two" does not exist')
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#transpose" do
|
65
|
+
before(:each) do
|
66
|
+
@table = Table.new([
|
67
|
+
%w{one 1111},
|
68
|
+
%w{two 22222}
|
69
|
+
])
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should be convertible in to an array where each row is a hash" do
|
73
|
+
@table.transpose.hashes[0].should == {'one' => '1111', 'two' => '22222'}
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#rows_hash" do
|
78
|
+
|
79
|
+
it "should return a hash of the rows" do
|
80
|
+
table = Table.new([
|
81
|
+
%w{one 1111},
|
82
|
+
%w{two 22222}
|
83
|
+
])
|
84
|
+
table.rows_hash.should == {'one' => '1111', 'two' => '22222'}
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should fail if the table doesn't have two columns" do
|
88
|
+
faulty_table = Table.new([
|
89
|
+
%w{one 1111 abc},
|
90
|
+
%w{two 22222 def}
|
91
|
+
])
|
92
|
+
lambda {
|
93
|
+
faulty_table.rows_hash
|
94
|
+
}.should raise_error('The table must have exactly 2 columns')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should allow renaming columns" do
|
99
|
+
table2 = @table.map_headers('one' => :three)
|
100
|
+
table2.hashes.first[:three].should == '4444'
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should copy column mappings when mapping headers" do
|
104
|
+
@table.map_column!('one') { |v| v.to_i }
|
105
|
+
table2 = @table.map_headers('one' => 'three')
|
106
|
+
table2.hashes.first['three'].should == 4444
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "replacing arguments" do
|
110
|
+
|
111
|
+
before(:each) do
|
112
|
+
@table = Table.new([
|
113
|
+
%w{qty book},
|
114
|
+
%w{<qty> <book>}
|
115
|
+
])
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should return a new table with arguments replaced with values" do
|
119
|
+
table_with_replaced_args = @table.arguments_replaced({'<book>' => 'Unbearable lightness of being', '<qty>' => '5'})
|
120
|
+
|
121
|
+
table_with_replaced_args.hashes[0]['book'].should == 'Unbearable lightness of being'
|
122
|
+
table_with_replaced_args.hashes[0]['qty'].should == '5'
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should recognise when entire cell is delimited" do
|
126
|
+
@table.should have_text('<book>')
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should recognise when just a subset of a cell is delimited" do
|
130
|
+
table = Table.new([
|
131
|
+
%w{qty book},
|
132
|
+
[nil, "This is <who>'s book"]
|
133
|
+
])
|
134
|
+
table.should have_text('<who>')
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should replace nil values with nil" do
|
138
|
+
table_with_replaced_args = @table.arguments_replaced({'<book>' => nil})
|
139
|
+
|
140
|
+
table_with_replaced_args.hashes[0]['book'].should == nil
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should preserve values which don't match a placeholder when replacing with nil" do
|
144
|
+
table = Table.new([
|
145
|
+
%w{book},
|
146
|
+
%w{cat}
|
147
|
+
])
|
148
|
+
table_with_replaced_args = table.arguments_replaced({'<book>' => nil})
|
149
|
+
|
150
|
+
table_with_replaced_args.hashes[0]['book'].should == 'cat'
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should not change the original table" do
|
154
|
+
@table.arguments_replaced({'<book>' => 'Unbearable lightness of being'})
|
155
|
+
|
156
|
+
@table.hashes[0]['book'].should_not == 'Unbearable lightness of being'
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should not raise an error when there are nil values in the table" do
|
160
|
+
table = Table.new([
|
161
|
+
['book', 'qty'],
|
162
|
+
['<book>', nil],
|
163
|
+
])
|
164
|
+
lambda{
|
165
|
+
table.arguments_replaced({'<book>' => nil, '<qty>' => '5'})
|
166
|
+
}.should_not raise_error
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should convert to sexp" do
|
172
|
+
@table.to_sexp.should ==
|
173
|
+
[:table,
|
174
|
+
[:row, -1,
|
175
|
+
[:cell, "one"],
|
176
|
+
[:cell, "four"],
|
177
|
+
[:cell, "seven"]
|
178
|
+
],
|
179
|
+
[:row, -1,
|
180
|
+
[:cell, "4444"],
|
181
|
+
[:cell, "55555"],
|
182
|
+
[:cell, "666666"]]]
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'cucumber/step_mother'
|
3
|
+
require 'cucumber/ast'
|
4
|
+
|
5
|
+
module Cucumber
|
6
|
+
module Ast
|
7
|
+
describe Visitor do
|
8
|
+
|
9
|
+
it "should support checking scenario name matches regexps" do
|
10
|
+
visitor = Visitor.new(mock("step mother"))
|
11
|
+
scenario = Scenario.new(background=nil,
|
12
|
+
comment=Comment.new(""),
|
13
|
+
tags=Tags.new(0, []),
|
14
|
+
line=99,
|
15
|
+
keyword="",
|
16
|
+
name="test name",
|
17
|
+
steps=[])
|
18
|
+
|
19
|
+
visitor.options = {:name_regexps => [/name/]}
|
20
|
+
|
21
|
+
visitor.matches_scenario_names?(scenario).should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
describe Broadcaster do
|
5
|
+
before do
|
6
|
+
@receiver = mock('receiver')
|
7
|
+
@broadcaster = Broadcaster.new([@receiver])
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should broadcast methods to registered objects" do
|
11
|
+
@receiver.should_receive(:konbanwa).with('good evening')
|
12
|
+
@broadcaster.konbanwa('good evening')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,396 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Cucumber
|
5
|
+
module Cli
|
6
|
+
describe Configuration do
|
7
|
+
|
8
|
+
def given_cucumber_yml_defined_as(hash_or_string)
|
9
|
+
File.stub!(:exist?).and_return(true)
|
10
|
+
cucumber_yml = hash_or_string.is_a?(Hash) ? hash_or_string.to_yaml : hash_or_string
|
11
|
+
IO.stub!(:read).with('cucumber.yml').and_return(cucumber_yml)
|
12
|
+
end
|
13
|
+
|
14
|
+
def given_the_following_files(*files)
|
15
|
+
File.stub!(:directory?).and_return(true)
|
16
|
+
Dir.stub!(:[]).and_return(files)
|
17
|
+
end
|
18
|
+
|
19
|
+
before(:each) do
|
20
|
+
Kernel.stub!(:exit).and_return(nil)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should require files in support paths first" do
|
24
|
+
given_the_following_files("/features/step_definitions/foo.rb","/features/support/bar.rb")
|
25
|
+
|
26
|
+
config = Configuration.new(StringIO.new)
|
27
|
+
config.parse!(%w{--require /features})
|
28
|
+
|
29
|
+
config.files_to_require.should == [
|
30
|
+
"/features/support/bar.rb",
|
31
|
+
"/features/step_definitions/foo.rb"
|
32
|
+
]
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should require env.rb files first" do
|
36
|
+
given_the_following_files("/features/support/a_file.rb","/features/support/env.rb")
|
37
|
+
|
38
|
+
config = Configuration.new(StringIO.new)
|
39
|
+
config.parse!(%w{--require /features})
|
40
|
+
|
41
|
+
config.files_to_require.should == [
|
42
|
+
"/features/support/env.rb",
|
43
|
+
"/features/support/a_file.rb"
|
44
|
+
]
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should not require env.rb files when --dry-run" do
|
48
|
+
given_the_following_files("/features/support/a_file.rb","/features/support/env.rb")
|
49
|
+
|
50
|
+
config = Configuration.new(StringIO.new)
|
51
|
+
config.parse!(%w{--require /features --dry-run})
|
52
|
+
|
53
|
+
config.files_to_require.should == [
|
54
|
+
"/features/support/a_file.rb"
|
55
|
+
]
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "--exclude" do
|
59
|
+
|
60
|
+
it "excludes a ruby file from requiring when the name matches exactly" do
|
61
|
+
given_the_following_files("/features/support/a_file.rb","/features/support/env.rb")
|
62
|
+
|
63
|
+
config = Configuration.new(StringIO.new)
|
64
|
+
config.parse!(%w{--require /features --exclude a_file.rb})
|
65
|
+
|
66
|
+
config.files_to_require.should == [
|
67
|
+
"/features/support/env.rb"
|
68
|
+
]
|
69
|
+
end
|
70
|
+
|
71
|
+
it "excludes all ruby files that match the provided patterns from requiring" do
|
72
|
+
given_the_following_files("/features/support/foof.rb","/features/support/bar.rb",
|
73
|
+
"/features/support/food.rb","/features/blah.rb",
|
74
|
+
"/features/support/fooz.rb")
|
75
|
+
|
76
|
+
config = Configuration.new(StringIO.new)
|
77
|
+
config.parse!(%w{--require /features --exclude foo[df] --exclude blah})
|
78
|
+
|
79
|
+
config.files_to_require.should == [
|
80
|
+
"/features/support/bar.rb",
|
81
|
+
"/features/support/fooz.rb"
|
82
|
+
]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '#drb?' do
|
87
|
+
it "indicates whether the --drb flag was passed in or not" do
|
88
|
+
config = Configuration.new(StringIO.new)
|
89
|
+
|
90
|
+
config.parse!(%w{features})
|
91
|
+
config.drb?.should == false
|
92
|
+
|
93
|
+
|
94
|
+
config.parse!(%w{features --drb})
|
95
|
+
config.drb?.should == true
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context '--drb' do
|
100
|
+
it "removes the --drb flag from the args" do
|
101
|
+
config = Configuration.new(StringIO.new)
|
102
|
+
|
103
|
+
args = %w{features --drb}
|
104
|
+
config.parse!(args)
|
105
|
+
args.should == %w{features}
|
106
|
+
end
|
107
|
+
|
108
|
+
it "keeps all other flags intact" do
|
109
|
+
config = Configuration.new(StringIO.new)
|
110
|
+
|
111
|
+
args = %w{features --drb --format profile}
|
112
|
+
config.parse!(args)
|
113
|
+
args.should == %w{features --format profile}
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
context '--drb in a profile' do
|
119
|
+
it "removes the --drb flag from the args" do
|
120
|
+
given_cucumber_yml_defined_as({'server' => '--drb features'})
|
121
|
+
config = Configuration.new(StringIO.new)
|
122
|
+
|
123
|
+
args = %w{--profile server}
|
124
|
+
config.parse!(args)
|
125
|
+
args.should == %w{features}
|
126
|
+
end
|
127
|
+
|
128
|
+
it "keeps all other flags intact from all profiles involved" do
|
129
|
+
given_cucumber_yml_defined_as({'server' => '--drb features --profile nested',
|
130
|
+
'nested' => '--verbose'})
|
131
|
+
|
132
|
+
config = Configuration.new(StringIO.new)
|
133
|
+
|
134
|
+
args = %w{--profile server --format profile}
|
135
|
+
config.parse!(args)
|
136
|
+
args.should == %w{features --verbose --format profile}
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
context '--drb in the default profile and no arguments specified' do
|
142
|
+
it "expands the profile's arguments into the args excpet for --drb" do
|
143
|
+
given_cucumber_yml_defined_as({'default' => '--drb features --format pretty'})
|
144
|
+
config = Configuration.new(StringIO.new)
|
145
|
+
args = []
|
146
|
+
config.parse!(args)
|
147
|
+
args.should == %w{features --format pretty}
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should expand args from YAML file" do
|
152
|
+
given_cucumber_yml_defined_as({'bongo' => '--require from/yml'})
|
153
|
+
|
154
|
+
config = Configuration.new
|
155
|
+
config.parse!(%w{--format progress --profile bongo})
|
156
|
+
config.options[:formats].should == [['progress', STDOUT]]
|
157
|
+
config.options[:require].should == ['from/yml']
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should expand args from YAML file's default if there are no args" do
|
161
|
+
given_cucumber_yml_defined_as({'default' => '--require from/yml'})
|
162
|
+
|
163
|
+
config = Configuration.new
|
164
|
+
config.parse!([])
|
165
|
+
config.options[:require].should == ['from/yml']
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should provide a helpful error message when a specified profile does not exists in YAML file" do
|
169
|
+
given_cucumber_yml_defined_as({'default' => '--require from/yml', 'html_report' => '--format html'})
|
170
|
+
|
171
|
+
config = Configuration.new(StringIO.new, error = StringIO.new)
|
172
|
+
expected_message = <<-END_OF_MESSAGE
|
173
|
+
Could not find profile: 'i_do_not_exist'
|
174
|
+
|
175
|
+
Defined profiles in cucumber.yml:
|
176
|
+
* default
|
177
|
+
* html_report
|
178
|
+
END_OF_MESSAGE
|
179
|
+
|
180
|
+
lambda{config.parse!(%w{--profile i_do_not_exist})}.should raise_error(expected_message)
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should allow array as profile" do
|
184
|
+
given_cucumber_yml_defined_as({'foo' => [1,2,3]})
|
185
|
+
|
186
|
+
config = Configuration.new(StringIO.new, error = StringIO.new)
|
187
|
+
config.parse!(%w{--profile foo})
|
188
|
+
config.paths.should == [1,2,3]
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should provide a helpful error message when a specified profile exists but is nil or blank" do
|
192
|
+
[nil, ' '].each do |bad_input|
|
193
|
+
given_cucumber_yml_defined_as({'foo' => bad_input})
|
194
|
+
|
195
|
+
config = Configuration.new(StringIO.new, error = StringIO.new)
|
196
|
+
expected_error = /The 'foo' profile in cucumber.yml was blank. Please define the command line arguments for the 'foo' profile in cucumber.yml./
|
197
|
+
lambda{config.parse!(%w{--profile foo})}.should raise_error(expected_error)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
it "should provide a helpful error message when no YAML file exists and a profile is specified" do
|
202
|
+
File.should_receive(:exist?).with('cucumber.yml').and_return(false)
|
203
|
+
|
204
|
+
config = Configuration.new(StringIO.new, error = StringIO.new)
|
205
|
+
expected_error = /cucumber.yml was not found. Please refer to cucumber's documentation on defining profiles in cucumber.yml./
|
206
|
+
lambda{config.parse!(%w{--profile i_do_not_exist})}.should raise_error(expected_error)
|
207
|
+
end
|
208
|
+
|
209
|
+
it "should provide a helpful error message when cucumber.yml is blank or malformed" do
|
210
|
+
expected_error_message = /cucumber.yml was found, but was blank or malformed. Please refer to cucumber's documentation on correct profile usage./
|
211
|
+
|
212
|
+
['', 'sfsadfs', "--- \n- an\n- array\n", "---dddfd"].each do |bad_input|
|
213
|
+
given_cucumber_yml_defined_as(bad_input)
|
214
|
+
|
215
|
+
config = Configuration.new(StringIO.new, error = StringIO.new)
|
216
|
+
lambda{config.parse!([])}.should raise_error(expected_error_message)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
it "should procide a helpful error message when the YAML can not be parsed" do
|
221
|
+
expected_error_message = /cucumber.yml was found, but could not be parsed. Please refer to cucumber's documentation on correct profile usage./
|
222
|
+
|
223
|
+
given_cucumber_yml_defined_as("input that causes an exception in YAML loading")
|
224
|
+
YAML.should_receive(:load).and_raise ArgumentError
|
225
|
+
|
226
|
+
config = Configuration.new(StringIO.new, error = StringIO.new)
|
227
|
+
lambda{config.parse!([])}.should raise_error(expected_error_message)
|
228
|
+
end
|
229
|
+
|
230
|
+
it "should accept --dry-run option" do
|
231
|
+
config = Configuration.new(StringIO.new)
|
232
|
+
config.parse!(%w{--dry-run})
|
233
|
+
config.options[:dry_run].should be_true
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should accept --no-source option" do
|
237
|
+
config = Configuration.new
|
238
|
+
config.parse!(%w{--no-source})
|
239
|
+
|
240
|
+
config.options[:source].should be_false
|
241
|
+
end
|
242
|
+
|
243
|
+
it "should accept --no-snippets option" do
|
244
|
+
config = Configuration.new
|
245
|
+
config.parse!(%w{--no-snippets})
|
246
|
+
|
247
|
+
config.options[:snippets].should be_false
|
248
|
+
end
|
249
|
+
|
250
|
+
it "should set snippets and source to false with --quiet option" do
|
251
|
+
config = Configuration.new
|
252
|
+
config.parse!(%w{--quiet})
|
253
|
+
|
254
|
+
config.options[:snippets].should be_nil
|
255
|
+
config.options[:source].should be_nil
|
256
|
+
end
|
257
|
+
|
258
|
+
it "should accept --verbose option" do
|
259
|
+
config = Configuration.new
|
260
|
+
config.parse!(%w{--verbose})
|
261
|
+
|
262
|
+
config.options[:verbose].should be_true
|
263
|
+
end
|
264
|
+
|
265
|
+
it "should accept --out option" do
|
266
|
+
config = Configuration.new(StringIO.new)
|
267
|
+
config.parse!(%w{--out jalla.txt})
|
268
|
+
config.options[:formats].should == [['pretty', 'jalla.txt']]
|
269
|
+
end
|
270
|
+
|
271
|
+
it "should accept multiple --out options" do
|
272
|
+
config = Configuration.new(StringIO.new)
|
273
|
+
config.parse!(%w{--format progress --out file1 --out file2})
|
274
|
+
config.options[:formats].should == [['progress', 'file2']]
|
275
|
+
end
|
276
|
+
|
277
|
+
it "should accept multiple --format options and put the STDOUT one first so progress is seen" do
|
278
|
+
io = StringIO.new
|
279
|
+
config = Configuration.new(io)
|
280
|
+
config.parse!(%w{--format pretty --out pretty.txt --format progress})
|
281
|
+
config.options[:formats].should == [['progress', io], ['pretty', 'pretty.txt']]
|
282
|
+
end
|
283
|
+
|
284
|
+
it "should not accept multiple --format options when both use implicit STDOUT" do
|
285
|
+
io = StringIO.new
|
286
|
+
config = Configuration.new(io)
|
287
|
+
lambda do
|
288
|
+
config.parse!(%w{--format pretty --format progress})
|
289
|
+
end.should raise_error("All but one formatter must use --out, only one can print to STDOUT")
|
290
|
+
end
|
291
|
+
|
292
|
+
it "should associate --out to previous --format" do
|
293
|
+
config = Configuration.new(StringIO.new)
|
294
|
+
config.parse!(%w{--format progress --out file1 --format profile --out file2})
|
295
|
+
config.options[:formats].should == [["progress", "file1"], ["profile" ,"file2"]]
|
296
|
+
end
|
297
|
+
|
298
|
+
it "should accept --color option" do
|
299
|
+
Term::ANSIColor.should_receive(:coloring=).with(true)
|
300
|
+
config = Configuration.new(StringIO.new)
|
301
|
+
config.parse!(['--color'])
|
302
|
+
end
|
303
|
+
|
304
|
+
it "should accept --no-color option" do
|
305
|
+
Term::ANSIColor.should_receive(:coloring=).with(false)
|
306
|
+
config = Configuration.new(StringIO.new)
|
307
|
+
config.parse!(['--no-color'])
|
308
|
+
end
|
309
|
+
|
310
|
+
it "should parse tags" do
|
311
|
+
config = Configuration.new(nil)
|
312
|
+
includes, excludes = config.parse_tags("one,~two,@three,~@four")
|
313
|
+
includes.should == ['one', 'three']
|
314
|
+
excludes.should == ['two', 'four']
|
315
|
+
end
|
316
|
+
|
317
|
+
describe "--backtrace" do
|
318
|
+
before do
|
319
|
+
Exception.cucumber_full_backtrace = false
|
320
|
+
end
|
321
|
+
|
322
|
+
it "should show full backtrace when --backtrace is present" do
|
323
|
+
config = Main.new(['--backtrace'])
|
324
|
+
begin
|
325
|
+
"x".should == "y"
|
326
|
+
rescue => e
|
327
|
+
e.backtrace[0].should_not == "#{__FILE__}:#{__LINE__ - 2}"
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
after do
|
332
|
+
Exception.cucumber_full_backtrace = false
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
describe "diff output" do
|
337
|
+
|
338
|
+
it "is enabled by default" do
|
339
|
+
config = Configuration.new
|
340
|
+
config.diff_enabled?.should be_true
|
341
|
+
end
|
342
|
+
|
343
|
+
it "is disabled when the --no-diff option is supplied" do
|
344
|
+
config = Configuration.new
|
345
|
+
config.parse!(%w{--no-diff})
|
346
|
+
|
347
|
+
config.diff_enabled?.should be_false
|
348
|
+
end
|
349
|
+
|
350
|
+
end
|
351
|
+
|
352
|
+
it "should accept multiple --name options" do
|
353
|
+
config = Configuration.new
|
354
|
+
config.parse!(['--name', "User logs in", '--name', "User signs up"])
|
355
|
+
|
356
|
+
config.options[:name_regexps].should include(/User logs in/)
|
357
|
+
config.options[:name_regexps].should include(/User signs up/)
|
358
|
+
end
|
359
|
+
|
360
|
+
it "should accept multiple -n options" do
|
361
|
+
config = Configuration.new
|
362
|
+
config.parse!(['-n', "User logs in", '-n', "User signs up"])
|
363
|
+
|
364
|
+
config.options[:name_regexps].should include(/User logs in/)
|
365
|
+
config.options[:name_regexps].should include(/User signs up/)
|
366
|
+
end
|
367
|
+
|
368
|
+
it "should search for all features in the specified directory" do
|
369
|
+
File.stub!(:directory?).and_return(true)
|
370
|
+
Dir.should_receive(:[]).with("feature_directory/**/*.feature").
|
371
|
+
any_number_of_times.and_return(["cucumber.feature"])
|
372
|
+
|
373
|
+
config = Configuration.new(StringIO)
|
374
|
+
config.parse!(%w{feature_directory/})
|
375
|
+
|
376
|
+
config.feature_files.should == ["cucumber.feature"]
|
377
|
+
end
|
378
|
+
|
379
|
+
it "should allow specifying environment variables on the command line" do
|
380
|
+
config = Configuration.new
|
381
|
+
config.parse!(["foo=bar"])
|
382
|
+
ENV["foo"].should == "bar"
|
383
|
+
config.feature_files.should == []
|
384
|
+
end
|
385
|
+
|
386
|
+
it "should allow specifying environment variables in profiles" do
|
387
|
+
given_cucumber_yml_defined_as({'selenium' => 'RAILS_ENV=selenium'})
|
388
|
+
config = Configuration.new
|
389
|
+
config.parse!(["--profile", "selenium"])
|
390
|
+
ENV["RAILS_ENV"].should == "selenium"
|
391
|
+
config.feature_files.should == []
|
392
|
+
end
|
393
|
+
|
394
|
+
end
|
395
|
+
end
|
396
|
+
end
|