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('FeatureFile') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'FeatureFile, Unit' do
4
+ describe 'FeatureFile, Unit', :unit_test => true do
6
5
 
7
6
  let(:clazz) { CukeModeler::FeatureFile }
8
7
  let(:feature_file) { clazz.new }
@@ -10,90 +9,92 @@ describe 'FeatureFile, 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 containing element'
15
- it_should_behave_like 'a bare bones element'
16
- it_should_behave_like 'a prepopulated element'
12
+ it_should_behave_like 'a model'
17
13
 
18
14
  end
19
15
 
20
16
 
21
17
  describe 'unique behavior' do
22
18
 
23
- it 'provides its own filename when being parsed' do
24
- path = "#{@default_file_directory}/#{@default_feature_file_name}"
25
- File.open(path, "w") { |file| file.puts 'bad feature text' }
26
-
27
- expect { clazz.new(path) }.to raise_error(/'#{path}'/)
19
+ it 'has a path' do
20
+ expect(feature_file).to respond_to(:path)
28
21
  end
29
22
 
30
- it 'knows the name of the file that it is modeling' do
31
- path = "#{@default_file_directory}/#{@default_feature_file_name}"
32
- File.open(path, "w") { |file| file.puts "Feature:" }
33
-
34
- feature = clazz.new(path)
23
+ it 'can change its path' do
24
+ expect(feature_file).to respond_to(:path=)
35
25
 
36
- feature.name.should == @default_feature_file_name
26
+ feature_file.path = :some_path
27
+ expect(feature_file.path).to eq(:some_path)
28
+ feature_file.path = :some_other_path
29
+ expect(feature_file.path).to eq(:some_other_path)
37
30
  end
38
31
 
39
- it 'knows the path of the file that it is modeling' do
40
- path = "#{@default_file_directory}/#{@default_feature_file_name}"
41
- File.open(path, "w") { |file| file.puts "Feature:" }
32
+ it 'has a feature' do
33
+ expect(feature_file).to respond_to(:feature)
34
+ end
42
35
 
43
- file = clazz.new(path)
36
+ it 'can change its feature' do
37
+ expect(feature_file).to respond_to(:feature=)
44
38
 
45
- file.path.should == path
39
+ feature_file.feature = :some_features
40
+ expect(feature_file.feature).to eq(:some_features)
41
+ feature_file.feature = :some_other_features
42
+ expect(feature_file.feature).to eq(:some_other_features)
46
43
  end
47
44
 
48
- it 'has features' do
49
- feature_file.should respond_to(:features)
45
+ it 'knows the name of the file that it is modeling' do
46
+ expect(feature_file).to respond_to(:name)
50
47
  end
51
48
 
52
- it 'can change its features' do
53
- expect(feature_file).to respond_to(:features=)
54
49
 
55
- feature_file.features = :some_features
56
- feature_file.features.should == :some_features
57
- feature_file.features = :some_other_features
58
- feature_file.features.should == :some_other_features
59
- end
50
+ it 'derives its file name from its path' do
51
+ feature_file.path = 'path/to/foo'
60
52
 
61
- it 'knows how many features it has' do
62
- feature_file.features = [:a_feature]
63
- feature_file.feature_count.should == 1
64
- feature_file.features = []
65
- feature_file.feature_count.should == 0
53
+ expect(feature_file.name).to eq('foo')
66
54
  end
67
55
 
68
- it 'starts with no features' do
69
- feature_file.features.should == []
70
- end
71
56
 
72
- it 'contains features' do
73
- features = [:a_feature]
74
- everything = features
57
+ describe 'abstract instantiation' do
58
+
59
+ context 'a new feature file object' do
60
+
61
+ let(:feature_file) { clazz.new }
62
+
63
+
64
+ it 'starts with no path' do
65
+ expect(feature_file.path).to be_nil
66
+ end
67
+
68
+ it 'starts with no name' do
69
+ expect(feature_file.name).to be_nil
70
+ end
75
71
 
76
- feature_file.features = features
72
+ it 'starts with no feature' do
73
+ expect(feature_file.feature).to be_nil
74
+ end
75
+
76
+ end
77
77
 
78
- feature_file.contains.should =~ everything
79
78
  end
80
79
 
81
- it 'can easily access its sole feature' do
82
- feature_file.features = []
83
- feature_file.feature.should be_nil
80
+ it 'contains a feature' do
81
+ feature = :a_feature
82
+ everything = [feature]
83
+
84
+ feature_file.feature = feature
84
85
 
85
- feature_file.features = [:a_feature]
86
- feature_file.feature.should == :a_feature
86
+ expect(feature_file.children).to match_array(everything)
87
87
  end
88
88
 
89
- describe 'feature file output edge cases' do
89
+
90
+ describe 'feature file output' do
90
91
 
91
92
  it 'is a String' do
92
- feature_file.to_s.should be_a(String)
93
+ expect(feature_file.to_s).to be_a(String)
93
94
  end
94
95
 
95
96
 
96
- context 'a new feature file object' do
97
+ context 'from abstract instantiation' do
97
98
 
