cuke_modeler 0.2.0 → 0.3.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 (74) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +3 -0
  3. data/Gemfile +2 -1
  4. data/History.rdoc +9 -2
  5. data/Rakefile +10 -1
  6. data/cuke_modeler.gemspec +1 -1
  7. data/features/modeling/gherkin4/background_modeling.feature +64 -0
  8. data/features/modeling/gherkin4/background_output.feature +131 -0
  9. data/features/modeling/gherkin4/directory_modeling.feature +110 -0
  10. data/features/modeling/gherkin4/directory_output.feature +14 -0
  11. data/features/modeling/gherkin4/doc_string_modeling.feature +53 -0
  12. data/features/modeling/gherkin4/doc_string_output.feature +72 -0
  13. data/features/modeling/gherkin4/example_modeling.feature +100 -0
  14. data/features/modeling/gherkin4/example_output.feature +193 -0
  15. data/features/modeling/gherkin4/feature_file_modeling.feature +54 -0
  16. data/features/modeling/gherkin4/feature_file_output.feature +14 -0
  17. data/features/modeling/gherkin4/feature_modeling.feature +153 -0
  18. data/features/modeling/gherkin4/feature_output.feature +245 -0
  19. data/features/modeling/gherkin4/outline_modeling.feature +89 -0
  20. data/features/modeling/gherkin4/outline_output.feature +198 -0
  21. data/features/modeling/gherkin4/row_modeling.feature +68 -0
  22. data/features/modeling/gherkin4/row_output.feature +28 -0
  23. data/features/modeling/gherkin4/scenario_modeling.feature +78 -0
  24. data/features/modeling/gherkin4/scenario_output.feature +148 -0
  25. data/features/modeling/gherkin4/step_modeling.feature +75 -0
  26. data/features/modeling/gherkin4/step_output.feature +53 -0
  27. data/features/modeling/gherkin4/table_modeling.feature +42 -0
  28. data/features/modeling/gherkin4/table_output.feature +43 -0
  29. data/features/modeling/gherkin4/table_row_modeling.feature +57 -0
  30. data/features/modeling/gherkin4/table_row_output.feature +28 -0
  31. data/features/modeling/gherkin4/tag_modeling.feature +48 -0
  32. data/features/modeling/gherkin4/tag_output.feature +17 -0
  33. data/features/step_definitions/background_steps.rb +1 -1
  34. data/features/step_definitions/doc_string_steps.rb +1 -1
  35. data/features/step_definitions/feature_steps.rb +7 -4
  36. data/features/step_definitions/outline_steps.rb +2 -2
  37. data/features/step_definitions/step_steps.rb +2 -2
  38. data/features/step_definitions/table_steps.rb +1 -1
  39. data/features/step_definitions/tag_steps.rb +3 -3
  40. data/features/step_definitions/test_steps.rb +1 -1
  41. data/gemfiles/gherkin.gemfile +1 -0
  42. data/gemfiles/gherkin3.gemfile +2 -1
  43. data/gemfiles/gherkin4.gemfile +16 -0
  44. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +220 -0
  45. data/lib/cuke_modeler/example.rb +1 -1
  46. data/lib/cuke_modeler/parsing.rb +73 -44
  47. data/lib/cuke_modeler/version.rb +1 -1
  48. data/spec/spec_helper.rb +10 -4
  49. data/spec/unit/background_unit_spec.rb +17 -9
  50. data/spec/unit/bare_bones_unit_specs.rb +3 -1
  51. data/spec/unit/containing_element_unit_specs.rb +3 -1
  52. data/spec/unit/directory_unit_spec.rb +5 -5
  53. data/spec/unit/doc_string_unit_spec.rb +13 -5
  54. data/spec/unit/example_unit_spec.rb +44 -9
  55. data/spec/unit/feature_element_unit_spec.rb +5 -5
  56. data/spec/unit/feature_element_unit_specs.rb +3 -1
  57. data/spec/unit/feature_file_unit_spec.rb +5 -5
  58. data/spec/unit/feature_unit_spec.rb +17 -9
  59. data/spec/unit/nested_element_unit_specs.rb +3 -1
  60. data/spec/unit/outline_unit_spec.rb +18 -10
  61. data/spec/unit/parsing_unit_spec.rb +2 -2
  62. data/spec/unit/prepopulated_unit_specs.rb +3 -1
  63. data/spec/unit/raw_element_unit_specs.rb +3 -1
  64. data/spec/unit/row_unit_spec.rb +15 -8
  65. data/spec/unit/scenario_unit_spec.rb +19 -11
  66. data/spec/unit/sourced_element_unit_specs.rb +3 -1
  67. data/spec/unit/step_unit_spec.rb +14 -6
  68. data/spec/unit/table_row_unit_spec.rb +15 -8
  69. data/spec/unit/table_unit_spec.rb +13 -5
  70. data/spec/unit/tag_unit_spec.rb +14 -6
  71. data/spec/unit/tagged_element_unit_specs.rb +3 -1
  72. data/spec/unit/test_element_unit_spec.rb +6 -6
  73. data/spec/unit/test_element_unit_specs.rb +3 -1
  74. metadata +86 -55
