turnip 0.2.0 → 0.3.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/.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:
|