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('Step') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Step, Unit' do
4
+ describe 'Step, Unit', :unit_test => true do
6
5
 
7
6
  let(:clazz) { CukeModeler::Step }
8
7
  let(:step) { clazz.new }
@@ -10,286 +9,96 @@ describe 'Step, Unit' do
10
9
 
11
10
  describe 'common behavior' do
12
11
 
13
- it_should_behave_like 'a nested element'
14
- it_should_behave_like 'a bare bones element'
15
- it_should_behave_like 'a prepopulated element'
16
- it_should_behave_like 'a sourced element'
17
- it_should_behave_like 'a raw element'
12
+ it_should_behave_like 'a model'
13
+ it_should_behave_like 'a sourced model'
14
+ it_should_behave_like 'a parsed model'
18
15
 
19
16
  end
20
17
 
21
18
 
22
19
  describe 'unique behavior' do
23
20
 
24
- it 'has arguments' do
25
- step.should respond_to(:arguments)
21
+ it 'has text' do
22
+ expect(step).to respond_to(:text)
26
23
  end
27
24
 
28
- it 'can change its arguments' do
29
- expect(step).to respond_to(:arguments=)
25
+ it 'can change its text' do
26
+ expect(step).to respond_to(:text=)
30
27
 
31
- step.arguments = :some_arguments
32
- step.arguments.should == :some_arguments
33
- step.arguments = :some_other_arguments
34
- step.arguments.should == :some_other_arguments
35
- end
36
-
37
- it 'starts with no arguments' do
38
- step.arguments.should == []
39
- end
40
-
41
- it 'has a base' do
42
- step.should respond_to(:base)
43
- end
44
-
45
- it 'can change its base' do
46
- expect(step).to respond_to(:base=)
47
-
48
- step.base = :some_base
49
- step.base.should == :some_base
50
- step.base = :some_other_base
51
- step.base.should == :some_other_base
52
- end
53
-
54
- it 'starts with no base' do
55
- step.base.should == nil
28
+ step.text = :some_text
29
+ expect(step.text).to eq(:some_text)
30
+ step.text = :some_other_text
31
+ expect(step.text).to eq(:some_other_text)
56
32
  end
57
33
 
58
34
  it 'has a block' do
59
- step.should respond_to(:block)
35
+ expect(step).to respond_to(:block)
60
36
  end
61
37
 
62
38
  it 'can change its block' do
63
39
  expect(step).to respond_to(:block=)
64
40
 
65
41
  step.block = :some_block
66
- step.block.should == :some_block
42
+ expect(step.block).to eq(:some_block)
67
43
  step.block = :some_other_block
68
- step.block.should == :some_other_block
69
- end
70
-
71
- it 'starts with no block' do
72
- step.block.should == nil
44
+ expect(step.block).to eq(:some_other_block)
73
45
  end
74
46
 
75
47
  it 'has a keyword' do
76
- step.should respond_to(:keyword)
48
+ expect(step).to respond_to(:keyword)
77
49
  end
78
50
 
79
51
  it 'can change its keyword' do
80
52
  expect(step).to respond_to(:keyword=)
81
53
 
82
54
  step.keyword = :some_keyword
83
- step.keyword.should == :some_keyword
55
+ expect(step.keyword).to eq(:some_keyword)
84
56
  step.keyword = :some_other_keyword
85
- step.keyword.should == :some_other_keyword
86
- end
87
-
88
- it 'starts with no keyword' do
89
- step.keyword.should == nil
90
- end
91
-
92
- it 'has a left delimiter' do
93
- step.should respond_to(:left_delimiter)
94
- end
95
-
96
- it 'can change its left delimiter' do
97
- expect(step).to respond_to(:left_delimiter=)
98
-
99
- step.left_delimiter = :some_left_delimiter
100
- step.left_delimiter.should == :some_left_delimiter
101
- step.left_delimiter = :some_other_left_delimiter
102
- step.left_delimiter.should == :some_other_left_delimiter
103
- end
104
-
105
- it 'starts with no left delimiter' do
106
- step.left_delimiter.should == nil
107
- end
108
-
109
- it 'has a right delimiter' do
110
- step.should respond_to(:right_delimiter)
57
+ expect(step.keyword).to eq(:some_other_keyword)
111
58
  end
112
59
 