@@ -0,0 +1,72 @@
1
+ @gherkin4
2
+ Feature: Outputting doc string 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 an empty doc string
9
+ Given a doc string element based on the following gherkin:
10
+ """
11
+ \"\"\"
12
+ \"\"\"
13
+ """
14
+ When it is outputted
15
+ Then the following text is provided:
16
+ """
17
+ \"\"\"
18
+ \"\"\"
19
+ """
20
+
21
+ Scenario: Output of a doc string without a content type
22
+ Given a doc string element based on the following gherkin:
23
+ """
24
+ \"\"\"
25
+ Some text
26
+
27
+ some more text
28
+
29
+ \"\"\"
30
+ """
31
+ When it is outputted
32
+ Then the following text is provided:
33
+ """
34
+ \"\"\"
35
+ Some text
36
+
37
+ some more text
38
+
39
+ \"\"\"
40
+ """
41
+
42
+ Scenario: Output of a doc string with a content type
43
+ Given a doc string element based on the following gherkin:
44
+ """
45
+ \"\"\" the type
46
+ Some text
47
+
48
+ some more text
49
+
50
+ \"\"\"
51
+ """
52
+ When it is outputted
53
+ Then the following text is provided:
54
+ """
55
+ \"\"\" the type
56
+ Some text
57
+
58
+ some more text
59
+
60
+ \"\"\"
61
+ """
62
+
63
+ Scenario: Output of a doc string with a triple quotes in its contents
64
+
65
+ Since triple quotes mark the beginning and end of a doc string, any triple
66
+ quotes inside of the doc string (which would have had to have been escaped
67
+ to get inside in the first place) will be escaped when outputted so as to
68
+ retain the quality of being able to use the output directly as gherkin.
69
+
70
+ Given a doc string element based on the string """" the type\n* a step\n \"\"\"\n that also has a doc string\n \"\"\"\n""""
71
+ When it is outputted
72
+ Then the text provided is """" the type\n* a step\n \"\"\"\n that also has a doc string\n \"\"\"\n""""
@@ -0,0 +1,100 @@
1
+ @gherkin4
2
+ Feature: Example elements can be modeled.
3
+
4
+
5
+ Acceptance criteria
6
+
7
+ 1. All conceptual pieces of an example block can be modeled:
8
+ - the example's name
9
+ - the example's description
10
+ - the example's parameters
11
+ - the example's rows
12
+ - the example's tags
13
+ - the example's applied tags
14
+ - the example's source line
15
+ - the example's raw element
16
+
17
+ 2. Example blocks can be outputted in a convenient form
18
+
19
+
20
+ Background: Test file setup.
21
+ Given the following feature file:
22
+ """
23
+ @a_feature_level_tag
24
+ Feature:
25
+
26
+ @outline_tag
27
+ Scenario Outline:
28
+ * a step
29
+
30
+ Examples: text describing the significance of the examples
31
+
32
+ Some example description.
33
+
34
+ Some more.
35
+ Even more.
36
+ |param1| param2 | extra param |
37
+ |x | y | ? |
38
+ |1 | 2 | 3 |
39
+ @example_tag @another_one
40
+ Examples: some examples with different significance and a tag
41
+ | param1 |
42
+ | a |
43
+ """
44
+ And parameter delimiters of "*" and "*"
45
+ When the file is read
46
+
47
+
48
+ Scenario: The raw example element is modeled.
49
+ Then the test example block correctly stores its underlying implementation
50
+
51
+ Scenario: The example's source line is modeled.
52
+ Then the test example block "1" is found to have the following properties:
53
+ | source_line | 8 |
54
+ And the test example block "2" is found to have the following properties:
55
+ | source_line | 18 |
56
+
57
+ Scenario: The examples' name is modeled.
58
+ Then the test example block "1" is found to have the following properties:
59
+ | name | text describing the significance of the examples |
60
+ And the test example block "2" is found to have the following properties:
61
+ | name | some examples with different significance and a tag |
62
+
63
+ Scenario: The examples' description is modeled.
64
+ Then the test example block "1" has the following description:
65
+ """
66
+ Some example description.
67
+
68
+ Some more.
69
+ Even more.
70
+ """
71
+ And the test example block "2" has no description
72
+
73
+ Scenario: The examples' tags are modeled.
74
+ Then the test example block "1" has no tags
75
+ And the test example block "2" is found to have the following tags:
76
+ | @example_tag |
77
+ | @another_one |
78
+
79
+ Scenario: The examples' applied tags are modeled.
80
+ Then the test example block "2" is found to have the following applied tags:
81
+ | @a_feature_level_tag |
82
+ | @outline_tag |
83
+
84
+ Scenario: The examples' parameters are modeled.
85
+ Then the test example block "1" parameters are as follows:
86
+ | param1 |
87
+ | param2 |
88
+ | extra param |
89
+ And the test example block "2" parameters are as follows:
90
+ | param1 |
91
+
92
+ Scenario: The examples' rows are modeled.
93
+ Then the test example block "1" rows are as follows:
94
+ | x,y,? |
95
+ | 1,2,3 |
96
+ And the test example block "2" rows are as follows:
97
+ | a |
98
+
99
+ Scenario: Convenient output of an example block
100
+ Then the example block has convenient output
@@ -0,0 +1,193 @@
1
+ @gherkin4
2
+ Feature: Outputting example 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 an example that does not have a name
9
+ Given an example element based on the following gherkin:
10
+ """
11
+ Examples:
12
+ |param|
13
+ """
14
+ When it is outputted
15
+ Then the following text is provided:
16
+ """
17
+ Examples:
18
+ | param |
19
+ """
20
+
21
+ Scenario: Output of an example that does have a name
22
+ Given an example element based on the following gherkin:
23
+ """
24
+ Examples: with a name
25
+ |param|
26
+ """
27
+ When it is outputted
28
+ Then the following text is provided:
29
+ """
30
+ Examples: with a name
31
+ | param |
32
+ """
33
+
34
+ Scenario: Output of an example that does not have tags
35
+ Given an example element based on the following gherkin:
36
+ """
37
+ Examples:
38
+ |param|
39
+ """
40
+ When it is outputted
41
+ Then the following text is provided:
42
+ """
43
+ Examples:
44
+ | param |
45
+ """
46
+
47
+ Scenario: Output of an example that does have tags
48
+ Given an example element based on the following gherkin:
49
+ """
50
+ @tag1@tag2
51
+ @tag3
52
+ Examples:
53
+ |param|
54
+ """
55
+ When it is outputted
56
+ Then the following text is provided:
57
+ """
58
+ @tag1 @tag2 @tag3
59
+ Examples:
60
+ | param |
61
+ """
62
+
63
+ Scenario: Output of an example that has a description, no first line buffer
64
+ Given an example element based on the following gherkin:
65
+ """
66
+ Examples:
67
+ Some description.
68
+ Some more description.
69
+ |param|
70
+ """
71
+ When it is outputted
72
+ Then the following text is provided:
73
+ """
74
+ Examples:
75
+
76
+ Some description.
77
+ Some more description.
78
+
79
+ | param |
80
+ """
81
+
82
+ Scenario: Output of an example that has a description, first line is blank
83
+ Given an example element based on the following gherkin:
84
+ """
85
+ Examples:
86
+
87
+ Some description.
88
+ Some more description.
89
+ |param|
90
+ """
91
+ When it is outputted
92
+ Then the following text is provided:
93
+ """
94
+ Examples:
95
+
96
+ Some description.
97
+ Some more description.
98
+
99
+ | param |
100
+ """
101
+
102
+ Scenario: Output of an example that has a description, first line is only whitespace
103
+ Given an example element based on the following gherkin:
104
+ """
105
+ Examples:
106
+
107
+ Some description.
108
+ Some more description.
109
+ |param|
110
+ """
111
+ When it is outputted
112
+ Then the following text is provided:
113
+ """
114
+ Examples:
115
+
116
+ Some description.
117
+ Some more description.
118
+
119
+ | param |
120
+ """
121
+
122
+ Scenario: Output of an example that has one rows
123
+ Given an example element based on the following gherkin:
124
+ """
125
+ Examples:
126
+ |param1|param2|
127
+ |value1|value2|
128
+ """
129
+ When it is outputted
130
+ Then the following text is provided:
131
+ """
132
+ Examples:
133
+ | param1 | param2 |
134
+ | value1 | value2 |
135
+ """
136
+
137
+ Scenario: Output of an example that has multiple rows
138
+ Given an example element based on the following gherkin:
139
+ """
140
+ Examples:
141
+ |param1|param2|
142
+ |value1|value2|
143
+ |value3|value4|
144
+ """
145
+ When it is outputted
146
+ Then the following text is provided:
147
+ """
148
+ Examples:
149
+ | param1 | param2 |
150
+ | value1 | value2 |
151
+ | value3 | value4 |
152
+ """
153
+
154
+ Scenario: Output of an example that contains all possible parts
155
+ Given an example element based on the following gherkin:
156
+ """
157
+ @tag1@tag2
158
+ @tag3
159
+ Examples: with a name
160
+ Some description.
161
+ Some more description.
162
+ |param1|param2|
163
+ |value1|value2|
164
+ |value3|value4|
165
+ """
166
+ When it is outputted
167
+ Then the following text is provided:
168
+ """
169
+ @tag1 @tag2 @tag3
170
+ Examples: with a name
171
+
172
+ Some description.
173
+ Some more description.
174
+
175
+ | param1 | param2 |
176
+ | value1 | value2 |
177
+ | value3 | value4 |
178
+ """
179
+
180
+ Scenario: Whitespace buffers are based on the longest value or parameter in a column
181
+ Given an example element based on the following gherkin:
182
+ """
183
+ Examples:
184
+ |parameter_name|x|
185
+ |y|value_name|
186
+ """
187
+ When it is outputted
188
+ Then the following text is provided:
189
+ """
190
+ Examples:
191
+ | parameter_name | x |
192
+ | y | value_name |
193
+ """
@@ -0,0 +1,54 @@
1
+ @gherkin4
2
+ Feature: Feature files can be modeled.
3
+
4
+
5
+ Acceptance criteria
6
+
7
+ 1. All conceptual pieces of a .feature file can be modeled:
8
+ - the file's name
9
+ - the file's full path
10
+ - the file's features (one or zero per file)
11
+
12
+ 2. Feature files can be outputted in a convenient form
13
+
14
+
15
+ Background: Test file setup.
16
+ Given the following feature file "test_file_1.feature":
17
+ """
18
+ Feature: The first test feature
19
+ Just a dummy feature.
20
+ """
21
+ And the following feature file "test_file_2.feature":
22
+ """
23
+ Feature: The second test feature
24
+ Just a dummy feature.
25
+ """
26
+ And the following feature file "why_would_you_make_an_empty_file.feature":
27
+ """
28
+ """
29
+ When the file "test_file_1.feature" is read
30
+ And the file "test_file_2.feature" is read
31
+ And the file "why_would_you_make_an_empty_file.feature" is read
32
+
33
+
34
+ Scenario: The file's feature is modeled.
35
+ Then file "1" is found to have the following properties:
36
+ | name | test_file_1.feature |
37
+ | path | path_to/test_file_1.feature |
38
+ | feature_count | 1 |
39
+ And file "1" features are as follows:
40
+ | The first test feature |
41
+ Then file "2" is found to have the following properties:
42
+ | name | test_file_2.feature |
43
+ | path | path_to/test_file_2.feature |
44
+ | feature_count | 1 |
45
+ And file "2" features are as follows:
46
+ | The second test feature |
47
+ Then file "3" is found to have the following properties:
48
+ | name | why_would_you_make_an_empty_file.feature |
49
+ | path | path_to/why_would_you_make_an_empty_file.feature |
50
+ | feature_count | 0 |
51
+ And file "3" has no features
52
+
53
+ Scenario: Convenient output of a feature file
54
+ Then the feature file has convenient output
@@ -0,0 +1,14 @@
1
+ @gherkin4
2
+ Feature: Outputting feature file 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 feature file
9
+ Given a feature file element based on "some_feature_file.feature"
10
+ When it is outputted
11
+ Then the following text is provided:
12
+ """
13
+ path_to/some_feature_file.feature
14
+ """
@@ -0,0 +1,153 @@
1
+ @gherkin4
2
+ Feature: Features can be modeled.
3
+
4
+
5
+ Acceptance criteria
6
+
7
+ 1. All conceptual pieces of a feature can be modeled:
8
+ - the feature's name
9
+ - the feature's description
10
+ - the feature's tags
11
+ - the feature's scenarios
12
+ - the feature's outlines
13
+ - the feature's background
14
+ - the feature's total number of tests
15
+ - the feature's total number of test cases
16
+ - the feature's source line
17
+ - the feature's raw element
18
+
19
+ 2. Features can be outputted in a convenient form
20
+
21
+
22
+ Background: Test file setup.
23
+ Given the following feature file "much_stuff.feature":
24
+ """
25
+ @a_feature_level_tag @and_another
26
+
27
+ Feature: The test feature name.
28
+
29
+ Some feature description.
30
+
31
+ Some more.
32
+ And some more.
33
+
34
+ Background: Some general test setup stuff.
35
+ * some setup step
36
+
37
+ Scenario: The first scenario's name.
38
+ * a step
39
+
40
+ Scenario Outline: The scenario outline's name.
41
+ * a step
42
+ Examples:
43
+ | param |
44
+ | x |
45
+ | y |
46
+ Examples:
47
+ | param |
48
+ | z |
49
+
50
+ Scenario: The second scenario's name.
51
+ * a step
52
+ """
53
+ And the following feature file "barely_any_stuff.feature":
54
+ """
55
+ Feature:
56
+
57
+ Background:
58
+
59
+ Scenario:
60
+
61
+ Scenario Outline:
62
+ Examples:
63
+ """
64
+ And the following feature file "as_empty_as_it_gets.feature":
65
+ """
66
+ Feature:
67
+ """
68
+ When the file "much_stuff.feature" is read
69
+ And the file "barely_any_stuff.feature" is read
70
+ And the file "as_empty_as_it_gets.feature" is read
71
+
72
+
73
+ Scenario: The raw feature element is modeled.
74
+ Then the feature correctly stores its underlying implementation
75
+
76
+ Scenario: The feature's properties are modeled.
77
+ Then feature "1" is found to have the following properties:
78
+ | name | The test feature name. |
79
+ | test_count | 3 |
80
+ | test_case_count | 5 |
81
+ | source_line | 3 |
82
+ And feature "2" is found to have the following properties:
83
+ | name | |
84
+ | test_count | 2 |
85
+ | test_case_count | 1 |
86
+ | source_line | 1 |
87
+
88
+ And feature "3" is found to have the following properties:
89
+ | name | |
90
+ | test_count | 0 |
91
+ | test_case_count | 0 |
92
+ | source_line | 1 |
93
+
94
+ Scenario: The feature's description is modeled.
95
+ Then feature "1" has the following description:
96
+ """
97
+ Some feature description.
98
+
99
+ Some more.
100
+ And some more.
101
+ """
102
+ And feature "2" has no description
103
+ And feature "3" has no description
104
+
105
+ Scenario: The feature's tags are modeled.
106
+ Then feature "1" is found to have the following tags:
107
+ | @a_feature_level_tag |
108
+ | @and_another |
109
+ And feature "2" has no tags
110
+ And feature "3" has no tags
111
+
112
+ Scenario: The feature's scenarios are modeled.
113
+ Then feature "1" is found to have the following properties:
114
+ | scenario_count | 2 |
115
+ And feature "1" scenarios are as follows:
116
+ | The first scenario's name. |
117
+ | The second scenario's name. |
118
+ And feature "2" is found to have the following properties:
119
+ | scenario_count | 1 |
120
+ And feature "2" scenarios are as follows:
121
+ | |
122
+ And feature "3" is found to have the following properties:
123
+ | scenario_count | 0 |
124
+ And feature "3" has no scenarios
125
+
126
+ Scenario: The feature's outlines are modeled.
127
+ Then feature "1" is found to have the following properties:
128
+ | outline_count | 1 |
129
+ And feature "1" outlines are as follows:
130
+ | The scenario outline's name. |
131
+ And feature "2" is found to have the following properties:
132
+ | outline_count | 1 |
133
+ And feature "2" outlines are as follows:
134
+ | |
135
+ And feature "3" is found to have the following properties:
136
+ | outline_count | 0 |
137
+ And feature "3" has no outlines
138
+
139
+ Scenario: The feature's background is modeled.
140
+ Then feature "1" is found to have the following properties:
141
+ | has_background? | true |
142
+ And feature "1" background is as follows:
143
+ | Some general test setup stuff. |
144
+ And feature "2" is found to have the following properties:
145
+ | has_background? | true |
146
+ And feature "2" background is as follows:
147
+ | |
148
+ And feature "3" is found to have the following properties:
149
+ | has_background? | false |
150
+ And feature "3" has no background
151
+
152
+ Scenario: Convenient output of a feature
153
+ Then the feature has convenient output