cuke_modeler 1.3.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +60 -17
- data/CHANGELOG.md +312 -0
- data/Gemfile +19 -3
- data/LICENSE.txt +1 -1
- data/README.md +17 -7
- data/Rakefile +45 -28
- data/appveyor.yml +57 -17
- data/cuke_modeler.gemspec +6 -3
- data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +1 -0
- data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +1 -0
- data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +2 -1
- data/lib/cuke_modeler/adapters/gherkin_5_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/gherkin_6_adapter.rb +310 -0
- data/lib/cuke_modeler/adapters/gherkin_7_adapter.rb +307 -0
- data/lib/cuke_modeler/adapters/gherkin_8_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/gherkin_9_adapter.rb +12 -0
- data/lib/cuke_modeler/containing.rb +16 -0
- data/lib/cuke_modeler/described.rb +1 -0
- data/lib/cuke_modeler/models/step.rb +31 -2
- data/lib/cuke_modeler/named.rb +1 -0
- data/lib/cuke_modeler/nested.rb +1 -0
- data/lib/cuke_modeler/parsed.rb +1 -0
- data/lib/cuke_modeler/parsing.rb +116 -68
- data/lib/cuke_modeler/sourceable.rb +1 -0
- data/lib/cuke_modeler/stepped.rb +1 -0
- data/lib/cuke_modeler/taggable.rb +1 -0
- data/lib/cuke_modeler/version.rb +1 -1
- data/testing/cucumber/features/analysis/step_comparison.feature +25 -0
- data/testing/cucumber/features/analysis/test_comparison.feature +1 -1
- data/testing/cucumber/step_definitions/feature_file_steps.rb +1 -1
- data/testing/cucumber/step_definitions/modeling_steps.rb +7 -2
- data/testing/cucumber/step_definitions/verification_steps.rb +11 -2
- data/testing/file_helper.rb +3 -0
- data/testing/gemfiles/gherkin2.gemfile +8 -0
- data/testing/gemfiles/gherkin3.gemfile +6 -0
- data/testing/gemfiles/gherkin4.gemfile +7 -0
- data/testing/gemfiles/gherkin5.gemfile +7 -0
- data/testing/gemfiles/gherkin6.gemfile +10 -0
- data/testing/gemfiles/gherkin7.gemfile +9 -0
- data/testing/gemfiles/gherkin8.gemfile +9 -0
- data/testing/gemfiles/gherkin9.gemfile +9 -0
- data/testing/helper_methods.rb +23 -0
- data/testing/rspec/spec/integration/{gherkin_2_adapter_spec.rb → adapters/gherkin_2_adapter_spec.rb} +13 -13
- data/testing/rspec/spec/integration/{gherkin_3_adapter_spec.rb → adapters/gherkin_3_adapter_spec.rb} +13 -13
- data/testing/rspec/spec/integration/{gherkin_4_adapter_spec.rb → adapters/gherkin_4_adapter_spec.rb} +13 -13
- data/testing/rspec/spec/integration/adapters/gherkin_5_adapter_spec.rb +165 -0
- data/testing/rspec/spec/integration/adapters/gherkin_6_adapter_spec.rb +159 -0
- data/testing/rspec/spec/integration/adapters/gherkin_7_adapter_spec.rb +162 -0
- data/testing/rspec/spec/integration/adapters/gherkin_8_adapter_spec.rb +162 -0
- data/testing/rspec/spec/integration/adapters/gherkin_9_adapter_spec.rb +162 -0
- data/testing/rspec/spec/integration/{background_integration_spec.rb → models/background_integration_spec.rb} +90 -86
- data/testing/rspec/spec/integration/{cell_integration_spec.rb → models/cell_integration_spec.rb} +49 -38
- data/testing/rspec/spec/integration/{comment_integration_spec.rb → models/comment_integration_spec.rb} +31 -20
- data/testing/rspec/spec/integration/{directory_integration_spec.rb → models/directory_integration_spec.rb} +3 -3
- data/testing/rspec/spec/integration/{doc_string_integration_spec.rb → models/doc_string_integration_spec.rb} +39 -35
- data/testing/rspec/spec/integration/{example_integration_spec.rb → models/example_integration_spec.rb} +109 -83
- data/testing/rspec/spec/integration/{feature_file_integration_spec.rb → models/feature_file_integration_spec.rb} +52 -38
- data/testing/rspec/spec/integration/{feature_integration_spec.rb → models/feature_integration_spec.rb} +125 -112
- data/testing/rspec/spec/integration/{model_integration_spec.rb → models/model_integration_spec.rb} +1 -1
- data/testing/rspec/spec/integration/{outline_integration_spec.rb → models/outline_integration_spec.rb} +138 -129
- data/testing/rspec/spec/integration/{row_integration_spec.rb → models/row_integration_spec.rb} +55 -35
- data/testing/rspec/spec/integration/{scenario_integration_spec.rb → models/scenario_integration_spec.rb} +92 -88
- data/testing/rspec/spec/integration/models/step_integration_spec.rb +573 -0
- data/testing/rspec/spec/integration/{table_integration_spec.rb → models/table_integration_spec.rb} +38 -34
- data/testing/rspec/spec/integration/{tag_integration_spec.rb → models/tag_integration_spec.rb} +56 -36
- data/testing/rspec/spec/integration/parsing_integration_spec.rb +45 -7
- data/testing/rspec/spec/spec_helper.rb +79 -43
- data/testing/rspec/spec/unit/cuke_modeler_unit_spec.rb +25 -0
- data/testing/rspec/spec/unit/{background_unit_spec.rb → models/background_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{cell_unit_spec.rb → models/cell_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{comment_unit_spec.rb → models/comment_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{directory_unit_spec.rb → models/directory_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{doc_string_unit_spec.rb → models/doc_string_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{example_unit_spec.rb → models/example_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{feature_file_unit_spec.rb → models/feature_file_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{feature_unit_spec.rb → models/feature_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{model_unit_spec.rb → models/model_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{outline_unit_spec.rb → models/outline_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{row_unit_spec.rb → models/row_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{scenario_unit_spec.rb → models/scenario_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{step_unit_spec.rb → models/step_unit_spec.rb} +2 -2
- data/testing/rspec/spec/unit/{table_unit_spec.rb → models/table_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/{tag_unit_spec.rb → models/tag_unit_spec.rb} +1 -1
- data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +102 -0
- data/todo.txt +5 -2
- metadata +80 -47
- data/History.md +0 -186
- data/testing/cucumber/support/transforms.rb +0 -3
- data/testing/rspec/spec/integration/step_integration_spec.rb +0 -459
@@ -0,0 +1,162 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../../spec_helper"
|
2
|
+
|
3
|
+
|
4
|
+
describe 'Gherkin8Adapter, Integration', :if => gherkin?(8) do
|
5
|
+
|
6
|
+
let(:clazz) { CukeModeler::Gherkin8Adapter }
|
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) do
|
71
|
+
test_file_path = CukeModeler::FileHelper.create_feature_file(:text => source_text, :name => 'adapter_test_file')
|
72
|
+
|
73
|
+
CukeModeler::FeatureFile.new(test_file_path)
|
74
|
+
end
|
75
|
+
let(:feature_model) { feature_file_model.feature }
|
76
|
+
|
77
|
+
|
78
|
+
it "does not store parsing data for a feature file's children" do
|
79
|
+
model = feature_file_model
|
80
|
+
|
81
|
+
expect(model.parsing_data[:comments]).to be_nil
|
82
|
+
expect(model.parsing_data[:feature]).to be_nil
|
83
|
+
end
|
84
|
+
|
85
|
+
it "does not store parsing data for a feature's children" do
|
86
|
+
model = feature_model
|
87
|
+
|
88
|
+
expect(model.parsing_data[:tags]).to be_nil
|
89
|
+
expect(model.parsing_data[:children]).to be_nil
|
90
|
+
end
|
91
|
+
|
92
|
+
it "does not store parsing data for a background's children" do
|
93
|
+
model = feature_model.background
|
94
|
+
|
95
|
+
expect(model.parsing_data[:background][:steps]).to be_nil
|
96
|
+
end
|
97
|
+
|
98
|
+
it "does not store parsing data for a scenario's children" do
|
99
|
+
model = feature_model.scenarios.first
|
100
|
+
|
101
|
+
expect(model.parsing_data[:scenario][:tags]).to be_nil
|
102
|
+
expect(model.parsing_data[:scenario][:steps]).to be_nil
|
103
|
+
end
|
104
|
+
|
105
|
+
it "does not store parsing data for an outline's children" do
|
106
|
+
model = feature_model.outlines.first
|
107
|
+
|
108
|
+
expect(model.parsing_data[:scenario][:tags]).to be_nil
|
109
|
+
expect(model.parsing_data[:scenario][:steps]).to be_nil
|
110
|
+
expect(model.parsing_data[:scenario][:examples]).to be_nil
|
111
|
+
end
|
112
|
+
|
113
|
+
it "does not store parsing data for an example's children" do
|
114
|
+
model = feature_model.outlines.first.examples.first
|
115
|
+
|
116
|
+
expect(model.parsing_data[:tags]).to be_nil
|
117
|
+
expect(model.parsing_data[:table_header]).to be_nil
|
118
|
+
expect(model.parsing_data[:table_body]).to be_nil
|
119
|
+
end
|
120
|
+
|
121
|
+
it "does not store parsing data for an example row's children" do
|
122
|
+
model = feature_model.outlines.first.examples.first.rows.first
|
123
|
+
|
124
|
+
expect(model.parsing_data[:cells]).to be_nil
|
125
|
+
end
|
126
|
+
|
127
|
+
it "does not store parsing data for a step's children, table" do
|
128
|
+
model = feature_model.outlines.first.steps.first
|
129
|
+
|
130
|
+
expect(model.parsing_data[:data_table]).to be_nil
|
131
|
+
end
|
132
|
+
|
133
|
+
it "does not store parsing data for a step's children, doc string" do
|
134
|
+
model = feature_model.outlines.first.steps.last
|
135
|
+
|
136
|
+
expect(model.parsing_data[:doc_string]).to be_nil
|
137
|
+
end
|
138
|
+
|
139
|
+
it "does not store parsing data for a table's children" do
|
140
|
+
model = feature_model.outlines.first.steps.first.block
|
141
|
+
|
142
|
+
expect(model.parsing_data[:rows]).to be_nil
|
143
|
+
end
|
144
|
+
|
145
|
+
it "does not store parsing data for a table row's children" do
|
146
|
+
model = feature_model.outlines.first.steps.first.block.rows.first
|
147
|
+
|
148
|
+
expect(model.parsing_data[:cells]).to be_nil
|
149
|
+
end
|
150
|
+
|
151
|
+
|
152
|
+
describe 'stuff that is in no way part of the public API and entirely subject to change' do
|
153
|
+
|
154
|
+
it 'provides a useful explosion message if it encounters an entirely new type of test' do
|
155
|
+
partial_feature_ast = { :type => :Feature, :location => { :line => 1, :column => 1 }, :children => [{ :some_unknown_type => {} }] }
|
156
|
+
|
157
|
+
expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../../spec_helper"
|
2
|
+
|
3
|
+
|
4
|
+
describe 'Gherkin9Adapter, Integration', :if => gherkin?(9) do
|
5
|
+
|
6
|
+
let(:clazz) { CukeModeler::Gherkin9Adapter }
|
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) do
|
71
|
+
test_file_path = CukeModeler::FileHelper.create_feature_file(:text => source_text, :name => 'adapter_test_file')
|
72
|
+
|
73
|
+
CukeModeler::FeatureFile.new(test_file_path)
|
74
|
+
end
|
75
|
+
let(:feature_model) { feature_file_model.feature }
|
76
|
+
|
77
|
+
|
78
|
+
it "does not store parsing data for a feature file's children" do
|
79
|
+
model = feature_file_model
|
80
|
+
|
81
|
+
expect(model.parsing_data[:comments]).to be_nil
|
82
|
+
expect(model.parsing_data[:feature]).to be_nil
|
83
|
+
end
|
84
|
+
|
85
|
+
it "does not store parsing data for a feature's children" do
|
86
|
+
model = feature_model
|
87
|
+
|
88
|
+
expect(model.parsing_data[:tags]).to be_nil
|
89
|
+
expect(model.parsing_data[:children]).to be_nil
|
90
|
+
end
|
91
|
+
|
92
|
+
it "does not store parsing data for a background's children" do
|
93
|
+
model = feature_model.background
|
94
|
+
|
95
|
+
expect(model.parsing_data[:background][:steps]).to be_nil
|
96
|
+
end
|
97
|
+
|
98
|
+
it "does not store parsing data for a scenario's children" do
|
99
|
+
model = feature_model.scenarios.first
|
100
|
+
|
101
|
+
expect(model.parsing_data[:scenario][:tags]).to be_nil
|
102
|
+
expect(model.parsing_data[:scenario][:steps]).to be_nil
|
103
|
+
end
|
104
|
+
|
105
|
+
it "does not store parsing data for an outline's children" do
|
106
|
+
model = feature_model.outlines.first
|
107
|
+
|
108
|
+
expect(model.parsing_data[:scenario][:tags]).to be_nil
|
109
|
+
expect(model.parsing_data[:scenario][:steps]).to be_nil
|
110
|
+
expect(model.parsing_data[:scenario][:examples]).to be_nil
|
111
|
+
end
|
112
|
+
|
113
|
+
it "does not store parsing data for an example's children" do
|
114
|
+
model = feature_model.outlines.first.examples.first
|
115
|
+
|
116
|
+
expect(model.parsing_data[:tags]).to be_nil
|
117
|
+
expect(model.parsing_data[:table_header]).to be_nil
|
118
|
+
expect(model.parsing_data[:table_body]).to be_nil
|
119
|
+
end
|
120
|
+
|
121
|
+
it "does not store parsing data for an example row's children" do
|
122
|
+
model = feature_model.outlines.first.examples.first.rows.first
|
123
|
+
|
124
|
+
expect(model.parsing_data[:cells]).to be_nil
|
125
|
+
end
|
126
|
+
|
127
|
+
it "does not store parsing data for a step's children, table" do
|
128
|
+
model = feature_model.outlines.first.steps.first
|
129
|
+
|
130
|
+
expect(model.parsing_data[:data_table]).to be_nil
|
131
|
+
end
|
132
|
+
|
133
|
+
it "does not store parsing data for a step's children, doc string" do
|
134
|
+
model = feature_model.outlines.first.steps.last
|
135
|
+
|
136
|
+
expect(model.parsing_data[:doc_string]).to be_nil
|
137
|
+
end
|
138
|
+
|
139
|
+
it "does not store parsing data for a table's children" do
|
140
|
+
model = feature_model.outlines.first.steps.first.block
|
141
|
+
|
142
|
+
expect(model.parsing_data[:rows]).to be_nil
|
143
|
+
end
|
144
|
+
|
145
|
+
it "does not store parsing data for a table row's children" do
|
146
|
+
model = feature_model.outlines.first.steps.first.block.rows.first
|
147
|
+
|
148
|
+
expect(model.parsing_data[:cells]).to be_nil
|
149
|
+
end
|
150
|
+
|
151
|
+
|
152
|
+
describe 'stuff that is in no way part of the public API and entirely subject to change' do
|
153
|
+
|
154
|
+
it 'provides a useful explosion message if it encounters an entirely new type of test' do
|
155
|
+
partial_feature_ast = { :type => :Feature, :location => { :line => 1, :column => 1 }, :children => [{ :some_unknown_type => {} }] }
|
156
|
+
|
157
|
+
expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require "#{File.dirname(__FILE__)}
|
1
|
+
require "#{File.dirname(__FILE__)}/../../spec_helper"
|
2
2
|
|
3
3
|
|
4
4
|
describe 'Background, Integration' do
|
@@ -15,7 +15,7 @@ describe 'Background, Integration' do
|
|
15
15
|
describe 'unique behavior' do
|
16
16
|
|
17
17
|
it 'can be instantiated with the minimum viable Gherkin' do
|
18
|
-
source = "#{
|
18
|
+
source = "#{BACKGROUND_KEYWORD}:"
|
19
19
|
|
20
20
|
expect { clazz.new(source) }.to_not raise_error
|
21
21
|
end
|
@@ -37,39 +37,43 @@ describe 'Background, Integration' do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
background = clazz.new("#{@background_keyword}: test background\ndescription\n#{@step_keyword} a step")
|
42
|
-
data = background.parsing_data
|
40
|
+
describe 'parsing data' do
|
43
41
|
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
it 'stores the original data generated by the parsing adapter', :if => gherkin?(6, 7, 8, 9) do
|
43
|
+
background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
|
44
|
+
data = background.parsing_data
|
47
45
|
|
48
|
-
|
49
|
-
|
50
|
-
|
46
|
+
expect(data.keys).to match_array([:background, :rule, :scenario])
|
47
|
+
expect(data[:background][:name]).to eq('test background')
|
48
|
+
end
|
51
49
|
|
52
|
-
|
53
|
-
|
54
|
-
|
50
|
+
it 'stores the original data generated by the parsing adapter', :if => gherkin?(3, 4, 5) do
|
51
|
+
background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
|
52
|
+
data = background.parsing_data
|
55
53
|
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
expect(data.keys).to match_array([:type, :location, :keyword, :name, :steps, :description])
|
55
|
+
expect(data[:type]).to eq(:Background)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'stores the original data generated by the parsing adapter', :if => gherkin?(2) do
|
59
|
+
background = clazz.new("#{BACKGROUND_KEYWORD}: test background\ndescription\n#{STEP_KEYWORD} a step")
|
60
|
+
data = background.parsing_data
|
61
|
+
|
62
|
+
expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'steps', 'type'])
|
63
|
+
expect(data['keyword']).to eq('Background')
|
64
|
+
end
|
59
65
|
|
60
|
-
expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'steps', 'type'])
|
61
|
-
expect(data['keyword']).to eq('Background')
|
62
66
|
end
|
63
67
|
|
64
68
|
it 'provides a descriptive filename when being parsed from stand alone text' do
|
65
|
-
source = "bad background text \n #{
|
69
|
+
source = "bad background text \n #{BACKGROUND_KEYWORD}:\n #{STEP_KEYWORD} a step\n @foo "
|
66
70
|
|
67
71
|
expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_background\.feature'/)
|
68
72
|
end
|
69
73
|
|
70
74
|
it 'properly sets its child models' do
|
71
|
-
source = "#{
|
72
|
-
#{
|
75
|
+
source = "#{BACKGROUND_KEYWORD}: Test background
|
76
|
+
#{STEP_KEYWORD} a step"
|
73
77
|
|
74
78
|
background = clazz.new(source)
|
75
79
|
step = background.steps.first
|
@@ -78,7 +82,7 @@ describe 'Background, Integration' do
|
|
78
82
|
end
|
79
83
|
|
80
84
|
it 'trims whitespace from its source description' do
|
81
|
-
source = ["#{
|
85
|
+
source = ["#{BACKGROUND_KEYWORD}:",
|
82
86
|
' ',
|
83
87
|
' description line 1',
|
84
88
|
'',
|
@@ -87,7 +91,7 @@ describe 'Background, Integration' do
|
|
87
91
|
'',
|
88
92
|
'',
|
89
93
|
'',
|
90
|
-
" #{
|
94
|
+
" #{STEP_KEYWORD} a step"]
|
91
95
|
source = source.join("\n")
|
92
96
|
|
93
97
|
background = clazz.new(source)
|
@@ -108,10 +112,10 @@ describe 'Background, Integration' do
|
|
108
112
|
|
109
113
|
|
110
114
|
let(:test_directory) { CukeModeler::FileHelper.create_directory }
|
111
|
-
let(:source_gherkin) { "#{
|
115
|
+
let(:source_gherkin) { "#{FEATURE_KEYWORD}: Test feature
|
112
116
|
|
113
|
-
#{
|
114
|
-
#{
|
117
|
+
#{BACKGROUND_KEYWORD}: Test background
|
118
|
+
#{STEP_KEYWORD} a step"
|
115
119
|
}
|
116
120
|
|
117
121
|
let(:directory_model) { CukeModeler::Directory.new(test_directory) }
|
@@ -149,19 +153,19 @@ describe 'Background, Integration' do
|
|
149
153
|
|
150
154
|
context 'from source text' do
|
151
155
|
|
152
|
-
let(:source_text) { "#{
|
156
|
+
let(:source_text) { "#{BACKGROUND_KEYWORD}:" }
|
153
157
|
let(:background) { clazz.new(source_text) }
|
154
158
|
|
155
159
|
|
156
160
|
it "models the background's keyword" do
|
157
|
-
expect(background.keyword).to eq("#{
|
161
|
+
expect(background.keyword).to eq("#{BACKGROUND_KEYWORD}")
|
158
162
|
end
|
159
163
|
|
160
164
|
it "models the background's source line" do
|
161
|
-
source_text = "#{
|
165
|
+
source_text = "#{FEATURE_KEYWORD}:
|
162
166
|
|
163
|
-
#{
|
164
|
-
#{
|
167
|
+
#{BACKGROUND_KEYWORD}: foo
|
168
|
+
#{STEP_KEYWORD} step"
|
165
169
|
background = CukeModeler::Feature.new(source_text).background
|
166
170
|
|
167
171
|
expect(background.source_line).to eq(3)
|
@@ -169,15 +173,15 @@ describe 'Background, Integration' do
|
|
169
173
|
|
170
174
|
context 'a filled background' do
|
171
175
|
|
172
|
-
let(:source_text) { "#{
|
176
|
+
let(:source_text) { "#{BACKGROUND_KEYWORD}: Background name
|
173
177
|
|
174
178
|
Background description.
|
175
179
|
|
176
180
|
Some more.
|
177
181
|
Even more.
|
178
182
|
|
179
|
-
#{
|
180
|
-
#{
|
183
|
+
#{STEP_KEYWORD} a step
|
184
|
+
#{STEP_KEYWORD} another step" }
|
181
185
|
let(:background) { clazz.new(source_text) }
|
182
186
|
|
183
187
|
|
@@ -204,7 +208,7 @@ describe 'Background, Integration' do
|
|
204
208
|
|
205
209
|
context 'an empty background' do
|
206
210
|
|
207
|
-
let(:source_text) { "#{
|
211
|
+
let(:source_text) { "#{BACKGROUND_KEYWORD}:" }
|
208
212
|
let(:background) { clazz.new(source_text) }
|
209
213
|
|
210
214
|
|
@@ -230,19 +234,19 @@ describe 'Background, Integration' do
|
|
230
234
|
describe 'comparison' do
|
231
235
|
|
232
236
|
it 'is equal to a background with the same steps' do
|
233
|
-
source = "#{
|
234
|
-
#{
|
235
|
-
#{
|
237
|
+
source = "#{BACKGROUND_KEYWORD}:
|
238
|
+
#{STEP_KEYWORD} step 1
|
239
|
+
#{STEP_KEYWORD} step 2"
|
236
240
|
background_1 = clazz.new(source)
|
237
241
|
|
238
|
-
source = "#{
|
239
|
-
#{
|
240
|
-
#{
|
242
|
+
source = "#{BACKGROUND_KEYWORD}:
|
243
|
+
#{STEP_KEYWORD} step 1
|
244
|
+
#{STEP_KEYWORD} step 2"
|
241
245
|
background_2 = clazz.new(source)
|
242
246
|
|
243
|
-
source = "#{
|
244
|
-
#{
|
245
|
-
#{
|
247
|
+
source = "#{BACKGROUND_KEYWORD}:
|
248
|
+
#{STEP_KEYWORD} step 2
|
249
|
+
#{STEP_KEYWORD} step 1"
|
246
250
|
background_3 = clazz.new(source)
|
247
251
|
|
248
252
|
|
@@ -251,19 +255,19 @@ describe 'Background, Integration' do
|
|
251
255
|
end
|
252
256
|
|
253
257
|
it 'is equal to a scenario with the same steps' do
|
254
|
-
source = "#{
|
255
|
-
#{
|
256
|
-
#{
|
258
|
+
source = "#{BACKGROUND_KEYWORD}:
|
259
|
+
#{STEP_KEYWORD} step 1
|
260
|
+
#{STEP_KEYWORD} step 2"
|
257
261
|
background = clazz.new(source)
|
258
262
|
|
259
|
-
source = "#{
|
260
|
-
#{
|
261
|
-
#{
|
263
|
+
source = "#{SCENARIO_KEYWORD}:
|
264
|
+
#{STEP_KEYWORD} step 1
|
265
|
+
#{STEP_KEYWORD} step 2"
|
262
266
|
scenario_1 = CukeModeler::Scenario.new(source)
|
263
267
|
|
264
|
-
source = "#{
|
265
|
-
#{
|
266
|
-
#{
|
268
|
+
source = "#{SCENARIO_KEYWORD}:
|
269
|
+
#{STEP_KEYWORD} step 2
|
270
|
+
#{STEP_KEYWORD} step 1"
|
267
271
|
scenario_2 = CukeModeler::Scenario.new(source)
|
268
272
|
|
269
273
|
|
@@ -272,23 +276,23 @@ describe 'Background, Integration' do
|
|
272
276
|
end
|
273
277
|
|
274
278
|
it 'is equal to an outline with the same steps' do
|
275
|
-
source = "#{
|
276
|
-
#{
|
277
|
-
#{
|
279
|
+
source = "#{BACKGROUND_KEYWORD}:
|
280
|
+
#{STEP_KEYWORD} step 1
|
281
|
+
#{STEP_KEYWORD} step 2"
|
278
282
|
background = clazz.new(source)
|
279
283
|
|
280
|
-
source = "#{
|
281
|
-
#{
|
282
|
-
#{
|
283
|
-
#{
|
284
|
+
source = "#{OUTLINE_KEYWORD}:
|
285
|
+
#{STEP_KEYWORD} step 1
|
286
|
+
#{STEP_KEYWORD} step 2
|
287
|
+
#{EXAMPLE_KEYWORD}:
|
284
288
|
| param |
|
285
289
|
| value |"
|
286
290
|
outline_1 = CukeModeler::Outline.new(source)
|
287
291
|
|
288
|
-
source = "#{
|
289
|
-
#{
|
290
|
-
#{
|
291
|
-
#{
|
292
|
+
source = "#{OUTLINE_KEYWORD}:
|
293
|
+
#{STEP_KEYWORD} step 2
|
294
|
+
#{STEP_KEYWORD} step 1
|
295
|
+
#{EXAMPLE_KEYWORD}:
|
292
296
|
| param |
|
293
297
|
| value |"
|
294
298
|
outline_2 = CukeModeler::Outline.new(source)
|
@@ -304,14 +308,14 @@ describe 'Background, Integration' do
|
|
304
308
|
describe 'background output' do
|
305
309
|
|
306
310
|
it 'can be remade from its own output' do
|
307
|
-
source = "#{
|
311
|
+
source = "#{BACKGROUND_KEYWORD}: A background with everything it could have
|
308
312
|
|
309
313
|
Including a description
|
310
314
|
and then some.
|
311
315
|
|
312
|
-
#{
|
316
|
+
#{STEP_KEYWORD} a step
|
313
317
|
| value |
|
314
|
-
#{
|
318
|
+
#{STEP_KEYWORD} another step
|
315
319
|
\"\"\"
|
316
320
|
some string
|
317
321
|
\"\"\""
|
@@ -327,27 +331,27 @@ describe 'Background, Integration' do
|
|
327
331
|
context 'from source text' do
|
328
332
|
|
329
333
|
it 'can output an empty background' do
|
330
|
-
source = ["#{
|
334
|
+
source = ["#{BACKGROUND_KEYWORD}:"]
|
331
335
|
source = source.join("\n")
|
332
336
|
background = clazz.new(source)
|
333
337
|
|
334
338
|
background_output = background.to_s.split("\n", -1)
|
335
339
|
|
336
|
-
expect(background_output).to eq(["#{
|
340
|
+
expect(background_output).to eq(["#{BACKGROUND_KEYWORD}:"])
|
337
341
|
end
|
338
342
|
|
339
343
|
it 'can output a background that has a name' do
|
340
|
-
source = ["#{
|
344
|
+
source = ["#{BACKGROUND_KEYWORD}: test background"]
|
341
345
|
source = source.join("\n")
|
342
346
|
background = clazz.new(source)
|
343
347
|
|
344
348
|
background_output = background.to_s.split("\n", -1)
|
345
349
|
|
346
|
-
expect(background_output).to eq(["#{
|
350
|
+
expect(background_output).to eq(["#{BACKGROUND_KEYWORD}: test background"])
|
347
351
|
end
|
348
352
|
|
349
353
|
it 'can output a background that has a description' do
|
350
|
-
source = ["#{
|
354
|
+
source = ["#{BACKGROUND_KEYWORD}:",
|
351
355
|
'Some description.',
|
352
356
|
'Some more description.']
|
353
357
|
source = source.join("\n")
|
@@ -355,17 +359,17 @@ describe 'Background, Integration' do
|
|
355
359
|
|
356
360
|
background_output = background.to_s.split("\n", -1)
|
357
361
|
|
358
|
-
expect(background_output).to eq(["#{
|
362
|
+
expect(background_output).to eq(["#{BACKGROUND_KEYWORD}:",
|
359
363
|
'',
|
360
364
|
'Some description.',
|
361
365
|
'Some more description.'])
|
362
366
|
end
|
363
367
|
|
364
368
|
it 'can output a background that has steps' do
|
365
|
-
source = ["#{
|
366
|
-
"#{
|
369
|
+
source = ["#{BACKGROUND_KEYWORD}:",
|
370
|
+
"#{STEP_KEYWORD} a step",
|
367
371
|
'|value|',
|
368
|
-
"#{
|
372
|
+
"#{STEP_KEYWORD} another step",
|
369
373
|
'"""',
|
370
374
|
'some string',
|
371
375
|
'"""']
|
@@ -374,22 +378,22 @@ describe 'Background, Integration' do
|
|
374
378
|
|
375
379
|
background_output = background.to_s.split("\n", -1)
|
376
380
|
|
377
|
-
expect(background_output).to eq(["#{
|
378
|
-
" #{
|
381
|
+
expect(background_output).to eq(["#{BACKGROUND_KEYWORD}:",
|
382
|
+
" #{STEP_KEYWORD} a step",
|
379
383
|
' | value |',
|
380
|
-
" #{
|
384
|
+
" #{STEP_KEYWORD} another step",
|
381
385
|
' """',
|
382
386
|
' some string',
|
383
387
|
' """'])
|
384
388
|
end
|
385
389
|
|
386
390
|
it 'can output a background that has everything' do
|
387
|
-
source = ["#{
|
391
|
+
source = ["#{BACKGROUND_KEYWORD}: A background with everything it could have",
|
388
392
|
'Including a description',
|
389
393
|
'and then some.',
|
390
|
-
"#{
|
394
|
+
"#{STEP_KEYWORD} a step",
|
391
395
|
'|value|',
|
392
|
-
"#{
|
396
|
+
"#{STEP_KEYWORD} another step",
|
393
397
|
'"""',
|
394
398
|
'some string',
|
395
399
|
'"""']
|
@@ -398,14 +402,14 @@ describe 'Background, Integration' do
|
|
398
402
|
|
399
403
|
background_output = background.to_s.split("\n", -1)
|
400
404
|
|
401
|
-
expect(background_output).to eq(["#{
|
405
|
+
expect(background_output).to eq(["#{BACKGROUND_KEYWORD}: A background with everything it could have",
|
402
406
|
'',
|
403
407
|
'Including a description',
|
404
408
|
'and then some.',
|
405
409
|
'',
|
406
|
-
" #{
|
410
|
+
" #{STEP_KEYWORD} a step",
|
407
411
|
' | value |',
|
408
|
-
" #{
|
412
|
+
" #{STEP_KEYWORD} another step",
|
409
413
|
' """',
|
410
414
|
' some string',
|
411
415
|
' """'])
|