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
@@ -0,0 +1,39 @@
1
+ Feature: Example output
2
+
3
+ An example model's string output is a Gherkin representation of itself.
4
+
5
+
6
+ Scenario: Outputting an example model
7
+ Given the following gherkin:
8
+ """
9
+ @tag1
10
+ @tag2 @tag3
11
+ Examples: an example with everything that it could have
12
+
13
+ Some description.
14
+ Some more description.
15
+
16
+ |param1|param2|
17
+ |value1|value2|
18
+ |value3|value4|
19
+ """
20
+ And an example model based on that gherkin
21
+ """
22
+ @model = CukeModeler::Example.new(<source_text>)
23
+ """
24
+ When the model is output as a string
25
+ """
26
+ @model.to_s
27
+ """
28
+ Then the following text is provided:
29
+ """
30
+ @tag1 @tag2 @tag3
31
+ Examples: an example with everything that it could have
32
+
33
+ Some description.
34
+ Some more description.
35
+
36
+ | param1 | param2 |
37
+ | value1 | value2 |
38
+ | value3 | value4 |
39
+ """
@@ -0,0 +1,40 @@
1
+ Feature: Feature file modeling
2
+
3
+
4
+ Feature file models represent a single .feature file in a test suite. They expose several attributes of the
5
+ feature file that they represent, as well as containing the model for the feature that is present in that file.
6
+
7
+
8
+ Background: An existing feature file
9
+ Given the directory "test_directory"
10
+ And the file "test_directory/foo.feature":
11
+ """
12
+ Feature: Bar
13
+ """
14
+ And the feature file is modeled
15
+ """
16
+ @model = CukeModeler::FeatureFile.new('<path_to>/test_directory/foo.feature')
17
+ """
18
+
19
+
20
+ Scenario: Modeling a feature files's path
21
+ When the feature file's path is requested
22
+ """
23
+ @model.path
24
+ """
25
+ Then the model returns "path_to/test_directory/foo.feature"
26
+
27
+ Scenario: Modeling a feature files's name
28
+ When the feature file's name is requested
29
+ """
30
+ @model.name
31
+ """
32
+ Then the model returns "foo.feature"
33
+
34
+ Scenario: Modeling a feature file's feature
35
+ When the feature file's feature is requested
36
+ """
37
+ @model.feature
38
+ """
39
+ Then the model returns a model for the following feature:
40
+ | Bar |
@@ -0,0 +1,12 @@
1
+ Feature: Feature file output
2
+
3
+ A feature file model's string output is simply the file path of the feature file that it models.
4
+
5
+
6
+ Scenario: Outputting a feature file model
7
+ Given a feature file model based on "some_feature_file.feature"
8
+ When it is outputted
9
+ Then the following text is provided:
10
+ """
11
+ <path_to>/some_feature_file.feature
12
+ """
@@ -0,0 +1,109 @@
1
+ Feature: Feature modeling
2
+
3
+ Feature models are the top level element of the gherkin portion of the model tree. They expose several attributes of
4
+ the feature that they represent, as well as containing models for any background, scenarios, or outlines that are
5
+ present in that feature.
6
+
7
+
8
+ Background:
9
+ Given the following gherkin:
10
+ """
11
+ @tag_1 @tag_2
12
+ Feature: Feature Foo
13
+
14
+ Some feature description.
15
+
16
+ Some more.
17
+ And some more.
18
+
19
+ Background: The background
20
+ * some setup step
21
+
22
+ Scenario: Scenario 1
23
+ * a step
24
+
25
+ Scenario Outline: Outline 1
26
+ * a step
27
+ Examples:
28
+ | param |
29
+ | value |
30
+
31
+ Scenario: Scenario 2
32
+ * a step
33
+
34
+ Scenario Outline: Outline 2
35
+ * a step
36
+ Examples:
37
+ | param |
38
+ | value |
39
+ """
40
+ And a feature model based on that gherkin
41
+ """
42
+ @model = CukeModeler::Feature.new(<source_text>)
43
+ """
44
+
45
+
46
+ Scenario: Modeling a feature's name
47
+ When the feature's name is requested
48
+ """
49
+ @model.name
50
+ """
51
+ Then the model returns "Feature Foo"
52
+
53
+ Scenario: Modeling a feature's description
54
+ When the feature's description is requested
55
+ """
56
+ @model.description
57
+ """
58
+ Then the model returns
59
+ """
60
+ Some feature description.
61
+
62
+ Some more.
63
+ And some more.
64
+ """
65
+
66
+ Scenario: Modeling a feature's background
67
+ When the feature's background is requested
68
+ """
69
+ @model.background
70
+ """
71
+ Then the model returns a model for the background "The background"
72
+
73
+ Scenario: Modeling a feature's scenarios
74
+ When the feature's scenarios are requested
75
+ """
76
+ @model.scenarios
77
+ """
78
+ Then the model returns models for the following scenarios:
79
+ | Scenario 1 |
80
+ | Scenario 2 |
81
+
82
+ Scenario: Modeling a feature's outlines
83
+ When the feature's outlines are requested
84
+ """
85
+ @model.outlines
86
+ """
87
+ Then the model returns models for the following outlines:
88
+ | Outline 1 |
89
+ | Outline 2 |
90
+
91
+ Scenario: Modeling a feature's tags
92
+
93
+ Note: Although a feature does not inherit tags from anything else, they can still
94
+ be requested in the same manner as other models that have tags.
95
+
96
+ When the feature's tags are requested
97
+ """
98
+ @model.tags
99
+ """
100
+ Then the model returns models for the following tags:
101
+ | @tag_1 |
102
+ | @tag_2 |
103
+
104
+ Scenario: Modeling a feature's source line
105
+ When the feature's source line is requested
106
+ """
107
+ @model.source_line
108
+ """
109
+ Then the model returns "2"
@@ -0,0 +1,104 @@
1
+ Feature: Feature output
2
+
3
+ A feature model's string output is a Gherkin representation of itself.
4
+
5
+
6
+ Scenario: Outputting a feature model
7
+ Given the following gherkin:
8
+ """
9
+ @tag1@tag2
10
+ @tag3
11
+ Feature: A feature with everything it could have
12
+ Including a description
13
+ and then some.
14
+ Background:
15
+ Background
16
+ description
17
+ * a step
18
+ |value1|
19
+ * another step
20
+ @scenario_tag
21
+ Scenario:
22
+ Scenario
23
+ description
24
+ * a step
25
+ * another step
26
+ \"\"\"
27
+ some text
28
+ \"\"\"
29
+ @outline_tag
30
+ Scenario Outline:
31
+ Outline
32
+ description
33
+ * a step
34
+ |value2|
35
+ * another step
36
+ \"\"\"
37
+ some text
38
+ \"\"\"
39
+ @example_tag
40
+ Examples:
41
+ Example
42
+ description
43
+ |param|
44
+ |value|
45
+ """
46
+ And a feature model based on that gherkin
47
+ """
48
+ @model = CukeModeler::Feature.new(<source_text>)
49
+ """
50
+ When the model is output as a string
51
+ """
52
+ @model.to_s
53
+ """
54
+ Then the following text is provided:
55
+ """
56
+ @tag1 @tag2 @tag3
57
+ Feature: A feature with everything it could have
58
+
59
+ Including a description
60
+ and then some.
61
+
62
+ Background:
63
+
64
+ Background
65
+ description
66
+
67
+ * a step
68
+ | value1 |
69
+ * another step
70
+
71
+ @scenario_tag
72
+ Scenario:
73
+
74
+ Scenario
75
+ description
76
+
77
+ * a step
78
+ * another step
79
+ \"\"\"
80
+ some text
81
+ \"\"\"
82
+
83
+ @outline_tag
84
+ Scenario Outline:
85
+
86
+ Outline
87
+ description
88
+
89
+ * a step
90
+ | value2 |
91
+ * another step
92
+ \"\"\"
93
+ some text
94
+ \"\"\"
95
+
96
+ @example_tag
97
+ Examples:
98
+
99
+ Example
100
+ description
101
+
102
+ | param |
103
+ | value |
104
+ """
@@ -0,0 +1,22 @@
1
+ Feature: Model output
2
+
3
+ All models can be output in text form. For models that represent parts of the file structure, this text
4
+ will be a path and for models that represent parts of a feature file, this text will be Gherkin (see the
5
+ model output documentation for specific models for details). As such, output from a model can be used as
6
+ input for the same kind of model.
7
+
8
+
9
+ Scenario: Outputting a model
10
+ Given the models provided by CukeModeler
11
+ Then all of them can be output as text appropriate to the model type
12
+ """
13
+ model = <model_class>.new
14
+
15
+ model.to_s
16
+ """
17
+ And the output can be used to make an equivalent model
18
+ """
19
+ model = <model_class>.new
20
+
21
+ <model_class>.new(model.to_s)
22
+ """
@@ -0,0 +1,48 @@
1
+ Feature: Model structure
2
+
3
+ When modeling an existing test suite, that suite is parsed and models are created for each element of the
4
+ suite. These models form a nested structure of parent and child models which has the same shape as whatever
5
+ portion of the suite that they represent (see the documentation for specific models for details).
6
+
7
+ However, all models can also be used in an 'abstract' manner. That is, they can be created without any input
8
+ (such as a file path or snippet of Gherkin) that would normally be used for determining their structure and
9
+ properties. In these cases, their parent/child relationships and properties can be set directly rather than
10
+ being populated dynamically based on an actual test suite.
11
+
12
+
13
+ Scenario: Creating abstract models
14
+ Given the models provided by CukeModeler
15
+ Then all of them can be created without further context
16
+ """
17
+ abstract_model = <model_class>.new
18
+ """
19
+
20
+ Scenario: Nesting models
21
+ Given the models provided by CukeModeler
22
+ Then all of them can contain other models
23
+ """
24
+ child_model = <model_class>.new
25
+ parent_model = <model_class>.new
26
+
27
+ parent_model.children << child_model
28
+ """
29
+ And all of them can be contained inside of another model
30
+ """
31
+ child_model = <model_class>.new
32
+ parent_model = <model_class>.new
33
+
34
+ child_model.parent_model = parent_model
35
+ """
36
+
37
+ Scenario: Accessing the parsing data
38
+
39
+ Note: Directory and feature file models do not store any parsing data because parsing Gherkin source text
40
+ does not come into play until the feature level of modeling.
41
+
42
+ Given the models provided by CukeModeler
43
+ Then all of them provide access to the parsing data that was used to create them
44
+ """
45
+ model = <model_class>.new(<source_text>)
46
+
47
+ model.parsing_data
48
+ """
@@ -0,0 +1,144 @@
1
+ Feature: Outline modeling
2
+
3
+ Outline models represent a Scenario Outline portion of a feature. They expose several attributes of the outline
4
+ that they represent, as well as containing models for the steps, tags, and examples that are present in that outline.
5
+
6
+
7
+ Background:
8
+ Given the following gherkin:
9
+ """
10
+ Scenario Outline: example outline
11
+
12
+ Some background description.
13
+
14
+ Some more.
15
+ Even more.
16
+
17
+
18
+ Given a <setup> step
19
+ When an action step
20
+ Then a <verification> step
21
+
22
+ Examples: example 1
23
+ | setup | verification |
24
+ | x | y |
25
+ Examples: example 2
26
+ | setup | verification |
27
+ | a | b |
28
+ """
29
+ And an outline model based on that gherkin
30
+ """
31
+ @model = CukeModeler::Outline.new(<source_text>)
32
+ """
33
+
34
+
35
+ Scenario: Modeling an outline's name
36
+ When the outline's name is requested
37
+ """
38
+ @model.name
39
+ """
40
+ Then the model returns "example outline"
41
+
42
+ Scenario: Modeling an outline's description
43
+ When the outline's description is requested
44
+ """
45
+ @model.description
46
+ """
47
+ Then the model returns
48
+ """
49
+ Some background description.
50
+
51
+ Some more.
52
+ Even more.
53
+ """
54
+
55
+ Scenario: Modeling an outline's steps
56
+ When the outline's steps are requested
57
+ """
58
+ @model.steps
59
+ """
60
+ Then the model returns models for the following steps:
61
+ | a <setup> step |
62
+ | an action step |
63
+ | a <verification> step |
64
+
65
+ Scenario: Modeling an outline's examples
66
+ When the outline's examples are requested
67
+ """
68
+ @model.examples
69
+ """
70
+ Then the model returns models for the following examples:
71
+ | example 1 |
72
+ | example 2 |
73
+
74
+ Scenario: Modeling an outline's tags
75
+ Given the following gherkin:
76
+ """
77
+ @feature_tag
78
+ Feature:
79
+
80
+ @outline_tag_1
81
+ @outline_tag_2
82
+ Scenario Outline:
83
+ Given a <setup> step
84
+ When an action step
85
+ Then a <verification> step
86
+
87
+ Examples:
88
+ | setup | verification |
89
+ | x | y |
90
+ """
91
+ And a feature model based on that gherkin
92
+ """
93
+ @model = CukeModeler::Feature.new(<source_text>)
94
+ """
95
+ And the outline model of that feature model
96
+ """
97
+ @model = @model.outlines.first
98
+ """
99
+ When the outline's tags are requested
100
+ """
101
+ @model.tags
102
+ """
103
+ Then the model returns models for the following tags:
104
+ | @outline_tag_1 |
105
+ | @outline_tag_2 |
106
+ When the outline's inherited tags are requested
107
+ """
108
+ @model.applied_tags
109
+ """
110
+ Then the model returns models for the following tags:
111
+ | @feature_tag |
112
+ When all of the outline's tags are requested
113
+ """
114
+ @model.all_tags
115
+ """
116
+ Then the model returns models for the following tags:
117
+ | @feature_tag |
118
+ | @outline_tag_1 |
119
+ | @outline_tag_2 |
120
+
121
+ Scenario: Modeling a outline's source line
122
+ Given the following gherkin:
123
+ """
124
+ Feature:
125
+
126
+ Scenario Outline:
127
+ * a step
128
+ Examples:
129
+ | param |
130
+ | value |
131
+ """
132
+ And a feature model based on that gherkin
133
+ """
134
+ @model = CukeModeler::Feature.new(<source_text>)
135
+ """
136
+ And the outline model of that feature model
137
+ """
138
+ @model = @model.outlines.first
139
+ """
140
+ When the outline's source line is requested
141
+ """
142
+ @model.source_line
143
+ """
144
+ Then the model returns "3"