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,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- shared_examples_for 'a bare bones element' do
3
+ shared_examples_for 'a bare bones model' do
4
4
 
5
5
  # clazz must be defined by the calling file
6
6
 
7
- let(:element) { clazz.new }
7
+ let(:model) { clazz.new }
8
8
 
9
9
 
10
10
  it 'can be initialized empty' do
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a containing model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:model) { clazz.new }
8
+
9
+
10
+ it 'has children' do
11
+ expect(model).to respond_to(:children)
12
+ end
13
+
14
+ it 'returns a collection of children' do
15
+ expect(model.children).to be_an(Array)
16
+ end
17
+
18
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a described model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:model) { clazz.new }
8
+
9
+
10
+ it 'has a description' do
11
+ expect(model).to respond_to(:description)
12
+ end
13
+
14
+ it 'can change its description' do
15
+ expect(model).to respond_to(:description=)
16
+
17
+ model.description = :some_description
18
+ expect(model.description).to eq(:some_description)
19
+ model.description = :some_other_description
20
+ expect(model.description).to eq(:some_other_description)
21
+ end
22
+
23
+
24
+ describe 'abstract instantiation' do
25
+
26
+ context 'a new described object' do
27
+
28
+ let(:model) { clazz.new }
29
+
30
+ it 'starts with no description' do
31
+ expect(model.description).to be_nil
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a model' do
4
+
5
+ describe 'common behavior' do
6
+
7
+ it_should_behave_like 'a bare bones model'
8
+ it_should_behave_like 'a prepopulated model'
9
+ it_should_behave_like 'a nested model'
10
+ it_should_behave_like 'a containing model'
11
+ it_should_behave_like 'a stringifiable model'
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a named model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:model) { clazz.new }
8
+
9
+
10
+ it 'has a name' do
11
+ expect(model).to respond_to(:name)
12
+ end
13
+
14
+ it 'can change its name' do
15
+ expect(model).to respond_to(:name=)
16
+
17
+ model.name = :some_name
18
+ expect(model.name).to eq(:some_name)
19
+ model.name = :some_other_name
20
+ expect(model.name).to eq(:some_other_name)
21
+ end
22
+
23
+
24
+ describe 'abstract instantiation' do
25
+
26
+ context 'a new named object' do
27
+
28
+ let(:model) { clazz.new }
29
+
30
+
31
+ it 'starts with no name' do
32
+ expect(model.name).to be_nil
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a nested model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:nested_model) { clazz.new }
8
+
9
+
10
+ it 'has a parent model' do
11
+ expect(nested_model).to respond_to(:parent_model)
12
+ end
13
+
14
+ it 'can change its parent model' do
15
+ expect(nested_model).to respond_to(:parent_model=)
16
+
17
+ nested_model.parent_model = :some_parent_model
18
+ expect(nested_model.parent_model).to eq(:some_parent_model)
19
+ nested_model.parent_model = :some_other_parent_model
20
+ expect(nested_model.parent_model).to eq(:some_other_parent_model)
21
+ end
22
+
23
+
24
+ describe 'abstract instantiation' do
25
+
26
+ context 'a new nested object' do
27
+
28
+ let(:nested_model) { clazz.new }
29
+
30
+
31
+ it 'starts with no parent model' do
32
+ expect(nested_model.parent_model).to be_nil
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ it 'has access to its ancestors' do
40
+ expect(nested_model).to respond_to(:get_ancestor)
41
+ end
42
+
43
+ it 'gets an ancestor based on type' do
44
+ expect(clazz.instance_method(:get_ancestor).arity).to eq(1)
45
+ end
46
+
47
+ it 'raises and exception if an unknown ancestor type is requested' do
48
+ expect { nested_model.get_ancestor(:bad_ancestor_type) }.to raise_exception(ArgumentError)
49
+ end
50
+
51
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a parsed model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:model) { clazz.new }
8
+
9
+
10
+ it 'can access its original parsing data' do
11
+ expect(model).to respond_to(:parsing_data)
12
+ end
13
+
14
+ it 'can change its parsing data' do
15
+ expect(model).to respond_to(:parsing_data=)
16
+
17
+ model.parsing_data = :some_parsing_data
18
+ expect(model.parsing_data).to eq(:some_parsing_data)
19
+ model.parsing_data = :some_other_parsing_data
20
+ expect(model.parsing_data).to eq(:some_other_parsing_data)
21
+ end
22
+
23
+
24
+ describe 'abstract instantiation' do
25
+
26
+ context 'a new parsed object' do
27
+
28
+ let(:model) { clazz.new }
29
+
30
+
31
+ it 'starts with no parsing data' do
32
+ expect(model.parsing_data).to be_nil
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a prepopulated model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:model) { clazz.new }
8
+
9
+
10
+ it 'can take text from which to populate itself' do
11
+ expect(clazz.instance_method(:initialize).arity).to_not eq(0)
12
+ end
13
+
14
+ it 'will complain if given non-text input' do
15
+ expect { clazz.new(:not_a_string) }.to raise_error(ArgumentError, 'Can only create models from Strings but was given a Symbol.')
16
+ end
17
+
18
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a sourced model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:model) { clazz.new }
8
+
9
+
10
+ it 'has a source line' do
11
+ expect(model).to respond_to(:source_line)
12
+ end
13
+
14
+ it 'can change its source line' do
15
+ expect(model).to respond_to(:source_line=)
16
+
17
+ model.source_line = :some_source_line
18
+ expect(model.source_line).to eq(:some_source_line)
19
+ model.source_line = :some_other_source_line
20
+ expect(model.source_line).to eq(:some_other_source_line)
21
+ end
22
+
23
+
24
+ describe 'abstract instantiation' do
25
+
26
+ context 'a new sourced object' do
27
+
28
+ let(:model) { clazz.new }
29
+
30
+
31
+ it 'starts with no source line' do
32
+ expect(model.source_line).to be_nil
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a stepped model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:model) { clazz.new }
8
+
9
+
10
+ it 'has steps' do
11
+ expect(model).to respond_to(:steps)
12
+ end
13
+
14
+ it 'can change its steps' do
15
+ expect(model).to respond_to(:steps=)
16
+
17
+ model.steps = :some_steps
18
+ expect(model.steps).to eq(:some_steps)
19
+ model.steps = :some_other_steps
20
+ expect(model.steps).to eq(:some_other_steps)
21
+ end
22
+
23
+
24
+ describe 'abstract instantiation' do
25
+
26
+ context 'a new stepped object' do
27
+
28
+ let(:model) { clazz.new }
29
+
30
+
31
+ it 'starts with no steps' do
32
+ expect(model.steps).to eq([])
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ it 'contains steps' do
40
+ steps = [:step_1, :step_2, :step_3]
41
+ model.steps = steps
42
+
43
+ steps.each { |step| expect(model.children).to include(step) }
44
+ end
45
+
46
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a stringifiable model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:model) { clazz.new }
8
+
9
+
10
+ it 'can provide a custom string representation of itself' do
11
+ expect(model.method(:to_s).owner).to equal(clazz), "#{clazz} does not override #to_s"
12
+ end
13
+
14
+ it 'represents itself with as a string' do
15
+ expect(model.to_s).to be_a(String)
16
+ end
17
+
18
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for 'a tagged model' do
4
+
5
+ # clazz must be defined by the calling file
6
+
7
+ let(:model) { clazz.new }
8
+
9
+
10
+ it 'has tags' do
11
+ expect(model).to respond_to(:tags)
12
+ end
13
+
14
+ it 'can change its tags' do
15
+ expect(model).to respond_to(:tags=)
16
+
17
+ model.tags = :some_tags
18
+ expect(model.tags).to eq(:some_tags)
19
+ model.tags = :some_other_tags
20
+ expect(model.tags).to eq(:some_other_tags)
21
+ end
22
+
23
+
24
+ describe 'abstract instantiation' do
25
+
26
+ context 'a new tagged object' do
27
+
28
+ let(:model) { clazz.new }
29
+
30
+
31
+ it 'starts with no tags' do
32
+ expect(model.tags).to eq([])
33
+ end
34
+
35
+ it 'starts with no inherited tags' do
36
+ expect(model.applied_tags).to eq([])
37
+ end
38
+
39
+ it 'starts with no tags at all' do
40
+ expect(model.all_tags).to eq([])
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ it 'has applied tags' do
48
+ expect(model).to respond_to(:applied_tags)
49
+ end
50
+
51
+ it 'inherits its applied tags from its ancestors' do
52
+ all_parent_tags = [:parent_tag_1, :parent_tag_2, :grandparent_tag_1]
53
+ parent = double(:all_tags => all_parent_tags)
54
+
55
+ model.parent_model = parent
56
+
57
+ expect(model.applied_tags).to match_array(all_parent_tags)
58
+ end
59
+
60
+ it 'knows all of its applicable tags' do
61
+ all_parent_tags = [:parent_tag_1, :parent_tag_2, :grandparent_tag_1]
62
+ own_tags = [:tag_1, :tag_2]
63
+
64
+ parent = double(:all_tags => all_parent_tags)
65
+
66
+ model.parent_model = parent
67
+ model.tags = own_tags
68
+
69
+ expect(model.all_tags).to match_array(all_parent_tags + own_tags)
70
+ end
71
+
72
+ end
@@ -1,17 +1,25 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('Sourceable') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Sourceable, Unit' do
4
+ describe 'Sourceable, Unit', :unit_test => true do
6
5
 
7
6
  let(:nodule) { CukeModeler::Sourceable }
8
- let(:element) { Object.new.extend(nodule) }
7
+ let(:model) { Object.new.extend(nodule) }
9
8
 
10
9
 
11
10
  describe 'unique behavior' do
12
11
 
13
12
  it 'has a source line' do
14
- element.should respond_to(:source_line)
13
+ expect(model).to respond_to(:source_line)
14
+ end
15
+
16
+ it 'can change its source line' do
17
+ expect(model).to respond_to(:source_line=)
18
+
19
+ model.source_line = :some_source_line
20
+ expect(model.source_line).to eq(:some_source_line)
21
+ model.source_line = :some_other_source_line
22
+ expect(model.source_line).to eq(:some_other_source_line)
15
23
  end
16
24
 
17
25
  end