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.
Files changed (252) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +17 -17
  3. data/.travis.yml +1 -1
  4. data/Gemfile +4 -0
  5. data/History.rdoc +71 -3
  6. data/LICENSE.txt +22 -22
  7. data/README.md +24 -10
  8. data/Rakefile +2 -12
  9. data/cuke_modeler.gemspec +1 -1
  10. data/features/analysis/test_comparison.feature +37 -122
  11. data/features/modeling/background_modeling.feature +77 -0
  12. data/features/modeling/background_output.feature +42 -0
  13. data/features/modeling/cell_modeling.feature +23 -0
  14. data/features/modeling/cell_output.feature +22 -0
  15. data/features/modeling/directory_modeling.feature +65 -0
  16. data/features/modeling/directory_output.feature +12 -0
  17. data/features/modeling/doc_string_modeling.feature +61 -0
  18. data/features/modeling/doc_string_output.feature +32 -0
  19. data/features/modeling/example_modeling.feature +125 -0
  20. data/features/modeling/example_output.feature +39 -0
  21. data/features/modeling/feature_file_modeling.feature +40 -0
  22. data/features/modeling/feature_file_output.feature +12 -0
  23. data/features/modeling/feature_modeling.feature +109 -0
  24. data/features/modeling/feature_output.feature +104 -0
  25. data/features/modeling/model_output.feature +22 -0
  26. data/features/modeling/model_structure.feature +48 -0
  27. data/features/modeling/outline_modeling.feature +144 -0
  28. data/features/modeling/outline_output.feature +69 -0
  29. data/features/modeling/row_modeling.feature +48 -0
  30. data/features/modeling/row_output.feature +22 -0
  31. data/features/modeling/scenario_modeling.feature +118 -0
  32. data/features/modeling/scenario_output.feature +45 -0
  33. data/features/modeling/step_modeling.feature +84 -0
  34. data/features/modeling/step_output.feature +29 -0
  35. data/features/modeling/table_modeling.feature +50 -0
  36. data/features/modeling/table_output.feature +24 -0
  37. data/features/modeling/tag_modeling.feature +43 -0
  38. data/features/modeling/tag_output.feature +22 -0
  39. data/features/step_definitions/action_steps.rb +11 -1
  40. data/features/step_definitions/background_steps.rb +1 -85
  41. data/features/step_definitions/directory_steps.rb +2 -48
  42. data/features/step_definitions/doc_string_steps.rb +1 -67
  43. data/features/step_definitions/feature_file_steps.rb +2 -37
  44. data/features/step_definitions/feature_steps.rb +4 -100
  45. data/features/step_definitions/modeling_steps.rb +44 -0
  46. data/features/step_definitions/setup_steps.rb +19 -41
  47. data/features/step_definitions/step_steps.rb +2 -166
  48. data/features/step_definitions/table_steps.rb +1 -58
  49. data/features/step_definitions/tag_steps.rb +2 -72
  50. data/features/step_definitions/verification_steps.rb +152 -4
  51. data/features/support/env.rb +4 -6
  52. data/gemfiles/{gherkin.gemfile → gherkin2.gemfile} +4 -0
  53. data/gemfiles/gherkin3.gemfile +4 -0
  54. data/gemfiles/gherkin4.gemfile +4 -0
  55. data/lib/cuke_modeler.rb +24 -22
  56. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +103 -31
  57. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +103 -40
  58. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +111 -50
  59. data/lib/cuke_modeler/containing.rb +255 -4
  60. data/lib/cuke_modeler/described.rb +28 -0
  61. data/lib/cuke_modeler/models/background.rb +66 -0
  62. data/lib/cuke_modeler/models/cell.rb +48 -0
  63. data/lib/cuke_modeler/models/directory.rb +95 -0
  64. data/lib/cuke_modeler/models/doc_string.rb +59 -0
  65. data/lib/cuke_modeler/models/example.rb +167 -0
  66. data/lib/cuke_modeler/models/feature.rb +106 -0
  67. data/lib/cuke_modeler/models/feature_file.rb +64 -0
  68. data/lib/cuke_modeler/models/model.rb +32 -0
  69. data/lib/cuke_modeler/models/outline.rb +79 -0
  70. data/lib/cuke_modeler/models/row.rb +49 -0
  71. data/lib/cuke_modeler/models/scenario.rb +69 -0
  72. data/lib/cuke_modeler/models/step.rb +68 -0
  73. data/lib/cuke_modeler/models/table.rb +67 -0
  74. data/lib/cuke_modeler/models/tag.rb +46 -0
  75. data/lib/cuke_modeler/named.rb +19 -0
  76. data/lib/cuke_modeler/nested.rb +22 -15
  77. data/lib/cuke_modeler/parsed.rb +11 -0
  78. data/lib/cuke_modeler/parsing.rb +66 -83
  79. data/lib/cuke_modeler/sourceable.rb +3 -11
  80. data/lib/cuke_modeler/stepped.rb +24 -0
  81. data/lib/cuke_modeler/taggable.rb +6 -29
  82. data/lib/cuke_modeler/version.rb +2 -1
  83. data/spec/integration/background_integration_spec.rb +332 -7
  84. data/spec/integration/cell_integration_spec.rb +321 -0
  85. data/spec/integration/directory_integration_spec.rb +175 -9
  86. data/spec/integration/doc_string_integration_spec.rb +318 -7
  87. data/spec/integration/example_integration_spec.rb +602 -19
  88. data/spec/integration/feature_file_integration_spec.rb +98 -3
  89. data/spec/integration/feature_integration_spec.rb +445 -27
  90. data/spec/integration/gherkin_2_adapter_spec.rb +122 -0
  91. data/spec/integration/gherkin_3_adapter_spec.rb +125 -0
  92. data/spec/integration/gherkin_4_adapter_spec.rb +123 -0
  93. data/spec/integration/model_integration_spec.rb +15 -0
  94. data/spec/integration/nested_integration_spec.rb +91 -0
  95. data/spec/integration/outline_integration_spec.rb +485 -12
  96. data/spec/integration/parsing_integration_spec.rb +85 -0
  97. data/spec/integration/row_integration_spec.rb +221 -18
  98. data/spec/integration/scenario_integration_spec.rb +368 -14
  99. data/spec/integration/shared/models_integration_specs.rb +18 -0
  100. data/spec/integration/step_integration_spec.rb +328 -77
  101. data/spec/integration/table_integration_spec.rb +242 -20
  102. data/spec/integration/tag_integration_spec.rb +178 -13
  103. data/spec/spec_helper.rb +32 -18
  104. data/spec/unit/background_unit_spec.rb +24 -44
  105. data/spec/unit/cell_unit_spec.rb +73 -0
  106. data/spec/unit/described_unit_spec.rb +23 -0
  107. data/spec/unit/directory_unit_spec.rb +52 -62
  108. data/spec/unit/doc_string_unit_spec.rb +47 -100
  109. data/spec/unit/example_unit_spec.rb +50 -296
  110. data/spec/unit/feature_file_unit_spec.rb +53 -52
  111. data/spec/unit/feature_unit_spec.rb +39 -83
  112. data/spec/unit/model_unit_spec.rb +15 -0
  113. data/spec/unit/named_unit_spec.rb +23 -0
  114. data/spec/unit/nested_unit_spec.rb +24 -21
  115. data/spec/unit/outline_unit_spec.rb +46 -69
  116. data/spec/unit/parsed_unit_spec.rb +27 -0
  117. data/spec/unit/parsing_unit_spec.rb +2 -70
  118. data/spec/unit/row_unit_spec.rb +22 -51
  119. data/spec/unit/scenario_unit_spec.rb +27 -59
  120. data/spec/unit/{bare_bones_unit_specs.rb → shared/bare_bones_models_unit_specs.rb} +2 -2
  121. data/spec/unit/shared/containing_models_unit_specs.rb +18 -0
  122. data/spec/unit/shared/described_models_unit_specs.rb +38 -0
  123. data/spec/unit/shared/models_unit_specs.rb +15 -0
  124. data/spec/unit/shared/named_models_unit_specs.rb +39 -0
  125. data/spec/unit/shared/nested_models_unit_specs.rb +51 -0
  126. data/spec/unit/shared/parsed_models_unit_specs.rb +39 -0
  127. data/spec/unit/shared/prepopulated_models_unit_specs.rb +18 -0
  128. data/spec/unit/shared/sourced_models_unit_specs.rb +39 -0
  129. data/spec/unit/shared/stepped_models_unit_specs.rb +46 -0
  130. data/spec/unit/shared/stringifiable_models_unit_specs.rb +18 -0
  131. data/spec/unit/shared/tagged_models_unit_specs.rb +72 -0
  132. data/spec/unit/sourceable_unit_spec.rb +12 -4
  133. data/spec/unit/step_unit_spec.rb +40 -231
  134. data/spec/unit/stepped_unit_spec.rb +23 -0
  135. data/spec/unit/table_unit_spec.rb +27 -89
  136. data/spec/unit/tag_unit_spec.rb +30 -53
  137. data/spec/unit/taggable_unit_spec.rb +26 -42
  138. data/todo.txt +32 -0
  139. metadata +135 -217
  140. data/features/analysis/test_manipulation.feature +0 -37
  141. data/features/modeling/gherkin/background_modeling.feature +0 -65
  142. data/features/modeling/gherkin/background_output.feature +0 -131
  143. data/features/modeling/gherkin/directory_modeling.feature +0 -110
  144. data/features/modeling/gherkin/directory_output.feature +0 -14
  145. data/features/modeling/gherkin/doc_string_modeling.feature +0 -53
  146. data/features/modeling/gherkin/doc_string_output.feature +0 -72
  147. data/features/modeling/gherkin/example_modeling.feature +0 -101
  148. data/features/modeling/gherkin/example_output.feature +0 -193
  149. data/features/modeling/gherkin/feature_file_modeling.feature +0 -54
  150. data/features/modeling/gherkin/feature_file_output.feature +0 -14
  151. data/features/modeling/gherkin/feature_modeling.feature +0 -154
  152. data/features/modeling/gherkin/feature_output.feature +0 -245
  153. data/features/modeling/gherkin/outline_modeling.feature +0 -90
  154. data/features/modeling/gherkin/outline_output.feature +0 -198
  155. data/features/modeling/gherkin/row_modeling.feature +0 -68
  156. data/features/modeling/gherkin/row_output.feature +0 -28
  157. data/features/modeling/gherkin/scenario_modeling.feature +0 -79
  158. data/features/modeling/gherkin/scenario_output.feature +0 -148
  159. data/features/modeling/gherkin/step_modeling.feature +0 -75
  160. data/features/modeling/gherkin/step_output.feature +0 -53
  161. data/features/modeling/gherkin/table_modeling.feature +0 -42
  162. data/features/modeling/gherkin/table_output.feature +0 -43
  163. data/features/modeling/gherkin/table_row_modeling.feature +0 -57
  164. data/features/modeling/gherkin/table_row_output.feature +0 -28
  165. data/features/modeling/gherkin/tag_modeling.feature +0 -48
  166. data/features/modeling/gherkin/tag_output.feature +0 -17
  167. data/features/modeling/gherkin3/background_modeling.feature +0 -64
  168. data/features/modeling/gherkin3/background_output.feature +0 -131
  169. data/features/modeling/gherkin3/directory_modeling.feature +0 -110
  170. data/features/modeling/gherkin3/directory_output.feature +0 -14
  171. data/features/modeling/gherkin3/doc_string_modeling.feature +0 -53
  172. data/features/modeling/gherkin3/doc_string_output.feature +0 -72
  173. data/features/modeling/gherkin3/example_modeling.feature +0 -100
  174. data/features/modeling/gherkin3/example_output.feature +0 -207
  175. data/features/modeling/gherkin3/feature_file_modeling.feature +0 -54
  176. data/features/modeling/gherkin3/feature_file_output.feature +0 -14
  177. data/features/modeling/gherkin3/feature_modeling.feature +0 -155
  178. data/features/modeling/gherkin3/feature_output.feature +0 -249
  179. data/features/modeling/gherkin3/outline_modeling.feature +0 -89
  180. data/features/modeling/gherkin3/outline_output.feature +0 -255
  181. data/features/modeling/gherkin3/row_modeling.feature +0 -68
  182. data/features/modeling/gherkin3/row_output.feature +0 -28
  183. data/features/modeling/gherkin3/scenario_modeling.feature +0 -78
  184. data/features/modeling/gherkin3/scenario_output.feature +0 -148
  185. data/features/modeling/gherkin3/step_modeling.feature +0 -75
  186. data/features/modeling/gherkin3/step_output.feature +0 -53
  187. data/features/modeling/gherkin3/table_modeling.feature +0 -42
  188. data/features/modeling/gherkin3/table_output.feature +0 -43
  189. data/features/modeling/gherkin3/table_row_modeling.feature +0 -57
  190. data/features/modeling/gherkin3/table_row_output.feature +0 -28
  191. data/features/modeling/gherkin3/tag_modeling.feature +0 -49
  192. data/features/modeling/gherkin3/tag_output.feature +0 -17
  193. data/features/modeling/gherkin4/background_modeling.feature +0 -64
  194. data/features/modeling/gherkin4/background_output.feature +0 -131
  195. data/features/modeling/gherkin4/directory_modeling.feature +0 -110
  196. data/features/modeling/gherkin4/directory_output.feature +0 -14
  197. data/features/modeling/gherkin4/doc_string_modeling.feature +0 -53
  198. data/features/modeling/gherkin4/doc_string_output.feature +0 -72
  199. data/features/modeling/gherkin4/example_modeling.feature +0 -100
  200. data/features/modeling/gherkin4/example_output.feature +0 -193
  201. data/features/modeling/gherkin4/feature_file_modeling.feature +0 -54
  202. data/features/modeling/gherkin4/feature_file_output.feature +0 -14
  203. data/features/modeling/gherkin4/feature_modeling.feature +0 -153
  204. data/features/modeling/gherkin4/feature_output.feature +0 -245
  205. data/features/modeling/gherkin4/outline_modeling.feature +0 -89
  206. data/features/modeling/gherkin4/outline_output.feature +0 -198
  207. data/features/modeling/gherkin4/row_modeling.feature +0 -68
  208. data/features/modeling/gherkin4/row_output.feature +0 -28
  209. data/features/modeling/gherkin4/scenario_modeling.feature +0 -78
  210. data/features/modeling/gherkin4/scenario_output.feature +0 -148
  211. data/features/modeling/gherkin4/step_modeling.feature +0 -75
  212. data/features/modeling/gherkin4/step_output.feature +0 -53
  213. data/features/modeling/gherkin4/table_modeling.feature +0 -42
  214. data/features/modeling/gherkin4/table_output.feature +0 -43
  215. data/features/modeling/gherkin4/table_row_modeling.feature +0 -57
  216. data/features/modeling/gherkin4/table_row_output.feature +0 -28
  217. data/features/modeling/gherkin4/tag_modeling.feature +0 -48
  218. data/features/modeling/gherkin4/tag_output.feature +0 -17
  219. data/features/step_definitions/outline_steps.rb +0 -258
  220. data/features/step_definitions/test_steps.rb +0 -123
  221. data/lib/cuke_modeler/background.rb +0 -38
  222. data/lib/cuke_modeler/directory.rb +0 -83
  223. data/lib/cuke_modeler/doc_string.rb +0 -87
  224. data/lib/cuke_modeler/example.rb +0 -195
  225. data/lib/cuke_modeler/feature.rb +0 -147
  226. data/lib/cuke_modeler/feature_element.rb +0 -73
  227. data/lib/cuke_modeler/feature_file.rb +0 -77
  228. data/lib/cuke_modeler/outline.rb +0 -68
  229. data/lib/cuke_modeler/raw.rb +0 -20
  230. data/lib/cuke_modeler/row.rb +0 -64
  231. data/lib/cuke_modeler/scenario.rb +0 -45
  232. data/lib/cuke_modeler/step.rb +0 -216
  233. data/lib/cuke_modeler/table.rb +0 -90
  234. data/lib/cuke_modeler/table_row.rb +0 -64
  235. data/lib/cuke_modeler/tag.rb +0 -62
  236. data/lib/cuke_modeler/test_element.rb +0 -79
  237. data/lib/cuke_modeler/world.rb +0 -113
  238. data/spec/integration/table_row_integration_spec.rb +0 -76
  239. data/spec/integration/world_integration_spec.rb +0 -14
  240. data/spec/unit/containing_element_unit_specs.rb +0 -18
  241. data/spec/unit/feature_element_unit_spec.rb +0 -19
  242. data/spec/unit/feature_element_unit_specs.rb +0 -52
  243. data/spec/unit/nested_element_unit_specs.rb +0 -39
  244. data/spec/unit/prepopulated_unit_specs.rb +0 -14
  245. data/spec/unit/raw_element_unit_specs.rb +0 -27
  246. data/spec/unit/raw_unit_spec.rb +0 -28
  247. data/spec/unit/sourced_element_unit_specs.rb +0 -18
  248. data/spec/unit/table_row_unit_spec.rb +0 -102
  249. data/spec/unit/tagged_element_unit_specs.rb +0 -67
  250. data/spec/unit/test_element_unit_spec.rb +0 -54
  251. data/spec/unit/test_element_unit_specs.rb +0 -34
  252. data/spec/unit/world_unit_spec.rb +0 -140
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('Outline') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Outline, Unit' do
4
+ describe 'Outline, Unit', :unit_test => true do
6
5
 
