cuke_modeler 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/.travis.yml +23 -0
  2. data/Gemfile +22 -4
  3. data/History.rdoc +6 -0
  4. data/Rakefile +26 -26
  5. data/cuke_modeler.gemspec +3 -1
  6. data/features/modeling/{background_modeling.feature → gherkin/background_modeling.feature} +1 -11
  7. data/features/modeling/{background_output.feature → gherkin/background_output.feature} +1 -0
  8. data/features/modeling/{directory_modeling.feature → gherkin/directory_modeling.feature} +1 -11
  9. data/features/modeling/{directory_output.feature → gherkin/directory_output.feature} +1 -0
  10. data/features/modeling/{doc_string_modeling.feature → gherkin/doc_string_modeling.feature} +1 -11
  11. data/features/modeling/{doc_string_output.feature → gherkin/doc_string_output.feature} +1 -0
  12. data/features/modeling/{example_modeling.feature → gherkin/example_modeling.feature} +1 -11
  13. data/features/modeling/{example_output.feature → gherkin/example_output.feature} +1 -0
  14. data/features/modeling/{feature_file_modeling.feature → gherkin/feature_file_modeling.feature} +1 -11
  15. data/features/modeling/{feature_file_output.feature → gherkin/feature_file_output.feature} +1 -0
  16. data/features/modeling/{feature_modeling.feature → gherkin/feature_modeling.feature} +1 -11
  17. data/features/modeling/{feature_output.feature → gherkin/feature_output.feature} +1 -0
  18. data/features/modeling/{outline_modeling.feature → gherkin/outline_modeling.feature} +1 -11
  19. data/features/modeling/{outline_output.feature → gherkin/outline_output.feature} +1 -0
  20. data/features/modeling/{row_modeling.feature → gherkin/row_modeling.feature} +1 -10
  21. data/features/modeling/{row_output.feature → gherkin/row_output.feature} +1 -0
  22. data/features/modeling/{scenario_modeling.feature → gherkin/scenario_modeling.feature} +1 -11
  23. data/features/modeling/{scenario_output.feature → gherkin/scenario_output.feature} +1 -0
  24. data/features/modeling/{step_modeling.feature → gherkin/step_modeling.feature} +1 -11
  25. data/features/modeling/{step_output.feature → gherkin/step_output.feature} +1 -0
  26. data/features/modeling/{table_modeling.feature → gherkin/table_modeling.feature} +1 -11
  27. data/features/modeling/{table_output.feature → gherkin/table_output.feature} +1 -0
  28. data/features/modeling/{table_row_modeling.feature → gherkin/table_row_modeling.feature} +1 -11
  29. data/features/modeling/{table_row_output.feature → gherkin/table_row_output.feature} +1 -0
  30. data/features/modeling/{tag_modeling.feature → gherkin/tag_modeling.feature} +1 -11
  31. data/features/modeling/{tag_output.feature → gherkin/tag_output.feature} +1 -0
  32. data/features/modeling/gherkin3/background_modeling.feature +64 -0
  33. data/features/modeling/gherkin3/background_output.feature +131 -0
  34. data/features/modeling/gherkin3/directory_modeling.feature +110 -0
  35. data/features/modeling/gherkin3/directory_output.feature +14 -0
  36. data/features/modeling/gherkin3/doc_string_modeling.feature +53 -0
  37. data/features/modeling/gherkin3/doc_string_output.feature +72 -0
  38. data/features/modeling/gherkin3/example_modeling.feature +100 -0
  39. data/features/modeling/gherkin3/example_output.feature +207 -0
  40. data/features/modeling/gherkin3/feature_file_modeling.feature +54 -0
  41. data/features/modeling/gherkin3/feature_file_output.feature +14 -0
  42. data/features/modeling/gherkin3/feature_modeling.feature +155 -0
  43. data/features/modeling/gherkin3/feature_output.feature +249 -0
  44. data/features/modeling/gherkin3/outline_modeling.feature +89 -0
  45. data/features/modeling/gherkin3/outline_output.feature +255 -0
  46. data/features/modeling/gherkin3/row_modeling.feature +68 -0
  47. data/features/modeling/gherkin3/row_output.feature +28 -0
  48. data/features/modeling/gherkin3/scenario_modeling.feature +78 -0
  49. data/features/modeling/gherkin3/scenario_output.feature +148 -0
  50. data/features/modeling/gherkin3/step_modeling.feature +75 -0
  51. data/features/modeling/gherkin3/step_output.feature +53 -0
  52. data/features/modeling/gherkin3/table_modeling.feature +42 -0
  53. data/features/modeling/gherkin3/table_output.feature +43 -0
  54. data/features/modeling/gherkin3/table_row_modeling.feature +57 -0
  55. data/features/modeling/gherkin3/table_row_output.feature +28 -0
  56. data/features/modeling/gherkin3/tag_modeling.feature +49 -0
  57. data/features/modeling/gherkin3/tag_output.feature +17 -0
  58. data/features/step_definitions/background_steps.rb +5 -1
  59. data/features/step_definitions/doc_string_steps.rb +5 -1
  60. data/features/step_definitions/feature_steps.rb +5 -1
  61. data/features/step_definitions/outline_steps.rb +10 -4
  62. data/features/step_definitions/step_steps.rb +10 -2
  63. data/features/step_definitions/table_steps.rb +6 -2
  64. data/features/step_definitions/tag_steps.rb +15 -3
  65. data/features/step_definitions/test_steps.rb +7 -2
  66. data/features/support/env.rb +21 -9
  67. data/gemfiles/gherkin.gemfile +17 -0
  68. data/gemfiles/gherkin3.gemfile +15 -0
  69. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +146 -0
  70. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +206 -0
  71. data/lib/cuke_modeler/parsing.rb +61 -20
  72. data/lib/cuke_modeler/raw.rb +1 -1
  73. data/lib/cuke_modeler/row.rb +2 -2
  74. data/lib/cuke_modeler/table.rb +2 -2
  75. data/lib/cuke_modeler/table_row.rb +1 -1
  76. data/lib/cuke_modeler/version.rb +1 -1
  77. data/spec/integration/example_integration_spec.rb +2 -1
  78. data/spec/integration/feature_integration_spec.rb +7 -4
  79. data/spec/integration/outline_integration_spec.rb +4 -2
  80. data/spec/integration/tag_integration_spec.rb +2 -1
  81. data/spec/spec_helper.rb +6 -0
  82. data/spec/unit/background_unit_spec.rb +17 -0
  83. data/spec/unit/doc_string_unit_spec.rb +17 -0
  84. data/spec/unit/example_unit_spec.rb +18 -1
  85. data/spec/unit/feature_file_unit_spec.rb +2 -2
  86. data/spec/unit/feature_unit_spec.rb +16 -0
  87. data/spec/unit/outline_unit_spec.rb +20 -1
  88. data/spec/unit/row_unit_spec.rb +18 -0
  89. data/spec/unit/scenario_unit_spec.rb +17 -0
  90. data/spec/unit/step_unit_spec.rb +17 -0
  91. data/spec/unit/table_row_unit_spec.rb +18 -0
  92. data/spec/unit/table_unit_spec.rb +16 -0
  93. data/spec/unit/tag_unit_spec.rb +17 -0
  94. metadata +147 -60
  95. data/features/step_definitions/spec_steps.rb +0 -18
