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,67 @@
|
|
1
|
+
require 'cucumber/platform'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
class ArityMismatchError < StandardError
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class Object
|
9
|
+
def cucumber_instance_exec(check_arity, pseudo_method, *args, &block)
|
10
|
+
cucumber_run_with_backtrace_filtering(pseudo_method) do
|
11
|
+
if check_arity && !cucumber_compatible_arity?(args, block)
|
12
|
+
instance_exec do
|
13
|
+
s1 = cucumber_arity(block) == 1 ? "" : "s"
|
14
|
+
s2 = args.length == 1 ? "" : "s"
|
15
|
+
raise Cucumber::ArityMismatchError.new(
|
16
|
+
"Your block takes #{cucumber_arity(block)} argument#{s1}, but the Regexp matched #{args.length} argument#{s2}."
|
17
|
+
)
|
18
|
+
end
|
19
|
+
else
|
20
|
+
instance_exec(*args, &block)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def cucumber_arity(block)
|
26
|
+
a = block.arity
|
27
|
+
Cucumber::RUBY_1_9 ? a : (a == -1 ? 0 : a)
|
28
|
+
end
|
29
|
+
|
30
|
+
def cucumber_compatible_arity?(args, block)
|
31
|
+
a = cucumber_arity(block)
|
32
|
+
return true if (a == -1) && Cucumber::RUBY_1_9
|
33
|
+
a == args.length
|
34
|
+
end
|
35
|
+
|
36
|
+
def cucumber_run_with_backtrace_filtering(pseudo_method)
|
37
|
+
begin
|
38
|
+
yield
|
39
|
+
rescue Exception => e
|
40
|
+
instance_exec_invocation_line = "#{__FILE__}:#{__LINE__ - 2}:in `cucumber_run_with_backtrace_filtering'"
|
41
|
+
Exception.cucumber_strip_backtrace!((e.backtrace || []), instance_exec_invocation_line, pseudo_method)
|
42
|
+
raise e
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
unless defined? instance_exec # 1.9
|
47
|
+
# http://eigenclass.org/hiki/bounded+space+instance_exec
|
48
|
+
module InstanceExecHelper; end
|
49
|
+
include InstanceExecHelper
|
50
|
+
def instance_exec(*args, &block)
|
51
|
+
begin
|
52
|
+
old_critical, Thread.critical = Thread.critical, true
|
53
|
+
n = 0
|
54
|
+
n += 1 while respond_to?(mname="__instance_exec#{n}")
|
55
|
+
InstanceExecHelper.module_eval{ define_method(mname, &block) }
|
56
|
+
ensure
|
57
|
+
Thread.critical = old_critical
|
58
|
+
end
|
59
|
+
begin
|
60
|
+
ret = send(mname, *args)
|
61
|
+
ensure
|
62
|
+
InstanceExecHelper.module_eval{ remove_method(mname) } rescue nil
|
63
|
+
end
|
64
|
+
ret
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Proc extension to get more location info out of a proc
|
2
|
+
class Proc
|
3
|
+
PROC_PATTERN = /[\d\w]+@(.*):(.*)>/
|
4
|
+
|
5
|
+
def to_comment_line
|
6
|
+
"# #{file_colon_line}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def backtrace_line(name)
|
10
|
+
"#{file_colon_line}:in `#{name}'"
|
11
|
+
end
|
12
|
+
|
13
|
+
if Proc.new{}.to_s =~ PROC_PATTERN
|
14
|
+
def file_colon_line
|
15
|
+
path, line = *to_s.match(PROC_PATTERN)[1..2]
|
16
|
+
path = File.expand_path(path)
|
17
|
+
pwd = Dir.pwd
|
18
|
+
path = path[pwd.length+1..-1]
|
19
|
+
"#{path}:#{line}"
|
20
|
+
end
|
21
|
+
else
|
22
|
+
# This Ruby implementation doesn't implement Proc#to_s correctly
|
23
|
+
STDERR.puts "*** THIS RUBY IMPLEMENTATION DOESN'T REPORT FILE AND LINE FOR PROCS ***"
|
24
|
+
|
25
|
+
def file_colon_line
|
26
|
+
"UNKNOWN:-1"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class String
|
2
|
+
def indent(n)
|
3
|
+
if n >= 0
|
4
|
+
gsub(/^/, ' ' * n)
|
5
|
+
else
|
6
|
+
gsub(/^ {0,#{-n}}/, "")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# re.source.gsub(/\([^)]*\)/, '$var')
|
11
|
+
# Cumulative #sub
|
12
|
+
def subs(re, *args)
|
13
|
+
args.inject(self) do |s,arg|
|
14
|
+
s.sub(re, arg)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# TODO: Use subs instead...
|
19
|
+
def gzub(regexp, format=nil, &proc)
|
20
|
+
md = match(regexp)
|
21
|
+
raise "#{self.inspect} doesn't match #{regexp.inspect}" if md.nil?
|
22
|
+
|
23
|
+
s = dup
|
24
|
+
pos = 0
|
25
|
+
md.captures.each_with_index do |m, n|
|
26
|
+
replacement = if block_given?
|
27
|
+
proc.call(m)
|
28
|
+
elsif Proc === format
|
29
|
+
format.call(m)
|
30
|
+
else
|
31
|
+
format % m
|
32
|
+
end
|
33
|
+
|
34
|
+
if md.offset(n+1)[0]
|
35
|
+
s[md.offset(n+1)[0] + pos, m.length] = replacement
|
36
|
+
pos += replacement.length - m.length
|
37
|
+
end
|
38
|
+
end
|
39
|
+
s
|
40
|
+
end
|
41
|
+
|
42
|
+
if (Cucumber::JRUBY && Cucumber::RAILS) || Cucumber::RUBY_1_9
|
43
|
+
# Workaround for http://tinyurl.com/55uu3u
|
44
|
+
alias jlength length
|
45
|
+
else
|
46
|
+
require 'jcode'
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'cucumber/parser/i18n/language'
|
2
|
+
require 'cucumber/filter'
|
3
|
+
|
4
|
+
module Cucumber
|
5
|
+
class FeatureFile
|
6
|
+
FILE_COLON_LINE_PATTERN = /^([\w\W]*?):([\d:]+)$/
|
7
|
+
LANGUAGE_PATTERN = /language:\s*(.*)/
|
8
|
+
|
9
|
+
# The +uri+ argument can ba a path or a path:line1:line2 etc.
|
10
|
+
def initialize(uri, source=nil)
|
11
|
+
@source = source
|
12
|
+
_, @path, @lines = *FILE_COLON_LINE_PATTERN.match(uri)
|
13
|
+
if @path
|
14
|
+
@lines = @lines.split(':').map { |line| line.to_i }
|
15
|
+
else
|
16
|
+
@path = uri
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Parses a file and returns a Cucumber::Ast
|
21
|
+
# If +options+ contains tags, the result will
|
22
|
+
# be filtered.
|
23
|
+
def parse(options={})
|
24
|
+
filter = Filter.new(@lines, options)
|
25
|
+
language = Parser::I18n::Language[lang || options[:lang] || 'en']
|
26
|
+
language.parse(source, @path, filter)
|
27
|
+
end
|
28
|
+
|
29
|
+
def source
|
30
|
+
@source ||= if @path =~ /^http/
|
31
|
+
require 'open-uri'
|
32
|
+
open(@path).read
|
33
|
+
else
|
34
|
+
File.open(@path, Cucumber.file_mode('r')).read
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def lang
|
39
|
+
line_one = source.split(/\n/)[0]
|
40
|
+
if line_one =~ LANGUAGE_PATTERN
|
41
|
+
$1.strip
|
42
|
+
else
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Cucumber
|
2
|
+
class Filter
|
3
|
+
def initialize(lines, options)
|
4
|
+
@lines = lines
|
5
|
+
@include_tags = options[:include_tags] || []
|
6
|
+
@exclude_tags = options[:exclude_tags] || []
|
7
|
+
@name_regexps = options[:name_regexps] || []
|
8
|
+
end
|
9
|
+
|
10
|
+
def accept?(syntax_node)
|
11
|
+
at_line?(syntax_node) &&
|
12
|
+
matches_tags?(syntax_node) &&
|
13
|
+
matches_names?(syntax_node)
|
14
|
+
end
|
15
|
+
|
16
|
+
def accept_example?(syntax_node, outline)
|
17
|
+
(at_line?(syntax_node) || outline_at_line?(outline)) &&
|
18
|
+
(matches_names?(syntax_node) || outline_matches_names?(outline))
|
19
|
+
end
|
20
|
+
|
21
|
+
def at_line?(syntax_node)
|
22
|
+
@lines.nil? || @lines.empty? || @lines.detect{|line| syntax_node.at_line?(line)}
|
23
|
+
end
|
24
|
+
|
25
|
+
def outline_at_line?(syntax_node)
|
26
|
+
@lines.nil? || @lines.empty? || @lines.detect{|line| syntax_node.outline_at_line?(line)}
|
27
|
+
end
|
28
|
+
|
29
|
+
def matches_tags?(syntax_node)
|
30
|
+
!excluded_by_tags?(syntax_node) &&
|
31
|
+
included_by_tags?(syntax_node)
|
32
|
+
end
|
33
|
+
|
34
|
+
def included_by_tags?(syntax_node)
|
35
|
+
@include_tags.empty? || syntax_node.has_tags?(@include_tags)
|
36
|
+
end
|
37
|
+
|
38
|
+
def excluded_by_tags?(syntax_node)
|
39
|
+
@exclude_tags.any? && syntax_node.has_tags?(@exclude_tags)
|
40
|
+
end
|
41
|
+
|
42
|
+
def outline_matches_names?(syntax_node)
|
43
|
+
@name_regexps.nil? || @name_regexps.empty? || @name_regexps.detect{|name_regexp| syntax_node.outline_matches_name?(name_regexp)}
|
44
|
+
end
|
45
|
+
|
46
|
+
def matches_names?(syntax_node)
|
47
|
+
@name_regexps.nil? || @name_regexps.empty? || @name_regexps.detect{|name_regexp| syntax_node.matches_name?(name_regexp)}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
gem 'term-ansicolor'
|
2
|
+
require 'term/ansicolor'
|
3
|
+
|
4
|
+
if Cucumber::WINDOWS_MRI
|
5
|
+
begin
|
6
|
+
gem 'win32console', '>= 1.2.0'
|
7
|
+
require 'Win32/Console/ANSI'
|
8
|
+
rescue LoadError
|
9
|
+
STDERR.puts %{*** WARNING: You must "gem install win32console" (1.2.0 or higher) to get coloured output on MRI/Windows}
|
10
|
+
Term::ANSIColor.coloring = false
|
11
|
+
end
|
12
|
+
elsif Cucumber::WINDOWS && Cucumber::JRUBY
|
13
|
+
begin
|
14
|
+
gem 'aslakhellesoy-ansicolor', '>= 1.0'
|
15
|
+
require 'ansicolor'
|
16
|
+
rescue LoadError
|
17
|
+
STDERR.puts %{*** WARNING: You must "gem install aslakhellesoy-ansicolor --source http://gems.github.com" (1.0 or higher) to get coloured output on JRuby/Windows}
|
18
|
+
Term::ANSIColor.coloring = false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Term::ANSIColor.coloring = false if !STDOUT.tty? and not ENV.has_key?("AUTOTEST")
|
23
|
+
|
24
|
+
module Cucumber
|
25
|
+
module Formatter
|
26
|
+
# Defines aliases for coloured output. You can tweak the colours by defining
|
27
|
+
# a <tt>CUCUMBER_COLORS</tt> variable in your shell, very much like you can
|
28
|
+
# tweak the familiar POSIX command <tt>ls</tt> with
|
29
|
+
# <a href="http://mipsisrisc.com/rambling/2008/06/27/lscolorsls_colors-now-with-linux-support/">$LSCOLORS/$LS_COLORS</a>
|
30
|
+
#
|
31
|
+
# The colours that you can change are:
|
32
|
+
#
|
33
|
+
# * <tt>undefined</tt> - defaults to <tt>yellow</tt>
|
34
|
+
# * <tt>pending</tt> - defaults to <tt>yellow</tt>
|
35
|
+
# * <tt>pending_param</tt> - defaults to <tt>yellow,bold</tt>
|
36
|
+
# * <tt>failed</tt> - defaults to <tt>red</tt>
|
37
|
+
# * <tt>failed_param</tt> - defaults to <tt>red,bold</tt>
|
38
|
+
# * <tt>passed</tt> - defaults to <tt>green</tt>
|
39
|
+
# * <tt>passed_param</tt> - defaults to <tt>green,bold</tt>
|
40
|
+
# * <tt>outline</tt> - defaults to <tt>cyan</tt>
|
41
|
+
# * <tt>outline_param</tt> - defaults to <tt>cyan,bold</tt>
|
42
|
+
# * <tt>skipped</tt> - defaults to <tt>cyan</tt>
|
43
|
+
# * <tt>skipped_param</tt> - defaults to <tt>cyan,bold</tt>
|
44
|
+
# * <tt>comment</tt> - defaults to <tt>grey</tt>
|
45
|
+
# * <tt>tag</tt> - defaults to <tt>cyan</tt>
|
46
|
+
#
|
47
|
+
# For instance, if your shell has a black background and a green font (like the
|
48
|
+
# "Homebrew" settings for OS X' Terminal.app), you may want to override passed
|
49
|
+
# steps to be white instead of green. Examples:
|
50
|
+
#
|
51
|
+
# export CUCUMBER_COLORS="passed=white"
|
52
|
+
# export CUCUMBER_COLORS="passed=white,bold:passed_param=white,bold,underline"
|
53
|
+
#
|
54
|
+
# (If you're on Windows, use SET instead of export).
|
55
|
+
# To see what colours and effects are available, just run this in your shell:
|
56
|
+
#
|
57
|
+
# ruby -e "require 'rubygems'; require 'term/ansicolor'; puts Term::ANSIColor.attributes"
|
58
|
+
#
|
59
|
+
# Although not listed, you can also use <tt>grey</tt>
|
60
|
+
module ANSIColor
|
61
|
+
include Term::ANSIColor
|
62
|
+
|
63
|
+
# Not supported in Term::ANSIColor
|
64
|
+
def grey(m)
|
65
|
+
if ::Term::ANSIColor.coloring?
|
66
|
+
"\e[90m#{m}\e[0m"
|
67
|
+
else
|
68
|
+
m
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
ALIASES = Hash.new do |h,k|
|
73
|
+
if k.to_s =~ /(.*)_param/
|
74
|
+
h[$1] + ',bold'
|
75
|
+
end
|
76
|
+
end.merge({
|
77
|
+
'undefined' => 'yellow',
|
78
|
+
'pending' => 'yellow',
|
79
|
+
'failed' => 'red',
|
80
|
+
'passed' => 'green',
|
81
|
+
'outline' => 'cyan',
|
82
|
+
'skipped' => 'cyan',
|
83
|
+
'comment' => 'grey',
|
84
|
+
'tag' => 'cyan'
|
85
|
+
})
|
86
|
+
|
87
|
+
if ENV['CUCUMBER_COLORS'] # Example: export CUCUMBER_COLORS="passed=red:failed=yellow"
|
88
|
+
ENV['CUCUMBER_COLORS'].split(':').each do |pair|
|
89
|
+
a = pair.split('=')
|
90
|
+
ALIASES[a[0]] = a[1]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
ALIASES.each do |method, color|
|
95
|
+
unless method =~ /.*_param/
|
96
|
+
code = <<-EOF
|
97
|
+
def #{method}(string=nil, &proc)
|
98
|
+
#{ALIASES[method].split(",").join("(") + "(string, &proc" + ")" * ALIASES[method].split(",").length}
|
99
|
+
end
|
100
|
+
# This resets the colour to the non-param colour
|
101
|
+
def #{method}_param(string=nil, &proc)
|
102
|
+
#{ALIASES[method+'_param'].split(",").join("(") + "(string, &proc" + ")" * ALIASES[method+'_param'].split(",").length} + #{ALIASES[method].split(",").join(' + ')}
|
103
|
+
end
|
104
|
+
EOF
|
105
|
+
eval(code)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Formatter
|
5
|
+
# Adapter to make #puts/#print/#flush work with colours on Windows
|
6
|
+
class ColorIO
|
7
|
+
extend Forwardable
|
8
|
+
def_delegators :@kernel, :puts, :print # win32console colours only work when sent to Kernel
|
9
|
+
def_delegators :@stdout, :flush, :tty?, :write
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@kernel = Kernel
|
13
|
+
@stdout = STDOUT
|
14
|
+
end
|
15
|
+
|
16
|
+
# Ensure using << still gets colours in win32console
|
17
|
+
def <<(output)
|
18
|
+
print(output)
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'cucumber/formatter/ansicolor'
|
2
|
+
require 'cucumber/formatter/duration'
|
3
|
+
|
4
|
+
module Cucumber
|
5
|
+
module Formatter
|
6
|
+
module Console
|
7
|
+
extend ANSIColor
|
8
|
+
include Duration
|
9
|
+
|
10
|
+
FORMATS = Hash.new{|hash, format| hash[format] = method(format).to_proc}
|
11
|
+
|
12
|
+
def format_step(keyword, step_match, status, source_indent)
|
13
|
+
comment = if source_indent
|
14
|
+
c = (' # ' + step_match.file_colon_line).indent(source_indent)
|
15
|
+
format_string(c, :comment)
|
16
|
+
else
|
17
|
+
''
|
18
|
+
end
|
19
|
+
|
20
|
+
format = format_for(status, :param)
|
21
|
+
line = keyword + " " + step_match.format_args(format) + comment
|
22
|
+
format_string(line, status)
|
23
|
+
end
|
24
|
+
|
25
|
+
def format_string(string, status)
|
26
|
+
fmt = format_for(status)
|
27
|
+
if Proc === fmt
|
28
|
+
fmt.call(string)
|
29
|
+
else
|
30
|
+
fmt % string
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def print_steps(status)
|
35
|
+
print_elements(step_mother.steps(status), status, 'steps')
|
36
|
+
end
|
37
|
+
|
38
|
+
def print_elements(elements, status, kind)
|
39
|
+
if elements.any?
|
40
|
+
@io.puts(format_string("(::) #{status} #{kind} (::)", status))
|
41
|
+
@io.puts
|
42
|
+
@io.flush
|
43
|
+
end
|
44
|
+
|
45
|
+
elements.each_with_index do |element, i|
|
46
|
+
if status == :failed
|
47
|
+
print_exception(element.exception, status, 0)
|
48
|
+
else
|
49
|
+
@io.puts(format_string(element.backtrace_line, status))
|
50
|
+
end
|
51
|
+
@io.puts
|
52
|
+
@io.flush
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def print_counts
|
57
|
+
STDERR.puts("The #print_counts method is deprecated and will be removed in 0.4. Use #print_stats instead")
|
58
|
+
print_stats(nil)
|
59
|
+
end
|
60
|
+
|
61
|
+
def print_stats(features)
|
62
|
+
|
63
|
+
@failures = step_mother.scenarios(:failed).select { |s| s.is_a?(Cucumber::Ast::Scenario) }
|
64
|
+
|
65
|
+
if !@failures.empty?
|
66
|
+
@io.puts format_string("Failing Scenarios:", :failed)
|
67
|
+
@failures.each do |failure|
|
68
|
+
@io.puts format_string("cucumber " + failure.file_colon_line, :failed) +
|
69
|
+
format_string(" # Scenario: " + failure.name, :comment)
|
70
|
+
end
|
71
|
+
@io.puts
|
72
|
+
end
|
73
|
+
|
74
|
+
@io.print dump_count(step_mother.scenarios.length, "scenario")
|
75
|
+
print_status_counts{|status| step_mother.scenarios(status)}
|
76
|
+
|
77
|
+
@io.print dump_count(step_mother.steps.length, "step")
|
78
|
+
print_status_counts{|status| step_mother.steps(status)}
|
79
|
+
|
80
|
+
@io.puts(format_duration(features.duration)) if features
|
81
|
+
|
82
|
+
@io.flush
|
83
|
+
end
|
84
|
+
|
85
|
+
def print_exception(e, status, indent)
|
86
|
+
@io.puts(format_string("#{e.message} (#{e.class})\n#{e.backtrace.join("\n")}".indent(indent), status))
|
87
|
+
end
|
88
|
+
|
89
|
+
def print_snippets(options)
|
90
|
+
return unless options[:snippets]
|
91
|
+
undefined = step_mother.steps(:undefined)
|
92
|
+
return if undefined.empty?
|
93
|
+
snippets = undefined.map do |step|
|
94
|
+
step_name = Undefined === step.exception ? step.exception.step_name : step.name
|
95
|
+
step_multiline_class = step.multiline_arg ? step.multiline_arg.class : nil
|
96
|
+
snippet = @step_mother.snippet_text(step.actual_keyword, step_name, step_multiline_class)
|
97
|
+
snippet
|
98
|
+
end.compact.uniq
|
99
|
+
|
100
|
+
text = "\nYou can implement step definitions for undefined steps with these snippets:\n\n"
|
101
|
+
text += snippets.join("\n\n")
|
102
|
+
|
103
|
+
@io.puts format_string(text, :undefined)
|
104
|
+
@io.puts
|
105
|
+
@io.flush
|
106
|
+
end
|
107
|
+
|
108
|
+
def print_passing_wip(options)
|
109
|
+
return unless options[:wip]
|
110
|
+
passed = step_mother.scenarios(:passed)
|
111
|
+
if passed.any?
|
112
|
+
@io.puts "\nThe --wip switch was used, so I didn't expect anything to pass. These scenarios passed:"
|
113
|
+
print_elements(passed, :passed, "scenarios")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def announce(announcement)
|
118
|
+
@io.puts
|
119
|
+
@io.puts(format_string(announcement, :tag))
|
120
|
+
@io.flush
|
121
|
+
end
|
122
|
+
|
123
|
+
private
|
124
|
+
|
125
|
+
def print_status_counts
|
126
|
+
counts = [:failed, :skipped, :undefined, :pending, :passed].map do |status|
|
127
|
+
elements = yield status
|
128
|
+
elements.any? ? format_string("#{elements.length} #{status.to_s}", status) : nil
|
129
|
+
end.compact
|
130
|
+
if counts.any?
|
131
|
+
@io.puts(" (#{counts.join(', ')})")
|
132
|
+
else
|
133
|
+
@io.puts
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def dump_count(count, what, state=nil)
|
138
|
+
[count, state, "#{what}#{count == 1 ? '' : 's'}"].compact.join(" ")
|
139
|
+
end
|
140
|
+
|
141
|
+
def format_for(*keys)
|
142
|
+
key = keys.join('_').to_sym
|
143
|
+
fmt = FORMATS[key]
|
144
|
+
raise "No format for #{key.inspect}: #{FORMATS.inspect}" if fmt.nil?
|
145
|
+
fmt
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
.cucumber {
|
4
|
+
font-family: "Lucida Grande", Helvetica, sans-serif;
|
5
|
+
font-size: 0.7em;
|
6
|
+
background: white;
|
7
|
+
padding: 1em;
|
8
|
+
}
|
9
|
+
.cucumber h1, .cucumber h2, .cucumber h3, .cucumber h4, .cucumber ol, .cucumber li, .cucumber pre, .cucumber p {
|
10
|
+
font-size: 1em;
|
11
|
+
padding: 0px;
|
12
|
+
margin: 0px;
|
13
|
+
}
|
14
|
+
.cucumber div.feature {
|
15
|
+
border: 1px solid;
|
16
|
+
padding: 2px;
|
17
|
+
margin: 4px;
|
18
|
+
}
|
19
|
+
.cucumber div.feature div.background, .cucumber div.feature div.scenario, .cucumber div.feature p {
|
20
|
+
padding: 0em 0em 0em 1em;
|
21
|
+
}
|
22
|
+
.cucumber div.feature div.background div.examples, .cucumber div.feature div.scenario div.examples, .cucumber div.feature p div.examples {
|
23
|
+
padding: 0em 0em 0em 1em;
|
24
|
+
}
|
25
|
+
.cucumber .stats {
|
26
|
+
margin: 2em;
|
27
|
+
}
|
28
|
+
.cucumber .summary ul.features li {
|
29
|
+
display: inline;
|
30
|
+
}
|
31
|
+
.cucumber .backtrace {
|
32
|
+
margin-top: 0;
|
33
|
+
margin-bottom: 0;
|
34
|
+
margin-left: 1em;
|
35
|
+
}
|
36
|
+
.cucumber a {
|
37
|
+
text-decoration: none;
|
38
|
+
color: inherit;
|
39
|
+
}
|
40
|
+
.cucumber a:hover {
|
41
|
+
text-decoration: underline;
|
42
|
+
}
|
43
|
+
.cucumber a:visited {
|
44
|
+
font-weight: normal;
|
45
|
+
}
|
46
|
+
.cucumber a div.examples {
|
47
|
+
border: 1px solid;
|
48
|
+
padding: 2px;
|
49
|
+
margin: 4px;
|
50
|
+
}
|
51
|
+
.cucumber table {
|
52
|
+
border-collapse: collapse;
|
53
|
+
}
|
54
|
+
.cucumber table td, .cucumber table th {
|
55
|
+
font-size: 0.7em;
|
56
|
+
border: 1px solid #AAAAAA;
|
57
|
+
}
|
58
|
+
.cucumber table td.failed {
|
59
|
+
background: #FFC0CB;
|
60
|
+
color: #8B0000;
|
61
|
+
}
|
62
|
+
.cucumber table td.passed {
|
63
|
+
background: #98FB98;
|
64
|
+
color: #001111;
|
65
|
+
}
|
66
|
+
.cucumber table td.skipped {
|
67
|
+
background: #e0ffff;
|
68
|
+
color: #001111;
|
69
|
+
}
|
70
|
+
.cucumber table td.pending {
|
71
|
+
background: #FFFFE0;
|
72
|
+
color: #111100;
|
73
|
+
}
|
74
|
+
.cucumber table td.undefined {
|
75
|
+
background: #FFFFE0;
|
76
|
+
color: #111100;
|
77
|
+
}
|
78
|
+
.cucumber ol {
|
79
|
+
list-style: none;
|
80
|
+
}
|
81
|
+
.cucumber ol li {
|
82
|
+
margin: 0em 0em 0em 1em;
|
83
|
+
padding: 0em 0em 0em 0.2em;
|
84
|
+
}
|
85
|
+
.cucumber ol li span.param {
|
86
|
+
font-weight: bold;
|
87
|
+
}
|
88
|
+
.cucumber ol li.failed {
|
89
|
+
border-left: 5px solid #ff0000;
|
90
|
+
border-bottom: 1px solid #ff0000;
|
91
|
+
background: #ffc0cb;
|
92
|
+
color: #8b0000;
|
93
|
+
}
|
94
|
+
.cucumber ol li.failed span.param {
|
95
|
+
background: !failed_dark;
|
96
|
+
}
|
97
|
+
.cucumber ol li.passed {
|
98
|
+
border-left: 5px solid #00ff00;
|
99
|
+
border-bottom: 1px solid #00ff00;
|
100
|
+
background: #98fb98;
|
101
|
+
color: #001111;
|
102
|
+
}
|
103
|
+
.cucumber ol li.passed span.param {
|
104
|
+
background: #00ff00;
|
105
|
+
}
|
106
|
+
.cucumber ol li.skipped {
|
107
|
+
border-left: 5px solid #00ffff;
|
108
|
+
border-bottom: 1px solid #00ffff;
|
109
|
+
background: #e0ffff;
|
110
|
+
color: #001111;
|
111
|
+
}
|
112
|
+
.cucumber ol li.skipped span.param {
|
113
|
+
background: #00ffff;
|
114
|
+
}
|
115
|
+
.cucumber ol li.pending {
|
116
|
+
border-left: 5px solid #ff8000;
|
117
|
+
border-bottom: 1px solid #ff8000;
|
118
|
+
background: #ffff00;
|
119
|
+
color: #2a1b0a;
|
120
|
+
}
|
121
|
+
.cucumber ol li.pending span.param {
|
122
|
+
background: #ff8000;
|
123
|
+
}
|
124
|
+
.cucumber ol li.undefined {
|
125
|
+
border-left: 5px solid #ff8000;
|
126
|
+
border-bottom: 1px solid #ff8000;
|
127
|
+
background: #ffff00;
|
128
|
+
color: #2a1b0a;
|
129
|
+
}
|
130
|
+
.cucumber ol li.undefined span.param {
|
131
|
+
background: #ff8000;
|
132
|
+
}
|