7
6
  let(:clazz) { CukeModeler::Outline }
8
7
  let(:outline) { clazz.new }
@@ -10,99 +9,83 @@ describe 'Outline, Unit' do
10
9
 
11
10
  describe 'common behavior' do
12
11
 
13
- it_should_behave_like 'a feature element'
14
- it_should_behave_like 'a nested element'
15
- it_should_behave_like 'a containing element'
16
- it_should_behave_like 'a tagged element'
17
- it_should_behave_like 'a bare bones element'
18
- it_should_behave_like 'a prepopulated element'
19
- it_should_behave_like 'a test element'
20
- it_should_behave_like 'a sourced element'
21
- it_should_behave_like 'a raw element'
12
+ it_should_behave_like 'a model'
13
+ it_should_behave_like 'a named model'
14
+ it_should_behave_like 'a described model'
15
+ it_should_behave_like 'a stepped model'
16
+ it_should_behave_like 'a tagged model'
17
+ it_should_behave_like 'a sourced model'
18
+ it_should_behave_like 'a parsed model'
22
19
 
23
20
  end
24
21
 
25
22
 
26
23
  describe 'unique behavior' do
27
24
 
28
- it 'can be parsed from stand alone text' do
29
- source = "Scenario Outline: test outline
30
- Examples:
31
- |param|
32
- |value|"
33
-
34
- expect { @element = clazz.new(source) }.to_not raise_error
35
-
36
- # Sanity check in case instantiation failed in a non-explosive manner
37
- @element.name.should == 'test outline'
38
- end
39
-
40
- it 'provides a descriptive filename when being parsed from stand alone text' do
41
- source = "bad outline text \n Scenario Outline:\n And a step\n @foo "
42
-
43
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_outline\.feature'/)
25
+ it 'has examples' do
26
+ expect(outline).to respond_to(:examples)
44
27
  end
