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,152 +1,99 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('DocString') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'DocString, Unit' do
4
+ describe 'DocString, Unit', :unit_test => true do
6
5
 
7
6
  let(:clazz) { CukeModeler::DocString }
8
7
  let(:doc_string) { clazz.new }
9
8
 
10
9
  describe 'common behavior' do
11
10
 
12
- it_should_behave_like 'a nested element'
13
- it_should_behave_like 'a bare bones element'
14
- it_should_behave_like 'a prepopulated element'
15
- it_should_behave_like 'a raw element'
11
+ it_should_behave_like 'a model'
12
+ it_should_behave_like 'a parsed model'
13
+ it_should_behave_like 'a sourced model'
16
14
 
17
15
  end
18
16
 
19
17
 
20
18
  describe 'unique behavior' do
21
19
 
22
- it 'can be parsed from stand alone text' do
23
- source = "\"\"\"\nsome doc string\n\"\"\""
24
-
25
- expect { @element = clazz.new(source) }.to_not raise_error
26
-
27
- # Sanity check in case instantiation failed in a non-explosive manner
28
- @element.contents_text.should == "some doc string"
29
- #todo Remove once Array contents is no longer supported
30
- @element.contents.should == ["some doc string"]
31
- end
32
-
33
- it 'provides a descriptive filename when being parsed from stand alone text' do
34
- source = 'bad doc string text'
35
-
36
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_doc_string\.feature'/)
37
- end
38
-
39
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
40
- doc_string = clazz.new("\"\"\"\nsome doc string\n\"\"\"")
41
- raw_data = doc_string.raw_element
42
-
43
- expect(raw_data.keys).to match_array([:type, :location, :content])
44
- expect(raw_data[:type]).to eq(:DocString)
45
- end
46
-
47
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
48
- doc_string = clazz.new("\"\"\"\nsome doc string\n\"\"\"")
49
- raw_data = doc_string.raw_element
50
-
51
- expect(raw_data.keys).to match_array([:type, :location, :content])
52
- expect(raw_data[:type]).to eq(:DocString)
53
- end
54
-
55
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
56
- doc_string = clazz.new("\"\"\"\nsome doc string\n\"\"\"")
57
- raw_data = doc_string.raw_element
58
-
59
- expect(raw_data.keys).to match_array(['value', 'content_type', 'line'])
60
- expect(raw_data['value']).to eq('some doc string')
61
- end
62
-
63
20
  it 'has a content type' do
64
- doc_string.should respond_to(:content_type)
21
+ expect(doc_string).to respond_to(:content_type)
65
22
  end
66
23
 
67
24
  it 'can change its content type' do
68
25
  expect(doc_string).to respond_to(:content_type=)
69
26
 
70
27
  doc_string.content_type = :some_content_type
71
- doc_string.content_type.should == :some_content_type
28
+ expect(doc_string.content_type).to eq(:some_content_type)
72
29
  doc_string.content_type = :some_other_content_type
73
- doc_string.content_type.should == :some_other_content_type
30
+ expect(doc_string.content_type).to eq(:some_other_content_type)
74
31
  end
75
32
 
76
- it 'starts with no content type' do
77
- doc_string.content_type.should == nil
33
+ it 'has content' do
34
+ expect(doc_string).to respond_to(:content)
78
35
  end
79
36
 
80
- it 'has contents' do
81
- #todo Remove once Array contents is no longer supported
82
- doc_string.should respond_to(:contents)
83
- doc_string.should respond_to(:contents_text)
37
+ it 'can change its content' do
38
+ expect(doc_string).to respond_to(:content=)
39
+
40
+ doc_string.content = :some_content
41
+ expect(doc_string.content).to eq(:some_content)
42
+ doc_string.content = :some_other_content
43
+ expect(doc_string.content).to eq(:some_other_content)
84
44
  end
85
45
 
86
- it 'can get and set its contents' do
87
- expect(doc_string).to respond_to(:contents=)
88
- expect(doc_string).to respond_to(:contents_text=)
89
46
 
90
- #todo Remove once Array contents is no longer supported
91
- doc_string.contents = :some_contents
92
- doc_string.contents.should == :some_contents
93
- doc_string.contents = :some_other_contents
94
- doc_string.contents.should == :some_other_contents
47
+ describe 'abstract instantiation' do
95
48
 