113
- it 'can change its right delimiter' do
114
- expect(step).to respond_to(:right_delimiter=)
115
-
116
- step.right_delimiter = :some_right_delimiter
117
- step.right_delimiter.should == :some_right_delimiter
118
- step.right_delimiter = :some_other_right_delimiter
119
- step.right_delimiter.should == :some_other_right_delimiter
120
- end
121
-
122
- it 'starts with no right delimiter' do
123
- step.right_delimiter.should == nil
124
- end
125
-
126
- it 'can set both of its delimiters at once' do
127
- step.delimiter = :new_delimiter
128
- step.left_delimiter.should == :new_delimiter
129
- step.right_delimiter.should == :new_delimiter
130
- end
131
-
132
- describe '#scan_arguments' do
133
-
134
- it 'can explicitly scan for arguments' do
135
- step.should respond_to(:scan_arguments)
136
- end
137
-
138
- it 'can determine its arguments based on a regular expression' do
139
- source = 'Given a test step with a parameter'
140
- step = clazz.new(source)
141
-
142
- step.scan_arguments(/parameter/)
143
- step.arguments.should == ['parameter']
144
- step.scan_arguments(/t s/)
145
- step.arguments.should == ['t s']
146
- end
147
-
148
- it 'can determine its arguments based on delimiters' do
149
- source = 'Given a test step with -parameter 1- and -parameter 2-'
150
-
151
- step = clazz.new(source)
152
-
153
- step.scan_arguments('-', '-')
154
- step.arguments.should == ['parameter 1', 'parameter 2']
155
- step.scan_arguments('!', '!')
156
- step.arguments.should == []
157
- end
158
-
159
- it 'can use different left and right delimiters when scanning' do
160
- source = 'Given a test step with !a parameter-'
161
-
162
- step = clazz.new(source)
163
-
164
- step.scan_arguments('!', '-')
165
- step.arguments.should == ['a parameter']
166
- end
167
-
168
- it 'can use delimiters of varying lengths' do
169
- source = 'Given a test step with -start-a parameter-end-'
170
60
 
171
- step = clazz.new(source)
61
+ describe 'abstract instantiation' do
172
62
 
173
- step.scan_arguments('-start-', '-end-')
174
- step.arguments.should == ['a parameter']
175
- end
63
+ context 'a new step object' do
176
64
 
177
- it 'can handle delimiters with special regular expression characters' do
178
- source = 'Given a test step with \d+a parameter.?'
65
+ let(:step) { clazz.new }
179
66
 
180
- step = clazz.new(source)
181
67
 
182
- step.scan_arguments('\d+', '.?')
183
- step.arguments.should == ['a parameter']
184
- end
68
+ it 'starts with no text' do
69
+ expect(step.text).to be_nil
70
+ end
185
71
 
186
- it 'defaults to its set delimiters when scanning' do
187
- source = 'Given a test step with *parameter 1* and "parameter 2" and *parameter 3*'
188
- step = clazz.new(source)
72
+ it 'starts with no block' do
73
+ expect(step.block).to be_nil
74
+ end
189
75
 
190
- step.left_delimiter = '"'
191
- step.right_delimiter = '"'
192
- step.scan_arguments
76
+ it 'starts with no keyword' do
77
+ expect(step.keyword).to be_nil
78
+ end
193
79
 
194
- step.arguments.should == ['parameter 2']
195
80
  end
196
- end
197
-
198
- it 'can be parsed from stand alone text' do
199
- source = '* test step'
200
81
 
201
- expect { @element = clazz.new(source) }.to_not raise_error
202
-
203
- # Sanity check in case instantiation failed in a non-explosive manner
204
- @element.base.should == 'test step'
205
82
  end
206
83
 
207
- it 'provides a descriptive filename when being parsed from stand alone text' do
208
- source = "bad step text\n And a step\n @foo"
84
+ it 'contains some kind of block' do
85
+ block = :block
86
+ everything = [block]
209
87
 
210
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_step\.feature'/)
211
- end
88
+ step.block = block
212
89
 
213
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
214
- step = clazz.new("* test step")
215
- raw_data = step.raw_element
216
-
217
- expect(raw_data.keys).to match_array([:type, :location, :keyword, :text])
218
- expect(raw_data[:type]).to eq(:Step)
219
- end
220
-
221
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
222
- step = clazz.new("* test step")
223
- raw_data = step.raw_element
224
-
225
- expect(raw_data.keys).to match_array([:type, :location, :keyword, :text])
226
- expect(raw_data[:type]).to eq(:Step)
227
- end
228
-
229
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
230
- step = clazz.new("* test step")
231
- raw_data = step.raw_element
232
-
233
- expect(raw_data.keys).to match_array(['keyword', 'name', 'line'])
234
- expect(raw_data['keyword']).to eq('* ')
90
+ expect(step.children).to match_array(everything)
235
91
  end
236
92
 
237
93
 