45
28
 
46
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
47
- outline = clazz.new("Scenario Outline: test outline\nExamples:\n|param|\n|value|")
48
- raw_data = outline.raw_element
29
+ it 'can change its examples' do
30
+ expect(outline).to respond_to(:examples=)
49
31
 
50
- expect(raw_data.keys).to match_array([:type, :tags, :location, :keyword, :name, :steps, :examples])
51
- expect(raw_data[:type]).to eq(:ScenarioOutline)
32
+ outline.examples = :some_examples
33
+ expect(outline.examples).to eq(:some_examples)
34
+ outline.examples = :some_other_examples
35
+ expect(outline.examples).to eq(:some_other_examples)
52
36
  end
53
37
 
54
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
55
- outline = clazz.new("Scenario Outline: test outline\nExamples:\n|param|\n|value|")
56
- raw_data = outline.raw_element
57
38
 
58
- expect(raw_data.keys).to match_array([:type, :tags, :location, :keyword, :name, :steps, :examples])
59
- expect(raw_data[:type]).to eq(:ScenarioOutline)
60
- end
39
+ describe 'abstract instantiation' do
61
40
 
62
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
63
- outline = clazz.new("Scenario Outline: test outline\nExamples:\n|param|\n|value|")
64
- raw_data = outline.raw_element
41
+ context 'a new outline object' do
65
42
 