96
- doc_string.contents_text = :some_contents
97
- doc_string.contents_text.should == :some_contents
98
- doc_string.contents_text = :some_other_contents
99
- doc_string.contents_text.should == :some_other_contents
100
- end
101
-
102
- it 'starts with no contents' do
103
- #todo Remove once Array contents is no longer supported
104
- doc_string.contents.should == []
105
- doc_string.contents_text.should == ''
106
- end
49
+ context 'a new doc string object' do
107
50
 
108
- #todo Remove once Array contents is no longer supported
109
- it 'stores its contents as an array of strings - deprecated' do
110
- source = "\"\"\"\nsome text\nsome more text\n\"\"\""
111
- doc_string = clazz.new(source)
51
+ let(:doc_string) { clazz.new }
112
52
 
113
- contents = doc_string.contents
114
53
 
115
- contents.is_a?(Array).should be_true
116
- contents.each do |line|
117
- line.is_a?(String).should be_true
118
- end
119
- end
54
+ it 'starts with no content type' do
55
+ expect(doc_string.content_type).to be_nil
56
+ end
120
57
 
121
- it 'stores its contents as a String' do
122
- source = "\"\"\"\nsome text\nsome more text\n\"\"\""
123
- doc_string = clazz.new(source)
58
+ it 'starts with no content' do
59
+ expect(doc_string.content).to be_nil
60
+ end
124
61
 
125
- contents = doc_string.contents_text
62
+ end
126
63
 
127
- contents.is_a?(String).should be_true
128
64
  end
129
65
 
130
- describe 'doc string output edge cases' do
66
+
67
+ describe 'doc string output' do
131
68
 
132
69
  it 'is a String' do
133
- doc_string.to_s.should be_a(String)
70
+ expect(doc_string.to_s).to be_a(String)
134
71
  end
135
72
 
136
73
 
137
- context 'a new doc string object' do
74
+ context 'from abstract instantiation' do
138
75
 
139
- let(:doc_string) { clazz.new }
76
+ context 'a new doc string object' do
140
77
 
78
+ let(:doc_string) { clazz.new }
141
79
 
142
- it 'can output an empty doc string' do
143
- expect { doc_string.to_s }.to_not raise_error
144
- end
145
80
 
146
- it 'can output a doc string that has only a content type' do
147
- doc_string.content_type = 'some type'
81
+ it 'can output an empty doc string' do
82
+ expect { doc_string.to_s }.to_not raise_error
83
+ end
84
+
85
+ it 'can output a doc string that has only a content type' do
86
+ doc_string.content_type = 'some type'
87
+
88
+ expect { doc_string.to_s }.to_not raise_error
89
+ end
90
+
91
+ it 'can output a doc string that has only content' do
92
+ doc_string.content = 'foo'
93
+
94
+ expect { doc_string.to_s }.to_not raise_error
95
+ end
148
96
 
149
- expect { doc_string.to_s }.to_not raise_error
150
97
  end
151
98
 
152
99
  end
@@ -1,333 +1,107 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('Example') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Example, Unit' do
4
+ describe 'Example, Unit', :unit_test => true do
6
5
 
7
6
  let(:clazz) { CukeModeler::Example }
8
7
  let(:example) { clazz.new }
9
8
 
10
9
  describe 'common behavior' do
11
10
 
12
- it_should_behave_like 'a feature element'
13
- it_should_behave_like 'a nested element'
14
- it_should_behave_like 'a tagged element'
15
- it_should_behave_like 'a bare bones element'
16
- it_should_behave_like 'a prepopulated element'
17
- it_should_behave_like 'a sourced element'
18
- it_should_behave_like 'a containing element'
19
- it_should_behave_like 'a raw element'
11
+ it_should_behave_like 'a model'
12
+ it_should_behave_like 'a named model'
13
+ it_should_behave_like 'a described model'
14
+ it_should_behave_like 'a tagged model'
15
+ it_should_behave_like 'a sourced model'
16
+ it_should_behave_like 'a parsed model'
20
17
 
21
18
  end
22
19
 
23
20
 
24
21
  describe 'unique behavior' do
25
22
 
