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,42 +0,0 @@
1
- @gherkin4
2
- Feature: Table elements can be modeled.
3
-
4
-
5
- Acceptance criteria
6
-
7
- 1. All conceptual pieces of a table can be modeled:
8
- - the table's contents
9
- - the table's raw element
10
-
11
- 2. Tables can be outputted in a convenient form
12
-
13
-
14
- Background: Test file setup.
15
- Given the following feature file:
16
- """
17
- Feature:
18
-
19
- Scenario:
20
- * some data filled step:
21
- | value 1 | value 2 |
22
- | value 3 | value 4 |
23
- * some data filled step:
24
- | value 1 |
25
- | value 2 |
26
- """
27
- When the file is read
28
-
29
-
30
- Scenario: The table's contents are modeled.
31
- Then the step "1" table has the following contents:
32
- | value 1 | value 2 |
33
- | value 3 | value 4 |
34
- And the step "2" table has the following contents:
35
- | value 1 |
36
- | value 2 |
37
-
38
- Scenario: The raw table element is modeled.
39
- Then the table correctly stores its underlying implementation
40
-
41
- Scenario: Convenient output of a table
42
- Then the table has convenient output
@@ -1,43 +0,0 @@
1
- @gherkin4
2
- Feature: Outputting table elements
3
-
4
- The output of an element model is a representation of the element as it would
5
- appear in gherkin.
6
-
7
-
8
- Scenario: Output of a table that has one row
9
- Given a table element based on the following gherkin:
10
- """
11
- |value|
12
- """
13
- When it is outputted
14
- Then the following text is provided:
15
- """
16
- | value |
17
- """
18
-
19
- Scenario: Output of a table that has multiple rows
20
- Given a table element based on the following gherkin:
21
- """
22
- |value1|
23
- |value2|
24
- """
25
- When it is outputted
26
- Then the following text is provided:
27
- """
28
- | value1 |
29
- | value2 |
30
- """
31
-
32
- Scenario: Whitespace buffers are based on the longest value in a column
33
- Given a table element based on the following gherkin:
34
- """
35
- |value|x|
36
- |y|another_value|
37
- """
38
- When it is outputted
39
- Then the following text is provided:
40
- """
41
- | value | x |
42
- | y | another_value |
43
- """
@@ -1,57 +0,0 @@
1
- @gherkin4
2
- Feature: Table Row elements can be modeled.
3
-
4
-
5
- Acceptance criteria
6
-
7
- 1. All conceptual pieces of a table row can be modeled:
8
- - the row's source line
9
- - the row's cells
10
- - the row's raw element
11
-
12
- 2. Rows can be outputted in a convenient form
13
-
14
-
15
- Background: Test file setup.
16
- Given the following feature file:
17
- """
18
- Feature:
19
-
20
- Scenario:
21
- * some data filled step:
22
- | value 1 | value 2 |
23
- | value 3 | value 4 |
24
- * some data filled step:
25
- | value 1 |
26
- | value 2 |
27
- """
28
- When the file is read
29
-
30
-
31
- Scenario: The raw table row element is modeled.
32
- Then the step table row correctly stores its underlying implementation
33
-
34
- Scenario: The table row's source line is modeled.
35
- Then step "1" table row "1" is found to have the following properties:
36
- | source_line | 5 |
37
- And step "1" table row "2" is found to have the following properties:
38
- | source_line | 6 |
39
- And step "2" table row "1" is found to have the following properties:
40
- | source_line | 8 |
41
- And step "2" table row "2" is found to have the following properties:
42
- | source_line | 9 |
43
-
44
- Scenario: The table row's cells are modeled.
45
- Then step "1" table row "1" cells are as follows:
46
- | value 1 |
47
- | value 2 |
48
- And step "1" table row "2" cells are as follows:
49
- | value 3 |
50
- | value 4 |
51
- And step "2" table row "1" cells are as follows:
52
- | value 1 |
53
- And step "2" table row "2" cells are as follows:
54
- | value 2 |
55
-
56
- Scenario: Convenient output of a table row
57
- Then the table row has convenient output
@@ -1,28 +0,0 @@
1
- @gherkin4
2
- Feature: Outputting table row elements
3
-
4
- The output of an element model is a representation of the element as it would
5
- appear in gherkin.
6
-
7
-
8
- Scenario: Output of a table row that has one cell
9
- Given a table row element based on the following gherkin:
10
- """
11
- |value|
12
- """
13
- When it is outputted
14
- Then the following text is provided:
15
- """
16
- | value |
17
- """
18
-
19
- Scenario: Output of a table row that has multiple cells
20
- Given a table row element based on the following gherkin:
21
- """
22
- |value|another_value|
23
- """
24
- When it is outputted
25
- Then the following text is provided:
26
- """
27
- | value | another_value |
28
- """
@@ -1,48 +0,0 @@
1
- @gherkin4
2
- Feature: Tag elements can be modeled.
3
-
4
-
5
- Acceptance criteria
6
-
7
- 1. All conceptual pieces of a tag can be modeled:
8
- - the tag's name
9
- - the tags's source line
10
- - the tags's raw element
11
-
12
- 2. Features can be outputted in a convenient form
13
-
14
-
15
- Background: Test file setup.
16
- Given the following feature file:
17
- """
18
- @feature_tag
19
- Feature:
20
-
21
- @outline_tag
22
- Scenario Outline:
23
- * a step
24
-
25
- @example_tag
26
- Examples:
27
- | a param |
28
- """
29
- When the file is read
30
-
31
-
32
- Scenario: The raw tag element is modeled.
33
- Then the feature tag correctly stores its underlying implementation
34
- And the test tag correctly stores its underlying implementation
35
- And the example tag correctly stores its underlying implementation
36
-
37
- Scenario: The tag's source line is modeled.
38
- Then the feature tag source line "1"
39
- And the test tag source line "4"
40
- And the example tag source line "8"
41
-
42
- Scenario: The tag name is modeled.
43
- Then the feature tag name is "@feature_tag"
44
- And the test tag name is "@outline_tag"
45
- And the example tag name is "@example_tag"
46
-
47
- Scenario: Convenient output of a tag
48
- Then the tag has convenient output
@@ -1,17 +0,0 @@
1
- @gherkin4
2
- Feature: Outputting tag elements
3
-
4
- The output of an element model is a representation of the element as it would
5
- appear in gherkin.
6
-
7
-
8
- Scenario: Output of a tag that has a name
9
- Given a tag element based on the following gherkin:
10
- """
11
- @some_tag
12
- """
13
- When it is outputted
14
- Then the following text is provided:
15
- """
16
- @some_tag
17
- """
@@ -1,258 +0,0 @@
1
- When /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example blocks are as follows:$/ do |file, test, names|
2
- file ||= 1
3
- test ||= 1
4
-
5
- expected = names.raw.flatten
6
- actual = @parsed_files[file - 1].feature.tests[test - 1].examples.collect { |example| example.name }
7
-
8
- assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
9
- end
10
-
11
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? is found to have the following properties:$/ do |file, test, example, properties|
12
- file ||= 1
13
- test ||= 1
14
- example ||= 1
15
-
16
- properties = properties.rows_hash
17
-
18
- properties.each do |property, value|
19
- @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].send(property.to_sym).to_s.should == value
20
- end
21
- end
22
-
23
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? row(?: "([^"]*)")? is found to have the following properties:$/ do |file, test, example, row, properties|
24
- file ||= 1
25
- test ||= 1
26
- example ||= 1
27
- row ||= 1
28
-
29
- properties = properties.rows_hash
30
-
31
- properties.each do |property, value|
32
- expected = value
33
- actual = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].row_elements[row - 1].send(property.to_sym).to_s
34
-
35
- assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
36
- end
37
- end
38
-
39
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? has the following description:$/ do |file, test, example, text|
40
- file ||= 1
41
- test ||= 1
42
- example ||= 1
43
-
44
- new_description = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].description_text
45
- old_description = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].description
46
-
47
- new_description.should == text
48
- old_description.should == remove_whitespace(text)
49
- end
50
-
51
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? has no description$/ do |file, test, example|
52
- file ||= 1
53
- test ||= 1
54
- example ||= 1
55
-
56
- new_description = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].description_text
57
- old_description = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].description
58
-
59
- new_description.should == ''
60
- old_description.should == []
61
- end
62
-
63
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? is found to have the following tags:$/ do |file, test, example, expected_tags|
64
- file ||= 1
65
- test ||= 1
66
- example ||= 1
67
-
68
- expected_tags = expected_tags.raw.flatten
69
-
70
- @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].tags.should == expected_tags
71
- @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].tag_elements.collect { |tag| tag.name }.should == expected_tags
72
- end
73
-
74
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? is found to have the following applied tags:$/ do |file, test, example, expected_tags|
75
- file ||= 1
76
- test ||= 1
77
- example ||= 1
78
-
79
- expected_tags = expected_tags.raw.flatten.sort
80
-
81
- @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].applied_tags.sort.should == expected_tags
82
- @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].applied_tag_elements.collect { |tag| tag.name }.sort.should == expected_tags
83
- end
84
-
85
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? has no tags$/ do |file, test, example|
86
- file ||= 1
87
- test ||= 1
88
- example ||= 1
89
-
90
- @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].tags.should == []
91
- @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].tag_elements.collect { |tag| tag.name }.should == []
92
- end
93
-
94
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? rows are as follows:$/ do |file, test, example, rows|
95
- file ||= 1
96
- test ||= 1
97
- example ||= 1
98
-
99
- rows = rows.raw.flatten
100
- example = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1]
101
-
102
- expected = rows.collect { |row| row.split(',') }
103
-
104
- actual = example.row_elements[1..example.row_elements.count].collect { |row| row.cells }
105
- assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
106
-
107
- # todo - remove once Hash rows are no longer supported
108
- actual = example.rows.collect { |row| example.parameters.collect { |parameter| row[parameter] } }
109
- assert(actual == expected, "Expected: #{expected.inspect}\n but was: #{actual.inspect}")
110
- end
111
-
112
- When /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? has the following rows added to it:$/ do |file, test, example, rows|
113
- file ||= 1
114
- test ||= 1
115
- example ||= 1
116
-
117
- rows = rows.raw.flatten
118
-
119
- rows.each do |row|
120
- row = row.split(',')
121
- @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].add_row(row)
122
- end
123
- end
124
-
125
- When /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? has the following rows removed from it:$/ do |file, test, example, rows|
126
- file ||= 1
127
- test ||= 1
128
- example ||= 1
129
-
130
- rows = rows.raw.flatten
131
-
132
- rows.each do |row|
133
- row = row.split(',')
134
- @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].remove_row(row)
135
- end
136
- end
137
-
138
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? parameters are as follows:$/ do |file, test, example, parameters|
139
- file ||= 1
140
- test ||= 1
141
- example ||= 1
142
-
143
- expected = parameters.raw.flatten
144
- actual = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].parameters
145
-
146
- assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
147
- end
148
-
149
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? row(?: "([^"]*)")? cells are as follows:$/ do |file, test, example, row, cells|
150
- file ||= 1
151
- test ||= 1
152
- example ||= 1
153
- row ||= 1
154
-
155
- expected = cells.raw.flatten
156
- actual = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].row_elements[row - 1].cells
157
-
158
- assert(actual == expected, "Expected: #{expected}\n but was: #{actual}")
159
- end
160
-
161
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? has no descriptive lines$/ do |file, test, example|
162
- file ||= 1
163
- test ||= 1
164
- example ||= 1
165
-
166
- assert @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].description == []
167
- end
168
-
169
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? has no parameters$/ do |file, test, example|
170
- file ||= 1
171
- test ||= 1
172
- example ||= 1
173
-
174
- assert @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].parameters == []
175
- end
176
-
177
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? has no rows$/ do |file, test, example|
178
- file ||= 1
179
- test ||= 1
180
- example ||= 1
181
-
182
- example = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1]
183
-
184
- example.row_elements[1..example.row_elements.count].should be_empty
185
- #todo - remove once Hash rows are no longer supported
186
- example.rows.should be_empty
187
- end
188
-
189
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? row(?: "([^"]*)")? correctly stores its underlying implementation$/ do |file, test, example, row|
190
- file ||= 1
191
- test ||= 1
192
- example ||= 1
193
- row ||= 1
194
-
195
- raw_element = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].row_elements[row - 1].raw_element
196
- if Gem.loaded_specs['gherkin'].version.version[/^3|4/]
197
- raw_element.has_key?(:cells).should be_true
198
- else
199
- raw_element.has_key?('cells').should be_true
200
- end
201
- end
202
-
203
- Then /^(?:the )?(?:feature "([^"]*)" )?test(?: "([^"]*)")? example block(?: "([^"]*)")? correctly stores its underlying implementation$/ do |file, test, example|
204
- file ||= 1
205
- test ||= 1
206
- example ||= 1
207
-
208
- raw_element = @parsed_files[file - 1].feature.tests[test - 1].examples[example - 1].raw_element
209
- if Gem.loaded_specs['gherkin'].version.version[/^3|4/]
210
- raw_element.has_key?(:tableHeader).should be_true
211
- else
212
- raw_element.has_key?('rows').should be_true
213
- end
214
- end
215
-
216
- Then(/^the row has convenient output$/) do
217
- @parsed_files.first.feature.tests.first.examples.first.row_elements.first.method(:to_s).owner.should == CukeModeler::Row
218
- end
219
-
220
- Given(/^a row element based on the following gherkin:$/) do |row_text|
221
- @element = CukeModeler::Row.new(row_text)
222
- end
223
-
224
- Given(/^a row element$/) do
225
- @element = CukeModeler::Row.new
226
- end
227
-
228
- When(/^the row element has no cells$/) do
229
- @element.cells = []
230
- end
231
-
232
- Then(/^the example block has convenient output$/) do
233
- @parsed_files.first.feature.tests.first.examples.first.method(:to_s).owner.should == CukeModeler::Example
234
- end
235
-
236
- Given(/^an example element based on the following gherkin:$/) do |example_text|
237
- @element = CukeModeler::Example.new(example_text)
238
- end
239
-
240
- Given(/^an example element$/) do
241
- @element = CukeModeler::Example.new
242
- end
243
-
244
- When(/^the example element has no parameters or rows$/) do
245
- @element.parameters = []
246
-
247
- #todo - remove once Hash rows are no longer supported
248
- @element.rows = []
249
- @element.row_elements = []
250
- end
251
-
252
- Then(/^the outline has convenient output$/) do
253
- @parsed_files.first.feature.tests.first.method(:to_s).owner.should == CukeModeler::Outline
254
- end
255
-
256
- Given(/^an outline element based on the following gherkin:$/) do |outline_text|
257
- @element = CukeModeler::Outline.new(outline_text)
258
- end