66
- expect(raw_data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'type'])
67
- expect(raw_data['keyword']).to eq('Scenario Outline')
68
- end
43
+ let(:outline) { clazz.new }
69
44
 
70
- it 'has examples' do
71
- outline.should respond_to(:examples)
72
- end
73
45
 
74
- it 'can change its examples' do
75
- expect(outline).to respond_to(:examples=)
46
+ it 'starts with no examples' do
47
+ expect(outline.examples).to eq([])
48
+ end
76
49
 
77
- outline.examples = :some_examples
78
- outline.examples.should == :some_examples
79
- outline.examples = :some_other_examples
80
- outline.examples.should == :some_other_examples
81
- end
50
+ end
82
51
 
83
- it 'starts with no examples' do
84
- outline.examples.should == []
85
52
  end
86
53
 
87
- it 'contains steps and examples' do
54
+ it 'contains steps, examples, and tags' do
55
+ tags = [:tag_1, :tagt_2]
88
56
  steps = [:step_1, :step_2, :step_3]
89
57
  examples = [:example_1, :example_2, :example_3]
90
- everything = steps + examples
58
+ everything = steps + examples + tags
91
59
 
92
60
  outline.steps = steps
93
61
  outline.examples = examples
62
+ outline.tags = tags
63
+
64
+ expect(outline.children).to match_array(everything)
65
+ end
66
+
67
+
68
+ describe 'comparison' do
69
+
70
+ it 'can gracefully be compared to other types of objects' do
71
+ # Some common types of object
72
+ [1, 'foo', :bar, [], {}].each do |thing|
73
+ expect { outline == thing }.to_not raise_error
74
+ expect(outline == thing).to be false
75
+ end
76
+ end
94
77
 
