turnip 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/.travis.yml +5 -0
- data/README.md +196 -44
- data/Rakefile +8 -0
- data/examples/alignment_steps.rb +7 -0
- data/examples/autoload_steps.feature +5 -0
- data/examples/autoload_steps.rb +5 -0
- data/examples/dragon_steps.rb +17 -0
- data/examples/evil_steps.rb +7 -0
- data/examples/knight_steps.rb +29 -0
- data/examples/more_steps.rb +7 -0
- data/examples/neutral_steps.rb +7 -0
- data/examples/red_dragon_steps.rb +18 -0
- data/examples/step_calling.feature +14 -0
- data/examples/step_calling_steps.rb +23 -0
- data/examples/steps.rb +0 -22
- data/examples/steps_for_super.feature +16 -0
- data/lib/turnip.rb +12 -12
- data/lib/turnip/builder.rb +20 -4
- data/lib/turnip/config.rb +18 -0
- data/lib/turnip/dsl.rb +19 -13
- data/lib/turnip/feature_file.rb +20 -0
- data/lib/turnip/loader.rb +6 -3
- data/lib/turnip/placeholder.rb +1 -1
- data/lib/turnip/runner_dsl.rb +9 -0
- data/lib/turnip/scenario_context.rb +41 -0
- data/lib/turnip/scenario_runner.rb +35 -0
- data/lib/turnip/step_definition.rb +14 -30
- data/lib/turnip/step_loader.rb +27 -0
- data/lib/turnip/step_module.rb +89 -0
- data/lib/turnip/table.rb +12 -0
- data/lib/turnip/version.rb +1 -1
- data/spec/builder_spec.rb +41 -2
- data/spec/dsl_spec.rb +22 -34
- data/spec/feature_file_spec.rb +18 -0
- data/spec/integration_spec.rb +1 -1
- data/spec/runner_dsl_spec.rb +23 -0
- data/spec/scenario_context_spec.rb +51 -0
- data/spec/scenario_runner_spec.rb +79 -0
- data/spec/spec_helper.rb +1 -3
- data/spec/step_definition_spec.rb +22 -34
- data/spec/step_loader_spec.rb +29 -0
- data/spec/step_module_spec.rb +106 -0
- data/spec/table_spec.rb +8 -1
- data/turnip.gemspec +2 -1
- metadata +51 -7
data/spec/spec_helper.rb
CHANGED
@@ -1,63 +1,46 @@
|
|
1
1
|
describe Turnip::StepDefinition do
|
2
|
-
|
3
|
-
Turnip::StepDefinition.all.clear
|
4
|
-
end
|
5
|
-
|
6
|
-
describe ".add" do
|
7
|
-
it "adds a step definition to the list of definitions" do
|
8
|
-
Turnip::StepDefinition.add "this is a test"
|
9
|
-
Turnip::StepDefinition.all.first.expression.should eq("this is a test")
|
10
|
-
end
|
11
|
-
end
|
2
|
+
let(:all_steps) { [] }
|
12
3
|
|
13
4
|
describe ".find" do
|
14
5
|
it "returns a step definition that matches the description" do
|
15
|
-
Turnip::StepDefinition.
|
16
|
-
Turnip::StepDefinition.find("there are 23 monsters").expression.should eq("there are :count monsters")
|
17
|
-
end
|
18
|
-
|
19
|
-
it "respects the for option" do
|
20
|
-
Turnip::StepDefinition.add "alignment", :for => [:evil]
|
21
|
-
Turnip::StepDefinition.add "alignment", :for => [:good]
|
22
|
-
Turnip::StepDefinition.find("alignment", :evil => true, :bad => true).options[:for].should == [:evil]
|
6
|
+
all_steps << Turnip::StepDefinition.new("there are :count monsters")
|
7
|
+
Turnip::StepDefinition.find(all_steps, "there are 23 monsters").expression.should eq("there are :count monsters")
|
23
8
|
end
|
24
9
|
|
25
10
|
it "raises an error if the match is ambiguous" do
|
26
|
-
Turnip::StepDefinition.
|
27
|
-
Turnip::StepDefinition.
|
28
|
-
expect { Turnip::StepDefinition.find("there are 23 monsters") }.to raise_error(Turnip::StepDefinition::Ambiguous)
|
11
|
+
all_steps << Turnip::StepDefinition.new("there are :count monsters")
|
12
|
+
all_steps << Turnip::StepDefinition.new("there are 23 monsters")
|
13
|
+
expect { Turnip::StepDefinition.find(all_steps, "there are 23 monsters") }.to raise_error(Turnip::StepDefinition::Ambiguous)
|
29
14
|
end
|
30
15
|
|
31
16
|
it "raises an error if there is no match" do
|
32
|
-
expect { Turnip::StepDefinition.find("there are 23 monsters") }.to raise_error(Turnip::StepDefinition::Pending)
|
17
|
+
expect { Turnip::StepDefinition.find(all_steps, "there are 23 monsters") }.to raise_error(Turnip::StepDefinition::Pending)
|
33
18
|
end
|
34
19
|
end
|
35
20
|
|
36
21
|
describe ".execute" do
|
22
|
+
let(:context) { stub }
|
23
|
+
|
37
24
|
it "executes a step in the given context" do
|
38
|
-
|
39
|
-
Turnip::StepDefinition.
|
40
|
-
Turnip::StepDefinition.execute(context, stub(:description => "there are 23 monsters", :extra_arg => nil))
|
25
|
+
all_steps << Turnip::StepDefinition.new("there are :count monsters") { @testing = 123 }
|
26
|
+
Turnip::StepDefinition.execute(context, all_steps, stub(:description => "there are 23 monsters", :extra_arg => nil))
|
41
27
|
context.instance_variable_get(:@testing).should == 123
|
42
28
|
end
|
43
29
|
|
44
30
|
it "tells the context that the step is pending" do
|
45
|
-
context = stub(:example => stub(:metadata => {}))
|
46
31
|
context.should_receive(:pending).with("the step 'there are 23 monsters' is not implemented")
|
47
|
-
Turnip::StepDefinition.execute(context, stub(:description => "there are 23 monsters", :extra_arg => nil))
|
32
|
+
Turnip::StepDefinition.execute(context, all_steps, stub(:description => "there are 23 monsters", :extra_arg => nil))
|
48
33
|
end
|
49
34
|
|
50
35
|
it "sends along arguments" do
|
51
|
-
|
52
|
-
Turnip::StepDefinition.
|
53
|
-
Turnip::StepDefinition.execute(context, stub(:description => "there are 23 monsters", :extra_arg => nil))
|
36
|
+
all_steps << Turnip::StepDefinition.new("there are :count monsters") { |count| @testing = count.to_i }
|
37
|
+
Turnip::StepDefinition.execute(context, all_steps, stub(:description => "there are 23 monsters", :extra_arg => nil))
|
54
38
|
context.instance_variable_get(:@testing).should == 23
|
55
39
|
end
|
56
40
|
|
57
41
|
it "sends along extra arguments" do
|
58
|
-
|
59
|
-
Turnip::StepDefinition.
|
60
|
-
Turnip::StepDefinition.execute(context, stub(:description => "there are 23 monsters", :extra_arg => 'foo'))
|
42
|
+
all_steps << Turnip::StepDefinition.new("there are :count monsters") { |count, extra| @testing = extra }
|
43
|
+
Turnip::StepDefinition.execute(context, all_steps, stub(:description => "there are 23 monsters", :extra_arg => 'foo'))
|
61
44
|
context.instance_variable_get(:@testing).should == 'foo'
|
62
45
|
end
|
63
46
|
end
|
@@ -77,6 +60,12 @@ describe Turnip::StepDefinition do
|
|
77
60
|
step.should match("there are 324 monsters")
|
78
61
|
step.should_not match("there are no monsters")
|
79
62
|
end
|
63
|
+
|
64
|
+
it "matches quoted placeholders" do
|
65
|
+
step = Turnip::StepDefinition.new("there is a monster named :name") {}
|
66
|
+
step.should match("there is a monster named 'Scary'")
|
67
|
+
step.should match('there is a monster named "Hairy"')
|
68
|
+
end
|
80
69
|
|
81
70
|
it "matches alternative words" do
|
82
71
|
step = Turnip::StepDefinition.new("there is/are monsters") {}
|
@@ -115,4 +104,3 @@ describe Turnip::StepDefinition do
|
|
115
104
|
end
|
116
105
|
end
|
117
106
|
end
|
118
|
-
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'turnip/step_loader'
|
2
|
+
|
3
|
+
describe Turnip::StepLoader do
|
4
|
+
describe '.load_steps' do
|
5
|
+
context 'when the steps have not been loaded' do
|
6
|
+
before { Turnip::StepLoader.steps_loaded = false }
|
7
|
+
|
8
|
+
it 'loads all the steps' do
|
9
|
+
Turnip::StepLoader.should_receive :load_step_files
|
10
|
+
Turnip::StepLoader.load_steps
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'marks the steps as loaded' do
|
14
|
+
Turnip::StepLoader.stub :load_step_files
|
15
|
+
Turnip::StepLoader.load_steps
|
16
|
+
Turnip::StepLoader.should be_steps_loaded
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when the steps have been loaded' do
|
21
|
+
before { Turnip::StepLoader.steps_loaded = true }
|
22
|
+
|
23
|
+
it 'does not reload all the steps' do
|
24
|
+
Turnip::StepLoader.should_not_receive :load_step_files
|
25
|
+
Turnip::StepLoader.load_steps
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
describe Turnip::StepModule do
|
2
|
+
before(:each) do
|
3
|
+
Turnip::StepModule.clear_module_registry
|
4
|
+
end
|
5
|
+
|
6
|
+
describe '.modules_for' do
|
7
|
+
it 'returns the unique registered modules' do
|
8
|
+
Turnip::StepModule.steps_for(:first) {}
|
9
|
+
Turnip::StepModule.steps_for(:second) {}
|
10
|
+
Turnip::StepModule.modules_for(:first, :second).size.should eq(2)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'returns the unique registered modules with use_steps' do
|
14
|
+
Turnip::StepModule.steps_for(:first) {}
|
15
|
+
Turnip::StepModule.steps_for(:second) { use_steps :first }
|
16
|
+
Turnip::StepModule.steps_for(:third) { use_steps :first, :second }
|
17
|
+
Turnip::StepModule.modules_for(:third).size.should eq(3)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'ignores a circular step dependency' do
|
21
|
+
Turnip::StepModule.steps_for(:first) { use_steps :second }
|
22
|
+
Turnip::StepModule.steps_for(:second) { use_steps :first }
|
23
|
+
expect do
|
24
|
+
Turnip::StepModule.modules_for(:second)
|
25
|
+
end.should_not raise_error
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'orders the step modules from use_steps before the using step module' do
|
29
|
+
Turnip::StepModule.steps_for(:first) {}
|
30
|
+
Turnip::StepModule.steps_for(:second) { use_steps :first }
|
31
|
+
Turnip::StepModule.modules_for(:second).first.should == Turnip::StepModule.module_registry[:first].first.step_module
|
32
|
+
Turnip::StepModule.modules_for(:second).last.should == Turnip::StepModule.module_registry[:second].first.step_module
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '.steps_for' do
|
37
|
+
it 'registers the given tag' do
|
38
|
+
Turnip::StepModule.steps_for(:first) {}
|
39
|
+
Turnip::StepModule.should be_registered(:first)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'registers an anonymous modle for the given tags' do
|
43
|
+
Turnip::StepModule.steps_for(:first) {}
|
44
|
+
Turnip::StepModule.module_registry[:first].first.step_module.should be_instance_of(Module)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '.step_module' do
|
50
|
+
subject do
|
51
|
+
Turnip::StepModule.step_module do
|
52
|
+
def marker; end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'extends the steps DSL' do
|
57
|
+
subject.should be_kind_of(Turnip::StepModule::DSL)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'creates an anonymous module' do
|
61
|
+
# Check for empty string to allow for rbx
|
62
|
+
subject.name.should satisfy {|name| name.nil? || name.empty? }
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'executes the block in the module' do
|
66
|
+
# Map to sym to allow for rbx
|
67
|
+
subject.instance_methods.map(&:to_sym).should include(:marker)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe Turnip::StepModule::DSL do
|
72
|
+
describe '.step' do
|
73
|
+
it 'registers the step for the module' do
|
74
|
+
mod = Module.new do
|
75
|
+
extend Turnip::StepModule::DSL
|
76
|
+
step('example') { true }
|
77
|
+
end
|
78
|
+
mod.steps.first.expression.should eq('example')
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '.placeholder' do
|
83
|
+
before { Turnip::Placeholder.send(:placeholders).clear }
|
84
|
+
|
85
|
+
it 'registers the placeholder globally' do
|
86
|
+
mod = Module.new do
|
87
|
+
extend Turnip::StepModule::DSL
|
88
|
+
placeholder('example') { true }
|
89
|
+
end
|
90
|
+
Turnip::Placeholder.send(:placeholders).should have_key('example')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '.use_steps' do
|
95
|
+
it "updates the list of used steps" do
|
96
|
+
mod = Module.new do
|
97
|
+
extend Turnip::StepModule::DSL
|
98
|
+
step('example') { true }
|
99
|
+
|
100
|
+
use_steps :other_steps
|
101
|
+
end
|
102
|
+
mod.uses_steps.should include(:other_steps)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
data/spec/table_spec.rb
CHANGED
@@ -30,7 +30,7 @@ describe Turnip::Table do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
describe '#hashes' do
|
33
|
-
it 'returns a list of
|
33
|
+
it 'returns a list of hashes based on the headers' do
|
34
34
|
table = Turnip::Table.new([['foo', 'bar'], ['moo', '55'], ['quox', '42']])
|
35
35
|
table.hashes.should == [
|
36
36
|
{'foo' => 'moo', 'bar' => '55'},
|
@@ -38,6 +38,13 @@ describe Turnip::Table do
|
|
38
38
|
]
|
39
39
|
end
|
40
40
|
end
|
41
|
+
|
42
|
+
describe '#rows_hash' do
|
43
|
+
it 'converts this table into a Hash where the first column is used as keys and the second column is used as values' do
|
44
|
+
table = Turnip::Table.new([['foo', 'moo'], ['bar', '55']])
|
45
|
+
table.rows_hash.should == {'foo' => 'moo', 'bar' => '55'}
|
46
|
+
end
|
47
|
+
end
|
41
48
|
|
42
49
|
describe '#map' do
|
43
50
|
it 'iterates over the raw table' do
|
data/turnip.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turnip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &2160891520 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,18 +21,29 @@ dependencies:
|
|
21
21
|
version: '2.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2160891520
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: gherkin
|
27
|
-
requirement: &
|
27
|
+
requirement: &2160890740 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '2.5'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2160890740
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
38
|
+
requirement: &2160890120 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2160890120
|
36
47
|
description: Provides the ability to define steps and run Gherkin files from with
|
37
48
|
RSpec
|
38
49
|
email:
|
@@ -43,36 +54,62 @@ extra_rdoc_files: []
|
|
43
54
|
files:
|
44
55
|
- .gitignore
|
45
56
|
- .rspec
|
57
|
+
- .travis.yml
|
46
58
|
- Gemfile
|
47
59
|
- README.md
|
48
60
|
- Rakefile
|
61
|
+
- examples/alignment_steps.rb
|
49
62
|
- examples/ambiguous.feature
|
63
|
+
- examples/autoload_steps.feature
|
64
|
+
- examples/autoload_steps.rb
|
50
65
|
- examples/backgrounds.feature
|
66
|
+
- examples/dragon_steps.rb
|
67
|
+
- examples/evil_steps.rb
|
51
68
|
- examples/interpolation.feature
|
69
|
+
- examples/knight_steps.rb
|
70
|
+
- examples/more_steps.rb
|
52
71
|
- examples/multiline_string.feature
|
72
|
+
- examples/neutral_steps.rb
|
53
73
|
- examples/pending.feature
|
74
|
+
- examples/red_dragon_steps.rb
|
54
75
|
- examples/scenario_outline.feature
|
55
76
|
- examples/simple_feature.feature
|
77
|
+
- examples/step_calling.feature
|
78
|
+
- examples/step_calling_steps.rb
|
56
79
|
- examples/steps.rb
|
57
80
|
- examples/steps_for.feature
|
81
|
+
- examples/steps_for_super.feature
|
58
82
|
- examples/table.feature
|
59
83
|
- examples/tags.feature
|
60
84
|
- examples/with_comments.feature
|
61
85
|
- lib/turnip.rb
|
62
86
|
- lib/turnip/builder.rb
|
63
87
|
- lib/turnip/capybara.rb
|
88
|
+
- lib/turnip/config.rb
|
64
89
|
- lib/turnip/dsl.rb
|
90
|
+
- lib/turnip/feature_file.rb
|
65
91
|
- lib/turnip/loader.rb
|
66
92
|
- lib/turnip/placeholder.rb
|
93
|
+
- lib/turnip/runner_dsl.rb
|
94
|
+
- lib/turnip/scenario_context.rb
|
95
|
+
- lib/turnip/scenario_runner.rb
|
67
96
|
- lib/turnip/step_definition.rb
|
97
|
+
- lib/turnip/step_loader.rb
|
98
|
+
- lib/turnip/step_module.rb
|
68
99
|
- lib/turnip/table.rb
|
69
100
|
- lib/turnip/version.rb
|
70
101
|
- spec/builder_spec.rb
|
71
102
|
- spec/dsl_spec.rb
|
103
|
+
- spec/feature_file_spec.rb
|
72
104
|
- spec/integration_spec.rb
|
73
105
|
- spec/placeholder_spec.rb
|
106
|
+
- spec/runner_dsl_spec.rb
|
107
|
+
- spec/scenario_context_spec.rb
|
108
|
+
- spec/scenario_runner_spec.rb
|
74
109
|
- spec/spec_helper.rb
|
75
110
|
- spec/step_definition_spec.rb
|
111
|
+
- spec/step_loader_spec.rb
|
112
|
+
- spec/step_module_spec.rb
|
76
113
|
- spec/table_spec.rb
|
77
114
|
- turnip.gemspec
|
78
115
|
homepage: ''
|
@@ -102,8 +139,15 @@ summary: Gherkin extension for RSpec
|
|
102
139
|
test_files:
|
103
140
|
- spec/builder_spec.rb
|
104
141
|
- spec/dsl_spec.rb
|
142
|
+
- spec/feature_file_spec.rb
|
105
143
|
- spec/integration_spec.rb
|
106
144
|
- spec/placeholder_spec.rb
|
145
|
+
- spec/runner_dsl_spec.rb
|
146
|
+
- spec/scenario_context_spec.rb
|
147
|
+
- spec/scenario_runner_spec.rb
|
107
148
|
- spec/spec_helper.rb
|
108
149
|
- spec/step_definition_spec.rb
|
150
|
+
- spec/step_loader_spec.rb
|
151
|
+
- spec/step_module_spec.rb
|
109
152
|
- spec/table_spec.rb
|
153
|
+
has_rdoc:
|