jeffrafter-cucumber 0.1.10
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 +262 -0
- data/License.txt +20 -0
- data/Manifest.txt +241 -0
- data/README.txt +41 -0
- data/Rakefile +8 -0
- data/TODO.txt +26 -0
- data/bin/cucumber +6 -0
- data/config/hoe.rb +69 -0
- data/config/requirements.rb +15 -0
- data/cucumber.yml +1 -0
- data/examples/calculator_ruby_features/Rakefile +6 -0
- data/examples/calculator_ruby_features/features/addition.rb +23 -0
- data/examples/calculator_ruby_features/features/step_definitons/calculator_steps.rb +43 -0
- data/examples/cs/README.textile +22 -0
- data/examples/cs/Rakefile +12 -0
- data/examples/cs/features/hello.feature +11 -0
- data/examples/cs/features/step_definitons/hello_steps.rb +25 -0
- data/examples/cs/features/step_definitons/tree_steps.rb +14 -0
- data/examples/cs/features/tree.feature +9 -0
- data/examples/cs/src/Hello.cs +18 -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 +16 -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 +32 -0
- data/examples/i18n/ar/lib/calculator.rb +10 -0
- data/examples/i18n/da/Rakefile +6 -0
- data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +22 -0
- data/examples/i18n/da/features/summering.feature +17 -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 +30 -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 +31 -0
- data/examples/i18n/en/lib/calculator.rb +14 -0
- data/examples/i18n/es/Rakefile +6 -0
- data/examples/i18n/es/features/adicion.feature +17 -0
- data/examples/i18n/es/features/step_definitons/calculador_steps.rb +22 -0
- data/examples/i18n/es/lib/calculador.rb +11 -0
- data/examples/i18n/et/Rakefile +6 -0
- data/examples/i18n/et/features/liitmine.feature +17 -0
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +26 -0
- data/examples/i18n/et/lib/kalkulaator.rb +10 -0
- data/examples/i18n/fr/Rakefile +6 -0
- data/examples/i18n/fr/features/addition.feature +13 -0
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +22 -0
- data/examples/i18n/fr/lib/calculatrice.rb +10 -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 +31 -0
- data/examples/i18n/id/lib/calculator.rb +14 -0
- data/examples/i18n/it/Rakefile +6 -0
- data/examples/i18n/it/features/somma.feature +10 -0
- data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +22 -0
- data/examples/i18n/it/lib/calcolatrice.rb +11 -0
- data/examples/i18n/ja/README.txt +5 -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 +30 -0
- data/examples/i18n/ja/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 +31 -0
- data/examples/i18n/lt/lib/calculator.rb +14 -0
- data/examples/i18n/no/Rakefile +6 -0
- data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +22 -0
- data/examples/i18n/no/features/summering.feature +17 -0
- data/examples/i18n/no/lib/kalkulator.rb +11 -0
- data/examples/i18n/pt/Rakefile +6 -0
- data/examples/i18n/pt/features/adicao.feature +10 -0
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +22 -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 +22 -0
- data/examples/i18n/ro/features/suma.feature +10 -0
- data/examples/i18n/ro/lib/calculator.rb +11 -0
- data/examples/i18n/se/Rakefile +6 -0
- data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +22 -0
- data/examples/i18n/se/features/summering.feature +17 -0
- data/examples/i18n/se/lib/kalkulator.rb +11 -0
- data/examples/i18n/zh-CN/Rakefile +6 -0
- data/examples/i18n/zh-CN/features/addition.feature +17 -0
- data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
- data/examples/java/README.textile +22 -0
- data/examples/java/Rakefile +12 -0
- data/examples/java/features/hello.feature +11 -0
- data/examples/java/features/step_definitons/hello_steps.rb +25 -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/selenium/Rakefile +6 -0
- data/examples/selenium/features/search.feature +9 -0
- data/examples/selenium/features/step_definitons/stories_steps.rb +41 -0
- data/examples/test_unit/Rakefile +6 -0
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +26 -0
- data/examples/test_unit/features/test_unit.feature +9 -0
- data/examples/tickets/Rakefile +11 -0
- data/examples/tickets/cucumber.yml +2 -0
- data/examples/tickets/features/step_definitons/tickets_steps.rb +32 -0
- data/examples/tickets/features/tickets.feature +24 -0
- data/examples/watir/Rakefile +6 -0
- data/examples/watir/features/search.feature +9 -0
- data/examples/watir/features/step_definitons/stories_steps.rb +51 -0
- data/features/see_features.feature +8 -0
- data/features/steps/features_steps.rb +9 -0
- data/gem_tasks/deployment.rake +34 -0
- data/gem_tasks/environment.rake +7 -0
- data/gem_tasks/features.rake +6 -0
- data/gem_tasks/fix_cr_lf.rake +10 -0
- data/gem_tasks/flog.rake +4 -0
- data/gem_tasks/gemspec.rake +6 -0
- data/gem_tasks/rspec.rake +35 -0
- data/gem_tasks/treetop.rake +41 -0
- data/lib/autotest/cucumber.rb +6 -0
- data/lib/autotest/cucumber_mixin.rb +109 -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/broadcaster.rb +20 -0
- data/lib/cucumber/cli.rb +303 -0
- data/lib/cucumber/core_ext/proc.rb +69 -0
- data/lib/cucumber/core_ext/string.rb +28 -0
- data/lib/cucumber/executor.rb +190 -0
- data/lib/cucumber/formatters/ansicolor.rb +109 -0
- data/lib/cucumber/formatters/autotest_formatter.rb +23 -0
- data/lib/cucumber/formatters/cucumber.css +132 -0
- data/lib/cucumber/formatters/cucumber.js +11 -0
- data/lib/cucumber/formatters/html_formatter.rb +128 -0
- data/lib/cucumber/formatters/jquery.js +32 -0
- data/lib/cucumber/formatters/pretty_formatter.rb +234 -0
- data/lib/cucumber/formatters/profile_formatter.rb +92 -0
- data/lib/cucumber/formatters/progress_formatter.rb +58 -0
- data/lib/cucumber/formatters.rb +1 -0
- data/lib/cucumber/languages.yml +258 -0
- data/lib/cucumber/model/table.rb +28 -0
- data/lib/cucumber/model.rb +1 -0
- data/lib/cucumber/platform.rb +12 -0
- data/lib/cucumber/rails/rspec.rb +12 -0
- data/lib/cucumber/rails/world.rb +73 -0
- data/lib/cucumber/rake/task.rb +101 -0
- data/lib/cucumber/step_methods.rb +49 -0
- data/lib/cucumber/step_mother.rb +95 -0
- data/lib/cucumber/tree/feature.rb +63 -0
- data/lib/cucumber/tree/features.rb +21 -0
- data/lib/cucumber/tree/given_scenario.rb +13 -0
- data/lib/cucumber/tree/scenario.rb +174 -0
- data/lib/cucumber/tree/step.rb +134 -0
- data/lib/cucumber/tree/table.rb +26 -0
- data/lib/cucumber/tree/top_down_visitor.rb +23 -0
- data/lib/cucumber/tree.rb +18 -0
- data/lib/cucumber/treetop_parser/feature.treetop.erb +206 -0
- data/lib/cucumber/treetop_parser/feature_ar.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_cy.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_da.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_de.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_en-tx.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_en.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_es.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_et.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_fr.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_id.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_it.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_ja.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_lt.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_nl.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_no.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_parser.rb +34 -0
- data/lib/cucumber/treetop_parser/feature_pl.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_pt.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_ro.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_ro2.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_ru.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_se.rb +1591 -0
- data/lib/cucumber/treetop_parser/feature_zh-CN.rb +1591 -0
- data/lib/cucumber/version.rb +9 -0
- data/lib/cucumber.rb +38 -0
- data/rails_generators/cucumber/USAGE +11 -0
- data/rails_generators/cucumber/cucumber_generator.rb +30 -0
- data/rails_generators/cucumber/templates/cucumber +7 -0
- data/rails_generators/cucumber/templates/cucumber.rake +7 -0
- data/rails_generators/cucumber/templates/env.rb +8 -0
- data/rails_generators/cucumber/templates/webrat_steps.rb +95 -0
- data/rails_generators/feature/USAGE +12 -0
- data/rails_generators/feature/feature_generator.rb +16 -0
- data/rails_generators/feature/templates/feature.erb +28 -0
- data/rails_generators/feature/templates/steps.erb +22 -0
- data/script/console +10 -0
- data/script/console.cmd +1 -0
- data/script/destroy +14 -0
- data/script/destroy.cmd +1 -0
- data/script/generate +14 -0
- data/script/generate.cmd +1 -0
- data/script/txt2html +74 -0
- data/script/txt2html.cmd +1 -0
- data/setup.rb +1585 -0
- data/spec/cucumber/broadcaster_spec.rb +27 -0
- data/spec/cucumber/cli_spec.rb +412 -0
- data/spec/cucumber/core_ext/proc_spec.rb +45 -0
- data/spec/cucumber/core_ext/string_spec.rb +34 -0
- data/spec/cucumber/executor_spec.rb +298 -0
- data/spec/cucumber/formatters/ansicolor_spec.rb +35 -0
- data/spec/cucumber/formatters/autotest_formatter_spec.rb +26 -0
- data/spec/cucumber/formatters/features.html +269 -0
- data/spec/cucumber/formatters/html_formatter_spec.rb +74 -0
- data/spec/cucumber/formatters/pretty_formatter_spec.rb +204 -0
- data/spec/cucumber/formatters/profile_formatter_spec.rb +192 -0
- data/spec/cucumber/formatters/progress_formatter_spec.rb +65 -0
- data/spec/cucumber/model/table_spec.rb +20 -0
- data/spec/cucumber/rails/stubs/mini_rails.rb +17 -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_mother_spec.rb +74 -0
- data/spec/cucumber/tree/feature_spec.rb +43 -0
- data/spec/cucumber/tree/row_scenario_spec.rb +55 -0
- data/spec/cucumber/tree/scenario_spec.rb +76 -0
- data/spec/cucumber/tree/step_spec.rb +50 -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/feature_parser_spec.rb +98 -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/multiline_steps.feature +17 -0
- data/spec/cucumber/treetop_parser/multiple_tables.feature +29 -0
- data/spec/cucumber/treetop_parser/spaces.feature +10 -0
- data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
- data/spec/cucumber/treetop_parser/with_comments.feature +10 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +20 -0
- metadata +335 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
module Cucumber
|
|
4
|
+
module Tree
|
|
5
|
+
describe RowScenario do
|
|
6
|
+
|
|
7
|
+
def mock_scenario(stubs = {})
|
|
8
|
+
mock('scenario', {:update_table_column_widths => nil, :steps => []}.merge(stubs))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "pending?" do
|
|
12
|
+
before :each do
|
|
13
|
+
@scenario = Scenario.new(nil, '', 1)
|
|
14
|
+
@row_scenario = RowScenario.new(mock('feature'), @scenario, [], 1)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should return true if the template scenario has no steps" do
|
|
18
|
+
@row_scenario.should be_pending
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should return false if the template scenario has no steps" do
|
|
22
|
+
@scenario.create_step('Given', 'a long step', 1)
|
|
23
|
+
@row_scenario.should_not be_pending
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "generating row steps" do
|
|
28
|
+
|
|
29
|
+
it "should cache unbound steps" do
|
|
30
|
+
row_scenario = RowScenario.new(mock('feature'), mock_scenario, [], 1)
|
|
31
|
+
|
|
32
|
+
row_scenario.steps.should equal(row_scenario.steps)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should cache bound steps" do
|
|
36
|
+
mock_step = mock('step', :arity => 1)
|
|
37
|
+
row_scenario = RowScenario.new(mock('feature'), mock_scenario(:steps => [mock_step]), [], 1)
|
|
38
|
+
|
|
39
|
+
row_scenario.steps.should equal(row_scenario.steps)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should regenerate row steps when scenario template steps have been matched" do
|
|
43
|
+
mock_step = mock('step', :arity => 0)
|
|
44
|
+
row_scenario = RowScenario.new(mock('feature'), mock_scenario(:steps => [mock_step]), [], 1)
|
|
45
|
+
unbound_steps = row_scenario.steps
|
|
46
|
+
mock_step.stub!(:arity => 1)
|
|
47
|
+
|
|
48
|
+
unbound_steps.should_not equal(row_scenario.steps)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
module Cucumber
|
|
4
|
+
module Tree
|
|
5
|
+
describe Scenario do
|
|
6
|
+
xit "should reuse steps in GivenScenario" do
|
|
7
|
+
given_scenario = GivenScenario.new(scenario_2, "First", 99)
|
|
8
|
+
|
|
9
|
+
scenario_2.create_step(given_scenario)
|
|
10
|
+
scenario_2.create_step(step_a)
|
|
11
|
+
scenario_2.steps.should == [step_1, step_2, step_a]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should have padding_length 2 when alone" do
|
|
15
|
+
scenario = Scenario.new(nil, 'test', 1)
|
|
16
|
+
scenario.padding_length.should == 2
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should include indent when padding to step" do
|
|
20
|
+
scenario = Scenario.new(nil, '', 1)
|
|
21
|
+
scenario.create_step('Given', 'a long step', 1)
|
|
22
|
+
|
|
23
|
+
#Scenario: *********
|
|
24
|
+
# Given a long step
|
|
25
|
+
scenario.padding_length.should == 9 + Scenario::INDENT
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should ignore step padding if scenario is longer than all steps" do
|
|
29
|
+
scenario = Scenario.new(nil, 'Very long scenario and then some', 1)
|
|
30
|
+
scenario.create_step('Given', 'test', 1)
|
|
31
|
+
|
|
32
|
+
scenario.padding_length.should == 2
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "utf-8 strings" do
|
|
36
|
+
describe "when calculating padding" do
|
|
37
|
+
|
|
38
|
+
it "should take into consideration utf-8 scenario names" do
|
|
39
|
+
scenario = Scenario.new(nil, 'こんばんは', 1)
|
|
40
|
+
scenario.create_step('Given', 'a long step', 1)
|
|
41
|
+
|
|
42
|
+
#Scenario: こんばんは****
|
|
43
|
+
# Given a long step
|
|
44
|
+
scenario.padding_length.should == 4 + Scenario::INDENT
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should take into consideration a utf-8 keyword for 'scenario'" do
|
|
48
|
+
Cucumber.language.stub!(:[]).with('scenario').and_return("シナリオ")
|
|
49
|
+
scenario = Scenario.new(nil, '', 1)
|
|
50
|
+
scenario.create_step('Given', 'step', 1)
|
|
51
|
+
|
|
52
|
+
#シナリオ: ******
|
|
53
|
+
# Given step
|
|
54
|
+
scenario.padding_length.should == 6 + Scenario::INDENT
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "pending?" do
|
|
61
|
+
before :each do
|
|
62
|
+
@scenario = Scenario.new(nil, '', 1)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should return true if there aren't any steps" do
|
|
66
|
+
@scenario.should be_pending
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should return false if there are steps" do
|
|
70
|
+
@scenario.create_step('Given', 'a long step', 1)
|
|
71
|
+
@scenario.should_not be_pending
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
module Cucumber
|
|
4
|
+
module Tree
|
|
5
|
+
describe Step do
|
|
6
|
+
it "should have padding_length 2 when alone" do
|
|
7
|
+
scenario = Scenario.new(nil, nil, 1)
|
|
8
|
+
step = scenario.create_step('Given', '666666', 98)
|
|
9
|
+
step.padding_length.should == 2
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should have padding_length 5 when 3 shorter" do
|
|
13
|
+
scenario = Scenario.new(nil, nil, 1)
|
|
14
|
+
long = scenario.create_step('Given', '999999999', 80)
|
|
15
|
+
step = scenario.create_step('Given', '666666', 98)
|
|
16
|
+
step.padding_length.should == 5
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should remove indent from padding_length if padding to scenario" do
|
|
20
|
+
scenario = Scenario.new(nil, '9', 1)
|
|
21
|
+
step = scenario.create_step('Given', '9', 80)
|
|
22
|
+
|
|
23
|
+
#Scenario: 9 #
|
|
24
|
+
# Given 9****
|
|
25
|
+
step.padding_length.should == 4
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should default step arity to 0" do
|
|
29
|
+
scenario = Scenario.new(nil, '9', 1)
|
|
30
|
+
step = scenario.create_step('Given', '9', 80)
|
|
31
|
+
|
|
32
|
+
step.arity.should == 0
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "utf-8 strings" do
|
|
36
|
+
|
|
37
|
+
it "should have padding_length 6 when 4 shorter" do
|
|
38
|
+
scenario = Scenario.new(nil, nil, 1)
|
|
39
|
+
long = scenario.create_step('Given', '999999999', 2)
|
|
40
|
+
step = scenario.create_step('Given', "こんばんは", 3)
|
|
41
|
+
|
|
42
|
+
step.padding_length.should == 6
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
module Cucumber
|
|
4
|
+
module TreetopParser
|
|
5
|
+
describe FeatureParser do
|
|
6
|
+
it "should parse features with weird spaces" do
|
|
7
|
+
p = FeatureParser.new
|
|
8
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/spaces.feature')
|
|
9
|
+
f.header.should == "Some title"
|
|
10
|
+
f.should have(2).scenarios
|
|
11
|
+
|
|
12
|
+
first = f.scenarios[0]
|
|
13
|
+
first.name.should == "first"
|
|
14
|
+
first.should have(1).steps
|
|
15
|
+
first.steps[0].name.should == "a"
|
|
16
|
+
|
|
17
|
+
second = f.scenarios[1]
|
|
18
|
+
second.name.should == "second"
|
|
19
|
+
second.should have(1).steps
|
|
20
|
+
second.steps[0].name.should == "b"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should parse GivenScenario" do
|
|
24
|
+
p = FeatureParser.new
|
|
25
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/given_scenario.feature')
|
|
26
|
+
|
|
27
|
+
f.header.should == "Some title"
|
|
28
|
+
f.should have(2).scenarios
|
|
29
|
+
|
|
30
|
+
first = f.scenarios[0]
|
|
31
|
+
first.should have(2).steps
|
|
32
|
+
|
|
33
|
+
second = f.scenarios[1]
|
|
34
|
+
second.should have(3).steps
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should allow spaces between FIT values" do
|
|
38
|
+
p = FeatureParser.new
|
|
39
|
+
Cucumber::Tree::RowScenario.should_receive(:new).with(anything, anything, ['I can have spaces'], anything)
|
|
40
|
+
|
|
41
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/fit_scenario.feature')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should allow comments in feature files" do
|
|
45
|
+
p = FeatureParser.new
|
|
46
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/with_comments.feature')
|
|
47
|
+
f.scenarios[0].should have(2).steps
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should skip comments in feature header" do
|
|
51
|
+
p = FeatureParser.new
|
|
52
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/with_comments.feature')
|
|
53
|
+
f.header.should == "Some header"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should skip comments in scenario header" do
|
|
57
|
+
p = FeatureParser.new
|
|
58
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/with_comments.feature')
|
|
59
|
+
f.scenarios[0].name.should == "Some scenario"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should allow empty scenarios" do
|
|
63
|
+
p = FeatureParser.new
|
|
64
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/empty_scenario.feature')
|
|
65
|
+
f.scenarios[0].should have(1).steps
|
|
66
|
+
f.scenarios[1].should have(0).steps
|
|
67
|
+
f.scenarios[2].should have(1).steps
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should allow multiple tables" do
|
|
71
|
+
p = FeatureParser.new
|
|
72
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/multiple_tables.feature')
|
|
73
|
+
f.should have(6).scenarios
|
|
74
|
+
f.scenarios[0].should have(5).steps
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "should allow empty features" do
|
|
78
|
+
p = FeatureParser.new
|
|
79
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/empty_feature.feature')
|
|
80
|
+
f.should have(0).scenarios
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "should parse features with dos line endings" do
|
|
84
|
+
p = FeatureParser.new
|
|
85
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/test_dos.feature')
|
|
86
|
+
f.should have(5).scenarios
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should parse multiline steps" do
|
|
90
|
+
p = FeatureParser.new
|
|
91
|
+
f = p.parse_feature(File.dirname(__FILE__) + '/multiline_steps.feature')
|
|
92
|
+
f.should have(1).scenarios
|
|
93
|
+
step = f.scenarios[0].steps[3]
|
|
94
|
+
step.extra_args[0].should == "A string\n that \"indents\"\nand spans\nseveral lines\n"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Feature: Multiline steps should work
|
|
2
|
+
|
|
3
|
+
Scenario: Reading a table
|
|
4
|
+
Given the following table
|
|
5
|
+
| where | why |
|
|
6
|
+
| Oslo | born |
|
|
7
|
+
| London| working |
|
|
8
|
+
Then I should be working in London
|
|
9
|
+
And I should be born in Oslo
|
|
10
|
+
And I should be able to expect
|
|
11
|
+
"""
|
|
12
|
+
A string
|
|
13
|
+
that "indents"
|
|
14
|
+
and spans
|
|
15
|
+
several lines
|
|
16
|
+
|
|
17
|
+
"""
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Feature: Addition
|
|
2
|
+
In order to avoid silly mistakes
|
|
3
|
+
As a math idiot
|
|
4
|
+
I want to be told the sum of two numbers
|
|
5
|
+
|
|
6
|
+
Scenario: Add two numbers
|
|
7
|
+
Given I have entered 50 into the calculator
|
|
8
|
+
And I have entered 70 into the calculator
|
|
9
|
+
When I press add
|
|
10
|
+
Then the result should be 120 on the screen
|
|
11
|
+
And the result class should be Fixnum
|
|
12
|
+
|
|
13
|
+
More Examples:
|
|
14
|
+
| input_1 | input_2 | button | output | class |
|
|
15
|
+
| 20 | 30 | add | 50 | Fixnum |
|
|
16
|
+
| 2 | 5 | add | 7 | Fixnum |
|
|
17
|
+
| 0 | 40 | add | 40 | Fixnum |
|
|
18
|
+
|
|
19
|
+
Scenario: Add three numbers
|
|
20
|
+
Given I have entered 25 into the calculator
|
|
21
|
+
And I have entered 12 into the calculator
|
|
22
|
+
And I have entered 13 into the calculator
|
|
23
|
+
When I press add
|
|
24
|
+
Then the result should be 50 on the screen
|
|
25
|
+
And the result class should be Fixnum
|
|
26
|
+
|
|
27
|
+
More Examples:
|
|
28
|
+
| input_1 | input_2 | input_3 | button | output | class |
|
|
29
|
+
| 1 | 2 | 3 | add | 6 | Fixnum |
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Feature: Search
|
|
2
|
+
In order to learn cucumber
|
|
3
|
+
As an engineer
|
|
4
|
+
I want to run some simple tests
|
|
5
|
+
|
|
6
|
+
Scenario: 1) Reverse a String
|
|
7
|
+
Given a string "abc"
|
|
8
|
+
When the string is reversed
|
|
9
|
+
Then the string should be "cba"
|
|
10
|
+
|
|
11
|
+
More Examples:
|
|
12
|
+
|input |output|
|
|
13
|
+
|a |a |
|
|
14
|
+
|ab |ba |
|
|
15
|
+
|
|
16
|
+
Scenario: 2) Upcase a String
|
|
17
|
+
Given a string "abc"
|
|
18
|
+
When the string is upcased
|
|
19
|
+
Then the string should be "ABC"
|
|
20
|
+
|
|
21
|
+
Scenario: 3) Combining 2 Methods
|
|
22
|
+
Given a string "abc"
|
|
23
|
+
When the string is upcased
|
|
24
|
+
And the string is reversed
|
|
25
|
+
Then the string should be "CBA"
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
gem 'rspec'
|
|
3
|
+
require 'spec'
|
|
4
|
+
|
|
5
|
+
$KCODE='u'
|
|
6
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
|
7
|
+
require 'cucumber'
|
|
8
|
+
require 'cucumber/treetop_parser/feature_en'
|
|
9
|
+
Cucumber.load_language('en')
|
|
10
|
+
|
|
11
|
+
::Term::ANSIColor.coloring = false
|
|
12
|
+
|
|
13
|
+
# Open up the tree classes a little for easier inspection.
|
|
14
|
+
module Cucumber
|
|
15
|
+
module Tree
|
|
16
|
+
class Feature
|
|
17
|
+
attr_reader :header, :scenarios
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|