95
- outline.contains.should =~ everything
96
78
  end
97
79
 
98
- describe 'outline output edge cases' do
80
+
81
+ describe 'outline output' do
99
82
 
100
83
  it 'is a String' do
101
- outline.to_s.should be_a(String)
84
+ expect(outline.to_s).to be_a(String)
102
85
  end
103
86
 
104
87
 
105
- context 'a new outline object' do
88
+ context 'from abstract instantiation' do
106
89
 
107
90
  let(:outline) { clazz.new }
108
91
 
@@ -118,13 +101,7 @@ describe 'Outline, Unit' do
118
101
  end
119
102
 
120
103
  it 'can output an outline that has only a description' do
121
- outline.description_text = 'a description'
122
-
123
- expect { outline.to_s }.to_not raise_error
124
- end
125
-
126
- it 'can output an outline that has only tags' do
127
- outline.tags = ['a tag']
104
+ outline.description = 'a description'
128
105
 
129
106
  expect { outline.to_s }.to_not raise_error
130
107
  end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe 'Parsed, Unit' do
5
+
6
+ let(:nodule) { CukeModeler::Parsed }
7
+ let(:model) { Object.new.extend(nodule) }
8
+
9
+
10
+ describe 'unique behavior' do
11
+
12
+ it 'can access its original parsing data' do
13
+ expect(model).to respond_to(:parsing_data)
14
+ end
15
+
16
+ it 'can change its parsing data' do
17
+ expect(model).to respond_to(:parsing_data=)
18
+
19
+ model.parsing_data = :some_parsing_data
20
+ expect(model.parsing_data).to eq(:some_parsing_data)
21
+ model.parsing_data = :some_other_parsing_data
22
+ expect(model.parsing_data).to eq(:some_other_parsing_data)
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('Parsing') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Parsing, Unit' do
4
+ describe 'Parsing, Unit', :unit_test => true do
6
5
 
