cuke_modeler 0.4.1 → 1.0.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 +4 -4
- data/.gitignore +17 -17
- data/.travis.yml +1 -1
- data/Gemfile +4 -0
- data/History.rdoc +71 -3
- data/LICENSE.txt +22 -22
- data/README.md +24 -10
- data/Rakefile +2 -12
- data/cuke_modeler.gemspec +1 -1
- data/features/analysis/test_comparison.feature +37 -122
- data/features/modeling/background_modeling.feature +77 -0
- data/features/modeling/background_output.feature +42 -0
- data/features/modeling/cell_modeling.feature +23 -0
- data/features/modeling/cell_output.feature +22 -0
- data/features/modeling/directory_modeling.feature +65 -0
- data/features/modeling/directory_output.feature +12 -0
- data/features/modeling/doc_string_modeling.feature +61 -0
- data/features/modeling/doc_string_output.feature +32 -0
- data/features/modeling/example_modeling.feature +125 -0
- data/features/modeling/example_output.feature +39 -0
- data/features/modeling/feature_file_modeling.feature +40 -0
- data/features/modeling/feature_file_output.feature +12 -0
- data/features/modeling/feature_modeling.feature +109 -0
- data/features/modeling/feature_output.feature +104 -0
- data/features/modeling/model_output.feature +22 -0
- data/features/modeling/model_structure.feature +48 -0
- data/features/modeling/outline_modeling.feature +144 -0
- data/features/modeling/outline_output.feature +69 -0
- data/features/modeling/row_modeling.feature +48 -0
- data/features/modeling/row_output.feature +22 -0
- data/features/modeling/scenario_modeling.feature +118 -0
- data/features/modeling/scenario_output.feature +45 -0
- data/features/modeling/step_modeling.feature +84 -0
- data/features/modeling/step_output.feature +29 -0
- data/features/modeling/table_modeling.feature +50 -0
- data/features/modeling/table_output.feature +24 -0
- data/features/modeling/tag_modeling.feature +43 -0
- data/features/modeling/tag_output.feature +22 -0
- data/features/step_definitions/action_steps.rb +11 -1
- data/features/step_definitions/background_steps.rb +1 -85
- data/features/step_definitions/directory_steps.rb +2 -48
- data/features/step_definitions/doc_string_steps.rb +1 -67
- data/features/step_definitions/feature_file_steps.rb +2 -37
- data/features/step_definitions/feature_steps.rb +4 -100
- data/features/step_definitions/modeling_steps.rb +44 -0
- data/features/step_definitions/setup_steps.rb +19 -41
- data/features/step_definitions/step_steps.rb +2 -166
- data/features/step_definitions/table_steps.rb +1 -58
- data/features/step_definitions/tag_steps.rb +2 -72
- data/features/step_definitions/verification_steps.rb +152 -4
- data/features/support/env.rb +4 -6
- data/gemfiles/{gherkin.gemfile → gherkin2.gemfile} +4 -0
- data/gemfiles/gherkin3.gemfile +4 -0
- data/gemfiles/gherkin4.gemfile +4 -0
- data/lib/cuke_modeler.rb +24 -22
- data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +103 -31
- data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +103 -40
- data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +111 -50
- data/lib/cuke_modeler/containing.rb +255 -4
- data/lib/cuke_modeler/described.rb +28 -0
- data/lib/cuke_modeler/models/background.rb +66 -0
- data/lib/cuke_modeler/models/cell.rb +48 -0
- data/lib/cuke_modeler/models/directory.rb +95 -0
- data/lib/cuke_modeler/models/doc_string.rb +59 -0
- data/lib/cuke_modeler/models/example.rb +167 -0
- data/lib/cuke_modeler/models/feature.rb +106 -0
- data/lib/cuke_modeler/models/feature_file.rb +64 -0
- data/lib/cuke_modeler/models/model.rb +32 -0
- data/lib/cuke_modeler/models/outline.rb +79 -0
- data/lib/cuke_modeler/models/row.rb +49 -0
- data/lib/cuke_modeler/models/scenario.rb +69 -0
- data/lib/cuke_modeler/models/step.rb +68 -0
- data/lib/cuke_modeler/models/table.rb +67 -0
- data/lib/cuke_modeler/models/tag.rb +46 -0
- data/lib/cuke_modeler/named.rb +19 -0
- data/lib/cuke_modeler/nested.rb +22 -15
- data/lib/cuke_modeler/parsed.rb +11 -0
- data/lib/cuke_modeler/parsing.rb +66 -83
- data/lib/cuke_modeler/sourceable.rb +3 -11
- data/lib/cuke_modeler/stepped.rb +24 -0
- data/lib/cuke_modeler/taggable.rb +6 -29
- data/lib/cuke_modeler/version.rb +2 -1
- data/spec/integration/background_integration_spec.rb +332 -7
- data/spec/integration/cell_integration_spec.rb +321 -0
- data/spec/integration/directory_integration_spec.rb +175 -9
- data/spec/integration/doc_string_integration_spec.rb +318 -7
- data/spec/integration/example_integration_spec.rb +602 -19
- data/spec/integration/feature_file_integration_spec.rb +98 -3
- data/spec/integration/feature_integration_spec.rb +445 -27
- data/spec/integration/gherkin_2_adapter_spec.rb +122 -0
- data/spec/integration/gherkin_3_adapter_spec.rb +125 -0
- data/spec/integration/gherkin_4_adapter_spec.rb +123 -0
- data/spec/integration/model_integration_spec.rb +15 -0
- data/spec/integration/nested_integration_spec.rb +91 -0
- data/spec/integration/outline_integration_spec.rb +485 -12
- data/spec/integration/parsing_integration_spec.rb +85 -0
- data/spec/integration/row_integration_spec.rb +221 -18
- data/spec/integration/scenario_integration_spec.rb +368 -14
- data/spec/integration/shared/models_integration_specs.rb +18 -0
- data/spec/integration/step_integration_spec.rb +328 -77
- data/spec/integration/table_integration_spec.rb +242 -20
- data/spec/integration/tag_integration_spec.rb +178 -13
- data/spec/spec_helper.rb +32 -18
- data/spec/unit/background_unit_spec.rb +24 -44
- data/spec/unit/cell_unit_spec.rb +73 -0
- data/spec/unit/described_unit_spec.rb +23 -0
- data/spec/unit/directory_unit_spec.rb +52 -62
- data/spec/unit/doc_string_unit_spec.rb +47 -100
- data/spec/unit/example_unit_spec.rb +50 -296
- data/spec/unit/feature_file_unit_spec.rb +53 -52
- data/spec/unit/feature_unit_spec.rb +39 -83
- data/spec/unit/model_unit_spec.rb +15 -0
- data/spec/unit/named_unit_spec.rb +23 -0
- data/spec/unit/nested_unit_spec.rb +24 -21
- data/spec/unit/outline_unit_spec.rb +46 -69
- data/spec/unit/parsed_unit_spec.rb +27 -0
- data/spec/unit/parsing_unit_spec.rb +2 -70
- data/spec/unit/row_unit_spec.rb +22 -51
- data/spec/unit/scenario_unit_spec.rb +27 -59
- data/spec/unit/{bare_bones_unit_specs.rb → shared/bare_bones_models_unit_specs.rb} +2 -2
- data/spec/unit/shared/containing_models_unit_specs.rb +18 -0
- data/spec/unit/shared/described_models_unit_specs.rb +38 -0
- data/spec/unit/shared/models_unit_specs.rb +15 -0
- data/spec/unit/shared/named_models_unit_specs.rb +39 -0
- data/spec/unit/shared/nested_models_unit_specs.rb +51 -0
- data/spec/unit/shared/parsed_models_unit_specs.rb +39 -0
- data/spec/unit/shared/prepopulated_models_unit_specs.rb +18 -0
- data/spec/unit/shared/sourced_models_unit_specs.rb +39 -0
- data/spec/unit/shared/stepped_models_unit_specs.rb +46 -0
- data/spec/unit/shared/stringifiable_models_unit_specs.rb +18 -0
- data/spec/unit/shared/tagged_models_unit_specs.rb +72 -0
- data/spec/unit/sourceable_unit_spec.rb +12 -4
- data/spec/unit/step_unit_spec.rb +40 -231
- data/spec/unit/stepped_unit_spec.rb +23 -0
- data/spec/unit/table_unit_spec.rb +27 -89
- data/spec/unit/tag_unit_spec.rb +30 -53
- data/spec/unit/taggable_unit_spec.rb +26 -42
- data/todo.txt +32 -0
- metadata +135 -217
- data/features/analysis/test_manipulation.feature +0 -37
- data/features/modeling/gherkin/background_modeling.feature +0 -65
- data/features/modeling/gherkin/background_output.feature +0 -131
- data/features/modeling/gherkin/directory_modeling.feature +0 -110
- data/features/modeling/gherkin/directory_output.feature +0 -14
- data/features/modeling/gherkin/doc_string_modeling.feature +0 -53
- data/features/modeling/gherkin/doc_string_output.feature +0 -72
- data/features/modeling/gherkin/example_modeling.feature +0 -101
- data/features/modeling/gherkin/example_output.feature +0 -193
- data/features/modeling/gherkin/feature_file_modeling.feature +0 -54
- data/features/modeling/gherkin/feature_file_output.feature +0 -14
- data/features/modeling/gherkin/feature_modeling.feature +0 -154
- data/features/modeling/gherkin/feature_output.feature +0 -245
- data/features/modeling/gherkin/outline_modeling.feature +0 -90
- data/features/modeling/gherkin/outline_output.feature +0 -198
- data/features/modeling/gherkin/row_modeling.feature +0 -68
- data/features/modeling/gherkin/row_output.feature +0 -28
- data/features/modeling/gherkin/scenario_modeling.feature +0 -79
- data/features/modeling/gherkin/scenario_output.feature +0 -148
- data/features/modeling/gherkin/step_modeling.feature +0 -75
- data/features/modeling/gherkin/step_output.feature +0 -53
- data/features/modeling/gherkin/table_modeling.feature +0 -42
- data/features/modeling/gherkin/table_output.feature +0 -43
- data/features/modeling/gherkin/table_row_modeling.feature +0 -57
- data/features/modeling/gherkin/table_row_output.feature +0 -28
- data/features/modeling/gherkin/tag_modeling.feature +0 -48
- data/features/modeling/gherkin/tag_output.feature +0 -17
- data/features/modeling/gherkin3/background_modeling.feature +0 -64
- data/features/modeling/gherkin3/background_output.feature +0 -131
- data/features/modeling/gherkin3/directory_modeling.feature +0 -110
- data/features/modeling/gherkin3/directory_output.feature +0 -14
- data/features/modeling/gherkin3/doc_string_modeling.feature +0 -53
- data/features/modeling/gherkin3/doc_string_output.feature +0 -72
- data/features/modeling/gherkin3/example_modeling.feature +0 -100
- data/features/modeling/gherkin3/example_output.feature +0 -207
- data/features/modeling/gherkin3/feature_file_modeling.feature +0 -54
- data/features/modeling/gherkin3/feature_file_output.feature +0 -14
- data/features/modeling/gherkin3/feature_modeling.feature +0 -155
- data/features/modeling/gherkin3/feature_output.feature +0 -249
- data/features/modeling/gherkin3/outline_modeling.feature +0 -89
- data/features/modeling/gherkin3/outline_output.feature +0 -255
- data/features/modeling/gherkin3/row_modeling.feature +0 -68
- data/features/modeling/gherkin3/row_output.feature +0 -28
- data/features/modeling/gherkin3/scenario_modeling.feature +0 -78
- data/features/modeling/gherkin3/scenario_output.feature +0 -148
- data/features/modeling/gherkin3/step_modeling.feature +0 -75
- data/features/modeling/gherkin3/step_output.feature +0 -53
- data/features/modeling/gherkin3/table_modeling.feature +0 -42
- data/features/modeling/gherkin3/table_output.feature +0 -43
- data/features/modeling/gherkin3/table_row_modeling.feature +0 -57
- data/features/modeling/gherkin3/table_row_output.feature +0 -28
- data/features/modeling/gherkin3/tag_modeling.feature +0 -49
- data/features/modeling/gherkin3/tag_output.feature +0 -17
- data/features/modeling/gherkin4/background_modeling.feature +0 -64
- data/features/modeling/gherkin4/background_output.feature +0 -131
- data/features/modeling/gherkin4/directory_modeling.feature +0 -110
- data/features/modeling/gherkin4/directory_output.feature +0 -14
- data/features/modeling/gherkin4/doc_string_modeling.feature +0 -53
- data/features/modeling/gherkin4/doc_string_output.feature +0 -72
- data/features/modeling/gherkin4/example_modeling.feature +0 -100
- data/features/modeling/gherkin4/example_output.feature +0 -193
- data/features/modeling/gherkin4/feature_file_modeling.feature +0 -54
- data/features/modeling/gherkin4/feature_file_output.feature +0 -14
- data/features/modeling/gherkin4/feature_modeling.feature +0 -153
- data/features/modeling/gherkin4/feature_output.feature +0 -245
- data/features/modeling/gherkin4/outline_modeling.feature +0 -89
- data/features/modeling/gherkin4/outline_output.feature +0 -198
- data/features/modeling/gherkin4/row_modeling.feature +0 -68
- data/features/modeling/gherkin4/row_output.feature +0 -28
- data/features/modeling/gherkin4/scenario_modeling.feature +0 -78
- data/features/modeling/gherkin4/scenario_output.feature +0 -148
- data/features/modeling/gherkin4/step_modeling.feature +0 -75
- data/features/modeling/gherkin4/step_output.feature +0 -53
- data/features/modeling/gherkin4/table_modeling.feature +0 -42
- data/features/modeling/gherkin4/table_output.feature +0 -43
- data/features/modeling/gherkin4/table_row_modeling.feature +0 -57
- data/features/modeling/gherkin4/table_row_output.feature +0 -28
- data/features/modeling/gherkin4/tag_modeling.feature +0 -48
- data/features/modeling/gherkin4/tag_output.feature +0 -17
- data/features/step_definitions/outline_steps.rb +0 -258
- data/features/step_definitions/test_steps.rb +0 -123
- data/lib/cuke_modeler/background.rb +0 -38
- data/lib/cuke_modeler/directory.rb +0 -83
- data/lib/cuke_modeler/doc_string.rb +0 -87
- data/lib/cuke_modeler/example.rb +0 -195
- data/lib/cuke_modeler/feature.rb +0 -147
- data/lib/cuke_modeler/feature_element.rb +0 -73
- data/lib/cuke_modeler/feature_file.rb +0 -77
- data/lib/cuke_modeler/outline.rb +0 -68
- data/lib/cuke_modeler/raw.rb +0 -20
- data/lib/cuke_modeler/row.rb +0 -64
- data/lib/cuke_modeler/scenario.rb +0 -45
- data/lib/cuke_modeler/step.rb +0 -216
- data/lib/cuke_modeler/table.rb +0 -90
- data/lib/cuke_modeler/table_row.rb +0 -64
- data/lib/cuke_modeler/tag.rb +0 -62
- data/lib/cuke_modeler/test_element.rb +0 -79
- data/lib/cuke_modeler/world.rb +0 -113
- data/spec/integration/table_row_integration_spec.rb +0 -76
- data/spec/integration/world_integration_spec.rb +0 -14
- data/spec/unit/containing_element_unit_specs.rb +0 -18
- data/spec/unit/feature_element_unit_spec.rb +0 -19
- data/spec/unit/feature_element_unit_specs.rb +0 -52
- data/spec/unit/nested_element_unit_specs.rb +0 -39
- data/spec/unit/prepopulated_unit_specs.rb +0 -14
- data/spec/unit/raw_element_unit_specs.rb +0 -27
- data/spec/unit/raw_unit_spec.rb +0 -28
- data/spec/unit/sourced_element_unit_specs.rb +0 -18
- data/spec/unit/table_row_unit_spec.rb +0 -102
- data/spec/unit/tagged_element_unit_specs.rb +0 -67
- data/spec/unit/test_element_unit_spec.rb +0 -54
- data/spec/unit/test_element_unit_specs.rb +0 -34
- data/spec/unit/world_unit_spec.rb +0 -140
|
@@ -1,15 +1,72 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
SimpleCov.command_name('Outline') unless RUBY_VERSION.to_s < '1.9.0'
|
|
4
3
|
|
|
5
4
|
describe 'Outline, Integration' do
|
|
6
5
|
|
|
7
6
|
let(:clazz) { CukeModeler::Outline }
|
|
8
7
|
|
|
9
8
|
|
|
9
|
+
describe 'common behavior' do
|
|
10
|
+
|
|
11
|
+
it_should_behave_like 'a model, integration'
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
|
|
10
15
|
describe 'unique behavior' do
|
|
11
16
|
|
|
12
|
-
it '
|
|
17
|
+
it 'can be instantiated with the minimum viable Gherkin', :gherkin4 => true do
|
|
18
|
+
source = "Scenario Outline:"
|
|
19
|
+
|
|
20
|
+
expect { clazz.new(source) }.to_not raise_error
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'can be instantiated with the minimum viable Gherkin', :gherkin2 => true do
|
|
24
|
+
source = "Scenario Outline:"
|
|
25
|
+
|
|
26
|
+
expect { clazz.new(source) }.to_not raise_error
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# gherkin 3.x does not accept incomplete outlines
|
|
30
|
+
it 'can be instantiated with the minimum viable Gherkin', :gherkin3 => true do
|
|
31
|
+
source = "Scenario Outline:
|
|
32
|
+
Examples:
|
|
33
|
+
| param |
|
|
34
|
+
| value |"
|
|
35
|
+
|
|
36
|
+
expect { clazz.new(source) }.to_not raise_error
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
|
|
40
|
+
outline = clazz.new("@tag\nScenario Outline: test outline\ndescription\n* a step\nExamples:\n|param|\n|value|")
|
|
41
|
+
data = outline.parsing_data
|
|
42
|
+
|
|
43
|
+
expect(data.keys).to match_array([:type, :tags, :location, :keyword, :name, :steps, :examples, :description])
|
|
44
|
+
expect(data[:type]).to eq(:ScenarioOutline)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
|
|
48
|
+
outline = clazz.new("@tag\nScenario Outline: test outline\ndescription\n* a step\nExamples:\n|param|\n|value|")
|
|
49
|
+
data = outline.parsing_data
|
|
50
|
+
|
|
51
|
+
expect(data.keys).to match_array([:type, :tags, :location, :keyword, :name, :steps, :examples, :description])
|
|
52
|
+
expect(data[:type]).to eq(:ScenarioOutline)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
|
|
56
|
+
outline = clazz.new("@tag\nScenario Outline: test outline\ndescription\n* a step\nExamples:\n|param|\n|value|")
|
|
57
|
+
data = outline.parsing_data
|
|
58
|
+
|
|
59
|
+
expect(data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'type', 'examples', 'steps', 'tags'])
|
|
60
|
+
expect(data['keyword']).to eq('Scenario Outline')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'provides a descriptive filename when being parsed from stand alone text' do
|
|
64
|
+
source = "bad outline text \n Scenario Outline:\n And a step\n @foo "
|
|
65
|
+
|
|
66
|
+
expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_outline\.feature'/)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'properly sets its child models' do
|
|
13
70
|
source = ['@a_tag',
|
|
14
71
|
' Scenario Outline:',
|
|
15
72
|
' * a step',
|
|
@@ -21,11 +78,11 @@ describe 'Outline, Integration' do
|
|
|
21
78
|
outline = clazz.new(source)
|
|
22
79
|
example = outline.examples.first
|
|
23
80
|
step = outline.steps.first
|
|
24
|
-
tag = outline.
|
|
81
|
+
tag = outline.tags.first
|
|
25
82
|
|
|
26
|
-
expect(example.
|
|
27
|
-
expect(step.
|
|
28
|
-
expect(tag.
|
|
83
|
+
expect(example.parent_model).to equal(outline)
|
|
84
|
+
expect(step.parent_model).to equal(outline)
|
|
85
|
+
expect(tag.parent_model).to equal(outline)
|
|
29
86
|
end
|
|
30
87
|
|
|
31
88
|
|
|
@@ -46,7 +103,7 @@ describe 'Outline, Integration' do
|
|
|
46
103
|
end
|
|
47
104
|
|
|
48
105
|
let(:directory) { CukeModeler::Directory.new(@default_file_directory) }
|
|
49
|
-
let(:outline) { directory.feature_files.first.
|
|
106
|
+
let(:outline) { directory.feature_files.first.feature.tests.first }
|
|
50
107
|
|
|
51
108
|
|
|
52
109
|
it 'can get its directory' do
|
|
@@ -64,7 +121,7 @@ describe 'Outline, Integration' do
|
|
|
64
121
|
it 'can get its feature' do
|
|
65
122
|
ancestor = outline.get_ancestor(:feature)
|
|
66
123
|
|
|
67
|
-
expect(ancestor).to equal(directory.feature_files.first.
|
|
124
|
+
expect(ancestor).to equal(directory.feature_files.first.feature)
|
|
68
125
|
end
|
|
69
126
|
|
|
70
127
|
it 'returns nil if it does not have the requested type of ancestor' do
|
|
@@ -73,15 +130,431 @@ describe 'Outline, Integration' do
|
|
|
73
130
|
expect(ancestor).to be_nil
|
|
74
131
|
end
|
|
75
132
|
|
|
76
|
-
describe 'outline output edge cases' do
|
|
77
133
|
|
|
78
|
-
|
|
134
|
+
describe 'model population' do
|
|
135
|
+
|
|
136
|
+
context 'from source text' do
|
|
137
|
+
|
|
138
|
+
it "models the outline's source line" do
|
|
139
|
+
source_text = 'Feature:
|
|
140
|
+
|
|
141
|
+
Scenario Outline: foo
|
|
142
|
+
* step
|
|
143
|
+
Examples:
|
|
144
|
+
| param |
|
|
145
|
+
| value |'
|
|
146
|
+
outline = CukeModeler::Feature.new(source_text).tests.first
|
|
147
|
+
|
|
148
|
+
expect(outline.source_line).to eq(3)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
context 'a filled outline' do
|
|
153
|
+
|
|
154
|
+
let(:source_text) { '@tag1 @tag2 @tag3
|
|
155
|
+
Scenario Outline: Foo
|
|
156
|
+
Scenario description.
|
|
157
|
+
|
|
158
|
+
Some more.
|
|
159
|
+
Even more.
|
|
160
|
+
|
|
161
|
+
Given a <setup> step
|
|
162
|
+
When an action step
|
|
163
|
+
Then a <verification> step
|
|
164
|
+
|
|
165
|
+
Examples: example 1
|
|
166
|
+
| setup | verification |
|
|
167
|
+
| x | y |
|
|
168
|
+
Examples: example 2
|
|
169
|
+
| setup | verification |
|
|
170
|
+
| a | b |' }
|
|
171
|
+
let(:outline) { clazz.new(source_text) }
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
it "models the outline's name" do
|
|
175
|
+
expect(outline.name).to eq('Foo')
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "models the outline's description" do
|
|
179
|
+
description = outline.description.split("\n")
|
|
180
|
+
|
|
181
|
+
expect(description).to eq([' Scenario description.',
|
|
182
|
+
'',
|
|
183
|
+
'Some more.',
|
|
184
|
+
' Even more.'])
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "models the outline's steps" do
|
|
188
|
+
step_names = outline.steps.collect { |step| step.text }
|
|
189
|
+
|
|
190
|
+
expect(step_names).to eq(['a <setup> step', 'an action step', 'a <verification> step'])
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "models the outline's tags" do
|
|
194
|
+
tag_names = outline.tags.collect { |tag| tag.name }
|
|
195
|
+
|
|
196
|
+
expect(tag_names).to eq(['@tag1', '@tag2', '@tag3'])
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
it "models the outline's examples" do
|
|
200
|
+
example_names = outline.examples.collect { |example| example.name }
|
|
201
|
+
|
|
202
|
+
expect(example_names).to eq(['example 1', 'example 2'])
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
# gherkin 3.x does not accept incomplete outlines
|
|
209
|
+
context 'an empty outline', :gherkin3 => false do
|
|
210
|
+
|
|
211
|
+
let(:source_text) { 'Scenario Outline:' }
|
|
212
|
+
let(:outline) { clazz.new(source_text) }
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
it "models the outline's name" do
|
|
216
|
+
expect(outline.name).to eq('')
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "models the outline's description" do
|
|
220
|
+
expect(outline.description).to eq('')
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "models the outline's steps" do
|
|
224
|
+
expect(outline.steps).to eq([])
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
it "models the outline's tags" do
|
|
228
|
+
expect(outline.tags).to eq([])
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
it "models the outline's examples" do
|
|
232
|
+
expect(outline.examples).to eq([])
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
it 'trims whitespace from its source description' do
|
|
240
|
+
source = ['Scenario Outline:',
|
|
241
|
+
' ',
|
|
242
|
+
' description line 1',
|
|
243
|
+
'',
|
|
244
|
+
' description line 2',
|
|
245
|
+
' description line 3 ',
|
|
246
|
+
'',
|
|
247
|
+
'',
|
|
248
|
+
'',
|
|
249
|
+
' * a step',
|
|
250
|
+
'',
|
|
251
|
+
'Examples:',
|
|
252
|
+
'|param|',
|
|
253
|
+
'|value|']
|
|
254
|
+
source = source.join("\n")
|
|
255
|
+
|
|
256
|
+
outline = clazz.new(source)
|
|
257
|
+
description = outline.description.split("\n")
|
|
258
|
+
|
|
259
|
+
expect(description).to eq([' description line 1',
|
|
260
|
+
'',
|
|
261
|
+
'description line 2',
|
|
262
|
+
' description line 3'])
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
describe 'comparison' do
|
|
269
|
+
|
|
270
|
+
it 'is equal to a background with the same steps' do
|
|
271
|
+
source = "Scenario Outline:
|
|
272
|
+
* step 1
|
|
273
|
+
* step 2
|
|
274
|
+
Examples:
|
|
275
|
+
| param |
|
|
276
|
+
| value |"
|
|
277
|
+
outline = clazz.new(source)
|
|
278
|
+
|
|
279
|
+
source = "Background:
|
|
280
|
+
* step 1
|
|
281
|
+
* step 2"
|
|
282
|
+
background_1 = CukeModeler::Background.new(source)
|
|
283
|
+
|
|
284
|
+
source = "Background:
|
|
285
|
+
* step 2
|
|
286
|
+
* step 1"
|
|
287
|
+
background_2 = CukeModeler::Background.new(source)
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
expect(outline).to eq(background_1)
|
|
291
|
+
expect(outline).to_not eq(background_2)
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
it 'is equal to a scenario with the same steps' do
|
|
295
|
+
source = "Scenario Outline:
|
|
296
|
+
* step 1
|
|
297
|
+
* step 2
|
|
298
|
+
Examples:
|
|
299
|
+
| param |
|
|
300
|
+
| value |"
|
|
301
|
+
outline = clazz.new(source)
|
|
302
|
+
|
|
303
|
+
source = "Scenario:
|
|
304
|
+
* step 1
|
|
305
|
+
* step 2"
|
|
306
|
+
scenario_1 = CukeModeler::Scenario.new(source)
|
|
307
|
+
|
|
308
|
+
source = "Scenario:
|
|
309
|
+
* step 2
|
|
310
|
+
* step 1"
|
|
311
|
+
scenario_2 = CukeModeler::Scenario.new(source)
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
expect(outline).to eq(scenario_1)
|
|
315
|
+
expect(outline).to_not eq(scenario_2)
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
it 'is equal to an outline with the same steps' do
|
|
319
|
+
source = "Scenario Outline:
|
|
320
|
+
* step 1
|
|
321
|
+
* step 2
|
|
322
|
+
Examples:
|
|
323
|
+
| param |
|
|
324
|
+
| value |"
|
|
325
|
+
outline_1 = clazz.new(source)
|
|
326
|
+
|
|
327
|
+
source = "Scenario Outline:
|
|
328
|
+
* step 1
|
|
329
|
+
* step 2
|
|
330
|
+
Examples:
|
|
331
|
+
| param |
|
|
332
|
+
| value |"
|
|
333
|
+
outline_2 = clazz.new(source)
|
|
334
|
+
|
|
335
|
+
source = "Scenario Outline:
|
|
336
|
+
* step 2
|
|
337
|
+
* step 1
|
|
338
|
+
Examples:
|
|
339
|
+
| param |
|
|
340
|
+
| value |"
|
|
341
|
+
outline_3 = clazz.new(source)
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
expect(outline_1).to eq(outline_2)
|
|
345
|
+
expect(outline_1).to_not eq(outline_3)
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
describe 'outline output' do
|
|
352
|
+
|
|
353
|
+
it 'can be remade from its own output' do
|
|
354
|
+
source = ['@tag1 @tag2 @tag3',
|
|
355
|
+
'Scenario Outline: An outline with everything it could have',
|
|
356
|
+
'',
|
|
357
|
+
'Some description.',
|
|
358
|
+
'Some more description.',
|
|
359
|
+
'',
|
|
360
|
+
' * a step',
|
|
361
|
+
' | value |',
|
|
362
|
+
' * a <value> step',
|
|
363
|
+
' """',
|
|
364
|
+
' some string',
|
|
365
|
+
' """',
|
|
366
|
+
'',
|
|
367
|
+
'Examples:',
|
|
368
|
+
'',
|
|
369
|
+
'Some description.',
|
|
370
|
+
'Some more description.',
|
|
371
|
+
'',
|
|
372
|
+
' | value |',
|
|
373
|
+
' | x |',
|
|
374
|
+
'',
|
|
375
|
+
'@example_tag',
|
|
376
|
+
'Examples:',
|
|
377
|
+
' | value |',
|
|
378
|
+
' | y |']
|
|
379
|
+
source = source.join("\n")
|
|
380
|
+
outline = clazz.new(source)
|
|
381
|
+
|
|
382
|
+
outline_output = outline.to_s
|
|
383
|
+
remade_outline_output = clazz.new(outline_output).to_s
|
|
384
|
+
|
|
385
|
+
expect(remade_outline_output).to eq(outline_output)
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
context 'from source text' do
|
|
390
|
+
|
|
391
|
+
# gherkin 3.x does not accept incomplete outlines
|
|
392
|
+
it 'can output an empty outline', :gherkin3 => false do
|
|
393
|
+
source = ['Scenario Outline:']
|
|
394
|
+
source = source.join("\n")
|
|
395
|
+
outline = clazz.new(source)
|
|
396
|
+
|
|
397
|
+
outline_output = outline.to_s.split("\n")
|
|
398
|
+
|
|
399
|
+
expect(outline_output).to eq(['Scenario Outline:'])
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
# gherkin 3.x does not accept incomplete outlines
|
|
403
|
+
it 'can output a outline that has a name', :gherkin3 => false do
|
|
404
|
+
source = ['Scenario Outline: test outline']
|
|
405
|
+
source = source.join("\n")
|
|
406
|
+
outline = clazz.new(source)
|
|
407
|
+
|
|
408
|
+
outline_output = outline.to_s.split("\n")
|
|
409
|
+
|
|
410
|
+
expect(outline_output).to eq(['Scenario Outline: test outline'])
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
# gherkin 3.x does not accept incomplete outlines
|
|
414
|
+
it 'can output a outline that has a description', :gherkin3 => false do
|
|
415
|
+
source = ['Scenario Outline:',
|
|
416
|
+
'Some description.',
|
|
417
|
+
'Some more description.']
|
|
418
|
+
source = source.join("\n")
|
|
419
|
+
outline = clazz.new(source)
|
|
420
|
+
|
|
421
|
+
outline_output = outline.to_s.split("\n")
|
|
422
|
+
|
|
423
|
+
expect(outline_output).to eq(['Scenario Outline:',
|
|
424
|
+
'',
|
|
425
|
+
'Some description.',
|
|
426
|
+
'Some more description.'])
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
# gherkin 3.x does not accept incomplete outlines
|
|
430
|
+
it 'can output a outline that has steps', :gherkin3 => false do
|
|
431
|
+
source = ['Scenario Outline:',
|
|
432
|
+
' * a step',
|
|
433
|
+
' | value |',
|
|
434
|
+
' * another step',
|
|
435
|
+
' """',
|
|
436
|
+
' some string',
|
|
437
|
+
' """']
|
|
438
|
+
source = source.join("\n")
|
|
439
|
+
outline = clazz.new(source)
|
|
440
|
+
|
|
441
|
+
outline_output = outline.to_s.split("\n")
|
|
442
|
+
|
|
443
|
+
expect(outline_output).to eq(['Scenario Outline:',
|
|
444
|
+
' * a step',
|
|
445
|
+
' | value |',
|
|
446
|
+
' * another step',
|
|
447
|
+
' """',
|
|
448
|
+
' some string',
|
|
449
|
+
' """'])
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
# gherkin 3.x does not accept incomplete outlines
|
|
453
|
+
it 'can output a outline that has tags', :gherkin3 => false do
|
|
454
|
+
source = ['@tag1 @tag2',
|
|
455
|
+
'@tag3',
|
|
456
|
+
'Scenario Outline:']
|
|
457
|
+
source = source.join("\n")
|
|
458
|
+
outline = clazz.new(source)
|
|
459
|
+
|
|
460
|
+
outline_output = outline.to_s.split("\n")
|
|
461
|
+
|
|
462
|
+
expect(outline_output).to eq(['@tag1 @tag2 @tag3',
|
|
463
|
+
'Scenario Outline:'])
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
it 'can output a outline that has examples' do
|
|
467
|
+
source = ['Scenario Outline:',
|
|
468
|
+
'* a step',
|
|
469
|
+
'Examples:',
|
|
470
|
+
'| value |',
|
|
471
|
+
'| x |',
|
|
472
|
+
'Examples:',
|
|
473
|
+
'| value |',
|
|
474
|
+
'| y |']
|
|
475
|
+
source = source.join("\n")
|
|
476
|
+
outline = clazz.new(source)
|
|
477
|
+
|
|
478
|
+
outline_output = outline.to_s.split("\n")
|
|
479
|
+
|
|
480
|
+
expect(outline_output).to eq(['Scenario Outline:',
|
|
481
|
+
' * a step',
|
|
482
|
+
'',
|
|
483
|
+
'Examples:',
|
|
484
|
+
' | value |',
|
|
485
|
+
' | x |',
|
|
486
|
+
'',
|
|
487
|
+
'Examples:',
|
|
488
|
+
' | value |',
|
|
489
|
+
' | y |'])
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
it 'can output a outline that has everything' do
|
|
493
|
+
source = ['@tag1 @tag2 @tag3',
|
|
494
|
+
'Scenario Outline: A outline with everything it could have',
|
|
495
|
+
'Including a description',
|
|
496
|
+
'and then some.',
|
|
497
|
+
'* a step',
|
|
498
|
+
'|value|',
|
|
499
|
+
'* another step',
|
|
500
|
+
'"""',
|
|
501
|
+
'some string',
|
|
502
|
+
'"""',
|
|
503
|
+
'',
|
|
504
|
+
'Examples:',
|
|
505
|
+
'',
|
|
506
|
+
'Some description.',
|
|
507
|
+
'Some more description.',
|
|
508
|
+
'',
|
|
509
|
+
'| value |',
|
|
510
|
+
'| x |',
|
|
511
|
+
'',
|
|
512
|
+
'@example_tag',
|
|
513
|
+
'Examples:',
|
|
514
|
+
'| value |',
|
|
515
|
+
'| y |']
|
|
516
|
+
source = source.join("\n")
|
|
517
|
+
outline = clazz.new(source)
|
|
518
|
+
|
|
519
|
+
outline_output = outline.to_s.split("\n")
|
|
520
|
+
|
|
521
|
+
expect(outline_output).to eq(['@tag1 @tag2 @tag3',
|
|
522
|
+
'Scenario Outline: A outline with everything it could have',
|
|
523
|
+
'',
|
|
524
|
+
'Including a description',
|
|
525
|
+
'and then some.',
|
|
526
|
+
'',
|
|
527
|
+
' * a step',
|
|
528
|
+
' | value |',
|
|
529
|
+
' * another step',
|
|
530
|
+
' """',
|
|
531
|
+
' some string',
|
|
532
|
+
' """',
|
|
533
|
+
'',
|
|
534
|
+
'Examples:',
|
|
535
|
+
'',
|
|
536
|
+
'Some description.',
|
|
537
|
+
'Some more description.',
|
|
538
|
+
'',
|
|
539
|
+
' | value |',
|
|
540
|
+
' | x |',
|
|
541
|
+
'',
|
|
542
|
+
'@example_tag',
|
|
543
|
+
'Examples:',
|
|
544
|
+
' | value |',
|
|
545
|
+
' | y |'])
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
|
|
551
|
+
context 'from abstract instantiation' do
|
|
79
552
|
|
|
80
553
|
let(:outline) { clazz.new }
|
|
81
554
|
|
|
82
555
|
|
|
83
|
-
it 'can output an outline that has only
|
|
84
|
-
outline.
|
|
556
|
+
it 'can output an outline that has only tags' do
|
|
557
|
+
outline.tags = [CukeModeler::Tag.new]
|
|
85
558
|
|
|
86
559
|
expect { outline.to_s }.to_not raise_error
|
|
87
560
|
end
|