cuke_modeler 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +51 -33
  3. data/CHANGELOG.md +13 -2
  4. data/Gemfile +9 -2
  5. data/appveyor.yml +29 -2
  6. data/cuke_modeler.gemspec +1 -1
  7. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +1 -1
  8. data/lib/cuke_modeler/adapters/gherkin_5_adapter.rb +12 -0
  9. data/lib/cuke_modeler/adapters/gherkin_7_adapter.rb +307 -0
  10. data/lib/cuke_modeler/adapters/gherkin_8_adapter.rb +12 -0
  11. data/lib/cuke_modeler/adapters/gherkin_9_adapter.rb +12 -0
  12. data/lib/cuke_modeler/parsing.rb +116 -108
  13. data/lib/cuke_modeler/version.rb +1 -1
  14. data/testing/gemfiles/gherkin7.gemfile +9 -0
  15. data/testing/gemfiles/gherkin8.gemfile +9 -0
  16. data/testing/gemfiles/gherkin9.gemfile +9 -0
  17. data/testing/helper_methods.rb +23 -0
  18. data/testing/rspec/spec/integration/adapters/gherkin_2_adapter_spec.rb +1 -1
  19. data/testing/rspec/spec/integration/adapters/gherkin_3_adapter_spec.rb +1 -1
  20. data/testing/rspec/spec/integration/adapters/gherkin_4_adapter_spec.rb +1 -1
  21. data/testing/rspec/spec/integration/adapters/gherkin_5_adapter_spec.rb +165 -0
  22. data/testing/rspec/spec/integration/adapters/gherkin_6_adapter_spec.rb +1 -8
  23. data/testing/rspec/spec/integration/adapters/gherkin_7_adapter_spec.rb +162 -0
  24. data/testing/rspec/spec/integration/adapters/gherkin_8_adapter_spec.rb +162 -0
  25. data/testing/rspec/spec/integration/adapters/gherkin_9_adapter_spec.rb +162 -0
  26. data/testing/rspec/spec/integration/models/background_integration_spec.rb +19 -23
  27. data/testing/rspec/spec/integration/models/cell_integration_spec.rb +27 -24
  28. data/testing/rspec/spec/integration/models/comment_integration_spec.rb +26 -23
  29. data/testing/rspec/spec/integration/models/doc_string_integration_spec.rb +19 -23
  30. data/testing/rspec/spec/integration/models/example_integration_spec.rb +50 -38
  31. data/testing/rspec/spec/integration/models/feature_file_integration_spec.rb +32 -28
  32. data/testing/rspec/spec/integration/models/feature_integration_spec.rb +28 -23
  33. data/testing/rspec/spec/integration/models/outline_integration_spec.rb +39 -44
  34. data/testing/rspec/spec/integration/models/row_integration_spec.rb +35 -23
  35. data/testing/rspec/spec/integration/models/scenario_integration_spec.rb +19 -23
  36. data/testing/rspec/spec/integration/models/step_integration_spec.rb +51 -47
  37. data/testing/rspec/spec/integration/models/table_integration_spec.rb +19 -23
  38. data/testing/rspec/spec/integration/models/tag_integration_spec.rb +35 -23
  39. data/testing/rspec/spec/integration/parsing_integration_spec.rb +27 -6
  40. data/testing/rspec/spec/spec_helper.rb +39 -46
  41. metadata +16 -4
@@ -1,7 +1,7 @@
1
1
  require "#{File.dirname(__FILE__)}/../../spec_helper"
2
2
 
3
3
 
4
- describe 'Gherkin6Adapter, Integration', :gherkin6 => true do
4
+ describe 'Gherkin6Adapter, Integration', :if => gherkin?(6) do
5
5
 
6
6
  let(:clazz) { CukeModeler::Gherkin6Adapter }
7
7
  let(:adapter) { clazz.new }
@@ -154,13 +154,6 @@ describe 'Gherkin6Adapter, Integration', :gherkin6 => true do
154
154
  expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
155
155
  end
156
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
157
  end
165
158
 
166
159
  end
@@ -0,0 +1,162 @@
1
+ require "#{File.dirname(__FILE__)}/../../spec_helper"
2
+
3
+
4
+ describe 'Gherkin7Adapter, Integration', :if => gherkin?(7) do
5
+
6
+ let(:clazz) { CukeModeler::Gherkin7Adapter }
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 '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