7
6
  let(:nodule) { CukeModeler::Parsing }
8
7
 
@@ -10,80 +9,13 @@ describe 'Parsing, Unit' do
10
9
  describe 'unique behavior' do
11
10
 
12
11
  it 'can parse text' do
13
- nodule.should respond_to(:parse_text)
14
- end
15
-
16
- it 'can only parse strings' do
17
- expect { nodule.parse_text(5) }.to raise_error(ArgumentError)
18
- expect { nodule.parse_text('Feature:') }.to_not raise_error
19
- end
20
-
21
- it 'returns an Array' do
22
- result = nodule.parse_text('Feature:')
23
- result.is_a?(Array).should be_true
12
+ expect(nodule).to respond_to(:parse_text)
24
13
  end
25
14
 
26
15
  it 'takes the text that is to be parsed and an optional file name' do
27
16
  expect(nodule.method(:parse_text).arity).to eq(-2)
28
17
  end
29
18
 
30
- it 'raises and error if an error is encountered while parsing text' do
31
- expect { nodule.parse_text('bad file') }.to raise_error(ArgumentError, /Error encountered while parsing '.*'/)
32
- end
33
-
34
- it 'includes the file parsed in the error that it raises' do
35
- expect { nodule.parse_text('bad file', 'file foo.txt') }.to raise_error(/'file foo\.txt'/)
36
- end
37
-
38
- it 'includes the underlying error message in the error that it raises' do
39
- begin
40
- # Custom error type in order to ensure that we are throwing the correct thing
41
- module CukeModeler
42
- class TestError < StandardError
43
- end
44
- end
45
-
46
- # Monkey patch Gherkin to throw the error that we need for testing
47
- if Gem.loaded_specs['gherkin'].version.version[/^3|4/]
48
- old_method = Gherkin::Parser.instance_method(:parse)
49
-
50
- module Gherkin
51
- class Parser
52
- def parse(*args)
53
- raise(CukeModeler::TestError, 'something went wrong')
54
- end
55
- end
56
- end
57
- else
58
- old_method = Gherkin::Parser::Parser.instance_method(:parse)
59
-
60
- module Gherkin
61
- module Parser
62
- class Parser
63
- def parse(*args)
64
- raise(CukeModeler::TestError, 'something went wrong')
65
- end
66
- end
67
- end
68
- end
69
- end
70
-
71
- expect { nodule.parse_text('bad file') }.to raise_error(/CukeModeler::TestError.*something went wrong/)
72
- ensure
73
- # Making sure that our changes don't escape a test and ruin the rest of the suite
74
- if Gem.loaded_specs['gherkin'].version.version[/^3|4/]
75
- Gherkin::Parser.send(:define_method, :parse, old_method)
76
- else
77
- Gherkin::Parser::Parser.send(:define_method, :parse, old_method)
78
- end
79
- end
80
-
81
- end
82
-
83
- it 'has a default file name if one is not provided' do
84
- expect { nodule.parse_text('bad file') }.to raise_error(ArgumentError, /'cuke_modeler_fake_file\.feature'/)
85
- end
86
-
87
19
  end