26
- it 'can be parsed from stand alone text' do
27
- source = ['Examples: test example',
28
- '|param| ',
29
- '|value|']
30
-
31
- source = source.join("\n")
32
-
33
- expect { @element = clazz.new(source) }.to_not raise_error
34
-
35
- # Sanity check in case instantiation failed in a non-explosive manner
36
- @element.name.should == 'test example'
37
- end
38
-
39
- # todo - add more tests like this to the 'barebones' test set
40
- it 'can be instantiated with the minimum viable Gherkin', :gherkin4 => true do
41
- source = ['Examples:']
42
- source = source.join("\n")
43
-
44
- expect { @element = clazz.new(source) }.to_not raise_error
45
- end
46
-
47
- # todo - add more tests like this to the 'barebones' test set
48
- it 'can be instantiated with the minimum viable Gherkin', :gherkin3 => true do
49
- source = ['Examples:',
50
- '|param|',
51
- '|value|']
52
- source = source.join("\n")
53
-
54
- expect { @element = clazz.new(source) }.to_not raise_error
55
- end
56
-
57
- # todo - add more tests like this to the 'barebones' test set
58
- it 'can be instantiated with the minimum viable Gherkin', :gherkin2 => true do
59
- source = ['Examples:',
60
- '|param|']
61
- source = source.join("\n")
62
-
63
- expect { @element = clazz.new(source) }.to_not raise_error
64
- end
65
-
66
- it 'provides a descriptive filename when being parsed from stand alone text' do
67
- source = 'bad example text'
68
-
69
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_example\.feature'/)
70
- end
71
-
72
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
73
- example = clazz.new("Examples: test example\n|param|\n|value|")
74
- raw_data = example.raw_element
75
-
76
- expect(raw_data.keys).to match_array([:type, :tags, :location, :keyword, :name, :tableHeader, :tableBody])
77
- expect(raw_data[:type]).to eq(:Examples)
78
- end
79
-
80
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
81
- example = clazz.new("Examples: test example\n|param|\n|value|")
82
- raw_data = example.raw_element
83
-
84
- expect(raw_data.keys).to match_array([:type, :tags, :location, :keyword, :name, :tableHeader, :tableBody])
85
- expect(raw_data[:type]).to eq(:Examples)
86
- end
87
-
88
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
89
- example = clazz.new("Examples: test example\n|param|\n|value|")
90
- raw_data = example.raw_element
91
-
92
- expect(raw_data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'rows'])
93
- expect(raw_data['keyword']).to eq('Examples')
94
- end
95
-
96
- it 'has parameters' do
97
- example.should respond_to(:parameters)
98
- end
99
-
100
- it 'can change its parameters' do
101
- expect(example).to respond_to(:parameters=)
102
-
103
- example.parameters = :some_parameters
104
- example.parameters.should == :some_parameters
105
- example.parameters = :some_other_parameters
106
- example.parameters.should == :some_other_parameters
107
- end
108
-
109
- it 'starts with no parameters' do
110
- example.parameters.should == []
111
- end
112
-
113
23
  it 'has rows' do
114
- example.should respond_to(:rows)
24
+ expect(example).to respond_to(:rows)
115
25
  end
116
26
 
117
- #todo - remove once Hash rows are no longer supported
118
27
  it 'can change its rows' do
119
28
  expect(example).to respond_to(:rows=)
120
29
 
121
30
  example.rows = :some_rows
122
- example.rows.should == :some_rows
31
+ expect(example.rows).to eq(:some_rows)
123
32
  example.rows = :some_other_rows
124
- example.rows.should == :some_other_rows
33
+ expect(example.rows).to eq(:some_other_rows)
125
34
  end
126
35
 
127
- #todo - remove once Hash rows are no longer supported
128
- it 'starts with no rows' do
129
- example.rows.should == []
36
+ it 'can selectively access its parameter row' do
37
+ expect(example).to respond_to(:parameter_row)
130
38
  end
131
39
 
132
- #todo - remove once Hash rows are no longer supported
133
- it 'stores its rows as an nested array of hashes' do
134
- source = "Examples:\n|param1|param2|\n|value1|value2|"
135
- example = clazz.new(source)
136
-
137
- rows = example.rows
138
-
139
- rows.is_a?(Array).should be_true
140
- rows.empty?.should be_false
141
- rows.each { |row| row.is_a?(Hash).should be_true }
142
- end
143
-
144
- it 'does not include the parameter row as a row' do
145
- source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
146
- example = clazz.new(source)
147
-
148
- rows = example.rows
149
-
150
- rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}]
40
+ it 'can selectively access its argument rows' do
41
+ expect(example).to respond_to(:argument_rows)
151
42
  end
152
43
 
153
- it 'has row elements' do
154
- example.should respond_to(:row_elements)
44
+ it 'can determine its parameters' do
45
+ expect(example).to respond_to(:parameters)
155
46
  end
156
47
 