98
99
  let(:feature_file) { clazz.new }
99
100
 
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('Feature') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Feature, Unit' do
4
+ describe 'Feature, Unit', :unit_test => true do
6
5
 
7
6
  let(:clazz) { CukeModeler::Feature }
8
7
  let(:feature) { clazz.new }
@@ -10,59 +9,18 @@ describe 'Feature, 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 sourced element'
20
- 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 tagged model'
16
+ it_should_behave_like 'a sourced model'
17
+ it_should_behave_like 'a parsed model'
21
18
 
22
19
  end
23
20
 
24
21
 
25
22
  describe 'unique behavior' do
26
23
 
27
- it 'can be parsed from stand alone text' do
28
- source = 'Feature: test feature'
29
-
30
- expect { @element = clazz.new(source) }.to_not raise_error
31
-
32
- # Sanity check in case instantiation failed in a non-explosive manner
33
- @element.name.should == 'test feature'
34
- end
35
-
36
- it 'provides a descriptive filename when being parsed from stand alone text' do
37
- source = 'bad feature text'
38
-
39
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_feature\.feature'/)
40
- end
41
-
42
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
43
- feature = clazz.new('Feature: test feature')
44
- raw_data = feature.raw_element
45
-
46
- expect(raw_data.keys).to match_array([:type, :tags, :location, :language, :keyword, :name, :children])
47
- expect(raw_data[:type]).to eq(:Feature)
48
- end
49
-
50
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
51
- feature = clazz.new('Feature: test feature')
52
- raw_data = feature.raw_element
53
-
54
- expect(raw_data.keys).to match_array([:type, :tags, :location, :language, :keyword, :name, :scenarioDefinitions, :comments])
55
- expect(raw_data[:type]).to eq(:Feature)
56
- end
57
-
58
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
59
- feature = clazz.new('Feature: test feature')
60
- raw_data = feature.raw_element
61
-
62
- expect(raw_data.keys).to match_array(['keyword', 'name', 'line', 'description', 'id', 'uri'])
63
- expect(raw_data['keyword']).to eq('Feature')
64
- end
65
-
66
24
  it 'will complain about unknown element types' do