88
20
 
89
21
  end
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('Row') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Row, Unit' do
4
+ describe 'Row, Unit', :unit_test => true do
6
5
 
7
6
  let(:clazz) { CukeModeler::Row }
8
7
  let(:row) { clazz.new }
@@ -10,81 +9,53 @@ describe 'Row, Unit' do
10
9
 
11
10
  describe 'common behavior' do
12
11
 
13
- it_should_behave_like 'a nested element'
14
- it_should_behave_like 'a bare bones element'
15
- it_should_behave_like 'a prepopulated element'
16
- it_should_behave_like 'a sourced element'
17
- it_should_behave_like 'a raw element'
12
+ it_should_behave_like 'a model'
13
+ it_should_behave_like 'a sourced model'
14
+ it_should_behave_like 'a parsed model'
18
15
 
19
16
  end
20
17
 
21
18
 
22
19
  describe 'unique behavior' do
23
20
 
24
- it 'can be parsed from stand alone text' do
25
- source = '| a | row |'
26
-
27
- expect { @element = clazz.new(source) }.to_not raise_error
28
-
29
- # Sanity check in case instantiation failed in a non-explosive manner
30
- @element.cells.should == ['a', 'row']
21
+ it 'has cells' do
22
+ expect(row).to respond_to(:cells)
31
23
  end
32
24
 
33
- it 'provides a descriptive filename when being parsed from stand alone text' do
34
- source = " |bad |row| text| \n @foo "
25
+ it 'can change its cells' do
26
+ expect(row).to respond_to(:cells=)
35
27
 
36
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_row\.feature'/)
28
+ row.cells = :some_cells
29
+ expect(row.cells).to eq(:some_cells)
30
+ row.cells = :some_other_cells
31
+ expect(row.cells).to eq(:some_other_cells)
37
32
  end
38
33
 
39
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
40
- example_row = clazz.new("| a | row |")
41
- raw_data = example_row.raw_element
42
34
 
43
- expect(raw_data.keys).to match_array([:type, :location, :cells])
44
- expect(raw_data[:type]).to eq(:TableRow)
45
- end
35
+ describe 'abstract instantiation' do
46
36
 
47
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
48
- example_row = clazz.new("| a | row |")
49
- raw_data = example_row.raw_element
37
+ context 'a new row object' do
50
38
 
51
- expect(raw_data.keys).to match_array([:type, :location, :cells])
52
- expect(raw_data[:type]).to eq('TableRow')
53
- end
39
+ let(:row) { clazz.new }
54
40
 
55
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
56
- example_row = clazz.new("| a | row |")
57
- raw_data = example_row.raw_element
58
41
 
59
- expect(raw_data.keys).to match_array(['cells', 'line', 'id'])
60
- expect(raw_data['cells']).to eq(['a', 'row'])
61
- end
62
-
63
- it 'has cells' do
64
- row.should respond_to(:cells)
65
- end
42
+ it 'starts with no cells' do
43
+ expect(row.cells).to eq([])
44
+ end
66
45
 
67
- it 'can change its cells' do
68
- expect(row).to respond_to(:cells=)
46
+ end
69
47
 
70
- row.cells = :some_cells
71
- row.cells.should == :some_cells
72
- row.cells = :some_other_cells
73
- row.cells.should == :some_other_cells
74
48
  end
75
49
 
76
- it 'starts with no cells' do
77
- row.cells.should == []
78
- end
79
50
 
80
- describe 'row output edge cases' do
51
+ describe 'row output' do
81
52
 
82
53
  it 'is a String' do
83
- row.to_s.should be_a(String)
54
+ expect(row.to_s).to be_a(String)
84
55
  end
85
56
 
86
57
 
87
- context 'a new row object' do
58
+ context 'from abstract instantiation' do
88
59
 
89
60
  let(:row) { clazz.new }
90
61
 
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('Scenario') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Scenario, Unit' do
4
+ describe 'Scenario, Unit', :unit_test => true do
6
5
 