238
- describe '#step_text' do
239
-
240
- let(:source) { "Given a test step with -parameter 1- ^and@ *parameter 2!!\n|a block|" }
241
- let(:delimiter) { '-' }
242
- let(:step) { s = clazz.new(source)
243
- s.delimiter = delimiter
244
- s }
245
-
246
-
247
- it 'can provide different flavors of step\'s text' do
248
- step.should respond_to(:step_text)
249
- end
250
-
251
- it 'returns different text based on options' do
252
- (clazz.instance_method(:step_text).arity != 0).should be_true
253
- end
254
-
255
- it 'returns the step\'s text as an Array' do
256
- step.step_text.is_a?(Array).should be_true
257
- end
258
-
259
- it 'can provide the step\'s text without the arguments' do
260
- expected_output = ['Given a test step with -- ^and@ *parameter 2!!']
261
-
262
- step.step_text(:with_arguments => false).should == expected_output
263
- end
264
-
265
- it 'can determine its arguments based on delimiters' do
266
- expected_output = ['Given a test step with -parameter 1- ^@ *parameter 2!!']
267
-
268
- step.step_text(:with_arguments => false, :left_delimiter => '^', :right_delimiter => '@').should == expected_output
269
- end
270
-
271
- it 'can use delimiters of varying lengths' do
272
- expected_output = ['Given a test step with -parameter 1- ^and@ *!!']
273
-
274
- step.step_text(:with_arguments => false, :left_delimiter => '*', :right_delimiter => '!!').should == expected_output
275
- end
276
-
277
- it 'can handle delimiters with special regular expression characters' do
278
- expected_output = ['Given a test step with -parameter 1- ^and@ *!!']
279
-
280
- step.step_text(:with_arguments => false, :left_delimiter => '*', :right_delimiter => '!!').should == expected_output
281
- end
282
-
283
- end
284
-
285
- describe 'step output edge cases' do
94
+ describe 'step output' do
286
95
 
287
96
  it 'is a String' do
288
- step.to_s.should be_a(String)
97
+ expect(step.to_s).to be_a(String)
289
98
  end
290
99
 
291
100
 
292
- context 'a new step object' do
101
+ context 'from abstract instantiation' do
293
102
 
294
103
  let(:step) { clazz.new }
295
104
 
@@ -304,8 +113,8 @@ describe 'Step, Unit' do
304
113
  expect { step.to_s }.to_not raise_error
305
114
  end
306
115
 
307
- it 'can output a step that has only a base' do
308
- step.base = 'step base'
116
+ it 'can output a step that has only a text' do
117
+ step.text = 'step text'
309
118
 
310
119
  expect { step.to_s }.to_not raise_error
311
120
  end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe 'Stepped, Unit', :unit_test => true do
5
+
6
+ let(:nodule) { CukeModeler::Stepped }
7
+ let(:stepped_model) { Object.new.extend(nodule) }
8
+
9
+
10
+ it 'has steps' do
11
+ expect(stepped_model).to respond_to(:steps)
12
+ end
13
+
14
+ it 'can change its steps' do
15
+ expect(stepped_model).to respond_to(:steps=)
16
+
17
+ stepped_model.steps = :some_steps
18
+ expect(stepped_model.steps).to eq(:some_steps)
19
+ stepped_model.steps = :some_other_steps
20
+ expect(stepped_model.steps).to eq(:some_other_steps)
21
+ end
22
+
23
+ end
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- SimpleCov.command_name('Table') unless RUBY_VERSION.to_s < '1.9.0'
4
3
 
5
- describe 'Table, Unit' do
4
+ describe 'Table, Unit', :unit_test => true do
6
5
 
7
6
  let(:clazz) { CukeModeler::Table }
8
7
  let(:table) { clazz.new }
@@ -10,116 +9,62 @@ describe 'Table, Unit' do
10
9
 
11
10
  describe 'common behavior' do
12
11
 
13
- it_should_behave_like 'a nested element'
14
- it_should_behave_like 'a bare bones element'
15
- it_should_behave_like 'a prepopulated element'
16
- it_should_behave_like 'a raw element'
12
+ it_should_behave_like 'a model'
13
+ it_should_behave_like 'a parsed model'
14
+ it_should_behave_like 'a sourced model'
17
15
 
18
16
  end
19
17
 
20
18
 
21
19
  describe 'unique behavior' do
22
20
 
23
- it 'can be parsed from stand alone text' do
24
- source = '| a table |'
25
-
26
- expect { @element = clazz.new(source) }.to_not raise_error
27
-
28
- # Sanity check in case instantiation failed in a non-explosive manner
29
- @element.row_elements.collect { |row| row.cells }.should == [['a table']]
30
- # todo - remove once #contents is no longer supported
31
- @element.contents.should == [['a table']]
21
+ it 'has rows' do
22
+ expect(table).to respond_to(:rows)
32
23
  end
