cuke_modeler 1.3.0 → 2.1.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.
Files changed (90) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +60 -17
  3. data/CHANGELOG.md +312 -0
  4. data/Gemfile +19 -3
  5. data/LICENSE.txt +1 -1
  6. data/README.md +17 -7
  7. data/Rakefile +45 -28
  8. data/appveyor.yml +57 -17
  9. data/cuke_modeler.gemspec +6 -3
  10. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +1 -0
  11. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +1 -0
  12. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +2 -1
  13. data/lib/cuke_modeler/adapters/gherkin_5_adapter.rb +12 -0
  14. data/lib/cuke_modeler/adapters/gherkin_6_adapter.rb +310 -0
  15. data/lib/cuke_modeler/adapters/gherkin_7_adapter.rb +307 -0
  16. data/lib/cuke_modeler/adapters/gherkin_8_adapter.rb +12 -0
  17. data/lib/cuke_modeler/adapters/gherkin_9_adapter.rb +12 -0
  18. data/lib/cuke_modeler/containing.rb +16 -0
  19. data/lib/cuke_modeler/described.rb +1 -0
  20. data/lib/cuke_modeler/models/step.rb +31 -2
  21. data/lib/cuke_modeler/named.rb +1 -0
  22. data/lib/cuke_modeler/nested.rb +1 -0
  23. data/lib/cuke_modeler/parsed.rb +1 -0
  24. data/lib/cuke_modeler/parsing.rb +116 -68
  25. data/lib/cuke_modeler/sourceable.rb +1 -0
  26. data/lib/cuke_modeler/stepped.rb +1 -0
  27. data/lib/cuke_modeler/taggable.rb +1 -0
  28. data/lib/cuke_modeler/version.rb +1 -1
  29. data/testing/cucumber/features/analysis/step_comparison.feature +25 -0
  30. data/testing/cucumber/features/analysis/test_comparison.feature +1 -1
  31. data/testing/cucumber/step_definitions/feature_file_steps.rb +1 -1
  32. data/testing/cucumber/step_definitions/modeling_steps.rb +7 -2
  33. data/testing/cucumber/step_definitions/verification_steps.rb +11 -2
  34. data/testing/file_helper.rb +3 -0
  35. data/testing/gemfiles/gherkin2.gemfile +8 -0
  36. data/testing/gemfiles/gherkin3.gemfile +6 -0
  37. data/testing/gemfiles/gherkin4.gemfile +7 -0
  38. data/testing/gemfiles/gherkin5.gemfile +7 -0
  39. data/testing/gemfiles/gherkin6.gemfile +10 -0
  40. data/testing/gemfiles/gherkin7.gemfile +9 -0
  41. data/testing/gemfiles/gherkin8.gemfile +9 -0
  42. data/testing/gemfiles/gherkin9.gemfile +9 -0
  43. data/testing/helper_methods.rb +23 -0
  44. data/testing/rspec/spec/integration/{gherkin_2_adapter_spec.rb → adapters/gherkin_2_adapter_spec.rb} +13 -13
  45. data/testing/rspec/spec/integration/{gherkin_3_adapter_spec.rb → adapters/gherkin_3_adapter_spec.rb} +13 -13
  46. data/testing/rspec/spec/integration/{gherkin_4_adapter_spec.rb → adapters/gherkin_4_adapter_spec.rb} +13 -13
  47. data/testing/rspec/spec/integration/adapters/gherkin_5_adapter_spec.rb +165 -0
  48. data/testing/rspec/spec/integration/adapters/gherkin_6_adapter_spec.rb +159 -0
  49. data/testing/rspec/spec/integration/adapters/gherkin_7_adapter_spec.rb +162 -0
  50. data/testing/rspec/spec/integration/adapters/gherkin_8_adapter_spec.rb +162 -0
  51. data/testing/rspec/spec/integration/adapters/gherkin_9_adapter_spec.rb +162 -0
  52. data/testing/rspec/spec/integration/{background_integration_spec.rb → models/background_integration_spec.rb} +90 -86
  53. data/testing/rspec/spec/integration/{cell_integration_spec.rb → models/cell_integration_spec.rb} +49 -38
  54. data/testing/rspec/spec/integration/{comment_integration_spec.rb → models/comment_integration_spec.rb} +31 -20
  55. data/testing/rspec/spec/integration/{directory_integration_spec.rb → models/directory_integration_spec.rb} +3 -3
  56. data/testing/rspec/spec/integration/{doc_string_integration_spec.rb → models/doc_string_integration_spec.rb} +39 -35
  57. data/testing/rspec/spec/integration/{example_integration_spec.rb → models/example_integration_spec.rb} +109 -83
  58. data/testing/rspec/spec/integration/{feature_file_integration_spec.rb → models/feature_file_integration_spec.rb} +52 -38
  59. data/testing/rspec/spec/integration/{feature_integration_spec.rb → models/feature_integration_spec.rb} +125 -112
  60. data/testing/rspec/spec/integration/{model_integration_spec.rb → models/model_integration_spec.rb} +1 -1
  61. data/testing/rspec/spec/integration/{outline_integration_spec.rb → models/outline_integration_spec.rb} +138 -129
  62. data/testing/rspec/spec/integration/{row_integration_spec.rb → models/row_integration_spec.rb} +55 -35
  63. data/testing/rspec/spec/integration/{scenario_integration_spec.rb → models/scenario_integration_spec.rb} +92 -88
  64. data/testing/rspec/spec/integration/models/step_integration_spec.rb +573 -0
  65. data/testing/rspec/spec/integration/{table_integration_spec.rb → models/table_integration_spec.rb} +38 -34
  66. data/testing/rspec/spec/integration/{tag_integration_spec.rb → models/tag_integration_spec.rb} +56 -36
  67. data/testing/rspec/spec/integration/parsing_integration_spec.rb +45 -7
  68. data/testing/rspec/spec/spec_helper.rb +79 -43
  69. data/testing/rspec/spec/unit/cuke_modeler_unit_spec.rb +25 -0
  70. data/testing/rspec/spec/unit/{background_unit_spec.rb → models/background_unit_spec.rb} +1 -1
  71. data/testing/rspec/spec/unit/{cell_unit_spec.rb → models/cell_unit_spec.rb} +1 -1
  72. data/testing/rspec/spec/unit/{comment_unit_spec.rb → models/comment_unit_spec.rb} +1 -1
  73. data/testing/rspec/spec/unit/{directory_unit_spec.rb → models/directory_unit_spec.rb} +1 -1
  74. data/testing/rspec/spec/unit/{doc_string_unit_spec.rb → models/doc_string_unit_spec.rb} +1 -1
  75. data/testing/rspec/spec/unit/{example_unit_spec.rb → models/example_unit_spec.rb} +1 -1
  76. data/testing/rspec/spec/unit/{feature_file_unit_spec.rb → models/feature_file_unit_spec.rb} +1 -1
  77. data/testing/rspec/spec/unit/{feature_unit_spec.rb → models/feature_unit_spec.rb} +1 -1
  78. data/testing/rspec/spec/unit/{model_unit_spec.rb → models/model_unit_spec.rb} +1 -1
  79. data/testing/rspec/spec/unit/{outline_unit_spec.rb → models/outline_unit_spec.rb} +1 -1
  80. data/testing/rspec/spec/unit/{row_unit_spec.rb → models/row_unit_spec.rb} +1 -1
  81. data/testing/rspec/spec/unit/{scenario_unit_spec.rb → models/scenario_unit_spec.rb} +1 -1
  82. data/testing/rspec/spec/unit/{step_unit_spec.rb → models/step_unit_spec.rb} +2 -2
  83. data/testing/rspec/spec/unit/{table_unit_spec.rb → models/table_unit_spec.rb} +1 -1
  84. data/testing/rspec/spec/unit/{tag_unit_spec.rb → models/tag_unit_spec.rb} +1 -1
  85. data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +102 -0
  86. data/todo.txt +5 -2
  87. metadata +80 -47
  88. data/History.md +0 -186
  89. data/testing/cucumber/support/transforms.rb +0 -3
  90. data/testing/rspec/spec/integration/step_integration_spec.rb +0 -459