157
- it 'can change its row elements' do
158
- expect(example).to respond_to(:row_elements=)
159
-
160
- example.row_elements = :some_row_elements
161
- example.row_elements.should == :some_row_elements
162
- example.row_elements = :some_other_row_elements
163
- example.row_elements.should == :some_other_row_elements
164
- end
165
-
166
- it 'starts with no row elements' do
167
- example.row_elements.should == []
168
- end
169
-
170
- describe '#add_row' do
171
-
172
- it 'can add a new example row' do
173
- clazz.new.should respond_to(:add_row)
174
- end
175
-
176
- it 'can add a new row as a hash, string values' do
177
- source = "Examples:\n|param1|param2|\n|value1|value2|"
178
- example = clazz.new(source)
179
-
180
- new_row = {'param1' => 'value3', 'param2' => 'value4'}
181
- example.add_row(new_row)
182
-
183
- #todo - remove once Hash rows are no longer supported
184
- example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}]
185
- example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', 'value4']]
186
- end
187
-
188
- it 'can add a new row as a hash, non-string values' do
189
- source = "Examples:\n|param1|param2|\n|value1|value2|"
190
- example = clazz.new(source)
191
48
 
192
- new_row = {:param1 => 'value3', 'param2' => 4}
193
- example.add_row(new_row)
49
+ describe 'abstract instantiation' do
194
50
 
195
- #todo - remove once Hash rows are no longer supported
196
- example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => '4'}]
197
- example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', '4']]
198
- end
199
-
200
- it 'can add a new row as an array, string values' do
201
- source = "Examples:\n|param1|param2|\n|value1|value2|"
202
- example = clazz.new(source)
203
-
204
- new_row = ['value3', 'value4']
205
- example.add_row(new_row)
206
-
207
- #todo - remove once Hash rows are no longer supported
208
- example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}]
209
- example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', 'value4']]
210
- end
211
-
212
- it 'can add a new row as an array, non-string values' do
213
- source = "Examples:\n|param1|param2|param3|\n|value1|value2|value3|"
214
- example = clazz.new(source)
215
-
216
- new_row = [:value4, 5, 'value6']
217
- example.add_row(new_row)
218
-
219
- #todo - remove once Hash rows are no longer supported
220
- example.rows.should == [{'param1' => 'value1', 'param2' => 'value2', 'param3' => 'value3'}, {'param1' => 'value4', 'param2' => '5', 'param3' => 'value6'}]
221
- example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2', 'value3'], ['value4', '5', 'value6']]
222
- end
223
-
224
- it 'can only use a Hash or an Array to add a new row' do
225
- source = "Examples:\n|param|\n|value|"
226
- example = clazz.new(source)
227
-
228
- expect { example.add_row({}) }.to_not raise_error
229
- expect { example.add_row([]) }.to_not raise_error
230
- expect { example.add_row(:a_row) }.to raise_error(ArgumentError)
231
- end
232
-
233
- it 'trims whitespace from added rows' do
234
- source = "Examples:\n|param1|param2|\n|value1|value2|"
235
- example = clazz.new(source)
236
-
237
- hash_row = {'param1' => 'value3 ', 'param2' => ' value4'}
238
- array_row = ['value5', ' value6 ']
239
- example.add_row(hash_row)
240
- example.add_row(array_row)
51
+ context 'a new example object' do
241
52
 
242
- #todo - remove once Hash rows are no longer supported
243
- example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}, {'param1' => 'value3', 'param2' => 'value4'}, {'param1' => 'value5', 'param2' => 'value6'}]
244
- example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2'], ['value3', 'value4'], ['value5', 'value6']]
245
- end
53
+ let(:example) { clazz.new }
246
54
 
247
- #todo - remove once Hash rows are no longer supported
248
- it 'will complain if a row is added and no parameters have been set' do
249
- example = clazz.new
250
- example.parameters = []
251
55
 
252
- new_row = ['value1', 'value2']
253
- expect { example.add_row(new_row) }.to raise_error('Cannot add a row. No parameters have been set.')
56
+ it 'starts with no rows' do
57
+ expect(example.rows).to eq([])
58
+ end
254
59
 
255
- new_row = {'param1' => 'value1', 'param2' => 'value2'}
256
- expect { example.add_row(new_row) }.to raise_error('Cannot add a row. No parameters have been set.')
257
- end
60
+ it 'starts with no argument rows' do
61
+ expect(example.argument_rows).to eq([])
62
+ end
258
63
 
259
- #todo - remove once Hash rows are no longer supported
260
- it 'does not modify its row input' do
261
- source = "Examples:\n|param1|param2|\n|value1|value2|"
262
- example = clazz.new(source)
64
+ it 'starts with no parameter row' do
65
+ expect(example.parameter_row).to be_nil
66
+ end
263
67
 