33
24
 
34
- it 'provides a descriptive filename when being parsed from stand alone text' do
35
- source = 'bad table text'
25
+ it 'can change its rows' do
26
+ expect(table).to respond_to(:rows=)
36
27
 
37
- expect { clazz.new(source) }.to raise_error(/'cuke_modeler_stand_alone_table\.feature'/)
28
+ table.rows = :some_rows
29
+ expect(table.rows).to eq(:some_rows)
30
+ table.rows = :some_other_rows
31
+ expect(table.rows).to eq(:some_other_rows)
38
32
  end
39
33
 
40
- it 'stores the original data generated by the parsing adapter', :gherkin4 => true do
41
- table = clazz.new("| a table |")
42
- raw_data = table.raw_element
43
-
44
- expect(raw_data.keys).to match_array([:type, :location, :rows])
45
- expect(raw_data[:type]).to eq(:DataTable)
46
- end
47
-
48
- it 'stores the original data generated by the parsing adapter', :gherkin3 => true do
49
- table = clazz.new("| a table |")
50
- raw_data = table.raw_element
51
-
52
- expect(raw_data.keys).to match_array([:type, :location, :rows])
53
- expect(raw_data[:type]).to eq(:DataTable)
54
- end
55
34
 
56
- it 'stores the original data generated by the parsing adapter', :gherkin2 => true do
57
- table = clazz.new("| a table |")
58
- raw_data = table.raw_element
35
+ describe 'abstract instantiation' do
59
36
 
60
- expect(raw_data).to match_array([{"cells" => ["a table"], "line" => 4}])
61
- end
37
+ context 'a new table object' do
62
38
 
63
- # todo - remove once #contents is no longer supported
64
- it 'has contents' do
65
- table.should respond_to(:contents)
66
- end
39
+ let(:table) { clazz.new }
67
40
 
68
- # todo - remove once #contents is no longer supported
69
- it 'can change its contents' do
70
- expect(table).to respond_to(:contents=)
71
41
 
72
- table.contents = :some_contents
73
- table.contents.should == :some_contents
74
- table.contents = :some_other_contents
75
- table.contents.should == :some_other_contents
76
- end
42
+ it 'starts with no rows' do
43
+ expect(table.rows).to eq([])
44
+ end
77
45
 
78
- # todo - remove once #contents is no longer supported
79
- it 'starts with no contents' do
80
- table.contents.should == []
81
- end
46
+ end
82
47
 
83
- it 'has row elements' do
84
- table.should respond_to(:row_elements)
85
48
  end
86
49
 
87
- it 'can get and set its row elements' do
88
- expect(table).to respond_to(:row_elements=)
50
+ it 'contains rows' do
51
+ rows = [:row_1, :row_2]
52
+ everything = rows
89
53
 
90
- table.row_elements = :some_row_elements
91
- table.row_elements.should == :some_row_elements
92
- table.row_elements = :some_other_row_elements
93
- table.row_elements.should == :some_other_row_elements
94
- end
54
+ table.rows = rows
95
55
 
96
- it 'starts with no row elements' do
97
- table.row_elements.should == []
56
+ expect(table.children).to match_array(everything)
98
57
  end
99
58
 
100
- # todo - remove once #contents is no longer supported
101
- it 'stores its contents as a nested array of strings' do
102
- source = "| cell 1 | cell 2 |\n| cell 3 | cell 4 |"
103
- table = clazz.new(source)
104
-
105
- contents = table.contents
106
59
 
107
- contents.is_a?(Array).should be_true
108
-
109
- contents.each do |row|
110
- row.is_a?(Array).should be_true
111
- row.each { |cell| cell.is_a?(String).should be_true }
112
- end
113
- end
114
-
115
- describe 'table output edge cases' do
60
+ describe 'table output' do
116
61
 
117
62
  it 'is a String' do
118
- table.to_s.should be_a(String)
63
+ expect(table.to_s).to be_a(String)
119
64
  end
120
65
 
121
66
 
122
- context 'a new table object' do
67
+ context 'from abstract instantiation' do
123
68
 
124
69
  let(:table) { clazz.new }
125
70
 
@@ -128,13 +73,6 @@ describe 'Table, Unit' do
128
73
  expect { table.to_s }.to_not raise_error
129
74
  end
130
75
 
131
- # todo - remove once #contents is no longer supported
132
- it 'can output a table that only has contents' do
133
- table.contents = ['some contents']
134
-
135
- expect { table.to_s }.to_not raise_error
136
- end
137
-
138
76
  end
139
77
 
140
78
  end