cucumber 0.1.10 → 0.2.0
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 +223 -5
- data/License.txt +1 -1
- data/Manifest.txt +174 -85
- data/README.txt +2 -39
- data/Rakefile +1 -2
- data/bin/cucumber +2 -2
- data/config/hoe.rb +9 -3
- data/examples/cs/README.textile +1 -22
- data/examples/cs/Rakefile +1 -1
- 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/i18n/README.textile +1 -1
- data/examples/i18n/Rakefile +20 -4
- data/examples/i18n/ar/features/addition.feature +10 -11
- data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +4 -12
- data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +4 -2
- data/examples/i18n/de/features/addition.feature +10 -11
- data/examples/i18n/de/features/division.feature +0 -1
- data/examples/i18n/de/features/step_definitons/calculator_steps.rb +5 -11
- data/examples/i18n/en/features/addition.feature +10 -11
- data/examples/i18n/en/features/division.feature +0 -1
- data/examples/i18n/en/features/step_definitons/calculator_steps.rb +5 -12
- 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/features/adicion.feature +11 -12
- data/examples/i18n/es/features/step_definitons/calculador_steps.rb +10 -11
- data/examples/i18n/es/lib/calculador.rb +4 -1
- data/examples/i18n/et/features/jagamine.feature +9 -0
- data/examples/i18n/et/features/liitmine.feature +10 -11
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +7 -9
- data/examples/i18n/et/lib/kalkulaator.rb +5 -1
- data/examples/i18n/fi/Rakefile +6 -0
- data/examples/i18n/fi/features/jakolasku.feature +9 -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/features/addition.feature +16 -12
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +14 -11
- data/examples/i18n/fr/lib/calculatrice.rb +1 -1
- data/examples/i18n/id/features/addition.feature +10 -11
- data/examples/i18n/id/features/division.feature +0 -1
- data/examples/i18n/id/features/step_definitons/calculator_steps.rb +5 -12
- data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +4 -2
- data/examples/i18n/ja/features/addition.feature +10 -11
- data/examples/i18n/ja/features/division.feature +2 -3
- data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +6 -12
- data/examples/i18n/ko/Rakefile +6 -0
- data/examples/i18n/ko/features/addition.feature +16 -0
- data/examples/i18n/ko/features/division.feature +10 -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/features/addition.feature +11 -11
- data/examples/i18n/lt/features/division.feature +0 -1
- data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +5 -12
- data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +4 -9
- data/examples/i18n/no/features/summering.feature +1 -0
- data/examples/i18n/no/features/support/env.rb +6 -0
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +4 -2
- data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +4 -2
- data/examples/i18n/ru/Rakefile +6 -0
- data/examples/i18n/ru/features/addition.feature +10 -0
- data/examples/i18n/ru/features/consecutive_calculations.feature +16 -0
- data/examples/i18n/ru/features/division.feature +15 -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 +7 -0
- data/examples/i18n/ru/lib/calculator.rb +24 -0
- data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +4 -2
- data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +5 -3
- data/examples/i18n/zh-TW/Rakefile +6 -0
- data/examples/i18n/zh-TW/features/addition.feature +16 -0
- data/examples/i18n/zh-TW/features/division.feature +10 -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/features/step_definitons/hello_steps.rb +1 -1
- data/examples/java/features/step_definitons/tree_steps.rb +1 -1
- data/examples/jbehave/README.textile +20 -0
- data/examples/jbehave/features/support/env.rb +7 -0
- data/examples/jbehave/features/trading.feature +28 -0
- data/examples/jbehave/pom.xml +53 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/converters/TraderConverter.java +32 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Stock.java +42 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Trader.java +29 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/persistence/TraderPersister.java +22 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +70 -0
- data/examples/selenium/features/search.feature +1 -1
- data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium/features/support/env.rb +19 -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 +41 -0
- data/examples/self_test/README.textile +6 -0
- data/examples/self_test/Rakefile +6 -0
- data/examples/self_test/features/background/failing_background.feature +11 -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/outline_sample.feature +15 -0
- data/examples/self_test/features/sample.feature +19 -0
- data/examples/self_test/features/step_definitions/sample_steps.rb +64 -0
- data/examples/self_test/features/support/env.rb +1 -0
- data/examples/self_test/features/support/tag_count_formatter.rb +25 -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 +20 -0
- data/examples/sinatra/views/add.erb +5 -0
- data/examples/sinatra/views/layout.erb +8 -0
- data/examples/tickets/Rakefile +13 -8
- data/examples/tickets/cucumber.yml +2 -1
- 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/236.feature +13 -0
- data/examples/tickets/features/241.feature +13 -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/scenario_outline_steps.rb +42 -0
- data/examples/tickets/features/step_definitons/tickets_steps.rb +46 -5
- data/examples/tickets/features/tickets.feature +5 -1
- data/examples/watir/README.textile +16 -0
- data/examples/watir/features/step_definitons/search_steps.rb +24 -0
- data/examples/watir/features/support/env.rb +32 -0
- data/features/background.feature +221 -0
- data/features/cucumber_cli.feature +389 -0
- data/features/cucumber_cli_diff_disabled.feature +45 -0
- data/features/cucumber_cli_outlines.feature +81 -0
- data/features/custom_formatter.feature +11 -0
- data/features/report_called_undefined_steps.feature +34 -0
- data/features/step_definitions/cucumber_steps.rb +30 -0
- data/features/step_definitions/extra_steps.rb +2 -0
- data/features/support/env.rb +8 -0
- data/gem_tasks/deployment.rake +0 -23
- data/gem_tasks/features.rake +1 -1
- data/gem_tasks/fix_cr_lf.rake +1 -1
- data/gem_tasks/flog.rake +1 -1
- data/gem_tasks/gemspec.rake +4 -0
- data/gem_tasks/jar.rake +67 -0
- data/gem_tasks/rspec.rake +31 -15
- data/gem_tasks/yard.rake +8 -0
- data/lib/autotest/cucumber_mixin.rb +41 -25
- data/lib/cucumber/ast/background.rb +50 -0
- data/lib/cucumber/ast/comment.rb +26 -0
- data/lib/cucumber/ast/examples.rb +38 -0
- data/lib/cucumber/ast/feature.rb +62 -0
- data/lib/cucumber/ast/feature_element.rb +46 -0
- data/lib/cucumber/ast/features.rb +20 -0
- data/lib/cucumber/ast/outline_table.rb +81 -0
- data/lib/cucumber/ast/py_string.rb +58 -0
- data/lib/cucumber/ast/scenario.rb +64 -0
- data/lib/cucumber/ast/scenario_outline.rb +90 -0
- data/lib/cucumber/ast/step.rb +122 -0
- data/lib/cucumber/ast/step_collection.rb +66 -0
- data/lib/cucumber/ast/step_invocation.rb +110 -0
- data/lib/cucumber/ast/table.rb +318 -0
- data/lib/cucumber/ast/tags.rb +33 -0
- data/lib/cucumber/ast/visitor.rb +125 -0
- data/lib/cucumber/ast.rb +29 -0
- data/lib/cucumber/broadcaster.rb +2 -9
- data/lib/cucumber/cli/configuration.rb +364 -0
- data/lib/cucumber/cli/language_help_formatter.rb +59 -0
- data/lib/cucumber/cli/main.rb +109 -0
- data/lib/cucumber/core_ext/exception.rb +53 -0
- data/lib/cucumber/core_ext/instance_exec.rb +54 -0
- data/lib/cucumber/core_ext/proc.rb +29 -65
- data/lib/cucumber/core_ext/string.rb +26 -0
- data/lib/cucumber/formatter/ansicolor.rb +102 -0
- data/lib/cucumber/formatter/color_io.rb +23 -0
- data/lib/cucumber/formatter/console.rb +109 -0
- data/lib/cucumber/formatter/cucumber.css +55 -0
- data/lib/cucumber/formatter/cucumber.sass +49 -0
- data/lib/cucumber/formatter/html.rb +133 -0
- data/lib/cucumber/formatter/pretty.rb +179 -0
- data/lib/cucumber/formatter/profile.rb +77 -0
- data/lib/cucumber/formatter/progress.rb +60 -0
- data/lib/cucumber/formatter/rerun.rb +35 -0
- data/lib/cucumber/formatter/unicode.rb +35 -0
- data/lib/cucumber/formatter.rb +1 -0
- data/lib/cucumber/formatters/unicode.rb +2 -0
- data/lib/cucumber/jbehave.rb +97 -0
- data/lib/cucumber/languages.yml +214 -72
- data/lib/cucumber/parser/basic.rb +0 -0
- data/lib/cucumber/parser/feature.rb +1487 -0
- data/lib/cucumber/parser/feature.tt +193 -0
- data/lib/cucumber/parser/i18n.tt +31 -0
- data/lib/cucumber/parser/table.rb +402 -0
- data/lib/cucumber/parser/table.tt +59 -0
- data/lib/cucumber/parser/treetop_ext.rb +75 -0
- data/lib/cucumber/parser.rb +43 -0
- data/lib/cucumber/platform.rb +13 -8
- data/lib/cucumber/rails/rspec.rb +6 -10
- data/lib/cucumber/rails/world.rb +8 -8
- data/lib/cucumber/rake/task.rb +46 -9
- data/lib/cucumber/step_definition.rb +103 -0
- data/lib/cucumber/step_match.rb +49 -0
- data/lib/cucumber/step_mother.rb +184 -65
- data/lib/cucumber/version.rb +4 -3
- data/lib/cucumber/world.rb +53 -0
- data/lib/cucumber.rb +45 -21
- data/rails_generators/cucumber/cucumber_generator.rb +23 -3
- data/rails_generators/cucumber/templates/cucumber +2 -1
- data/rails_generators/cucumber/templates/cucumber.rake +13 -5
- data/rails_generators/cucumber/templates/env.rb +11 -2
- data/rails_generators/cucumber/templates/paths.rb +19 -0
- data/rails_generators/cucumber/templates/webrat_steps.rb +60 -40
- data/rails_generators/feature/feature_generator.rb +26 -2
- data/rails_generators/feature/templates/feature.erb +15 -12
- data/rails_generators/feature/templates/steps.erb +14 -16
- data/spec/cucumber/ast/background_spec.rb +49 -0
- data/spec/cucumber/ast/feature_factory.rb +63 -0
- data/spec/cucumber/ast/feature_spec.rb +37 -0
- data/spec/cucumber/ast/py_string_spec.rb +47 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +67 -0
- data/spec/cucumber/ast/scenario_spec.rb +65 -0
- data/spec/cucumber/ast/step_collection_spec.rb +8 -0
- data/spec/cucumber/ast/step_spec.rb +66 -0
- data/spec/cucumber/ast/table_spec.rb +149 -0
- data/spec/cucumber/ast/tags_spec.rb +19 -0
- data/spec/cucumber/broadcaster_spec.rb +6 -18
- data/spec/cucumber/cli/configuration_spec.rb +275 -0
- data/spec/cucumber/cli/main_spec.rb +203 -0
- data/spec/cucumber/core_ext/proc_spec.rb +27 -35
- data/spec/cucumber/core_ext/string_spec.rb +8 -0
- data/spec/cucumber/formatter/ansicolor_spec.rb +35 -0
- data/spec/cucumber/formatter/color_io_spec.rb +26 -0
- data/spec/cucumber/formatter/html/cucumber.css +37 -0
- data/spec/cucumber/formatter/html/cucumber.js +13 -0
- data/spec/cucumber/formatter/html/index.html +45 -0
- data/spec/cucumber/formatter/html/jquery-1.3.min.js +19 -0
- data/spec/cucumber/formatter/html/jquery.uitableedit.js +100 -0
- data/spec/cucumber/formatters/profile_formatter_spec.rb +22 -16
- data/spec/cucumber/parser/feature_parser_spec.rb +282 -0
- data/spec/cucumber/parser/table_parser_spec.rb +48 -0
- data/spec/cucumber/rails/stubs/mini_rails.rb +4 -3
- data/spec/cucumber/step_definition_spec.rb +81 -0
- data/spec/cucumber/step_mother_spec.rb +50 -51
- data/spec/cucumber/treetop_parser/empty_feature.feature +1 -1
- data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
- data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
- data/spec/cucumber/treetop_parser/multiple_tables.feature +6 -8
- data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
- data/spec/cucumber/treetop_parser/spaces.feature +3 -1
- data/spec/cucumber/treetop_parser/with_comments.feature +1 -1
- data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
- data/spec/cucumber/world/pending_spec.rb +47 -0
- data/spec/spec_helper.rb +4 -3
- metadata +192 -95
- data/TODO.txt +0 -26
- data/examples/calculator_ruby_features/features/addition.rb +0 -23
- data/examples/calculator_ruby_features/features/step_definitons/calculator_steps.rb +0 -43
- data/examples/cs/features/hello.feature +0 -11
- data/examples/cs/features/step_definitons/hello_steps.rb +0 -25
- data/examples/cs/features/step_definitons/tree_steps.rb +0 -14
- data/examples/cs/features/tree.feature +0 -9
- data/examples/cs/src/Hello.cs +0 -18
- data/examples/i18n/ja/README.txt +0 -5
- data/examples/selenium/features/step_definitons/stories_steps.rb +0 -41
- data/examples/watir/features/step_definitons/stories_steps.rb +0 -51
- data/features/see_features.feature +0 -8
- data/features/steps/features_steps.rb +0 -9
- data/gem_tasks/treetop.rake +0 -41
- data/lib/cucumber/cli.rb +0 -279
- data/lib/cucumber/executor.rb +0 -190
- data/lib/cucumber/formatters/ansicolor.rb +0 -109
- data/lib/cucumber/formatters/autotest_formatter.rb +0 -23
- data/lib/cucumber/formatters/cucumber.css +0 -132
- data/lib/cucumber/formatters/cucumber.js +0 -11
- data/lib/cucumber/formatters/html_formatter.rb +0 -128
- data/lib/cucumber/formatters/jquery.js +0 -32
- data/lib/cucumber/formatters/pretty_formatter.rb +0 -234
- data/lib/cucumber/formatters/profile_formatter.rb +0 -92
- data/lib/cucumber/formatters/progress_formatter.rb +0 -58
- data/lib/cucumber/formatters.rb +0 -1
- data/lib/cucumber/model/table.rb +0 -28
- data/lib/cucumber/model.rb +0 -1
- data/lib/cucumber/step_methods.rb +0 -49
- data/lib/cucumber/tree/feature.rb +0 -63
- data/lib/cucumber/tree/features.rb +0 -21
- data/lib/cucumber/tree/given_scenario.rb +0 -13
- data/lib/cucumber/tree/scenario.rb +0 -174
- data/lib/cucumber/tree/step.rb +0 -134
- data/lib/cucumber/tree/table.rb +0 -26
- data/lib/cucumber/tree/top_down_visitor.rb +0 -23
- data/lib/cucumber/tree.rb +0 -18
- data/lib/cucumber/treetop_parser/feature.treetop.erb +0 -206
- data/lib/cucumber/treetop_parser/feature_ar.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_cy.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_da.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_de.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_en-tx.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_en.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_es.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_et.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_fr.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_id.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_it.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_ja.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_lt.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_nl.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_no.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_parser.rb +0 -34
- data/lib/cucumber/treetop_parser/feature_pl.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_pt.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_ro.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_ro2.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_ru.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_se.rb +0 -1591
- data/lib/cucumber/treetop_parser/feature_zh-CN.rb +0 -1591
- data/script/console +0 -10
- data/script/console.cmd +0 -1
- data/script/destroy +0 -14
- data/script/destroy.cmd +0 -1
- data/script/generate +0 -14
- data/script/generate.cmd +0 -1
- data/script/txt2html +0 -74
- data/script/txt2html.cmd +0 -1
- data/setup.rb +0 -1585
- data/spec/cucumber/cli_spec.rb +0 -274
- data/spec/cucumber/executor_spec.rb +0 -298
- data/spec/cucumber/formatters/ansicolor_spec.rb +0 -35
- data/spec/cucumber/formatters/autotest_formatter_spec.rb +0 -26
- data/spec/cucumber/formatters/features.html +0 -269
- data/spec/cucumber/formatters/html_formatter_spec.rb +0 -74
- data/spec/cucumber/formatters/pretty_formatter_spec.rb +0 -204
- data/spec/cucumber/formatters/progress_formatter_spec.rb +0 -65
- data/spec/cucumber/model/table_spec.rb +0 -20
- data/spec/cucumber/tree/feature_spec.rb +0 -43
- data/spec/cucumber/tree/row_scenario_spec.rb +0 -55
- data/spec/cucumber/tree/scenario_spec.rb +0 -76
- data/spec/cucumber/tree/step_spec.rb +0 -50
- data/spec/cucumber/treetop_parser/feature_parser_spec.rb +0 -98
- /data/examples/{calculator_ruby_features → selenium_webrat}/Rakefile +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2008 Greg Weber greg at gregweber.info
|
|
3
|
+
* Dual licensed under the MIT and GPL licenses:
|
|
4
|
+
* http://www.opensource.org/licenses/mit-license.php
|
|
5
|
+
* http://www.gnu.org/licenses/gpl.html
|
|
6
|
+
*
|
|
7
|
+
* jquery plugin
|
|
8
|
+
* make an html table editable by the user
|
|
9
|
+
* user clicks on a cell, edits the value,
|
|
10
|
+
* then presses enter or clicks on any cell to save the new value
|
|
11
|
+
* pressing escape returns the cell text to its orignal text
|
|
12
|
+
*
|
|
13
|
+
* documentation at http://gregweber.info/projects/uitableedit
|
|
14
|
+
*
|
|
15
|
+
* var t = $('table')
|
|
16
|
+
* $.uiTableEdit( t ) // returns t
|
|
17
|
+
*
|
|
18
|
+
* options : off, mouseDown, find, dataEntered, dataVerify, editDone
|
|
19
|
+
* off : turns off table editing
|
|
20
|
+
* find : defaults to tbody > tr > td
|
|
21
|
+
* mousedown : called in context of the table cell (as a normal event would be)
|
|
22
|
+
* if mouseDown returns false, cell will not become editable
|
|
23
|
+
* dataVerify : called in context of the cell,
|
|
24
|
+
* if dataVerify returns false, cell will stay in editable state
|
|
25
|
+
* if dataVerify returns text, that text will replace the cell's text
|
|
26
|
+
* arguments are the cell's text, original text, event, jquery object for the cell
|
|
27
|
+
* editDone : invoked on completion
|
|
28
|
+
* arguments: td cell's new text, original text, event, and jquery element for the td cell
|
|
29
|
+
*/
|
|
30
|
+
jQuery.uiTableEdit = function(jq, options){
|
|
31
|
+
function unbind(){
|
|
32
|
+
return jq.find( options.find ).unbind('mousedown.uiTableEdit')
|
|
33
|
+
}
|
|
34
|
+
options = options || {}
|
|
35
|
+
options.find = options.find || 'tbody > tr > td'
|
|
36
|
+
if( options.off ){
|
|
37
|
+
unbind().find('form').each( function(){ var f = $(this);
|
|
38
|
+
f.parents("td:first").text( f.find(':text').attr('value') );
|
|
39
|
+
f.remove();
|
|
40
|
+
});
|
|
41
|
+
return jq;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function bind_mouse_down( mouseDn ){
|
|
45
|
+
unbind().bind('mousedown.uiTableEdit', mouseDn )
|
|
46
|
+
}
|
|
47
|
+
function td_edit(){
|
|
48
|
+
var td = jQuery(this);
|
|
49
|
+
|
|
50
|
+
function restore(e){
|
|
51
|
+
var val = td.find(':text').attr('value')
|
|
52
|
+
if( options.dataVerify ){
|
|
53
|
+
var value = options.dataVerify.call(this, val, orig_text, e, td);
|
|
54
|
+
if( value === false ){ return false; }
|
|
55
|
+
if( value !== null && value !== undefined ) val = value;
|
|
56
|
+
}
|
|
57
|
+
td.html( "" );
|
|
58
|
+
td.text( val );
|
|
59
|
+
if( options.editDone ) options.editDone(val,orig_text,e,td)
|
|
60
|
+
bind_mouse_down( td_edit_wrapper );
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function checkEscape(e){
|
|
64
|
+
if (e.keyCode === 27) {
|
|
65
|
+
td.html( "" );
|
|
66
|
+
td.text( orig_text );
|
|
67
|
+
bind_mouse_down( td_edit );
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
var orig_text = td.text();
|
|
72
|
+
var w = td.width();
|
|
73
|
+
var h = td.height();
|
|
74
|
+
td.css({width: w + "px", height: h + "px", padding: "0", margin: "0"});
|
|
75
|
+
td.html( '<form name="td-editor" action="javascript:void(0);">' +
|
|
76
|
+
'<input type="text" name="td_edit" value="' +
|
|
77
|
+
td.text() + '"' + ' style="margin:0px;padding:0px;border:0px;width: ' +
|
|
78
|
+
w + 'px;">' + '</input></form>' )
|
|
79
|
+
.find('form').submit( restore ).mousedown( restore ).blur( restore ).keypress( checkEscape );
|
|
80
|
+
|
|
81
|
+
function focus_text(){ td.find('input:text').get(0).focus() }
|
|
82
|
+
|
|
83
|
+
// focus bug (seen in FireFox) fixed by small delay
|
|
84
|
+
setTimeout(focus_text, 50);
|
|
85
|
+
|
|
86
|
+
/* TODO: investigate removing bind_mouse_down
|
|
87
|
+
I also got rid of bind_mouse_down(restore),
|
|
88
|
+
because now that you can refocus on fields that have been blurred,
|
|
89
|
+
you can have multiple edits going simultaneously
|
|
90
|
+
*/
|
|
91
|
+
bind_mouse_down( restore );
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
var td_edit_wrapper = !options.mouseDown ? td_edit : function(){
|
|
95
|
+
if( options.mouseDown.apply(this,arguments) == false ) return false;
|
|
96
|
+
td_edit.apply(this,arguments);
|
|
97
|
+
};
|
|
98
|
+
bind_mouse_down( td_edit_wrapper );
|
|
99
|
+
return jq;
|
|
100
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
require 'cucumber/formatter/profile'
|
|
2
3
|
|
|
3
4
|
module Cucumber
|
|
4
|
-
module
|
|
5
|
-
describe
|
|
5
|
+
module Formatter
|
|
6
|
+
describe Progress do
|
|
6
7
|
attr_reader :io, :formatter
|
|
7
8
|
|
|
8
9
|
def mock_proc(stubs={})
|
|
@@ -20,18 +21,23 @@ module Cucumber
|
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
before(:each) do
|
|
24
|
+
::Term::ANSIColor.coloring = false
|
|
23
25
|
@io = StringIO.new
|
|
24
26
|
step_mother = stub('step_mother')
|
|
25
|
-
@formatter = ProfileFormatter.new(
|
|
27
|
+
@formatter = ProfileFormatter.new(step_mother, io)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
after(:each) do
|
|
31
|
+
::Term::ANSIColor.coloring = true
|
|
26
32
|
end
|
|
27
33
|
|
|
28
|
-
|
|
34
|
+
xit "should print a heading" do
|
|
29
35
|
formatter.visit_features(nil)
|
|
30
36
|
|
|
31
37
|
io.string.should eql("Profiling enabled.\n")
|
|
32
38
|
end
|
|
33
39
|
|
|
34
|
-
|
|
40
|
+
xit "should record the current time when starting a new step" do
|
|
35
41
|
now = Time.now
|
|
36
42
|
Time.stub!(:now).and_return(now)
|
|
37
43
|
formatter.step_executing('should foo', nil, nil)
|
|
@@ -47,7 +53,7 @@ module Cucumber
|
|
|
47
53
|
Time.stub!(:now).and_return(now, now)
|
|
48
54
|
end
|
|
49
55
|
|
|
50
|
-
|
|
56
|
+
xit "should group by regular expressions and actual keyword" do
|
|
51
57
|
step_1 = mock_step(:actual_keyword => 'Given')
|
|
52
58
|
step_2 = mock_step(:actual_keyword => 'Given')
|
|
53
59
|
|
|
@@ -60,7 +66,7 @@ module Cucumber
|
|
|
60
66
|
step_times.has_key?('Given /ichiban/').should be_true
|
|
61
67
|
end
|
|
62
68
|
|
|
63
|
-
|
|
69
|
+
xit "should use a previous step's keyword when recording row steps" do
|
|
64
70
|
step = mock_step(:actual_keyword => 'Given')
|
|
65
71
|
step_row = mock_step(:row? => true)
|
|
66
72
|
|
|
@@ -74,7 +80,7 @@ module Cucumber
|
|
|
74
80
|
|
|
75
81
|
end
|
|
76
82
|
|
|
77
|
-
|
|
83
|
+
xit "should correctly record a passed step" do
|
|
78
84
|
formatter.step_executing(nil, nil, nil)
|
|
79
85
|
formatter.step_passed(mock_step(:format => 'she doth teach the torches to burn bright', :actual_keyword => 'Given'), nil, nil)
|
|
80
86
|
formatter.dump
|
|
@@ -82,7 +88,7 @@ module Cucumber
|
|
|
82
88
|
io.string.should include('Given she doth teach the torches to burn bright')
|
|
83
89
|
end
|
|
84
90
|
|
|
85
|
-
|
|
91
|
+
xit "should correctly record a passed step row" do
|
|
86
92
|
formatter.step_executing(nil, nil, nil)
|
|
87
93
|
formatter.step_passed(mock_step(:row? => true), /example/, ['fitty'])
|
|
88
94
|
formatter.dump
|
|
@@ -90,7 +96,7 @@ module Cucumber
|
|
|
90
96
|
io.string.should include('fitty')
|
|
91
97
|
end
|
|
92
98
|
|
|
93
|
-
|
|
99
|
+
xit "should calculate the mean step execution time" do
|
|
94
100
|
now = Time.now
|
|
95
101
|
Time.stub!(:now).and_return(now, now+5, now, now+1)
|
|
96
102
|
|
|
@@ -104,7 +110,7 @@ module Cucumber
|
|
|
104
110
|
io.string.should include('3.0000000')
|
|
105
111
|
end
|
|
106
112
|
|
|
107
|
-
|
|
113
|
+
xit "should display file and line comment for step invocation" do
|
|
108
114
|
step = mock_step(:format => 'test', :actual_keyword => 'Given', :file => 'test.feature', :line => 5)
|
|
109
115
|
|
|
110
116
|
formatter.step_executing(step, nil, nil)
|
|
@@ -114,7 +120,7 @@ module Cucumber
|
|
|
114
120
|
@io.string.should include("# test.feature:5")
|
|
115
121
|
end
|
|
116
122
|
|
|
117
|
-
|
|
123
|
+
xit "should display file and line comment for step definition" do
|
|
118
124
|
step = mock_step(:format => 'test', :actual_keyword => 'Given',
|
|
119
125
|
:regexp_args_proc => [/test/, nil, mock_proc(:to_comment_line => '# steps/example_steps.rb:11')])
|
|
120
126
|
|
|
@@ -125,7 +131,7 @@ module Cucumber
|
|
|
125
131
|
@io.string.should include("# steps/example_steps.rb:11")
|
|
126
132
|
end
|
|
127
133
|
|
|
128
|
-
|
|
134
|
+
xit "should show the performance times of the step invocations for a step definition" do
|
|
129
135
|
now = Time.now
|
|
130
136
|
Time.stub!(:now).and_return(now, now+5, now, now+1)
|
|
131
137
|
|
|
@@ -143,7 +149,7 @@ module Cucumber
|
|
|
143
149
|
io.string.should include("1.0000000 Given step invocation")
|
|
144
150
|
end
|
|
145
151
|
|
|
146
|
-
|
|
152
|
+
xit "should sort the step invocations in descending order" do
|
|
147
153
|
now = Time.now
|
|
148
154
|
Time.stub!(:now).and_return(now, now+1, now, now+5)
|
|
149
155
|
|
|
@@ -161,7 +167,7 @@ module Cucumber
|
|
|
161
167
|
io_string_lines.at(-1).should include('1.0000000')
|
|
162
168
|
end
|
|
163
169
|
|
|
164
|
-
|
|
170
|
+
xit "should print the top average 10 step results" do
|
|
165
171
|
formatter.instance_variable_set("@step_time", Time.now)
|
|
166
172
|
|
|
167
173
|
11.times do |test_number|
|
|
@@ -175,7 +181,7 @@ module Cucumber
|
|
|
175
181
|
io.string.scan(/unique_test_\d+/).length.should == 10
|
|
176
182
|
end
|
|
177
183
|
|
|
178
|
-
|
|
184
|
+
xit "should print the top 5 step invocations for step definition" do
|
|
179
185
|
formatter.instance_variable_set("@step_time", Time.now)
|
|
180
186
|
|
|
181
187
|
10.times do |test_number|
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
require 'cucumber/parser'
|
|
3
|
+
|
|
4
|
+
module Cucumber
|
|
5
|
+
module Parser
|
|
6
|
+
describe Feature do
|
|
7
|
+
before do
|
|
8
|
+
@parser = FeatureParser.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def parse(text)
|
|
12
|
+
feature = @parser.parse_or_fail(text)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def parse_file(file)
|
|
16
|
+
@parser.parse_file(File.dirname(__FILE__) + "/../treetop_parser/" + file)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def parse_example_file(file)
|
|
20
|
+
@parser.parse_file(File.dirname(__FILE__) + "/../../../examples/" + file)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "Header" do
|
|
24
|
+
it "should parse Feature with blurb" do
|
|
25
|
+
parse(%{Feature: hi
|
|
26
|
+
with blurb
|
|
27
|
+
})
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe "Comments" do
|
|
32
|
+
it "should parse a file with only a one line comment" do
|
|
33
|
+
parse(%{# My comment
|
|
34
|
+
Feature: hi
|
|
35
|
+
}).to_sexp.should ==
|
|
36
|
+
[:feature, "Feature: hi\n",
|
|
37
|
+
[:comment, "# My comment\n"]]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should parse a comment within a scenario" do
|
|
41
|
+
pending "Store comment in node and output it in pretty formatter"
|
|
42
|
+
parse(%{Feature: Hi
|
|
43
|
+
Scenario: Hello
|
|
44
|
+
Given foo
|
|
45
|
+
# When bar
|
|
46
|
+
Then baz
|
|
47
|
+
}).to_sexp.should ==
|
|
48
|
+
[:feature, "Feature: Hi",
|
|
49
|
+
[:scenario, 2, "Scenario:", "Hello",
|
|
50
|
+
[:step, 3, "Given", "foo"],
|
|
51
|
+
[:comment, "# When bar\n"],
|
|
52
|
+
[:step, 5, "Then", "baz"]
|
|
53
|
+
]
|
|
54
|
+
]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should parse a file with only a multiline comment" do
|
|
58
|
+
parse(%{# Hello
|
|
59
|
+
# World
|
|
60
|
+
Feature: hi
|
|
61
|
+
}).to_sexp.should ==
|
|
62
|
+
[:feature, "Feature: hi\n",
|
|
63
|
+
[:comment, "# Hello\n# World\n"]]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should parse a file with no comments" do
|
|
67
|
+
parse("Feature: hi\n").to_sexp.should ==
|
|
68
|
+
[:feature, "Feature: hi\n"]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should parse a file with only a multiline comment with newlines" do
|
|
72
|
+
parse("# Hello\n\n# World\n").to_sexp.should ==
|
|
73
|
+
[:feature, "",
|
|
74
|
+
[:comment, "# Hello\n\n# World\n"]]
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe "Tags" do
|
|
79
|
+
it "should parse a file with tags on a feature" do
|
|
80
|
+
parse("# My comment\n@hello @world Feature: hi\n").to_sexp.should ==
|
|
81
|
+
[:feature, "Feature: hi\n",
|
|
82
|
+
[:comment, "# My comment\n"],
|
|
83
|
+
[:tag, "hello"],
|
|
84
|
+
[:tag, "world"]]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "should parse a file with tags on a scenario" do
|
|
88
|
+
parse(%{# FC
|
|
89
|
+
@ft
|
|
90
|
+
Feature: hi
|
|
91
|
+
|
|
92
|
+
@st1 @st2
|
|
93
|
+
Scenario: First
|
|
94
|
+
Given Pepper
|
|
95
|
+
|
|
96
|
+
@st3
|
|
97
|
+
@st4 @ST5 @#^%&ST6**!
|
|
98
|
+
Scenario: Second}).to_sexp.should ==
|
|
99
|
+
[:feature, "Feature: hi",
|
|
100
|
+
[:comment, "# FC\n "],
|
|
101
|
+
[:tag, "ft"],
|
|
102
|
+
[:scenario, 6, 'Scenario:', 'First',
|
|
103
|
+
[:tag, "st1"], [:tag, "st2"],
|
|
104
|
+
[:step_invocation, 7, "Given", "Pepper"]
|
|
105
|
+
],
|
|
106
|
+
[:scenario, 11, 'Scenario:', 'Second',
|
|
107
|
+
[:tag, "st3"], [:tag, "st4"], [:tag, "ST5"], [:tag, "#^%&ST6**!"]]]
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
describe "Background" do
|
|
112
|
+
it "should have steps" do
|
|
113
|
+
parse("Feature: Hi\nBackground:\nGiven I am a step\n").to_sexp.should ==
|
|
114
|
+
[:feature, "Feature: Hi",
|
|
115
|
+
[:background, 2, "Background:",
|
|
116
|
+
[:step, 3, "Given", "I am a step"]]]
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
describe "Scenarios" do
|
|
121
|
+
it "can be empty" do
|
|
122
|
+
parse("Feature: Hi\n\nScenario: Hello\n").to_sexp.should ==
|
|
123
|
+
[:feature, "Feature: Hi",
|
|
124
|
+
[:scenario, 3, "Scenario:", "Hello"]]
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "should allow whitespace lines after the Scenario line" do
|
|
128
|
+
parse(%{Feature: Foo
|
|
129
|
+
|
|
130
|
+
Scenario: bar
|
|
131
|
+
|
|
132
|
+
Given baz})
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "should have steps" do
|
|
136
|
+
parse("Feature: Hi\nScenario: Hello\nGiven I am a step\n").to_sexp.should ==
|
|
137
|
+
[:feature, "Feature: Hi",
|
|
138
|
+
[:scenario, 2, "Scenario:", "Hello",
|
|
139
|
+
[:step_invocation, 3, "Given", "I am a step"]]]
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "should have steps with inline table" do
|
|
143
|
+
parse(%{Feature: Hi
|
|
144
|
+
Scenario: Hello
|
|
145
|
+
Given I have a table
|
|
146
|
+
|a|b|
|
|
147
|
+
}).to_sexp.should ==
|
|
148
|
+
[:feature, "Feature: Hi",
|
|
149
|
+
[:scenario, 2, "Scenario:", "Hello",
|
|
150
|
+
[:step_invocation, 3, "Given", "I have a table",
|
|
151
|
+
[:table,
|
|
152
|
+
[:row,
|
|
153
|
+
[:cell, "a"],
|
|
154
|
+
[:cell, "b"]]]]]]
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "should have steps with inline py_string" do
|
|
158
|
+
parse(%{Feature: Hi
|
|
159
|
+
Scenario: Hello
|
|
160
|
+
Given I have a string
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
"""
|
|
164
|
+
hello
|
|
165
|
+
world
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
}).to_sexp.should ==
|
|
169
|
+
[:feature, "Feature: Hi",
|
|
170
|
+
[:scenario, 2, "Scenario:", "Hello",
|
|
171
|
+
[:step_invocation, 3, "Given", "I have a string",
|
|
172
|
+
[:py_string, "hello\nworld"]]]]
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
describe "Scenario Outlines" do
|
|
177
|
+
it "can be empty" do
|
|
178
|
+
parse(%{Feature: Hi
|
|
179
|
+
Scenario Outline: Hello
|
|
180
|
+
Given a <what> cucumber
|
|
181
|
+
Examples:
|
|
182
|
+
|what|
|
|
183
|
+
|green|
|
|
184
|
+
}).to_sexp.should ==
|
|
185
|
+
[:feature, "Feature: Hi",
|
|
186
|
+
[:scenario_outline, "Scenario Outline:", "Hello",
|
|
187
|
+
[:step, 3, "Given", "a <what> cucumber"],
|
|
188
|
+
[:examples, "Examples:", "",
|
|
189
|
+
[:table,
|
|
190
|
+
[:row,
|
|
191
|
+
[:cell, "what"]],
|
|
192
|
+
[:row, [:cell, "green"]]]]]]
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
it "should have line numbered steps with inline table" do
|
|
196
|
+
parse(%{Feature: Hi
|
|
197
|
+
Scenario Outline: Hello
|
|
198
|
+
|
|
199
|
+
Given I have a table
|
|
200
|
+
|
|
201
|
+
|<a>|<b>|
|
|
202
|
+
Examples:
|
|
203
|
+
|a|b|
|
|
204
|
+
|c|d|
|
|
205
|
+
}).to_sexp.should ==
|
|
206
|
+
[:feature, "Feature: Hi",
|
|
207
|
+
[:scenario_outline, "Scenario Outline:", "Hello",
|
|
208
|
+
[:step, 4, "Given", "I have a table",
|
|
209
|
+
[:table,
|
|
210
|
+
[:row,
|
|
211
|
+
[:cell, "<a>"],
|
|
212
|
+
[:cell, "<b>"]]]],
|
|
213
|
+
[:examples, "Examples:", "",
|
|
214
|
+
[:table,
|
|
215
|
+
[:row,
|
|
216
|
+
[:cell, "a"],
|
|
217
|
+
[:cell, "b"]],
|
|
218
|
+
[:row,
|
|
219
|
+
[:cell, "c"],
|
|
220
|
+
[:cell, "d"]]]]]]
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "should have examples" do
|
|
224
|
+
parse("Feature: Hi
|
|
225
|
+
|
|
226
|
+
Scenario Outline: Hello
|
|
227
|
+
|
|
228
|
+
Given I have a table
|
|
229
|
+
|1|2|
|
|
230
|
+
|
|
231
|
+
Examples:
|
|
232
|
+
|x|y|
|
|
233
|
+
|5|6|
|
|
234
|
+
|
|
235
|
+
").to_sexp.should ==
|
|
236
|
+
[:feature, "Feature: Hi",
|
|
237
|
+
[:scenario_outline, "Scenario Outline:", "Hello",
|
|
238
|
+
[:step, 5, "Given", "I have a table",
|
|
239
|
+
[:table,
|
|
240
|
+
[:row,
|
|
241
|
+
[:cell, "1"],
|
|
242
|
+
[:cell, "2"]]]],
|
|
243
|
+
[:examples, "Examples:", "",
|
|
244
|
+
[:table,
|
|
245
|
+
[:row,
|
|
246
|
+
[:cell, "x"],
|
|
247
|
+
[:cell, "y"]],
|
|
248
|
+
[:row,
|
|
249
|
+
[:cell, "5"],
|
|
250
|
+
[:cell, "6"]]]]]]
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
it "should set line numbers on feature" do
|
|
254
|
+
feature = parse_file("empty_feature.feature:11:12")
|
|
255
|
+
feature.instance_variable_get('@lines').should == [11, 12]
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
describe "Syntax" do
|
|
260
|
+
it "should parse empty_feature" do
|
|
261
|
+
parse_file("empty_feature.feature")
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
it "should parse empty_scenario" do
|
|
265
|
+
parse_file("empty_scenario.feature")
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
it "should parse empty_scenario_outline" do
|
|
269
|
+
parse_file("empty_scenario_outline.feature")
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
it "should parse fit_scenario" do
|
|
273
|
+
parse_file("multiline_steps.feature")
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
it "should parse scenario_outline" do
|
|
277
|
+
parse_file("scenario_outline.feature")
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
require 'treetop'
|
|
3
|
+
require 'cucumber/parser'
|
|
4
|
+
|
|
5
|
+
module Cucumber
|
|
6
|
+
module Parser
|
|
7
|
+
describe 'Tables' do
|
|
8
|
+
before do
|
|
9
|
+
@parser = FeatureParser.new
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def parse(text)
|
|
13
|
+
@parser.__send__(:prepare_to_parse, text)
|
|
14
|
+
@parser.root = :table
|
|
15
|
+
table = @parser._nt_table
|
|
16
|
+
table.raw
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should parse a 1x2 table with newline" do
|
|
20
|
+
parse(" | 1 | 2 | \n").should == [%w{1 2}]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should parse a 1x2 table without newline" do
|
|
24
|
+
parse("| 1 | 2 |").should == [%w{1 2}]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should parse a 1x2 table without spaces" do
|
|
28
|
+
parse("|1|2|").should == [%w{1 2}]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should parse a 2x2 table" do
|
|
32
|
+
parse("| 1 | 2 |\n| 3 | 4 |\n").should == [%w{1 2}, %w{3 4}]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should parse a 2x2 table with several newlines" do
|
|
36
|
+
parse("| 1 | 2 |\n| 3 | 4 |\n\n\n").should == [%w{1 2}, %w{3 4}]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should parse a 2x2 table with empty cells" do
|
|
40
|
+
parse("| 1 | |\n|| 4 |\n").should == [['1', nil], [nil, '4']]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should not parse a 2x2 table that isn't closed" do
|
|
44
|
+
parse("| 1 | |\n|| 4 ").should_not == [['1', nil], [nil, '4']]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
|
|
3
|
+
require 'cucumber/ast'
|
|
4
|
+
require 'cucumber/step_mother'
|
|
5
|
+
require 'cucumber/step_definition'
|
|
6
|
+
|
|
7
|
+
module Cucumber
|
|
8
|
+
describe StepDefinition do
|
|
9
|
+
before do
|
|
10
|
+
extend StepMother
|
|
11
|
+
@world = new_world!
|
|
12
|
+
$inside = nil
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should allow calling of other steps" do
|
|
16
|
+
Given /Outside/ do
|
|
17
|
+
Given "Inside"
|
|
18
|
+
end
|
|
19
|
+
Given /Inside/ do
|
|
20
|
+
$inside = true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
step_match("Outside").invoke(@world, nil)
|
|
24
|
+
$inside.should == true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should allow calling of other steps with inline arg" do
|
|
28
|
+
Given /Outside/ do
|
|
29
|
+
Given "Inside", Ast::Table.new([['inside']])
|
|
30
|
+
end
|
|
31
|
+
Given /Inside/ do |table|
|
|
32
|
+
$inside = table.raw[0][0]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
step_match("Outside").invoke(@world, nil)
|
|
36
|
+
$inside.should == 'inside'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should raise Undefined when inside step is not defined" do
|
|
40
|
+
Given /Outside/ do
|
|
41
|
+
Given 'Inside'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
step = mock('Step')
|
|
45
|
+
step.should_receive(:exception=)
|
|
46
|
+
lambda do
|
|
47
|
+
@world.__cucumber_current_step = step
|
|
48
|
+
step_match('Outside').invoke(@world, nil)
|
|
49
|
+
end.should raise_error(Undefined, 'Undefined step: "Inside"')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should allow forced pending" do
|
|
53
|
+
Given /Outside/ do
|
|
54
|
+
pending("Do me!")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
lambda do
|
|
58
|
+
step_match("Outside").invoke(@world, nil)
|
|
59
|
+
end.should raise_error(Pending, "Do me!")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should have a #to_s suitable for automcompletion" do
|
|
63
|
+
stepdef = Given /Hello (.*)/ do
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
stepdef.to_s.should == '/Hello (.*)/ # spec/cucumber/step_definition_spec.rb:63'
|
|
67
|
+
stepdef.to_s(2).should == '/Hello (.*)/ # spec/cucumber/step_definition_spec.rb:63'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should allow announce" do
|
|
71
|
+
v = mock('visitor')
|
|
72
|
+
v.should_receive(:announce).with('wasup')
|
|
73
|
+
self.visitor = v
|
|
74
|
+
world = new_world!
|
|
75
|
+
Given /Loud/ do
|
|
76
|
+
announce 'wasup'
|
|
77
|
+
end
|
|
78
|
+
step_match("Loud").invoke(world, nil)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|