cuke_modeler 1.3.0 → 1.4.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.
- checksums.yaml +5 -5
- data/.travis.yml +16 -0
- data/Gemfile +11 -3
- data/History.md +5 -0
- data/LICENSE.txt +1 -1
- data/Rakefile +8 -1
- data/appveyor.yml +7 -12
- data/cuke_modeler.gemspec +2 -2
- data/lib/cuke_modeler/adapters/gherkin_6_adapter.rb +309 -0
- data/lib/cuke_modeler/parsing.rb +28 -5
- data/lib/cuke_modeler/version.rb +1 -1
- data/testing/cucumber/step_definitions/feature_file_steps.rb +1 -1
- data/testing/cucumber/step_definitions/modeling_steps.rb +2 -2
- data/testing/cucumber/step_definitions/verification_steps.rb +3 -2
- data/testing/file_helper.rb +3 -0
- data/testing/gemfiles/gherkin2.gemfile +7 -0
- data/testing/gemfiles/gherkin3.gemfile +6 -0
- data/testing/gemfiles/gherkin4.gemfile +7 -0
- data/testing/gemfiles/gherkin5.gemfile +6 -0
- data/testing/gemfiles/gherkin6.gemfile +10 -0
- data/testing/rspec/spec/integration/background_integration_spec.rb +80 -72
- data/testing/rspec/spec/integration/cell_integration_spec.rb +28 -20
- data/testing/rspec/spec/integration/comment_integration_spec.rb +11 -3
- data/testing/rspec/spec/integration/directory_integration_spec.rb +2 -2
- data/testing/rspec/spec/integration/doc_string_integration_spec.rb +26 -18
- data/testing/rspec/spec/integration/example_integration_spec.rb +75 -61
- data/testing/rspec/spec/integration/feature_file_integration_spec.rb +30 -20
- data/testing/rspec/spec/integration/feature_integration_spec.rb +106 -98
- data/testing/rspec/spec/integration/gherkin_2_adapter_spec.rb +11 -11
- data/testing/rspec/spec/integration/gherkin_3_adapter_spec.rb +11 -11
- data/testing/rspec/spec/integration/gherkin_4_adapter_spec.rb +12 -12
- data/testing/rspec/spec/integration/gherkin_6_adapter_spec.rb +166 -0
- data/testing/rspec/spec/integration/outline_integration_spec.rb +116 -102
- data/testing/rspec/spec/integration/parsing_integration_spec.rb +16 -4
- data/testing/rspec/spec/integration/row_integration_spec.rb +26 -18
- data/testing/rspec/spec/integration/scenario_integration_spec.rb +82 -74
- data/testing/rspec/spec/integration/step_integration_spec.rb +65 -49
- data/testing/rspec/spec/integration/table_integration_spec.rb +25 -17
- data/testing/rspec/spec/integration/tag_integration_spec.rb +27 -19
- data/testing/rspec/spec/spec_helper.rb +64 -35
- data/todo.txt +3 -1
- metadata +10 -8
- data/testing/cucumber/support/transforms.rb +0 -3
@@ -7,50 +7,50 @@ describe 'Gherkin2Adapter, Integration', :gherkin2 => true do
|
|
7
7
|
let(:adapter) { clazz.new }
|
8
8
|
let(:source_text) { "# feature comment
|
9
9
|
@tag1 @tag2 @tag3
|
10
|
-
#{
|
10
|
+
#{FEATURE_KEYWORD}: A feature with everything it could have
|
11
11
|
|
12
12
|
Including a description
|
13
13
|
and then some.
|
14
14
|
|
15
15
|
# background comment
|
16
|
-
#{
|
16
|
+
#{BACKGROUND_KEYWORD}:
|
17
17
|
|
18
18
|
Background
|
19
19
|
description
|
20
20
|
|
21
|
-
#{
|
21
|
+
#{STEP_KEYWORD} a step
|
22
22
|
# table comment
|
23
23
|
| value1 |
|
24
24
|
# table row comment
|
25
25
|
| value2 |
|
26
|
-
#{
|
26
|
+
#{STEP_KEYWORD} another step
|
27
27
|
|
28
28
|
# scenario comment
|
29
29
|
@scenario_tag
|
30
|
-
#{
|
30
|
+
#{SCENARIO_KEYWORD}:
|
31
31
|
|
32
32
|
Scenario
|
33
33
|
description
|
34
34
|
|
35
|
-
#{
|
36
|
-
#{
|
35
|
+
#{STEP_KEYWORD} a step
|
36
|
+
#{STEP_KEYWORD} another step
|
37
37
|
\"\"\"
|
38
38
|
some text
|
39
39
|
\"\"\"
|
40
40
|
|
41
41
|
# outline comment
|
42
42
|
@outline_tag
|
43
|
-
#{
|
43
|
+
#{OUTLINE_KEYWORD}:
|
44
44
|
|
45
45
|
Outline
|
46
46
|
description
|
47
47
|
|
48
48
|
# step comment
|
49
|
-
#{
|
49
|
+
#{STEP_KEYWORD} a step
|
50
50
|
# table comment
|
51
51
|
| value2 |
|
52
52
|
# step comment
|
53
|
-
#{
|
53
|
+
#{STEP_KEYWORD} another step
|
54
54
|
# doc string comment
|
55
55
|
\"\"\"
|
56
56
|
some text
|
@@ -58,7 +58,7 @@ describe 'Gherkin2Adapter, Integration', :gherkin2 => true do
|
|
58
58
|
|
59
59
|
# example comment
|
60
60
|
@example_tag
|
61
|
-
#{
|
61
|
+
#{EXAMPLE_KEYWORD}:
|
62
62
|
|
63
63
|
Example
|
64
64
|
description
|
@@ -7,50 +7,50 @@ describe 'Gherkin3Adapter, Integration', :gherkin3 => true do
|
|
7
7
|
let(:adapter) { clazz.new }
|
8
8
|
let(:source_text) { "# feature comment
|
9
9
|
@tag1 @tag2 @tag3
|
10
|
-
#{
|
10
|
+
#{FEATURE_KEYWORD}: A feature with everything it could have
|
11
11
|
|
12
12
|
Including a description
|
13
13
|
and then some.
|
14
14
|
|
15
15
|
# background comment
|
16
|
-
#{
|
16
|
+
#{BACKGROUND_KEYWORD}:
|
17
17
|
|
18
18
|
Background
|
19
19
|
description
|
20
20
|
|
21
|
-
#{
|
21
|
+
#{STEP_KEYWORD} a step
|
22
22
|
# table comment
|
23
23
|
| value1 |
|
24
24
|
# table row comment
|
25
25
|
| value2 |
|
26
|
-
#{
|
26
|
+
#{STEP_KEYWORD} another step
|
27
27
|
|
28
28
|
# scenario comment
|
29
29
|
@scenario_tag
|
30
|
-
#{
|
30
|
+
#{SCENARIO_KEYWORD}:
|
31
31
|
|
32
32
|
Scenario
|
33
33
|
description
|
34
34
|
|
35
|
-
#{
|
36
|
-
#{
|
35
|
+
#{STEP_KEYWORD} a step
|
36
|
+
#{STEP_KEYWORD} another step
|
37
37
|
\"\"\"
|
38
38
|
some text
|
39
39
|
\"\"\"
|
40
40
|
|
41
41
|
# outline comment
|
42
42
|
@outline_tag
|
43
|
-
#{
|
43
|
+
#{OUTLINE_KEYWORD}:
|
44
44
|
|
45
45
|
Outline
|
46
46
|
description
|
47
47
|
|
48
48
|
# step comment
|
49
|
-
#{
|
49
|
+
#{STEP_KEYWORD} a step
|
50
50
|
# table comment
|
51
51
|
| value2 |
|
52
52
|
# step comment
|
53
|
-
#{
|
53
|
+
#{STEP_KEYWORD} another step
|
54
54
|
# doc string comment
|
55
55
|
\"\"\"
|
56
56
|
some text
|
@@ -58,7 +58,7 @@ describe 'Gherkin3Adapter, Integration', :gherkin3 => true do
|
|
58
58
|
|
59
59
|
# example comment
|
60
60
|
@example_tag
|
61
|
-
#{
|
61
|
+
#{EXAMPLE_KEYWORD}:
|
62
62
|
|
63
63
|
Example
|
64
64
|
description
|
@@ -1,56 +1,56 @@
|
|
1
1
|
require "#{File.dirname(__FILE__)}/../spec_helper"
|
2
2
|
|
3
3
|
|
4
|
-
describe 'Gherkin4Adapter, Integration', :
|
4
|
+
describe 'Gherkin4Adapter, Integration', :gherkin4_5 => true do
|
5
5
|
|
6
6
|
let(:clazz) { CukeModeler::Gherkin4Adapter }
|
7
7
|
let(:adapter) { clazz.new }
|
8
8
|
let(:source_text) { "# feature comment
|
9
9
|
@tag1 @tag2 @tag3
|
10
|
-
#{
|
10
|
+
#{FEATURE_KEYWORD}: A feature with everything it could have
|
11
11
|
|
12
12
|
Including a description
|
13
13
|
and then some.
|
14
14
|
|
15
15
|
# background comment
|
16
|
-
#{
|
16
|
+
#{BACKGROUND_KEYWORD}:
|
17
17
|
|
18
18
|
Background
|
19
19
|
description
|
20
20
|
|
21
|
-
#{
|
21
|
+
#{STEP_KEYWORD} a step
|
22
22
|
# table comment
|
23
23
|
| value1 |
|
24
24
|
# table row comment
|
25
25
|
| value2 |
|
26
|
-
#{
|
26
|
+
#{STEP_KEYWORD} another step
|
27
27
|
|
28
28
|
# scenario comment
|
29
29
|
@scenario_tag
|
30
|
-
#{
|
30
|
+
#{SCENARIO_KEYWORD}:
|
31
31
|
|
32
32
|
Scenario
|
33
33
|
description
|
34
34
|
|
35
|
-
#{
|
36
|
-
#{
|
35
|
+
#{STEP_KEYWORD} a step
|
36
|
+
#{STEP_KEYWORD} another step
|
37
37
|
\"\"\"
|
38
38
|
some text
|
39
39
|
\"\"\"
|
40
40
|
|
41
41
|
# outline comment
|
42
42
|
@outline_tag
|
43
|
-
#{
|
43
|
+
#{OUTLINE_KEYWORD}:
|
44
44
|
|
45
45
|
Outline
|
46
46
|
description
|
47
47
|
|
48
48
|
# step comment
|
49
|
-
#{
|
49
|
+
#{STEP_KEYWORD} a step
|
50
50
|
# table comment
|
51
51
|
| value2 |
|
52
52
|
# step comment
|
53
|
-
#{
|
53
|
+
#{STEP_KEYWORD} another step
|
54
54
|
# doc string comment
|
55
55
|
\"\"\"
|
56
56
|
some text
|
@@ -58,7 +58,7 @@ describe 'Gherkin4Adapter, Integration', :gherkin4 => true do
|
|
58
58
|
|
59
59
|
# example comment
|
60
60
|
@example_tag
|
61
|
-
#{
|
61
|
+
#{EXAMPLE_KEYWORD}:
|
62
62
|
|
63
63
|
Example
|
64
64
|
description
|
@@ -0,0 +1,166 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../spec_helper"
|
2
|
+
|
3
|
+
|
4
|
+
describe 'Gherkin6Adapter, Integration', :gherkin6 => true do
|
5
|
+
|
6
|
+
let(:clazz) { CukeModeler::Gherkin6Adapter }
|
7
|
+
let(:adapter) { clazz.new }
|
8
|
+
let(:source_text) { "# feature comment
|
9
|
+
@tag1 @tag2 @tag3
|
10
|
+
#{FEATURE_KEYWORD}: A feature with everything it could have
|
11
|
+
|
12
|
+
Including a description
|
13
|
+
and then some.
|
14
|
+
|
15
|
+
# background comment
|
16
|
+
#{BACKGROUND_KEYWORD}:
|
17
|
+
|
18
|
+
Background
|
19
|
+
description
|
20
|
+
|
21
|
+
#{STEP_KEYWORD} a step
|
22
|
+
# table comment
|
23
|
+
| value1 |
|
24
|
+
# table row comment
|
25
|
+
| value2 |
|
26
|
+
#{STEP_KEYWORD} another step
|
27
|
+
|
28
|
+
# scenario comment
|
29
|
+
@scenario_tag
|
30
|
+
#{SCENARIO_KEYWORD}:
|
31
|
+
|
32
|
+
Scenario
|
33
|
+
description
|
34
|
+
|
35
|
+
#{STEP_KEYWORD} a step
|
36
|
+
#{STEP_KEYWORD} another step
|
37
|
+
\"\"\"
|
38
|
+
some text
|
39
|
+
\"\"\"
|
40
|
+
|
41
|
+
# outline comment
|
42
|
+
@outline_tag
|
43
|
+
#{OUTLINE_KEYWORD}:
|
44
|
+
|
45
|
+
Outline
|
46
|
+
description
|
47
|
+
|
48
|
+
# step comment
|
49
|
+
#{STEP_KEYWORD} a step
|
50
|
+
# table comment
|
51
|
+
| value2 |
|
52
|
+
# step comment
|
53
|
+
#{STEP_KEYWORD} another step
|
54
|
+
# doc string comment
|
55
|
+
\"\"\"
|
56
|
+
some text
|
57
|
+
\"\"\"
|
58
|
+
|
59
|
+
# example comment
|
60
|
+
@example_tag
|
61
|
+
#{EXAMPLE_KEYWORD}:
|
62
|
+
|
63
|
+
Example
|
64
|
+
description
|
65
|
+
|
66
|
+
# row comment
|
67
|
+
| param |
|
68
|
+
| value |
|
69
|
+
# final comment" }
|
70
|
+
let(:feature_file_model) { test_file_path = CukeModeler::FileHelper.create_feature_file(:text => source_text, :name => 'adapter_test_file')
|
71
|
+
CukeModeler::FeatureFile.new(test_file_path) }
|
72
|
+
let(:feature_model) { feature_file_model.feature }
|
73
|
+
|
74
|
+
|
75
|
+
it "does not store parsing data for a feature file's children" do
|
76
|
+
model = feature_file_model
|
77
|
+
|
78
|
+
expect(model.parsing_data[:comments]).to be_nil
|
79
|
+
expect(model.parsing_data[:feature]).to be_nil
|
80
|
+
end
|
81
|
+
|
82
|
+
it "does not store parsing data for a feature's children" do
|
83
|
+
model = feature_model
|
84
|
+
|
85
|
+
expect(model.parsing_data[:tags]).to be_nil
|
86
|
+
expect(model.parsing_data[:children]).to be_nil
|
87
|
+
end
|
88
|
+
|
89
|
+
it "does not store parsing data for a background's children" do
|
90
|
+
model = feature_model.background
|
91
|
+
|
92
|
+
expect(model.parsing_data[:background][:steps]).to be_nil
|
93
|
+
end
|
94
|
+
|
95
|
+
it "does not store parsing data for a scenario's children" do
|
96
|
+
model = feature_model.scenarios.first
|
97
|
+
|
98
|
+
expect(model.parsing_data[:scenario][:tags]).to be_nil
|
99
|
+
expect(model.parsing_data[:scenario][:steps]).to be_nil
|
100
|
+
end
|
101
|
+
|
102
|
+
it "does not store parsing data for an outline's children" do
|
103
|
+
model = feature_model.outlines.first
|
104
|
+
|
105
|
+
expect(model.parsing_data[:scenario][:tags]).to be_nil
|
106
|
+
expect(model.parsing_data[:scenario][:steps]).to be_nil
|
107
|
+
expect(model.parsing_data[:scenario][:examples]).to be_nil
|
108
|
+
end
|
109
|
+
|
110
|
+
it "does not store parsing data for an example's children" do
|
111
|
+
model = feature_model.outlines.first.examples.first
|
112
|
+
|
113
|
+
expect(model.parsing_data[:tags]).to be_nil
|
114
|
+
expect(model.parsing_data[:table_header]).to be_nil
|
115
|
+
expect(model.parsing_data[:table_body]).to be_nil
|
116
|
+
end
|
117
|
+
|
118
|
+
it "does not store parsing data for an example row's children" do
|
119
|
+
model = feature_model.outlines.first.examples.first.rows.first
|
120
|
+
|
121
|
+
expect(model.parsing_data[:cells]).to be_nil
|
122
|
+
end
|
123
|
+
|
124
|
+
it "does not store parsing data for a step's children, table" do
|
125
|
+
model = feature_model.outlines.first.steps.first
|
126
|
+
|
127
|
+
expect(model.parsing_data[:data_table]).to be_nil
|
128
|
+
end
|
129
|
+
|
130
|
+
it "does not store parsing data for a step's children, doc string" do
|
131
|
+
model = feature_model.outlines.first.steps.last
|
132
|
+
|
133
|
+
expect(model.parsing_data[:doc_string]).to be_nil
|
134
|
+
end
|
135
|
+
|
136
|
+
it "does not store parsing data for a table's children" do
|
137
|
+
model = feature_model.outlines.first.steps.first.block
|
138
|
+
|
139
|
+
expect(model.parsing_data[:rows]).to be_nil
|
140
|
+
end
|
141
|
+
|
142
|
+
it "does not store parsing data for a table row's children" do
|
143
|
+
model = feature_model.outlines.first.steps.first.block.rows.first
|
144
|
+
|
145
|
+
expect(model.parsing_data[:cells]).to be_nil
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
describe 'stuff that is in no way part of the public API and entirely subject to change' do
|
150
|
+
|
151
|
+
it 'provides a useful explosion message if it encounters an entirely new type of test' do
|
152
|
+
partial_feature_ast = {:type => :Feature, :location => {:line => 1, :column => 1}, :children => [{:some_unknown_type => {}}]}
|
153
|
+
|
154
|
+
expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
155
|
+
end
|
156
|
+
|
157
|
+
# TODO: no longer possible in G6?
|
158
|
+
# it 'provides a useful explosion message if it encounters an entirely new type of step block' do
|
159
|
+
# partial_feature_ast = {:type => :Feature, :location => {:line => 1, :column => 1}, :children => [{:type => :Scenario, :tags => [], :location => {:line => 1, :column => 1}, :steps => [{:type => :Step, :location => {:line => 1, :column => 1}, :argument => {:type => :some_unknown_type, :location => {:line => 1, :column => 1}, :content => ""}}]}]}
|
160
|
+
#
|
161
|
+
# expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
162
|
+
# end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
@@ -14,22 +14,28 @@ describe 'Outline, Integration' do
|
|
14
14
|
|
15
15
|
describe 'unique behavior' do
|
16
16
|
|
17
|
-
it 'can be instantiated with the minimum viable Gherkin', :
|
18
|
-
source = "#{
|
17
|
+
it 'can be instantiated with the minimum viable Gherkin', :gherkin6 => true do
|
18
|
+
source = "#{OUTLINE_KEYWORD}:"
|
19
|
+
|
20
|
+
expect { clazz.new(source) }.to_not raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'can be instantiated with the minimum viable Gherkin', :gherkin4_5 => true do
|
24
|
+
source = "#{OUTLINE_KEYWORD}:"
|
19
25
|
|
20
26
|
expect { clazz.new(source) }.to_not raise_error
|
21
27
|
end
|
22
28
|
|
23
29
|
it 'can be instantiated with the minimum viable Gherkin', :gherkin2 => true do
|
24
|
-
source = "#{
|
30
|
+
source = "#{OUTLINE_KEYWORD}:"
|
25
31
|
|
26
32
|
expect { clazz.new(source) }.to_not raise_error
|
27
33
|
end
|
28
34
|
|
29
35
|
# gherkin 3.x does not accept incomplete outlines
|
30
36
|
it 'can be instantiated with the minimum viable Gherkin', :gherkin3 => true do
|
31
|
-
source = "#{
|
32
|
-
#{
|
37
|
+
source = "#{OUTLINE_KEYWORD}:
|
38
|
+
#{EXAMPLE_KEYWORD}:
|
33
39
|
| param |
|
34
40
|
| value |"
|
35
41
|
|
@@ -57,8 +63,16 @@ describe 'Outline, Integration' do
|
|
57
63
|
end
|
58
64
|
end
|
59
65
|
|
60
|
-
it 'stores the original data generated by the parsing adapter', :
|
61
|
-
outline = clazz.new("@tag\n#{
|
66
|
+
it 'stores the original data generated by the parsing adapter', :gherkin6 => true do
|
67
|
+
outline = clazz.new("@tag\n#{OUTLINE_KEYWORD}: test outline\ndescription\n#{STEP_KEYWORD} a step\n#{EXAMPLE_KEYWORD}:\n|param|\n|value|")
|
68
|
+
data = outline.parsing_data
|
69
|
+
|
70
|
+
expect(data.keys).to match_array([:background, :rule, :scenario])
|
71
|
+
expect(data[:scenario][:name]).to eq('test outline')
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'stores the original data generated by the parsing adapter', :gherkin4_5 => true do
|
75
|
+
outline = clazz.new("@tag\n#{OUTLINE_KEYWORD}: test outline\ndescription\n#{STEP_KEYWORD} a step\n#{EXAMPLE_KEYWORD}:\n|param|\n|value|")
|
62
76
|
data = outline.parsing_data
|
63
77
|
|
64
78
|
expect(data.keys).to match_array([:type, :tags, :location, :keyword, :name, :steps, :examples, :description])
|
@@ -66,7 +80,7 @@ describe 'Outline, Integration' do
|
|
66
80
|
end
|
67
81
|
|
68
82
|
it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
|
69
|
-
outline = clazz.new("@tag\n#{
|
83
|
+
outline = clazz.new("@tag\n#{OUTLINE_KEYWORD}: test outline\ndescription\n#{STEP_KEYWORD} a step\n#{EXAMPLE_KEYWORD}:\n|param|\n|value|")
|
70
84
|
data = outline.parsing_data
|
71
85
|
|
72
86
|
expect(data.keys).to match_array([:type, :tags, :location, :keyword, :name, :steps, :examples, :description])
|
@@ -74,7 +88,7 @@ describe 'Outline, Integration' do
|
|
74
88
|
end
|
75
89
|
|
76
90
|
it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
|
77
|
-
outline = clazz.new("@tag\n#{
|
91
|
+
outline = clazz.new("@tag\n#{OUTLINE_KEYWORD}: test outline\ndescription\n#{STEP_KEYWORD} a step\n#{EXAMPLE_KEYWORD}:\n|param|\n|value|")
|
78
92
|
data = outline.parsing_data
|
79
93
|
|
80
94
|
expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'type', 'examples', 'steps', 'tags'])
|
@@ -82,16 +96,16 @@ describe 'Outline, Integration' do
|
|
82
96
|
end
|
83
97
|
|
84
98
|
it 'provides a descriptive filename when being parsed from stand alone text' do
|
85
|
-
source = "bad outline text \n #{
|
99
|
+
source = "bad outline text \n #{OUTLINE_KEYWORD}:\n #{STEP_KEYWORD} a step\n @foo "
|
86
100
|
|
87
101
|
expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_outline\.feature'/)
|
88
102
|
end
|
89
103
|
|
90
104
|
it 'properly sets its child models' do
|
91
105
|
source = "@a_tag
|
92
|
-
#{
|
93
|
-
#{
|
94
|
-
#{
|
106
|
+
#{OUTLINE_KEYWORD}:
|
107
|
+
#{STEP_KEYWORD} a step
|
108
|
+
#{EXAMPLE_KEYWORD}:
|
95
109
|
| param |
|
96
110
|
| value |"
|
97
111
|
|
@@ -113,11 +127,11 @@ describe 'Outline, Integration' do
|
|
113
127
|
|
114
128
|
|
115
129
|
let(:test_directory) { CukeModeler::FileHelper.create_directory }
|
116
|
-
let(:source_gherkin) { "#{
|
130
|
+
let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
|
117
131
|
|
118
|
-
#{
|
119
|
-
#{
|
120
|
-
#{
|
132
|
+
#{OUTLINE_KEYWORD}: Test test
|
133
|
+
#{STEP_KEYWORD} a step
|
134
|
+
#{EXAMPLE_KEYWORD}: Test example
|
121
135
|
| a param |
|
122
136
|
| a value |"
|
123
137
|
}
|
@@ -157,21 +171,21 @@ describe 'Outline, Integration' do
|
|
157
171
|
|
158
172
|
context 'from source text' do
|
159
173
|
|
160
|
-
let(:source_text) { "#{
|
174
|
+
let(:source_text) { "#{OUTLINE_KEYWORD}:" }
|
161
175
|
let(:outline) { clazz.new(source_text) }
|
162
176
|
|
163
177
|
|
164
178
|
# gherkin 3.x does not accept incomplete outlines
|
165
179
|
it "models the outline's keyword", :gherkin3 => false do
|
166
|
-
expect(outline.keyword).to eq("#{
|
180
|
+
expect(outline.keyword).to eq("#{OUTLINE_KEYWORD}")
|
167
181
|
end
|
168
182
|
|
169
183
|
it "models the outline's source line" do
|
170
|
-
source_text = "#{
|
184
|
+
source_text = "#{FEATURE_KEYWORD}:
|
171
185
|
|
172
|
-
#{
|
173
|
-
#{
|
174
|
-
#{
|
186
|
+
#{OUTLINE_KEYWORD}: foo
|
187
|
+
#{STEP_KEYWORD} step
|
188
|
+
#{EXAMPLE_KEYWORD}:
|
175
189
|
| param |
|
176
190
|
| value |"
|
177
191
|
outline = CukeModeler::Feature.new(source_text).tests.first
|
@@ -183,20 +197,20 @@ describe 'Outline, Integration' do
|
|
183
197
|
context 'a filled outline' do
|
184
198
|
|
185
199
|
let(:source_text) { "@tag1 @tag2 @tag3
|
186
|
-
#{
|
200
|
+
#{OUTLINE_KEYWORD}: Foo
|
187
201
|
Scenario description.
|
188
202
|
|
189
203
|
Some more.
|
190
204
|
Even more.
|
191
205
|
|
192
|
-
#{
|
193
|
-
#{
|
194
|
-
#{
|
206
|
+
#{STEP_KEYWORD} a <setup> step
|
207
|
+
#{STEP_KEYWORD} an action step
|
208
|
+
#{STEP_KEYWORD} a <verification> step
|
195
209
|
|
196
|
-
#{
|
210
|
+
#{EXAMPLE_KEYWORD}: example 1
|
197
211
|
| setup | verification |
|
198
212
|
| x | y |
|
199
|
-
#{
|
213
|
+
#{EXAMPLE_KEYWORD}: example 2
|
200
214
|
| setup | verification |
|
201
215
|
| a | b |" }
|
202
216
|
let(:outline) { clazz.new(source_text) }
|
@@ -239,7 +253,7 @@ describe 'Outline, Integration' do
|
|
239
253
|
# gherkin 3.x does not accept incomplete outlines
|
240
254
|
context 'an empty outline', :gherkin3 => false do
|
241
255
|
|
242
|
-
let(:source_text) { "#{
|
256
|
+
let(:source_text) { "#{OUTLINE_KEYWORD}:" }
|
243
257
|
let(:outline) { clazz.new(source_text) }
|
244
258
|
|
245
259
|
|
@@ -270,7 +284,7 @@ describe 'Outline, Integration' do
|
|
270
284
|
end
|
271
285
|
|
272
286
|
it 'trims whitespace from its source description' do
|
273
|
-
source = ["#{
|
287
|
+
source = ["#{OUTLINE_KEYWORD}:",
|
274
288
|
' ',
|
275
289
|
' description line 1',
|
276
290
|
'',
|
@@ -279,9 +293,9 @@ describe 'Outline, Integration' do
|
|
279
293
|
'',
|
280
294
|
'',
|
281
295
|
'',
|
282
|
-
" #{
|
296
|
+
" #{STEP_KEYWORD} a step",
|
283
297
|
'',
|
284
|
-
"#{
|
298
|
+
"#{EXAMPLE_KEYWORD}:",
|
285
299
|
'|param|',
|
286
300
|
'|value|']
|
287
301
|
source = source.join("\n")
|
@@ -299,22 +313,22 @@ describe 'Outline, Integration' do
|
|
299
313
|
describe 'comparison' do
|
300
314
|
|
301
315
|
it 'is equal to a background with the same steps' do
|
302
|
-
source = "#{
|
303
|
-
#{
|
304
|
-
#{
|
305
|
-
#{
|
316
|
+
source = "#{OUTLINE_KEYWORD}:
|
317
|
+
#{STEP_KEYWORD} step 1
|
318
|
+
#{STEP_KEYWORD} step 2
|
319
|
+
#{EXAMPLE_KEYWORD}:
|
306
320
|
| param |
|
307
321
|
| value |"
|
308
322
|
outline = clazz.new(source)
|
309
323
|
|
310
|
-
source = "#{
|
311
|
-
#{
|
312
|
-
#{
|
324
|
+
source = "#{BACKGROUND_KEYWORD}:
|
325
|
+
#{STEP_KEYWORD} step 1
|
326
|
+
#{STEP_KEYWORD} step 2"
|
313
327
|
background_1 = CukeModeler::Background.new(source)
|
314
328
|
|
315
|
-
source = "#{
|
316
|
-
#{
|
317
|
-
#{
|
329
|
+
source = "#{BACKGROUND_KEYWORD}:
|
330
|
+
#{STEP_KEYWORD} step 2
|
331
|
+
#{STEP_KEYWORD} step 1"
|
318
332
|
background_2 = CukeModeler::Background.new(source)
|
319
333
|
|
320
334
|
|
@@ -323,22 +337,22 @@ describe 'Outline, Integration' do
|
|
323
337
|
end
|
324
338
|
|
325
339
|
it 'is equal to a scenario with the same steps' do
|
326
|
-
source = "#{
|
327
|
-
#{
|
328
|
-
#{
|
329
|
-
#{
|
340
|
+
source = "#{OUTLINE_KEYWORD}:
|
341
|
+
#{STEP_KEYWORD} step 1
|
342
|
+
#{STEP_KEYWORD} step 2
|
343
|
+
#{EXAMPLE_KEYWORD}:
|
330
344
|
| param |
|
331
345
|
| value |"
|
332
346
|
outline = clazz.new(source)
|
333
347
|
|
334
|
-
source = "#{
|
335
|
-
#{
|
336
|
-
#{
|
348
|
+
source = "#{SCENARIO_KEYWORD}:
|
349
|
+
#{STEP_KEYWORD} step 1
|
350
|
+
#{STEP_KEYWORD} step 2"
|
337
351
|
scenario_1 = CukeModeler::Scenario.new(source)
|
338
352
|
|
339
|
-
source = "#{
|
340
|
-
#{
|
341
|
-
#{
|
353
|
+
source = "#{SCENARIO_KEYWORD}:
|
354
|
+
#{STEP_KEYWORD} step 2
|
355
|
+
#{STEP_KEYWORD} step 1"
|
342
356
|
scenario_2 = CukeModeler::Scenario.new(source)
|
343
357
|
|
344
358
|
|
@@ -347,26 +361,26 @@ describe 'Outline, Integration' do
|
|
347
361
|
end
|
348
362
|
|
349
363
|
it 'is equal to an outline with the same steps' do
|
350
|
-
source = "#{
|
351
|
-
#{
|
352
|
-
#{
|
353
|
-
#{
|
364
|
+
source = "#{OUTLINE_KEYWORD}:
|
365
|
+
#{STEP_KEYWORD} step 1
|
366
|
+
#{STEP_KEYWORD} step 2
|
367
|
+
#{EXAMPLE_KEYWORD}:
|
354
368
|
| param |
|
355
369
|
| value |"
|
356
370
|
outline_1 = clazz.new(source)
|
357
371
|
|
358
|
-
source = "#{
|
359
|
-
#{
|
360
|
-
#{
|
361
|
-
#{
|
372
|
+
source = "#{OUTLINE_KEYWORD}:
|
373
|
+
#{STEP_KEYWORD} step 1
|
374
|
+
#{STEP_KEYWORD} step 2
|
375
|
+
#{EXAMPLE_KEYWORD}:
|
362
376
|
| param |
|
363
377
|
| value |"
|
364
378
|
outline_2 = clazz.new(source)
|
365
379
|
|
366
|
-
source = "#{
|
367
|
-
#{
|
368
|
-
#{
|
369
|
-
#{
|
380
|
+
source = "#{OUTLINE_KEYWORD}:
|
381
|
+
#{STEP_KEYWORD} step 2
|
382
|
+
#{STEP_KEYWORD} step 1
|
383
|
+
#{EXAMPLE_KEYWORD}:
|
370
384
|
| param |
|
371
385
|
| value |"
|
372
386
|
outline_3 = clazz.new(source)
|
@@ -383,19 +397,19 @@ describe 'Outline, Integration' do
|
|
383
397
|
|
384
398
|
it 'can be remade from its own output' do
|
385
399
|
source = "@tag1 @tag2 @tag3
|
386
|
-
#{
|
400
|
+
#{OUTLINE_KEYWORD}: An outline with everything it could have
|
387
401
|
|
388
402
|
Some description.
|
389
403
|
Some more description.
|
390
404
|
|
391
|
-
#{
|
405
|
+
#{STEP_KEYWORD} a step
|
392
406
|
| value |
|
393
|
-
#{
|
407
|
+
#{STEP_KEYWORD} a <value> step
|
394
408
|
\"\"\"
|
395
409
|
some string
|
396
410
|
\"\"\"
|
397
411
|
|
398
|
-
#{
|
412
|
+
#{EXAMPLE_KEYWORD}:
|
399
413
|
|
400
414
|
Some description.
|
401
415
|
Some more description.
|
@@ -404,7 +418,7 @@ describe 'Outline, Integration' do
|
|
404
418
|
| x |
|
405
419
|
|
406
420
|
@example_tag
|
407
|
-
#{
|
421
|
+
#{EXAMPLE_KEYWORD}:
|
408
422
|
| value |
|
409
423
|
| y |"
|
410
424
|
outline = clazz.new(source)
|
@@ -420,29 +434,29 @@ describe 'Outline, Integration' do
|
|
420
434
|
|
421
435
|
# gherkin 3.x does not accept incomplete outlines
|
422
436
|
it 'can output an empty outline', :gherkin3 => false do
|
423
|
-
source = ["#{
|
437
|
+
source = ["#{OUTLINE_KEYWORD}:"]
|
424
438
|
source = source.join("\n")
|
425
439
|
outline = clazz.new(source)
|
426
440
|
|
427
441
|
outline_output = outline.to_s.split("\n", -1)
|
428
442
|
|
429
|
-
expect(outline_output).to eq(["#{
|
443
|
+
expect(outline_output).to eq(["#{OUTLINE_KEYWORD}:"])
|
430
444
|
end
|
431
445
|
|
432
446
|
# gherkin 3.x does not accept incomplete outlines
|
433
447
|
it 'can output a outline that has a name', :gherkin3 => false do
|
434
|
-
source = ["#{
|
448
|
+
source = ["#{OUTLINE_KEYWORD}: test outline"]
|
435
449
|
source = source.join("\n")
|
436
450
|
outline = clazz.new(source)
|
437
451
|
|
438
452
|
outline_output = outline.to_s.split("\n", -1)
|
439
453
|
|
440
|
-
expect(outline_output).to eq(["#{
|
454
|
+
expect(outline_output).to eq(["#{OUTLINE_KEYWORD}: test outline"])
|
441
455
|
end
|
442
456
|
|
443
457
|
# gherkin 3.x does not accept incomplete outlines
|
444
458
|
it 'can output a outline that has a description', :gherkin3 => false do
|
445
|
-
source = ["#{
|
459
|
+
source = ["#{OUTLINE_KEYWORD}:",
|
446
460
|
'Some description.',
|
447
461
|
'Some more description.']
|
448
462
|
source = source.join("\n")
|
@@ -450,7 +464,7 @@ describe 'Outline, Integration' do
|
|
450
464
|
|
451
465
|
outline_output = outline.to_s.split("\n", -1)
|
452
466
|
|
453
|
-
expect(outline_output).to eq(["#{
|
467
|
+
expect(outline_output).to eq(["#{OUTLINE_KEYWORD}:",
|
454
468
|
'',
|
455
469
|
'Some description.',
|
456
470
|
'Some more description.'])
|
@@ -458,10 +472,10 @@ describe 'Outline, Integration' do
|
|
458
472
|
|
459
473
|
# gherkin 3.x does not accept incomplete outlines
|
460
474
|
it 'can output a outline that has steps', :gherkin3 => false do
|
461
|
-
source = ["#{
|
462
|
-
" #{
|
475
|
+
source = ["#{OUTLINE_KEYWORD}:",
|
476
|
+
" #{STEP_KEYWORD} a step",
|
463
477
|
' | value |',
|
464
|
-
" #{
|
478
|
+
" #{STEP_KEYWORD} another step",
|
465
479
|
' """',
|
466
480
|
' some string',
|
467
481
|
' """']
|
@@ -470,10 +484,10 @@ describe 'Outline, Integration' do
|
|
470
484
|
|
471
485
|
outline_output = outline.to_s.split("\n", -1)
|
472
486
|
|
473
|
-
expect(outline_output).to eq(["#{
|
474
|
-
" #{
|
487
|
+
expect(outline_output).to eq(["#{OUTLINE_KEYWORD}:",
|
488
|
+
" #{STEP_KEYWORD} a step",
|
475
489
|
' | value |',
|
476
|
-
" #{
|
490
|
+
" #{STEP_KEYWORD} another step",
|
477
491
|
' """',
|
478
492
|
' some string',
|
479
493
|
' """'])
|
@@ -483,23 +497,23 @@ describe 'Outline, Integration' do
|
|
483
497
|
it 'can output a outline that has tags', :gherkin3 => false do
|
484
498
|
source = ['@tag1 @tag2',
|
485
499
|
'@tag3',
|
486
|
-
"#{
|
500
|
+
"#{OUTLINE_KEYWORD}:"]
|
487
501
|
source = source.join("\n")
|
488
502
|
outline = clazz.new(source)
|
489
503
|
|
490
504
|
outline_output = outline.to_s.split("\n", -1)
|
491
505
|
|
492
506
|
expect(outline_output).to eq(['@tag1 @tag2 @tag3',
|
493
|
-
"#{
|
507
|
+
"#{OUTLINE_KEYWORD}:"])
|
494
508
|
end
|
495
509
|
|
496
510
|
it 'can output a outline that has examples' do
|
497
|
-
source = ["#{
|
498
|
-
"#{
|
499
|
-
"#{
|
511
|
+
source = ["#{OUTLINE_KEYWORD}:",
|
512
|
+
"#{STEP_KEYWORD} a step",
|
513
|
+
"#{EXAMPLE_KEYWORD}:",
|
500
514
|
'| value |',
|
501
515
|
'| x |',
|
502
|
-
"#{
|
516
|
+
"#{EXAMPLE_KEYWORD}:",
|
503
517
|
'| value |',
|
504
518
|
'| y |']
|
505
519
|
source = source.join("\n")
|
@@ -507,31 +521,31 @@ describe 'Outline, Integration' do
|
|
507
521
|
|
508
522
|
outline_output = outline.to_s.split("\n", -1)
|
509
523
|
|
510
|
-
expect(outline_output).to eq(["#{
|
511
|
-
" #{
|
524
|
+
expect(outline_output).to eq(["#{OUTLINE_KEYWORD}:",
|
525
|
+
" #{STEP_KEYWORD} a step",
|
512
526
|
'',
|
513
|
-
"#{
|
527
|
+
"#{EXAMPLE_KEYWORD}:",
|
514
528
|
' | value |',
|
515
529
|
' | x |',
|
516
530
|
'',
|
517
|
-
"#{
|
531
|
+
"#{EXAMPLE_KEYWORD}:",
|
518
532
|
' | value |',
|
519
533
|
' | y |'])
|
520
534
|
end
|
521
535
|
|
522
536
|
it 'can output a outline that has everything' do
|
523
537
|
source = ['@tag1 @tag2 @tag3',
|
524
|
-
"#{
|
538
|
+
"#{OUTLINE_KEYWORD}: A outline with everything it could have",
|
525
539
|
'Including a description',
|
526
540
|
'and then some.',
|
527
|
-
"#{
|
541
|
+
"#{STEP_KEYWORD} a step",
|
528
542
|
'|value|',
|
529
|
-
"#{
|
543
|
+
"#{STEP_KEYWORD} another step",
|
530
544
|
'"""',
|
531
545
|
'some string',
|
532
546
|
'"""',
|
533
547
|
'',
|
534
|
-
"#{
|
548
|
+
"#{EXAMPLE_KEYWORD}:",
|
535
549
|
'',
|
536
550
|
'Some description.',
|
537
551
|
'Some more description.',
|
@@ -540,7 +554,7 @@ describe 'Outline, Integration' do
|
|
540
554
|
'| x |',
|
541
555
|
'',
|
542
556
|
'@example_tag',
|
543
|
-
"#{
|
557
|
+
"#{EXAMPLE_KEYWORD}:",
|
544
558
|
'| value |',
|
545
559
|
'| y |']
|
546
560
|
source = source.join("\n")
|
@@ -549,19 +563,19 @@ describe 'Outline, Integration' do
|
|
549
563
|
outline_output = outline.to_s.split("\n", -1)
|
550
564
|
|
551
565
|
expect(outline_output).to eq(['@tag1 @tag2 @tag3',
|
552
|
-
"#{
|
566
|
+
"#{OUTLINE_KEYWORD}: A outline with everything it could have",
|
553
567
|
'',
|
554
568
|
'Including a description',
|
555
569
|
'and then some.',
|
556
570
|
'',
|
557
|
-
" #{
|
571
|
+
" #{STEP_KEYWORD} a step",
|
558
572
|
' | value |',
|
559
|
-
" #{
|
573
|
+
" #{STEP_KEYWORD} another step",
|
560
574
|
' """',
|
561
575
|
' some string',
|
562
576
|
' """',
|
563
577
|
'',
|
564
|
-
"#{
|
578
|
+
"#{EXAMPLE_KEYWORD}:",
|
565
579
|
'',
|
566
580
|
'Some description.',
|
567
581
|
'Some more description.',
|
@@ -570,7 +584,7 @@ describe 'Outline, Integration' do
|
|
570
584
|
' | x |',
|
571
585
|
'',
|
572
586
|
'@example_tag',
|
573
|
-
"#{
|
587
|
+
"#{EXAMPLE_KEYWORD}:",
|
574
588
|
' | value |',
|
575
589
|
' | y |'])
|
576
590
|
end
|