@@ -1,56 +1,56 @@
1
- require "#{File.dirname(__FILE__)}/../spec_helper"
1
+ require "#{File.dirname(__FILE__)}/../../spec_helper"
2
2
 
3
3
 
4
- describe 'Gherkin4Adapter, Integration', :gherkin4 => true do
4
+ describe 'Gherkin4Adapter, Integration', :if => gherkin?(4) do
5
5
 
6
6
  let(:clazz) { CukeModeler::Gherkin4Adapter }
7
7
  let(:adapter) { clazz.new }
8
8
  let(:source_text) { "# feature comment
9
9
  @tag1 @tag2 @tag3
10
- #{@feature_keyword}: A feature with everything it could have
10
+ #{FEATURE_KEYWORD}: A feature with everything it could have
11
11
 
12
12
  Including a description
13
13
  and then some.
14
14
 
15
15
  # background comment
16
- #{@background_keyword}:
16
+ #{BACKGROUND_KEYWORD}:
17
17
 
18
18
  Background
19
19
  description
20
20
 
21
- #{@step_keyword} a step
21
+ #{STEP_KEYWORD} a step
22
22
  # table comment
23
23
  | value1 |
24
24
  # table row comment
25
25
  | value2 |
26
- #{@step_keyword} another step
26
+ #{STEP_KEYWORD} another step
27
27
 
28
28
  # scenario comment
29
29
  @scenario_tag
30
- #{@scenario_keyword}:
30
+ #{SCENARIO_KEYWORD}:
31
31
 
32
32
  Scenario
33
33
  description
34
34
 
35
- #{@step_keyword} a step
36
- #{@step_keyword} another step
35
+ #{STEP_KEYWORD} a step
36
+ #{STEP_KEYWORD} another step
37
37
  \"\"\"
38
38
  some text
39
39
  \"\"\"
40
40
 
41
41
  # outline comment
42
42
  @outline_tag
43
- #{@outline_keyword}:
43
+ #{OUTLINE_KEYWORD}:
44
44
 
45
45
  Outline
46
46
  description
47
47
 
48
48
  # step comment
49
- #{@step_keyword} a step
49
+ #{STEP_KEYWORD} a step
50
50
  # table comment
51
51
  | value2 |
52
52
  # step comment
53
- #{@step_keyword} another step
53
+ #{STEP_KEYWORD} another step
54
54
  # doc string comment
55
55
  \"\"\"
56
56
  some text
@@ -58,7 +58,7 @@ describe 'Gherkin4Adapter, Integration', :gherkin4 => true do
58
58
 
59
59
  # example comment
60
60
  @example_tag
61
- #{@example_keyword}:
61
+ #{EXAMPLE_KEYWORD}:
62
62
 
63
63
  Example
64
64
  description
@@ -0,0 +1,165 @@
1
+ require "#{File.dirname(__FILE__)}/../../spec_helper"
2
+
3
+
4
+ describe 'Gherkin4Adapter, Integration', :if => gherkin?(5) do
5
+
6
+ let(:clazz) { CukeModeler::Gherkin5Adapter }
7
+ let(:adapter) { clazz.new }
8
+ let(:source_text) { "# feature comment
9
+ @tag1 @tag2 @tag3
10
+ #{FEATURE_KEYWORD}: A feature with everything it could have
11
+
12
+ Including a description
13
+ and then some.
14
+
15
+ # background comment
16
+ #{BACKGROUND_KEYWORD}:
17
+
18
+ Background
19
+ description
20
+
21
+ #{STEP_KEYWORD} a step
22
+ # table comment
23
+ | value1 |
24
+ # table row comment
25
+ | value2 |
26
+ #{STEP_KEYWORD} another step
27
+
28
+ # scenario comment
29
+ @scenario_tag
30
+ #{SCENARIO_KEYWORD}:
31
+
32
+ Scenario
33
+ description
34
+
35
+ #{STEP_KEYWORD} a step
36
+ #{STEP_KEYWORD} another step
37
+ \"\"\"
38
+ some text
39
+ \"\"\"
40
+
41
+ # outline comment
42
+ @outline_tag
43
+ #{OUTLINE_KEYWORD}:
44
+
45
+ Outline
46
+ description
47
+
48
+ # step comment
49
+ #{STEP_KEYWORD} a step
50
+ # table comment
51
+ | value2 |
52
+ # step comment
53
+ #{STEP_KEYWORD} another step
54
+ # doc string comment
55
+ \"\"\"
56
+ some text
57
+ \"\"\"
58
+
59
+ # example comment
60
+ @example_tag
61
+ #{EXAMPLE_KEYWORD}:
62
+
63
+ Example
64
+ description
65
+
66
+ # row comment
67
+ | param |
68
+ | value |
69
+ # final comment" }
70
+ let(:feature_file_model) { test_file_path = CukeModeler::FileHelper.create_feature_file(:text => source_text, :name => 'adapter_test_file')
71
+ CukeModeler::FeatureFile.new(test_file_path) }
72
+ let(:feature_model) { feature_file_model.feature }
73
+
74
+
75
+ it "does not store parsing data for a feature file's children" do
76
+ model = feature_file_model
77
+
78
+ expect(model.parsing_data[:comments]).to be_nil
79
+ expect(model.parsing_data[:feature]).to be_nil
80
+ end
81
+
82
+ it "does not store parsing data for a feature's children" do
83
+ model = feature_model
84
+
85
+ expect(model.parsing_data[:tags]).to be_nil
86
+ expect(model.parsing_data[:children]).to be_nil
87
+ end
88
+
89
+ it "does not store parsing data for a background's children" do
90
+ model = feature_model.background
91
+
92
+ expect(model.parsing_data[:steps]).to be_nil
93
+ end
94
+
95
+ it "does not store parsing data for a scenario's children" do
96
+ model = feature_model.scenarios.first
97
+
98
+ expect(model.parsing_data[:tags]).to be_nil
99
+ expect(model.parsing_data[:steps]).to be_nil
100
+ end
101
+
102
+ it "does not store parsing data for an outline's children" do
103
+ model = feature_model.outlines.first
104
+
105
+ expect(model.parsing_data[:tags]).to be_nil
106
+ expect(model.parsing_data[:steps]).to be_nil
107
+ expect(model.parsing_data[:examples]).to be_nil
108
+ end
109
+
110
+ it "does not store parsing data for an example's children" do
111
+ model = feature_model.outlines.first.examples.first
112
+
113
+ expect(model.parsing_data[:tags]).to be_nil
114
+ expect(model.parsing_data[:tableHeader]).to be_nil
115
+ expect(model.parsing_data[:tableBody]).to be_nil
116
+ end
117
+
118
+ it "does not store parsing data for an example row's children" do
119
+ model = feature_model.outlines.first.examples.first.rows.first
120
+
121
+ expect(model.parsing_data[:cells]).to be_nil
122
+ end
123
+
124
+ it "does not store parsing data for a step's children, table" do
125
+ model = feature_model.outlines.first.steps.first
126
+
127
+ expect(model.parsing_data[:argument]).to be_nil
128
+ end
129
+
130
+ it "does not store parsing data for a step's children, doc string" do
131
+ model = feature_model.outlines.first.steps.last
132
+
133
+ expect(model.parsing_data[:argument]).to be_nil
134
+ end
135
+
136
+ it "does not store parsing data for a table's children" do
137
+ model = feature_model.outlines.first.steps.first.block
138
+
139
+ expect(model.parsing_data[:rows]).to be_nil
140
+ end
141
+
142
+ it "does not store parsing data for a table row's children" do
143
+ model = feature_model.outlines.first.steps.first.block.rows.first
144
+
145
+ expect(model.parsing_data[:cells]).to be_nil
146
+ end
147
+
148
+
149
+ describe 'stuff that is in no way part of the public API and entirely subject to change' do
150
+
151
+ it 'provides a useful explosion message if it encounters an entirely new type of test' do
152
+ partial_feature_ast = { :type => :Feature, :location => { :line => 1, :column => 1 }, :children => [{ :type => :some_unknown_type }] }
153
+
154
+ expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
155
+ end
156
+
157
+ it 'provides a useful explosion message if it encounters an entirely new type of step block' do
158
+ 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 => "" } }] }] }
159
+
160
+ expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
161
+ end
162
+
163
+ end
164
+
165
+ end
@@ -0,0 +1,159 @@
1
+ require "#{File.dirname(__FILE__)}/../../spec_helper"
2
+
3
+
4
+ describe 'Gherkin6Adapter, Integration', :if => gherkin?(6) do
5
+
6
+ let(:clazz) { CukeModeler::Gherkin6Adapter }
7
+ let(:adapter) { clazz.new }
8
+ let(:source_text) { "# feature comment
9
+ @tag1 @tag2 @tag3
10
+ #{FEATURE_KEYWORD}: A feature with everything it could have
11
+
12
+ Including a description
13
+ and then some.
14
+
15
+ # background comment
16
+ #{BACKGROUND_KEYWORD}:
17
+
18
+ Background
19
+ description
20
+
21
+ #{STEP_KEYWORD} a step
22
+ # table comment
23
+ | value1 |
24
+ # table row comment
25
+ | value2 |
26
+ #{STEP_KEYWORD} another step
27
+
28
+ # scenario comment
29
+ @scenario_tag
30
+ #{SCENARIO_KEYWORD}:
31
+
32
+ Scenario
33
+ description
34
+
35
+ #{STEP_KEYWORD} a step
36
+ #{STEP_KEYWORD} another step
37
+ \"\"\"
38
+ some text
39
+ \"\"\"
40
+
41
+ # outline comment
42
+ @outline_tag
43
+ #{OUTLINE_KEYWORD}:
44
+
45
+ Outline
46
+ description
47
+
48
+ # step comment
49
+ #{STEP_KEYWORD} a step
50
+ # table comment
51
+ | value2 |
52
+ # step comment
53
+ #{STEP_KEYWORD} another step
54
+ # doc string comment
55
+ \"\"\"
56
+ some text
57
+ \"\"\"
58
+
59
+ # example comment
60
+ @example_tag
61
+ #{EXAMPLE_KEYWORD}:
62
+
63
+ Example
64
+ description
65
+
66
+ # row comment
67
+ | param |
68
+ | value |
69
+ # final comment" }
70
+ let(:feature_file_model) { test_file_path = CukeModeler::FileHelper.create_feature_file(:text => source_text, :name => 'adapter_test_file')
71
+ CukeModeler::FeatureFile.new(test_file_path) }
72
+ let(:feature_model) { feature_file_model.feature }
73
+
74
+
75
+ it "does not store parsing data for a feature file's children" do
76
+ model = feature_file_model
77
+
78
+ expect(model.parsing_data[:comments]).to be_nil
79
+ expect(model.parsing_data[:feature]).to be_nil
80
+ end
81
+
82
+ it "does not store parsing data for a feature's children" do
83
+ model = feature_model
84
+
85
+ expect(model.parsing_data[:tags]).to be_nil
86
+ expect(model.parsing_data[:children]).to be_nil
87
+ end
88
+
89
+ it "does not store parsing data for a background's children" do
90
+ model = feature_model.background
91
+
92
+ expect(model.parsing_data[:background][:steps]).to be_nil
93
+ end
94
+
95
+ it "does not store parsing data for a scenario's children" do
96
+ model = feature_model.scenarios.first
97
+
98
+ expect(model.parsing_data[:scenario][:tags]).to be_nil
99
+ expect(model.parsing_data[:scenario][:steps]).to be_nil
100
+ end
101
+
102
+ it "does not store parsing data for an outline's children" do
103
+ model = feature_model.outlines.first
104
+
105
+ expect(model.parsing_data[:scenario][:tags]).to be_nil
106
+ expect(model.parsing_data[:scenario][:steps]).to be_nil
107
+ expect(model.parsing_data[:scenario][:examples]).to be_nil
108
+ end
109
+
110
+ it "does not store parsing data for an example's children" do
111
+ model = feature_model.outlines.first.examples.first
112
+
113
+ expect(model.parsing_data[:tags]).to be_nil
114
+ expect(model.parsing_data[:table_header]).to be_nil
115
+ expect(model.parsing_data[:table_body]).to be_nil
116
+ end
117
+
118
+ it "does not store parsing data for an example row's children" do
119
+ model = feature_model.outlines.first.examples.first.rows.first
120
+
121
+ expect(model.parsing_data[:cells]).to be_nil
122
+ end
123
+
124
+ it "does not store parsing data for a step's children, table" do
125
+ model = feature_model.outlines.first.steps.first
126
+
127
+ expect(model.parsing_data[:data_table]).to be_nil
128
+ end
129
+
130
+ it "does not store parsing data for a step's children, doc string" do
131
+ model = feature_model.outlines.first.steps.last
132
+
133
+ expect(model.parsing_data[:doc_string]).to be_nil
134
+ end
135
+
136
+ it "does not store parsing data for a table's children" do
137
+ model = feature_model.outlines.first.steps.first.block
138
+
139
+ expect(model.parsing_data[:rows]).to be_nil
140
+ end
141
+
142
+ it "does not store parsing data for a table row's children" do
143
+ model = feature_model.outlines.first.steps.first.block.rows.first
144
+
145
+ expect(model.parsing_data[:cells]).to be_nil
146
+ end
147
+
148
+
149
+ describe 'stuff that is in no way part of the public API and entirely subject to change' do
150
+
151
+ it 'provides a useful explosion message if it encounters an entirely new type of test' do
152
+ partial_feature_ast = {:type => :Feature, :location => {:line => 1, :column => 1}, :children => [{:some_unknown_type => {}}]}
153
+
154
+ expect { adapter.adapt_feature!(partial_feature_ast) }.to raise_error(ArgumentError, /Unknown.*some_unknown_type/)
155
+ end
156
+
157
+ end
158
+
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