cuke_modeler 1.4.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +329 -0
- data/LICENSE.txt +1 -1
- data/README.md +25 -18
- data/cuke_modeler.gemspec +15 -9
- data/lib/cuke_modeler/adapters/gherkin_10_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/gherkin_11_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/gherkin_12_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/gherkin_13_adapter.rb +12 -0
- data/lib/cuke_modeler/adapters/{gherkin_6_adapter.rb → gherkin_9_adapter.rb} +75 -64
- data/lib/cuke_modeler/containing.rb +16 -0
- data/lib/cuke_modeler/described.rb +1 -0
- data/lib/cuke_modeler/models/background.rb +1 -1
- data/lib/cuke_modeler/models/cell.rb +1 -1
- data/lib/cuke_modeler/models/comment.rb +1 -1
- data/lib/cuke_modeler/models/directory.rb +2 -2
- data/lib/cuke_modeler/models/doc_string.rb +1 -1
- data/lib/cuke_modeler/models/example.rb +1 -1
- data/lib/cuke_modeler/models/feature.rb +1 -1
- data/lib/cuke_modeler/models/feature_file.rb +2 -2
- data/lib/cuke_modeler/models/outline.rb +1 -1
- data/lib/cuke_modeler/models/row.rb +1 -1
- data/lib/cuke_modeler/models/scenario.rb +1 -1
- data/lib/cuke_modeler/models/step.rb +32 -3
- data/lib/cuke_modeler/models/table.rb +1 -1
- data/lib/cuke_modeler/models/tag.rb +1 -1
- 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 +88 -92
- 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
- metadata +55 -142
- data/.gitignore +0 -18
- data/.simplecov +0 -7
- data/.travis.yml +0 -54
- data/Gemfile +0 -36
- data/History.md +0 -191
- data/Rakefile +0 -63
- data/appveyor.yml +0 -43
- data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +0 -273
- data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +0 -296
- data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +0 -308
- data/testing/cucumber/step_definitions/action_steps.rb +0 -13
- data/testing/cucumber/step_definitions/background_steps.rb +0 -1
- data/testing/cucumber/step_definitions/directory_steps.rb +0 -6
- data/testing/cucumber/step_definitions/doc_string_steps.rb +0 -1
- data/testing/cucumber/step_definitions/feature_file_steps.rb +0 -16
- data/testing/cucumber/step_definitions/feature_steps.rb +0 -7
- data/testing/cucumber/step_definitions/modeling_steps.rb +0 -44
- data/testing/cucumber/step_definitions/setup_steps.rb +0 -32
- data/testing/cucumber/step_definitions/step_steps.rb +0 -3
- data/testing/cucumber/step_definitions/table_steps.rb +0 -1
- data/testing/cucumber/step_definitions/tag_steps.rb +0 -3
- data/testing/cucumber/step_definitions/verification_steps.rb +0 -173
- data/testing/cucumber/support/env.rb +0 -30
- data/testing/dialect_helper.rb +0 -48
- data/testing/file_helper.rb +0 -47
- data/testing/gemfiles/gherkin2.gemfile +0 -32
- data/testing/gemfiles/gherkin3.gemfile +0 -26
- data/testing/gemfiles/gherkin4.gemfile +0 -27
- data/testing/gemfiles/gherkin5.gemfile +0 -26
- data/testing/gemfiles/gherkin6.gemfile +0 -10
- data/testing/rspec/spec/integration/background_integration_spec.rb +0 -442
- data/testing/rspec/spec/integration/cell_integration_spec.rb +0 -335
- data/testing/rspec/spec/integration/comment_integration_spec.rb +0 -177
- data/testing/rspec/spec/integration/directory_integration_spec.rb +0 -218
- data/testing/rspec/spec/integration/doc_string_integration_spec.rb +0 -402
- data/testing/rspec/spec/integration/example_integration_spec.rb +0 -741
- data/testing/rspec/spec/integration/feature_file_integration_spec.rb +0 -272
- data/testing/rspec/spec/integration/feature_integration_spec.rb +0 -650
- data/testing/rspec/spec/integration/gherkin_2_adapter_spec.rb +0 -166
- data/testing/rspec/spec/integration/gherkin_3_adapter_spec.rb +0 -166
- data/testing/rspec/spec/integration/gherkin_4_adapter_spec.rb +0 -165
- data/testing/rspec/spec/integration/gherkin_6_adapter_spec.rb +0 -166
- data/testing/rspec/spec/integration/model_integration_spec.rb +0 -15
- data/testing/rspec/spec/integration/nested_integration_spec.rb +0 -91
- data/testing/rspec/spec/integration/outline_integration_spec.rb +0 -624
- data/testing/rspec/spec/integration/parsing_integration_spec.rb +0 -117
- data/testing/rspec/spec/integration/row_integration_spec.rb +0 -291
- data/testing/rspec/spec/integration/scenario_integration_spec.rb +0 -479
- data/testing/rspec/spec/integration/shared/models_integration_specs.rb +0 -18
- data/testing/rspec/spec/integration/step_integration_spec.rb +0 -475
- data/testing/rspec/spec/integration/table_integration_spec.rb +0 -337
- data/testing/rspec/spec/integration/tag_integration_spec.rb +0 -259
- data/testing/rspec/spec/spec_helper.rb +0 -122
- data/testing/rspec/spec/unit/background_unit_spec.rb +0 -83
- data/testing/rspec/spec/unit/cell_unit_spec.rb +0 -68
- data/testing/rspec/spec/unit/comment_unit_spec.rb +0 -68
- data/testing/rspec/spec/unit/described_unit_spec.rb +0 -23
- data/testing/rspec/spec/unit/directory_unit_spec.rb +0 -127
- data/testing/rspec/spec/unit/doc_string_unit_spec.rb +0 -100
- data/testing/rspec/spec/unit/example_unit_spec.rb +0 -133
- data/testing/rspec/spec/unit/feature_file_unit_spec.rb +0 -125
- data/testing/rspec/spec/unit/feature_unit_spec.rb +0 -157
- data/testing/rspec/spec/unit/model_unit_spec.rb +0 -15
- data/testing/rspec/spec/unit/named_unit_spec.rb +0 -23
- data/testing/rspec/spec/unit/nested_unit_spec.rb +0 -43
- data/testing/rspec/spec/unit/outline_unit_spec.rb +0 -117
- data/testing/rspec/spec/unit/parsed_unit_spec.rb +0 -27
- data/testing/rspec/spec/unit/parsing_unit_spec.rb +0 -54
- data/testing/rspec/spec/unit/row_unit_spec.rb +0 -68
- data/testing/rspec/spec/unit/scenario_unit_spec.rb +0 -86
- data/testing/rspec/spec/unit/shared/bare_bones_models_unit_specs.rb +0 -14
- data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +0 -25
- data/testing/rspec/spec/unit/shared/described_models_unit_specs.rb +0 -38
- data/testing/rspec/spec/unit/shared/keyworded_models_unit_specs.rb +0 -58
- data/testing/rspec/spec/unit/shared/models_unit_specs.rb +0 -15
- data/testing/rspec/spec/unit/shared/named_models_unit_specs.rb +0 -39
- data/testing/rspec/spec/unit/shared/nested_models_unit_specs.rb +0 -51
- data/testing/rspec/spec/unit/shared/parsed_models_unit_specs.rb +0 -39
- data/testing/rspec/spec/unit/shared/prepopulated_models_unit_specs.rb +0 -18
- data/testing/rspec/spec/unit/shared/sourced_models_unit_specs.rb +0 -39
- data/testing/rspec/spec/unit/shared/stepped_models_unit_specs.rb +0 -46
- data/testing/rspec/spec/unit/shared/stringifiable_models_unit_specs.rb +0 -18
- data/testing/rspec/spec/unit/shared/tagged_models_unit_specs.rb +0 -72
- data/testing/rspec/spec/unit/sourceable_unit_spec.rb +0 -27
- data/testing/rspec/spec/unit/step_unit_spec.rb +0 -109
- data/testing/rspec/spec/unit/stepped_unit_spec.rb +0 -23
- data/testing/rspec/spec/unit/table_unit_spec.rb +0 -77
- data/testing/rspec/spec/unit/tag_unit_spec.rb +0 -68
- data/testing/rspec/spec/unit/taggable_unit_spec.rb +0 -69
- data/testing/test_languages.json +0 -45
- data/todo.txt +0 -24
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative 'gherkin_9_adapter'
|
2
|
+
|
3
|
+
|
4
|
+
module CukeModeler
|
5
|
+
|
6
|
+
# NOT A PART OF THE PUBLIC API
|
7
|
+
# An adapter that can convert the output of version 10.x of the *cucumber-gherkin* gem into input that is consumable by this gem.
|
8
|
+
|
9
|
+
class Gherkin10Adapter < Gherkin9Adapter
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative 'gherkin_9_adapter'
|
2
|
+
|
3
|
+
|
4
|
+
module CukeModeler
|
5
|
+
|
6
|
+
# NOT A PART OF THE PUBLIC API
|
7
|
+
# An adapter that can convert the output of version 11.x of the *cucumber-gherkin* gem into input that is consumable by this gem.
|
8
|
+
|
9
|
+
class Gherkin11Adapter < Gherkin9Adapter
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative 'gherkin_9_adapter'
|
2
|
+
|
3
|
+
|
4
|
+
module CukeModeler
|
5
|
+
|
6
|
+
# NOT A PART OF THE PUBLIC API
|
7
|
+
# An adapter that can convert the output of version 12.x of the *cucumber-gherkin* gem into input that is consumable by this gem.
|
8
|
+
|
9
|
+
class Gherkin12Adapter < Gherkin9Adapter
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative 'gherkin_9_adapter'
|
2
|
+
|
3
|
+
|
4
|
+
module CukeModeler
|
5
|
+
|
6
|
+
# NOT A PART OF THE PUBLIC API
|
7
|
+
# An adapter that can convert the output of version 13.x of the *cucumber-gherkin* gem into input that is consumable by this gem.
|
8
|
+
|
9
|
+
class Gherkin13Adapter < Gherkin9Adapter
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module CukeModeler
|
2
2
|
|
3
|
-
#
|
3
|
+
# NOT A PART OF THE PUBLIC API
|
4
|
+
# An adapter that can convert the output of version 9.x of the *cucumber-gherkin* gem into input that is consumable by this gem.
|
4
5
|
|
5
|
-
class
|
6
|
+
class Gherkin9Adapter
|
6
7
|
|
7
8
|
# Adapts the given AST into the shape that this gem expects
|
8
9
|
def adapt(parsed_ast)
|
@@ -10,20 +11,21 @@ module CukeModeler
|
|
10
11
|
parsed_ast['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_ast))
|
11
12
|
|
12
13
|
# Removing parsed data for child elements in order to avoid duplicating data
|
13
|
-
parsed_ast['cuke_modeler_parsing_data'][:feature] = nil
|
14
|
-
parsed_ast['cuke_modeler_parsing_data'][:comments] = nil
|
14
|
+
parsed_ast['cuke_modeler_parsing_data'][:feature] = nil if parsed_ast['cuke_modeler_parsing_data'][:feature]
|
15
|
+
parsed_ast['cuke_modeler_parsing_data'][:comments] = nil if parsed_ast['cuke_modeler_parsing_data'][:comments]
|
15
16
|
|
16
|
-
# Comments are stored on the feature file in gherkin 4.x
|
17
17
|
parsed_ast['comments'] = []
|
18
|
-
parsed_ast[:comments]
|
19
|
-
|
18
|
+
if parsed_ast[:comments]
|
19
|
+
parsed_ast[:comments].each do |comment|
|
20
|
+
adapt_comment!(comment)
|
21
|
+
end
|
22
|
+
parsed_ast['comments'].concat(parsed_ast.delete(:comments))
|
20
23
|
end
|
21
|
-
parsed_ast['comments'].concat(parsed_ast.delete(:comments))
|
22
24
|
|
23
25
|
adapt_feature!(parsed_ast[:feature]) if parsed_ast[:feature]
|
24
26
|
parsed_ast['feature'] = parsed_ast.delete(:feature)
|
25
27
|
|
26
|
-
|
28
|
+
parsed_ast
|
27
29
|
end
|
28
30
|
|
29
31
|
# Adapts the AST sub-tree that is rooted at the given feature node.
|
@@ -32,23 +34,27 @@ module CukeModeler
|
|
32
34
|
parsed_feature['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_feature))
|
33
35
|
|
34
36
|
# Removing parsed data for child elements in order to avoid duplicating data
|
35
|
-
parsed_feature['cuke_modeler_parsing_data'][:tags] = nil
|
36
|
-
parsed_feature['cuke_modeler_parsing_data'][:children] = nil
|
37
|
+
parsed_feature['cuke_modeler_parsing_data'][:tags] = nil if parsed_feature['cuke_modeler_parsing_data'][:tags]
|
38
|
+
parsed_feature['cuke_modeler_parsing_data'][:children] = nil if parsed_feature['cuke_modeler_parsing_data'][:children]
|
37
39
|
|
38
40
|
parsed_feature['keyword'] = parsed_feature.delete(:keyword)
|
39
41
|
parsed_feature['name'] = parsed_feature.delete(:name)
|
40
|
-
parsed_feature['description'] = parsed_feature.delete(:description)
|
42
|
+
parsed_feature['description'] = parsed_feature.delete(:description) || ''
|
41
43
|
parsed_feature['line'] = parsed_feature.delete(:location)[:line]
|
42
44
|
|
43
45
|
parsed_feature['elements'] = []
|
44
|
-
|
45
|
-
|
46
|
+
if parsed_feature[:children]
|
47
|
+
adapt_child_elements!(parsed_feature[:children])
|
48
|
+
parsed_feature['elements'].concat(parsed_feature.delete(:children))
|
49
|
+
end
|
46
50
|
|
47
51
|
parsed_feature['tags'] = []
|
48
|
-
parsed_feature[:tags]
|
49
|
-
|
52
|
+
if parsed_feature[:tags]
|
53
|
+
parsed_feature[:tags].each do |tag|
|
54
|
+
adapt_tag!(tag)
|
55
|
+
end
|
56
|
+
parsed_feature['tags'].concat(parsed_feature.delete(:tags))
|
50
57
|
end
|
51
|
-
parsed_feature['tags'].concat(parsed_feature.delete(:tags))
|
52
58
|
end
|
53
59
|
|
54
60
|
# Adapts the AST sub-tree that is rooted at the given background node.
|
@@ -57,76 +63,88 @@ module CukeModeler
|
|
57
63
|
parsed_background['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_background))
|
58
64
|
|
59
65
|
# Removing parsed data for child elements in order to avoid duplicating data
|
60
|
-
parsed_background['cuke_modeler_parsing_data'][:background][:steps] = nil
|
66
|
+
parsed_background['cuke_modeler_parsing_data'][:background][:steps] = nil if parsed_background['cuke_modeler_parsing_data'][:background][:steps]
|
61
67
|
|
62
68
|
parsed_background['type'] = 'Background'
|
63
69
|
parsed_background['keyword'] = parsed_background[:background].delete(:keyword)
|
64
70
|
parsed_background['name'] = parsed_background[:background].delete(:name)
|
65
|
-
parsed_background['description'] = parsed_background[:background].delete(:description)
|
71
|
+
parsed_background['description'] = parsed_background[:background].delete(:description) || ''
|
66
72
|
parsed_background['line'] = parsed_background[:background].delete(:location)[:line]
|
67
73
|
|
68
74
|
parsed_background['steps'] = []
|
69
|
-
parsed_background[:background][:steps]
|
70
|
-
|
75
|
+
if parsed_background[:background][:steps]
|
76
|
+
parsed_background[:background][:steps].each do |step|
|
77
|
+
adapt_step!(step)
|
78
|
+
end
|
79
|
+
parsed_background['steps'].concat(parsed_background[:background].delete(:steps))
|
71
80
|
end
|
72
|
-
parsed_background['steps'].concat(parsed_background[:background].delete(:steps))
|
73
81
|
end
|
74
82
|
|
75
83
|
# Adapts the AST sub-tree that is rooted at the given scenario node.
|
76
84
|
def adapt_scenario!(parsed_test)
|
77
85
|
# Removing parsed data for child elements in order to avoid duplicating data
|
78
|
-
parsed_test['cuke_modeler_parsing_data'][:scenario][:tags] = nil
|
79
|
-
parsed_test['cuke_modeler_parsing_data'][:scenario][:steps] = nil
|
86
|
+
parsed_test['cuke_modeler_parsing_data'][:scenario][:tags] = nil if parsed_test['cuke_modeler_parsing_data'][:scenario][:tags]
|
87
|
+
parsed_test['cuke_modeler_parsing_data'][:scenario][:steps] = nil if parsed_test['cuke_modeler_parsing_data'][:scenario][:steps]
|
80
88
|
|
81
89
|
parsed_test['type'] = 'Scenario'
|
82
90
|
parsed_test['keyword'] = parsed_test[:scenario].delete(:keyword)
|
83
91
|
parsed_test['name'] = parsed_test[:scenario].delete(:name)
|
84
|
-
parsed_test['description'] = parsed_test[:scenario].delete(:description)
|
92
|
+
parsed_test['description'] = parsed_test[:scenario].delete(:description) || ''
|
85
93
|
parsed_test['line'] = parsed_test[:scenario].delete(:location)[:line]
|
86
94
|
|
87
95
|
parsed_test['tags'] = []
|
88
|
-
parsed_test[:scenario][:tags]
|
89
|
-
|
96
|
+
if parsed_test[:scenario][:tags]
|
97
|
+
parsed_test[:scenario][:tags].each do |tag|
|
98
|
+
adapt_tag!(tag)
|
99
|
+
end
|
100
|
+
parsed_test['tags'].concat(parsed_test[:scenario].delete(:tags))
|
90
101
|
end
|
91
|
-
parsed_test['tags'].concat(parsed_test[:scenario].delete(:tags))
|
92
102
|
|
93
103
|
parsed_test['steps'] = []
|
94
|
-
parsed_test[:scenario][:steps]
|
95
|
-
|
104
|
+
if parsed_test[:scenario][:steps]
|
105
|
+
parsed_test[:scenario][:steps].each do |step|
|
106
|
+
adapt_step!(step)
|
107
|
+
end
|
108
|
+
parsed_test['steps'].concat(parsed_test[:scenario].delete(:steps))
|
96
109
|
end
|
97
|
-
parsed_test['steps'].concat(parsed_test[:scenario].delete(:steps))
|
98
110
|
end
|
99
111
|
|
100
112
|
# Adapts the AST sub-tree that is rooted at the given outline node.
|
101
113
|
def adapt_outline!(parsed_test)
|
102
114
|
# Removing parsed data for child elements in order to avoid duplicating data
|
103
|
-
parsed_test['cuke_modeler_parsing_data'][:scenario][:tags] = nil
|
104
|
-
parsed_test['cuke_modeler_parsing_data'][:scenario][:steps] = nil
|
105
|
-
parsed_test['cuke_modeler_parsing_data'][:scenario][:examples] = nil
|
115
|
+
parsed_test['cuke_modeler_parsing_data'][:scenario][:tags] = nil if parsed_test['cuke_modeler_parsing_data'][:scenario][:tags]
|
116
|
+
parsed_test['cuke_modeler_parsing_data'][:scenario][:steps] = nil if parsed_test['cuke_modeler_parsing_data'][:scenario][:steps]
|
117
|
+
parsed_test['cuke_modeler_parsing_data'][:scenario][:examples] = nil if parsed_test['cuke_modeler_parsing_data'][:scenario][:examples]
|
106
118
|
|
107
119
|
parsed_test['type'] = 'ScenarioOutline'
|
108
120
|
parsed_test['keyword'] = parsed_test[:scenario].delete(:keyword)
|
109
121
|
parsed_test['name'] = parsed_test[:scenario].delete(:name)
|
110
|
-
parsed_test['description'] = parsed_test[:scenario].delete(:description)
|
122
|
+
parsed_test['description'] = parsed_test[:scenario].delete(:description) || ''
|
111
123
|
parsed_test['line'] = parsed_test[:scenario].delete(:location)[:line]
|
112
124
|
|
113
125
|
parsed_test['tags'] = []
|
114
|
-
parsed_test[:scenario][:tags]
|
115
|
-
|
126
|
+
if parsed_test[:scenario][:tags]
|
127
|
+
parsed_test[:scenario][:tags].each do |tag|
|
128
|
+
adapt_tag!(tag)
|
129
|
+
end
|
130
|
+
parsed_test['tags'].concat(parsed_test[:scenario].delete(:tags))
|
116
131
|
end
|
117
|
-
parsed_test['tags'].concat(parsed_test[:scenario].delete(:tags))
|
118
132
|
|
119
133
|
parsed_test['steps'] = []
|
120
|
-
parsed_test[:scenario][:steps]
|
121
|
-
|
134
|
+
if parsed_test[:scenario][:steps]
|
135
|
+
parsed_test[:scenario][:steps].each do |step|
|
136
|
+
adapt_step!(step)
|
137
|
+
end
|
138
|
+
parsed_test['steps'].concat(parsed_test[:scenario].delete(:steps))
|
122
139
|
end
|
123
|
-
parsed_test['steps'].concat(parsed_test[:scenario].delete(:steps))
|
124
140
|
|
125
141
|
parsed_test['examples'] = []
|
126
|
-
parsed_test[:scenario][:examples]
|
127
|
-
|
142
|
+
if parsed_test[:scenario][:examples]
|
143
|
+
parsed_test[:scenario][:examples].each do |step|
|
144
|
+
adapt_example!(step)
|
145
|
+
end
|
146
|
+
parsed_test['examples'].concat(parsed_test[:scenario].delete(:examples))
|
128
147
|
end
|
129
|
-
parsed_test['examples'].concat(parsed_test[:scenario].delete(:examples))
|
130
148
|
end
|
131
149
|
|
132
150
|
# Adapts the AST sub-tree that is rooted at the given example node.
|
@@ -135,14 +153,14 @@ module CukeModeler
|
|
135
153
|
parsed_example['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_example))
|
136
154
|
|
137
155
|
# Removing parsed data for child elements in order to avoid duplicating data
|
138
|
-
parsed_example['cuke_modeler_parsing_data'][:tags] = nil
|
139
|
-
parsed_example['cuke_modeler_parsing_data'][:table_header] = nil
|
140
|
-
parsed_example['cuke_modeler_parsing_data'][:table_body] = nil
|
156
|
+
parsed_example['cuke_modeler_parsing_data'][:tags] = nil if parsed_example['cuke_modeler_parsing_data'][:tags]
|
157
|
+
parsed_example['cuke_modeler_parsing_data'][:table_header] = nil if parsed_example['cuke_modeler_parsing_data'][:table_header]
|
158
|
+
parsed_example['cuke_modeler_parsing_data'][:table_body] = nil if parsed_example['cuke_modeler_parsing_data'][:table_body]
|
141
159
|
|
142
160
|
parsed_example['keyword'] = parsed_example.delete(:keyword)
|
143
161
|
parsed_example['name'] = parsed_example.delete(:name)
|
144
162
|
parsed_example['line'] = parsed_example.delete(:location)[:line]
|
145
|
-
parsed_example['description'] = parsed_example.delete(:description)
|
163
|
+
parsed_example['description'] = parsed_example.delete(:description) || ''
|
146
164
|
|
147
165
|
parsed_example['rows'] = []
|
148
166
|
|
@@ -152,19 +170,19 @@ module CukeModeler
|
|
152
170
|
end
|
153
171
|
|
154
172
|
if parsed_example[:table_body]
|
155
|
-
|
156
173
|
parsed_example[:table_body].each do |row|
|
157
174
|
adapt_table_row!(row)
|
158
175
|
end
|
159
176
|
parsed_example['rows'].concat(parsed_example.delete(:table_body))
|
160
177
|
end
|
161
178
|
|
162
|
-
|
163
179
|
parsed_example['tags'] = []
|
164
|
-
parsed_example[:tags]
|
165
|
-
|
180
|
+
if parsed_example[:tags]
|
181
|
+
parsed_example[:tags].each do |tag|
|
182
|
+
adapt_tag!(tag)
|
183
|
+
end
|
184
|
+
parsed_example['tags'].concat(parsed_example.delete(:tags))
|
166
185
|
end
|
167
|
-
parsed_example['tags'].concat(parsed_example.delete(:tags))
|
168
186
|
end
|
169
187
|
|
170
188
|
# Adapts the AST sub-tree that is rooted at the given tag node.
|
@@ -191,14 +209,13 @@ module CukeModeler
|
|
191
209
|
parsed_step['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_step))
|
192
210
|
|
193
211
|
# Removing parsed data for child elements in order to avoid duplicating data
|
194
|
-
parsed_step['cuke_modeler_parsing_data'][:data_table] = nil
|
195
|
-
parsed_step['cuke_modeler_parsing_data'][:doc_string] = nil
|
212
|
+
parsed_step['cuke_modeler_parsing_data'][:data_table] = nil if parsed_step['cuke_modeler_parsing_data'][:data_table]
|
213
|
+
parsed_step['cuke_modeler_parsing_data'][:doc_string] = nil if parsed_step['cuke_modeler_parsing_data'][:doc_string]
|
196
214
|
|
197
215
|
parsed_step['keyword'] = parsed_step.delete(:keyword)
|
198
216
|
parsed_step['name'] = parsed_step.delete(:text)
|
199
217
|
parsed_step['line'] = parsed_step.delete(:location)[:line]
|
200
218
|
|
201
|
-
|
202
219
|
case
|
203
220
|
when parsed_step[:doc_string]
|
204
221
|
adapt_doc_string!(parsed_step[:doc_string])
|
@@ -217,7 +234,7 @@ module CukeModeler
|
|
217
234
|
parsed_doc_string['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_doc_string))
|
218
235
|
|
219
236
|
parsed_doc_string['value'] = parsed_doc_string.delete(:content)
|
220
|
-
parsed_doc_string['content_type'] = parsed_doc_string.delete(:
|
237
|
+
parsed_doc_string['content_type'] = parsed_doc_string.delete(:media_type)
|
221
238
|
parsed_doc_string['line'] = parsed_doc_string.delete(:location)[:line]
|
222
239
|
end
|
223
240
|
|
@@ -245,7 +262,6 @@ module CukeModeler
|
|
245
262
|
# Removing parsed data for child elements in order to avoid duplicating data which the child elements will themselves include
|
246
263
|
parsed_table_row['cuke_modeler_parsing_data'][:cells] = nil
|
247
264
|
|
248
|
-
|
249
265
|
parsed_table_row['line'] = parsed_table_row.delete(:location)[:line]
|
250
266
|
|
251
267
|
parsed_table_row['cells'] = []
|
@@ -269,8 +285,6 @@ module CukeModeler
|
|
269
285
|
|
270
286
|
|
271
287
|
def adapt_child_elements!(parsed_children)
|
272
|
-
return if parsed_children.empty?
|
273
|
-
|
274
288
|
background_child = parsed_children.find { |child| child[:background] }
|
275
289
|
|
276
290
|
if background_child
|
@@ -283,8 +297,6 @@ module CukeModeler
|
|
283
297
|
end
|
284
298
|
|
285
299
|
def adapt_tests!(parsed_tests)
|
286
|
-
return unless parsed_tests
|
287
|
-
|
288
300
|
parsed_tests.each do |test|
|
289
301
|
adapt_test!(test)
|
290
302
|
end
|
@@ -294,9 +306,8 @@ module CukeModeler
|
|
294
306
|
# Saving off the original data
|
295
307
|
parsed_test['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_test))
|
296
308
|
|
297
|
-
|
298
309
|
case
|
299
|
-
when parsed_test[:scenario] && parsed_test[:scenario][:examples].
|
310
|
+
when (parsed_test[:scenario] && parsed_test[:scenario][:examples]) || (parsed_test[:scenario] && Parsing.dialects[Parsing.dialect]['scenarioOutline'].include?(parsed_test[:scenario][:keyword]))
|
300
311
|
adapt_outline!(parsed_test)
|
301
312
|
when parsed_test[:scenario]
|
302
313
|
adapt_scenario!(parsed_test)
|
@@ -1,9 +1,25 @@
|
|
1
1
|
module CukeModeler
|
2
2
|
|
3
|
+
# NOT A PART OF THE PUBLIC API
|
3
4
|
# A mix-in module containing methods used by models that contain other models.
|
4
5
|
|
5
6
|
module Containing
|
6
7
|
|
8
|
+
# Executes the given code block with every model that is a child of this model.
|
9
|
+
def each_descendant(&block)
|
10
|
+
children.each do |child_model|
|
11
|
+
block.call(child_model)
|
12
|
+
child_model.each_descendant(&block) if child_model.respond_to?(:each_descendant)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Executes the given code block with this model and every model that is a child of this model.
|
17
|
+
def each_model(&block)
|
18
|
+
block.call(self)
|
19
|
+
|
20
|
+
each_descendant(&block)
|
21
|
+
end
|
22
|
+
|
7
23
|
|
8
24
|
private
|
9
25
|
|
@@ -41,7 +41,7 @@ module CukeModeler
|
|
41
41
|
|
42
42
|
parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_cell.feature')
|
43
43
|
|
44
|
-
parsed_file
|
44
|
+
parsed_file['feature']['elements'].first['steps'].first['table']['rows'].first['cells'].first
|
45
45
|
end
|
46
46
|
|
47
47
|
end
|
@@ -82,8 +82,8 @@ module CukeModeler
|
|
82
82
|
def process_feature_file(file_path)
|
83
83
|
source_text = IO.read(file_path)
|
84
84
|
|
85
|
-
feature_file_data = Parsing::parse_text(source_text, file_path)
|
86
|
-
feature_file_data = feature_file_data.merge({'path' => file_path})
|
85
|
+
feature_file_data = Parsing::parse_text(source_text, file_path)
|
86
|
+
feature_file_data = feature_file_data.merge({ 'path' => file_path })
|
87
87
|
|
88
88
|
feature_file_data
|
89
89
|
end
|
@@ -45,7 +45,7 @@ module CukeModeler
|
|
45
45
|
|
46
46
|
parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_doc_string.feature')
|
47
47
|
|
48
|
-
parsed_file
|
48
|
+
parsed_file['feature']['elements'].first['steps'].first['doc_string']
|
49
49
|
end
|
50
50
|
|
51
51
|
def content_type_output_string
|
@@ -124,7 +124,7 @@ module CukeModeler
|
|
124
124
|
|
125
125
|
parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_example.feature')
|
126
126
|
|
127
|
-
parsed_file
|
127
|
+
parsed_file['feature']['elements'].first['examples'].first
|
128
128
|
end
|
129
129
|
|
130
130
|
def determine_buffer_size(index)
|