@@ -0,0 +1,100 @@
1
+ @gherkin3
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,207 @@
1
+ @gherkin3
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
+ |value|
14
+ """
15
+ When it is outputted
16
+ Then the following text is provided:
17
+ """
18
+ Examples:
19
+ | param |
20
+ | value |
21
+ """
22
+
23
+ Scenario: Output of an example that does have a name
24
+ Given an example element based on the following gherkin:
25
+ """
26
+ Examples: with a name
27
+ |param|
28
+ |value|
29
+ """
30
+ When it is outputted
31
+ Then the following text is provided:
32
+ """
33
+ Examples: with a name
34
+ | param |
35
+ | value |
36
+ """
37
+
38
+ Scenario: Output of an example that does not have tags
39
+ Given an example element based on the following gherkin:
40
+ """
41
+ Examples:
42
+ |param|
43
+ |value|
44
+ """
45
+ When it is outputted
46
+ Then the following text is provided:
47
+ """
48
+ Examples:
49
+ | param |
50
+ | value |
51
+ """
52
+
53
+ Scenario: Output of an example that does have tags
54
+ Given an example element based on the following gherkin:
55
+ """
56
+ @tag1@tag2
57
+ @tag3
58
+ Examples:
59
+ |param|
60
+ |value|
61
+ """
62
+ When it is outputted
63
+ Then the following text is provided:
64
+ """
65
+ @tag1 @tag2 @tag3
66
+ Examples:
67
+ | param |
68
+ | value |
69
+ """
70
+
71
+ Scenario: Output of an example that has a description, no first line buffer
72
+ Given an example element based on the following gherkin:
73
+ """
74
+ Examples:
75
+ Some description.
76
+ Some more description.
77
+ |param|
78
+ |value|
79
+ """
80
+ When it is outputted
81
+ Then the following text is provided:
82
+ """
83
+ Examples:
84
+
85
+ Some description.
86
+ Some more description.
87
+
88
+ | param |
89
+ | value |
90
+ """
91
+
92
+ Scenario: Output of an example that has a description, first line is blank
93
+ Given an example element based on the following gherkin:
94
+ """
95
+ Examples:
96
+
97
+ Some description.
98
+ Some more description.
99
+ |param|
100
+ |value|
101
+ """
102
+ When it is outputted
103
+ Then the following text is provided:
104
+ """
105
+ Examples:
106
+
107
+ Some description.
108
+ Some more description.
109
+
110
+ | param |
111
+ | value |
112
+ """
113
+
114
+ Scenario: Output of an example that has a description, first line is only whitespace
115
+ Given an example element based on the following gherkin:
116
+ """
117
+ Examples:
118
+
119
+ Some description.
120
+ Some more description.
121
+ |param|
122
+ |value|
123
+ """
124
+ When it is outputted
125
+ Then the following text is provided:
126
+ """
127
+ Examples:
128
+
129
+ Some description.
130
+ Some more description.
131
+
132
+ | param |
133
+ | value |
134
+ """
135
+
136
+ Scenario: Output of an example that has one rows
137
+ Given an example element based on the following gherkin:
138
+ """
139
+ Examples:
140
+ |param1|param2|
141
+ |value1|value2|
142
+ """
143
+ When it is outputted
144
+ Then the following text is provided:
145
+ """
146
+ Examples:
147
+ | param1 | param2 |
148
+ | value1 | value2 |
149
+ """
150
+
151
+ Scenario: Output of an example that has multiple rows
152
+ Given an example element based on the following gherkin:
153
+ """
154
+ Examples:
155
+ |param1|param2|
156
+ |value1|value2|
157
+ |value3|value4|
158
+ """
159
+ When it is outputted
160
+ Then the following text is provided:
161
+ """
162
+ Examples:
163
+ | param1 | param2 |
164
+ | value1 | value2 |
165
+ | value3 | value4 |
166
+ """
167
+
168
+ Scenario: Output of an example that contains all possible parts
169
+ Given an example element based on the following gherkin:
170
+ """
171
+ @tag1@tag2
172
+ @tag3
173
+ Examples: with a name
174
+ Some description.
175
+ Some more description.
176
+ |param1|param2|
177
+ |value1|value2|
178
+ |value3|value4|
179
+ """
180
+ When it is outputted
181
+ Then the following text is provided:
182
+ """
183
+ @tag1 @tag2 @tag3
184
+ Examples: with a name
185
+
186
+ Some description.
187
+ Some more description.
188
+
189
+ | param1 | param2 |
190
+ | value1 | value2 |
191
+ | value3 | value4 |
192
+ """
193
+
194
+ Scenario: Whitespace buffers are based on the longest value or parameter in a column
195
+ Given an example element based on the following gherkin:
196
+ """
197
+ Examples:
198
+ |parameter_name|x|
199
+ |y|value_name|
200
+ """
201
+ When it is outputted
202
+ Then the following text is provided:
203
+ """
204
+ Examples:
205
+ | parameter_name | x |
206
+ | y | value_name |
207
+ """
@@ -0,0 +1,54 @@
1
+ @gherkin3
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
+ @gherkin3
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,155 @@
1
+ @gherkin3
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
+ | param |
64
+ | value |
65
+ """
66
+ And the following feature file "as_empty_as_it_gets.feature":
67
+ """
68
+ Feature:
69
+ """
70
+ When the file "much_stuff.feature" is read
71
+ And the file "barely_any_stuff.feature" is read
72
+ And the file "as_empty_as_it_gets.feature" is read
73
+
74
+
75
+ Scenario: The raw feature element is modeled.
76
+ Then the feature correctly stores its underlying implementation
77
+
78
+ Scenario: The feature's properties are modeled.
79
+ Then feature "1" is found to have the following properties:
80
+ | name | The test feature name. |
81
+ | test_count | 3 |
82
+ | test_case_count | 5 |
83
+ | source_line | 3 |
84
+ And feature "2" is found to have the following properties:
85
+ | name | |
86
+ | test_count | 2 |
87
+ | test_case_count | 2 |
88
+ | source_line | 1 |
89
+
90
+ And feature "3" is found to have the following properties:
91
+ | name | |
92
+ | test_count | 0 |
93
+ | test_case_count | 0 |
94
+ | source_line | 1 |
95
+
96
+ Scenario: The feature's description is modeled.
97
+ Then feature "1" has the following description:
98
+ """
99
+ Some feature description.
100
+
101
+ Some more.
102
+ And some more.
103
+ """
104
+ And feature "2" has no description
105
+ And feature "3" has no description
106
+
107
+ Scenario: The feature's tags are modeled.
108
+ Then feature "1" is found to have the following tags:
109
+ | @a_feature_level_tag |
110
+ | @and_another |
111
+ And feature "2" has no tags
112
+ And feature "3" has no tags
113
+
114
+ Scenario: The feature's scenarios are modeled.
115
+ Then feature "1" is found to have the following properties:
116
+ | scenario_count | 2 |
117
+ And feature "1" scenarios are as follows:
118
+ | The first scenario's name. |
119
+ | The second scenario's name. |
120
+ And feature "2" is found to have the following properties:
121
+ | scenario_count | 1 |
122
+ And feature "2" scenarios are as follows:
123
+ | |
124
+ And feature "3" is found to have the following properties:
125
+ | scenario_count | 0 |
126
+ And feature "3" has no scenarios
127
+
128
+ Scenario: The feature's outlines are modeled.
129
+ Then feature "1" is found to have the following properties:
130
+ | outline_count | 1 |
131
+ And feature "1" outlines are as follows:
132
+ | The scenario outline's name. |
133
+ And feature "2" is found to have the following properties:
134
+ | outline_count | 1 |
135
+ And feature "2" outlines are as follows:
136
+ | |
137
+ And feature "3" is found to have the following properties:
138
+ | outline_count | 0 |
139
+ And feature "3" has no outlines
140
+
141
+ Scenario: The feature's background is modeled.
142
+ Then feature "1" is found to have the following properties:
143
+ | has_background? | true |
144
+ And feature "1" background is as follows:
145
+ | Some general test setup stuff. |
146
+ And feature "2" is found to have the following properties:
147
+ | has_background? | true |
148
+ And feature "2" background is as follows:
149
+ | |
150
+ And feature "3" is found to have the following properties:
151
+ | has_background? | false |
152
+ And feature "3" has no background
153
+
154
+ Scenario: Convenient output of a feature
155
+ Then the feature has convenient output