7
6
  let(:clazz) { CukeModeler::Scenario }
8
7
  let(:scenario) { clazz.new }
@@ -10,77 +9,52 @@ describe 'Scenario, Unit' do
10
9
 
11
10
  describe 'common behavior' do
12
11
 
13
- it_should_behave_like 'a feature element'
14
- it_should_behave_like 'a nested element'
15
- it_should_behave_like 'a containing element'
16
- it_should_behave_like 'a tagged element'
17
- it_should_behave_like 'a bare bones element'
18
- it_should_behave_like 'a prepopulated element'
19
- it_should_behave_like 'a test element'
20
- it_should_behave_like 'a sourced element'
21
- it_should_behave_like 'a raw element'
12
+ it_should_behave_like 'a model'
13
+ it_should_behave_like 'a named model'
14
+ it_should_behave_like 'a described model'
15
+ it_should_behave_like 'a stepped model'
16
+ it_should_behave_like 'a tagged model'
17
+ it_should_behave_like 'a sourced model'
18
+ it_should_behave_like 'a parsed model'
22
19
 
23
20
  end
24
21
 
25
22
 
26
23
  describe 'unique behavior' do
27
24
 
28
- it 'can be parsed from stand alone text' do
29
- source = 'Scenario: test scenario'
30
-
31
- expect { @element = clazz.new(source) }.to_not raise_error
32
-
33
- # Sanity check in case instantiation failed in a non-explosive manner
34
- @element.name.should == 'test scenario'
35
- end
36
-
37
- it 'provides a descriptive filename when being parsed from stand alone text' do
38
- source = "bad scenario text \n Scenario:\n And a step\n @foo "
39
-
40
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_scenario\.feature'/)
41
- end
25
+ it 'contains steps and tags' do
26
+ tags = [:tag_1, :tag_2]
27
+ steps = [:step_1, :step_2]
28
+ everything = steps + tags
42
29
 
43
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
44
- scenario = clazz.new("Scenario: test scenario")
45
- raw_data = scenario.raw_element
30
+ scenario.steps = steps
31
+ scenario.tags = tags
46
32
 
47
- expect(raw_data.keys).to match_array([:type, :tags, :location, :keyword, :name, :steps])
48
- expect(raw_data[:type]).to eq(:Scenario)
33
+ expect(scenario.children).to match_array(everything)
49
34
  end
50
35
 
51
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
52
- scenario = clazz.new("Scenario: test scenario")
53
- raw_data = scenario.raw_element
54
36
 
55
- expect(raw_data.keys).to match_array([:type, :tags, :location, :keyword, :name, :steps])
56
- expect(raw_data[:type]).to eq(:Scenario)
57
- end
37
+ describe 'comparison' do
58
38
 
59
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
60
- scenario = clazz.new("Scenario: test scenario")
61
- raw_data = scenario.raw_element
39
+ it 'can gracefully be compared to other types of objects' do
40
+ # Some common types of object
41
+ [1, 'foo', :bar, [], {}].each do |thing|
42
+ expect { scenario == thing }.to_not raise_error
43
+ expect(scenario == thing).to be false
44
+ end
45
+ end
62
46
 
63
- expect(raw_data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'type'])
64
- expect(raw_data['keyword']).to eq('Scenario')
65
47
  end
66
48
 
67
- it 'contains only steps' do
68
- steps = [:step_1, :step_2]
69
- everything = steps
70
-
71
- scenario.steps = steps
72
-
73
- scenario.contains.should =~ everything
74
- end
75
49
 
76
- describe 'scenario output edge cases' do
50
+ describe 'scenario output' do
77
51
 
78
52
  it 'is a String' do
79
- scenario.to_s.should be_a(String)
53
+ expect(scenario.to_s).to be_a(String)
80
54
  end
81
55
 
82
56
 
83
- context 'a new scenario object' do
57
+ context 'from abstract instantiation' do
84
58
 
85
59
  let(:scenario) { clazz.new }
86
60
 
@@ -96,13 +70,7 @@ describe 'Scenario, Unit' do
96
70
  end
97
71
 
98
72
  it 'can output a scenario that has only a description' do
99
- scenario.description_text = 'a description'
100
-
101
- expect { scenario.to_s }.to_not raise_error
102
- end
103
-
104
- it 'can output a scenario that has only tags' do
105
- scenario.tags = ['a tag']
73
+ scenario.description = 'a description'
106
74
 
107
75
  expect { scenario.to_s }.to_not raise_error
108
76
  end