264
- new_row = ['value1'.freeze, 'value2'.freeze].freeze
265
- expect { example.add_row(new_row) }.to_not raise_error
68
+ it 'starts with no parameters' do
69
+ expect(example.parameters).to eq([])
70
+ end
266
71
 
267
- new_row = {'param1'.freeze => 'value1'.freeze, 'param2'.freeze => 'value2'.freeze}.freeze
268
- expect { example.add_row(new_row) }.to_not raise_error
269
72
  end
270
73
 
271
74
  end
272
75
 
273
- describe '#remove_row' do
274
-
275
- it 'can remove an existing example row' do
276
- clazz.new.should respond_to(:remove_row)
277
- end
278
-
279
- it 'can remove an existing row as a hash' do
280
- source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
281
- example = clazz.new(source)
282
76
 
283
- old_row = {'param1' => 'value3', 'param2' => 'value4'}
284
- example.remove_row(old_row)
285
-
286
- #todo - remove once Hash rows are no longer supported
287
- example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}]
288
- example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2']]
289
- end
290
-
291
- it 'can remove an existing row as an array' do
292
- source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|"
293
- example = clazz.new(source)
294
-
295
- old_row = ['value3', 'value4']
296
- example.remove_row(old_row)
297
-
298
- #todo - remove once Hash rows are no longer supported
299
- example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}]
300
- example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2']]
301
- end
77
+ it 'can add a new example row' do
78
+ expect(clazz.new).to respond_to(:add_row)
79
+ end
302
80
 
303
- it 'can only use a Hash or an Array to remove an existing row' do
304
- expect { example.remove_row({}) }.to_not raise_error
305
- expect { example.remove_row([]) }.to_not raise_error
306
- expect { example.remove_row(:a_row) }.to raise_error(ArgumentError)
307
- end
81
+ it 'can remove an existing example row' do
82
+ expect(clazz.new).to respond_to(:remove_row)
83
+ end
308
84
 
309
- it 'trims whitespace from removed rows' do
310
- source = "Examples:\n|param1|param2|\n|value1|value2|\n|value3|value4|\n|value5|value6|"
311
- example = clazz.new(source)
85
+ it 'contains rows and tags' do
86
+ tags = [:tag_1, :tag_2]
87
+ rows = [:row_1, :row_2]
88
+ everything = rows + tags
312
89
 
313
- hash_row = {'param1' => 'value3 ', 'param2' => ' value4'}
314
- array_row = ['value5', ' value6 ']
315
- example.remove_row(hash_row)
316
- example.remove_row(array_row)
90
+ example.rows = rows
91
+ example.tags = tags
317
92
 
318
- #todo - remove once Hash rows are no longer supported
319
- example.rows.should == [{'param1' => 'value1', 'param2' => 'value2'}]
320
- example.row_elements.collect { |row| row.cells }[1..example.row_elements.count].should == [['value1', 'value2']]
321
- end
93
+ expect(example.children).to match_array(everything)
322
94
  end
323
95
 
324
- describe 'example output edge cases' do
96
+
97
+ describe 'example output' do
325
98
 
326
99
  it 'is a String' do
327
- example.to_s.should be_a(String)
100
+ expect(example.to_s).to be_a(String)
328
101
  end
329
102
 
330
- context 'a new example object' do
103
+
104
+ context 'from abstract instantiation' do
331
105
 
332
106
  let(:example) { clazz.new }
333
107
 
@@ -343,27 +117,7 @@ describe 'Example, Unit' do
343
117
  end
344
118
 
345
119
  it 'can output an example that has only a description' do
346
- example.description_text = 'a description'
347
-
348
- expect { example.to_s }.to_not raise_error
349
- end
350
-
351
- it 'can output an example that has only tags' do
352
- example.tags = ['a tag']
353
-
354
- expect { example.to_s }.to_not raise_error
355
- end
356
-
357
- #todo - remove once Hash rows are no longer supported
358
- it 'can output an example that only has parameters' do
359
- example.parameters = ['param1']
360
-
361
- expect { example.to_s }.to_not raise_error
362
- end
363
-
364
- #todo - remove once Hash rows are no longer supported
365
- it 'can output an example that only has rows' do
366
- example.rows = [{:param1 => 'row1'}]
120
+ example.description = 'a description'
367
121
 
368
122
  expect { example.to_s }.to_not raise_error
369
123
  end