67
25
  parsed_element = {'description' => '',
68
26
  'elements' => [{'keyword' => 'Scenario', 'description' => ''},
@@ -72,43 +30,36 @@ describe 'Feature, Unit' do
72
30
  end
73
31
 
74
32
  it 'has a background' do
75
- feature.should respond_to(:background)
33
+ expect(feature).to respond_to(:background)
76
34
  end
77
35
 
78
36
  it 'can change its background' do
79
37
  expect(feature).to respond_to(:background=)
80
38
 
81
39
  feature.background = :some_background
82
- feature.background.should == :some_background
40
+ expect(feature.background).to eq(:some_background)
83
41
  feature.background = :some_other_background
84
- feature.background.should == :some_other_background
42
+ expect(feature.background).to eq(:some_other_background)
85
43
  end
86
44
 
87
45
  it 'knows whether or not it presently has a background - has_background?' do
88
46
  feature.background = :a_background
89
- feature.has_background?.should be_true
47
+ expect(feature).to have_background
90
48
  feature.background = nil
91
- feature.has_background?.should be_false
49
+ expect(feature).to_not have_background
92
50
  end
93
51
 
94
52
  it 'has tests' do
95
- feature.should respond_to(:tests)
53
+ expect(feature).to respond_to(:tests)
96
54
  end
97
55
 
98
56
  it 'can change its tests' do
99
57
  expect(feature).to respond_to(:tests=)
100
58
 
101
59
  feature.tests = :some_tests
102
- feature.tests.should == :some_tests
60
+ expect(feature.tests).to eq(:some_tests)
103
61
  feature.tests = :some_other_tests
104
- feature.tests.should == :some_other_tests
105
- end
106
-
107
- it 'knows how many tests it has' do
108
- feature.tests = []
109
- feature.test_count.should == 0
110
- feature.tests = [:test_1, :test_2]
111
- feature.test_count.should == 2
62
+ expect(feature.tests).to eq(:some_other_tests)
112
63
  end
113
64
 
114
65
  it 'can selectively access its scenarios' do
@@ -126,15 +77,17 @@ describe 'Feature, Unit' do
126
77
  expect(feature.outlines).to be_empty
127
78
  end
128
79
 
129
- it 'contains backgrounds and tests' do
80
+ it 'contains a background, tests, and tags' do
81
+ tags = [:tag_1, :tagt_2]
130
82
  tests = [:test_1, :test_2]
131
83
  background = :a_background
132
- everything = [background] + tests
84
+ everything = [background] + tests + tags
133
85
 
134
86
  feature.background = background
135
87
  feature.tests = tests
88
+ feature.tags = tags
136
89
 
137
- feature.contains.should =~ everything
90
+ expect(feature.children).to match_array(everything)
138
91
  end
139
92
 
140
93
  it 'contains a background only if one is present' do
@@ -145,25 +98,34 @@ describe 'Feature, Unit' do
145
98
  feature.background = background
146
99
  feature.tests = tests
147
100
 
148
- feature.contains.should =~ everything
101
+ expect(feature.children).to match_array(everything)
149
102
  end
150
103
 
151
- it 'starts with no background' do
152
- feature.background.should == nil
153
- end
154
104
 
155
- it 'starts with no tests' do
156
- feature.tests.should == []
105
+ context 'from abstract instantiation' do
106
+
107
+ let(:feature) { clazz.new }
108
+
109
+
110
+ it 'starts with no background' do
111
+ expect(feature.background).to be_nil
112
+ end
113
+
114
+ it 'starts with no tests' do
115
+ expect(feature.tests).to eq([])
116
+ end
117
+
157
118
  end
158
119
 
159
- describe 'feature output edge cases' do
120
+
121
+ describe 'feature output' do
160
122
 
161
123
  it 'is a String' do
162
- feature.to_s.should be_a(String)
124
+ expect(feature.to_s).to be_a(String)
163
125
  end
164
126
 
165
127
 
166
- context 'a new feature object' do
128
+ context 'from abstract instantiation' do
167
129
 
168
130
  let(:feature) { clazz.new }
169
131
 
@@ -179,13 +141,7 @@ describe 'Feature, Unit' do
179
141
  end
180
142
 
181
143
  it 'can output a feature that has only a description' do
182
- feature.description_text = 'a description'
183
-
184
- expect { feature.to_s }.to_not raise_error
185
- end
186
-
187
- it 'can output a feature that has only tags' do
188
- feature.tags = ['a tag']
144
+ feature.description = 'a description'
189
145
 
190
146
  expect { feature.to_s }.to_not raise_error
191
147
  end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe 'Model, Unit' do
5
+
6
+ let(:clazz) { CukeModeler::Model }
7
+
8
+
9
+ describe 'common behavior' do
10
+
11
+ it_should_behave_like 'a model'
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe 'Named, Unit', :unit_test => true do
5
+
6
+ let(:nodule) { CukeModeler::Named }
7
+ let(:named_model) { Object.new.extend(nodule) }
8
+
9
+
10
+ it 'has a name' do
11
+ expect(named_model).to respond_to(:name)
12
+ end
13
+
14
+ it 'can change its name' do
15
+ expect(named_model).to respond_to(:name=)
16
+
17
+ named_model.name = :some_name
18
+ expect(named_model.name).to eq(:some_name)
19
+ named_model.name = :some_other_name
20
+ expect(named_model.name).to eq(:some_other_name)
21
+ end
22
+
23
+ end
@@ -1,38 +1,41 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('Nested') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Nested, Unit' do
4
+ describe 'Nested, Unit', :unit_test => true do
6
5
 
7
6
  let(:nodule) { CukeModeler::Nested }
8
- let(:nested_element) { Object.new.extend(nodule) }
7
+ let(:nested_model) { Object.new.extend(nodule) }
9
8
 
10
9
 
11
10
  describe 'unique behavior' do
12
11
 
13
- it 'has a parent element' do
14
- nested_element.should respond_to(:parent_element)
15
- end
12
+ describe 'an object including the module' do
16
13
 
17
- it 'can change its parent element' do
18
- expect(nested_element).to respond_to(:parent_element=)
14
+ it 'has a parent model' do
15
+ expect(nested_model).to respond_to(:parent_model)
16
+ end
19
17
 
20
- nested_element.parent_element = :some_parent_element
21
- nested_element.parent_element.should == :some_parent_element
22
- nested_element.parent_element = :some_other_parent_element
23
- nested_element.parent_element.should == :some_other_parent_element
24
- end
18
+ it 'can change its parent model' do
19
+ expect(nested_model).to respond_to(:parent_model=)
25
20
 
26
- it 'has access to its ancestors' do
27
- nested_element.should respond_to(:get_ancestor)
28
- end
21
+ nested_model.parent_model = :some_parent_model
22
+ expect(nested_model.parent_model).to eq(:some_parent_model)
23
+ nested_model.parent_model = :some_other_parent_model
24
+ expect(nested_model.parent_model).to eq(:some_other_parent_model)
25
+ end
29
26
 
30
- it 'gets an ancestor based on type' do
31
- (nodule.instance_method(:get_ancestor).arity == 1).should be_true
32
- end
27
+ it 'has access to its ancestors' do
28
+ expect(nested_model).to respond_to(:get_ancestor)
29
+ end
30
+
31
+ it 'gets an ancestor based on type' do
32
+ expect(nodule.instance_method(:get_ancestor).arity).to eq(1)
33
+ end
34
+
35
+ it 'raises and exception if an unknown ancestor type is requested' do
36
+ expect { nested_model.get_ancestor(:bad_ancestor_type) }.to raise_exception(ArgumentError)
37
+ end
33
38
 
34
- it 'raises and exception if an unknown ancestor type is requested' do
35
- expect { nested_element.get_ancestor(:bad_ancestor_type) }.to raise_exception(ArgumentError)
36
39
  end
37
40
 
38
41
  end