bryanl-gherkin 2.11.1.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. data/.gitattributes +2 -0
  2. data/.mailmap +2 -0
  3. data/.rbenv-gemsets +1 -0
  4. data/.rspec +1 -0
  5. data/.rvmrc +1 -0
  6. data/.travis.yml +16 -0
  7. data/.yardopts +5 -0
  8. data/Gemfile +5 -0
  9. data/History.md +788 -0
  10. data/LICENSE +20 -0
  11. data/README.md +272 -0
  12. data/Rakefile +26 -0
  13. data/build_native_gems.sh +7 -0
  14. data/cucumber.yml +4 -0
  15. data/examples/parse_and_output_json.rb +19 -0
  16. data/features/.cucumber/stepdefs.json +244 -0
  17. data/features/escaped_pipes.feature +8 -0
  18. data/features/feature_parser.feature +237 -0
  19. data/features/json_formatter.feature +498 -0
  20. data/features/json_parser.feature +331 -0
  21. data/features/native_lexer.feature +19 -0
  22. data/features/parser_with_native_lexer.feature +205 -0
  23. data/features/pretty_formatter.feature +16 -0
  24. data/features/step_definitions/eyeball_steps.rb +3 -0
  25. data/features/step_definitions/gherkin_steps.rb +29 -0
  26. data/features/step_definitions/json_formatter_steps.rb +30 -0
  27. data/features/step_definitions/json_parser_steps.rb +20 -0
  28. data/features/step_definitions/pretty_formatter_steps.rb +85 -0
  29. data/features/steps_parser.feature +46 -0
  30. data/features/support/env.rb +42 -0
  31. data/gherkin.gemspec +77 -0
  32. data/install_mingw_os_x.sh +7 -0
  33. data/js/.npmignore +1 -0
  34. data/js/lib/gherkin/lexer/.npmignore +0 -0
  35. data/lib/gherkin/c_lexer.rb +17 -0
  36. data/lib/gherkin/formatter/ansi_escapes.rb +97 -0
  37. data/lib/gherkin/formatter/argument.rb +16 -0
  38. data/lib/gherkin/formatter/escaping.rb +15 -0
  39. data/lib/gherkin/formatter/filter_formatter.rb +146 -0
  40. data/lib/gherkin/formatter/hashable.rb +19 -0
  41. data/lib/gherkin/formatter/json_formatter.rb +122 -0
  42. data/lib/gherkin/formatter/line_filter.rb +26 -0
  43. data/lib/gherkin/formatter/model.rb +281 -0
  44. data/lib/gherkin/formatter/pretty_formatter.rb +244 -0
  45. data/lib/gherkin/formatter/regexp_filter.rb +21 -0
  46. data/lib/gherkin/formatter/step_printer.rb +21 -0
  47. data/lib/gherkin/formatter/tag_count_formatter.rb +47 -0
  48. data/lib/gherkin/formatter/tag_filter.rb +19 -0
  49. data/lib/gherkin/i18n.rb +180 -0
  50. data/lib/gherkin/i18n.yml +613 -0
  51. data/lib/gherkin/js_lexer.rb +20 -0
  52. data/lib/gherkin/json_parser.rb +177 -0
  53. data/lib/gherkin/lexer/i18n_lexer.rb +46 -0
  54. data/lib/gherkin/listener/event.rb +45 -0
  55. data/lib/gherkin/listener/formatter_listener.rb +143 -0
  56. data/lib/gherkin/native/java.rb +72 -0
  57. data/lib/gherkin/native/null.rb +5 -0
  58. data/lib/gherkin/native/therubyracer.rb +39 -0
  59. data/lib/gherkin/native.rb +7 -0
  60. data/lib/gherkin/parser/meta.txt +5 -0
  61. data/lib/gherkin/parser/parser.rb +164 -0
  62. data/lib/gherkin/parser/root.txt +11 -0
  63. data/lib/gherkin/parser/steps.txt +4 -0
  64. data/lib/gherkin/rb_lexer/README.rdoc +8 -0
  65. data/lib/gherkin/rb_lexer.rb +8 -0
  66. data/lib/gherkin/rubify.rb +24 -0
  67. data/lib/gherkin/tag_expression.rb +62 -0
  68. data/lib/gherkin.jar +0 -0
  69. data/lib/gherkin.rb +2 -0
  70. data/ragel/lexer.c.rl.erb +454 -0
  71. data/ragel/lexer.java.rl.erb +219 -0
  72. data/ragel/lexer.js.rl.erb +227 -0
  73. data/ragel/lexer.rb.rl.erb +174 -0
  74. data/ragel/lexer_common.rl.erb +50 -0
  75. data/spec/gherkin/c_lexer_spec.rb +22 -0
  76. data/spec/gherkin/fixtures/1.feature +8 -0
  77. data/spec/gherkin/fixtures/comments_in_table.feature +9 -0
  78. data/spec/gherkin/fixtures/complex.feature +45 -0
  79. data/spec/gherkin/fixtures/complex.json +139 -0
  80. data/spec/gherkin/fixtures/complex_for_filtering.feature +60 -0
  81. data/spec/gherkin/fixtures/complex_with_tags.feature +61 -0
  82. data/spec/gherkin/fixtures/dos_line_endings.feature +45 -0
  83. data/spec/gherkin/fixtures/examples_with_only_header.feature +14 -0
  84. data/spec/gherkin/fixtures/hantu_pisang.feature +35 -0
  85. data/spec/gherkin/fixtures/i18n_fr.feature +14 -0
  86. data/spec/gherkin/fixtures/i18n_fr2.feature +8 -0
  87. data/spec/gherkin/fixtures/i18n_no.feature +7 -0
  88. data/spec/gherkin/fixtures/i18n_pt1.feature +44 -0
  89. data/spec/gherkin/fixtures/i18n_pt2.feature +4 -0
  90. data/spec/gherkin/fixtures/i18n_pt3.feature +4 -0
  91. data/spec/gherkin/fixtures/i18n_pt4.feature +4 -0
  92. data/spec/gherkin/fixtures/i18n_zh-CN.feature +9 -0
  93. data/spec/gherkin/fixtures/issue_145.feature +22 -0
  94. data/spec/gherkin/fixtures/scenario_outline_with_tags.feature +13 -0
  95. data/spec/gherkin/fixtures/scenario_without_steps.feature +5 -0
  96. data/spec/gherkin/fixtures/simple_with_comments.feature +7 -0
  97. data/spec/gherkin/fixtures/simple_with_tags.feature +11 -0
  98. data/spec/gherkin/fixtures/with_bom.feature +3 -0
  99. data/spec/gherkin/formatter/ansi_escapes_spec.rb +32 -0
  100. data/spec/gherkin/formatter/filter_formatter_spec.rb +204 -0
  101. data/spec/gherkin/formatter/json_formatter_spec.rb +92 -0
  102. data/spec/gherkin/formatter/model_spec.rb +28 -0
  103. data/spec/gherkin/formatter/pretty_formatter_spec.rb +177 -0
  104. data/spec/gherkin/formatter/spaces.feature +9 -0
  105. data/spec/gherkin/formatter/step_printer_spec.rb +55 -0
  106. data/spec/gherkin/formatter/tabs.feature +9 -0
  107. data/spec/gherkin/formatter/tag_count_formatter_spec.rb +30 -0
  108. data/spec/gherkin/i18n_spec.rb +241 -0
  109. data/spec/gherkin/java_lexer_spec.rb +20 -0
  110. data/spec/gherkin/js_lexer_spec.rb +23 -0
  111. data/spec/gherkin/json_parser_spec.rb +176 -0
  112. data/spec/gherkin/lexer/i18n_lexer_spec.rb +43 -0
  113. data/spec/gherkin/output_stream_string_io.rb +20 -0
  114. data/spec/gherkin/parser/parser_spec.rb +16 -0
  115. data/spec/gherkin/rb_lexer_spec.rb +20 -0
  116. data/spec/gherkin/sexp_recorder.rb +59 -0
  117. data/spec/gherkin/shared/bom_group.rb +20 -0
  118. data/spec/gherkin/shared/doc_string_group.rb +163 -0
  119. data/spec/gherkin/shared/lexer_group.rb +591 -0
  120. data/spec/gherkin/shared/row_group.rb +125 -0
  121. data/spec/gherkin/shared/tags_group.rb +54 -0
  122. data/spec/gherkin/tag_expression_spec.rb +142 -0
  123. data/spec/spec_helper.rb +75 -0
  124. data/tasks/bench/feature_builder.rb +49 -0
  125. data/tasks/bench/null_listener.rb +4 -0
  126. data/tasks/bench.rake +184 -0
  127. data/tasks/compile.rake +120 -0
  128. data/tasks/cucumber.rake +22 -0
  129. data/tasks/gems.rake +31 -0
  130. data/tasks/ikvm.rake +124 -0
  131. data/tasks/ragel_task.rb +100 -0
  132. data/tasks/release.rake +49 -0
  133. data/tasks/rspec.rake +8 -0
  134. data/tasks/yard/default/layout/html/bubble_32x32.png +0 -0
  135. data/tasks/yard/default/layout/html/bubble_48x48.png +0 -0
  136. data/tasks/yard/default/layout/html/footer.erb +5 -0
  137. data/tasks/yard/default/layout/html/index.erb +1 -0
  138. data/tasks/yard/default/layout/html/layout.erb +25 -0
  139. data/tasks/yard/default/layout/html/logo.erb +1 -0
  140. data/tasks/yard/default/layout/html/setup.rb +4 -0
  141. data/tasks/yard.rake +7 -0
  142. metadata +412 -0
@@ -0,0 +1,498 @@
1
+ Feature: JSON formatter
2
+ In order to support greater access to features
3
+ we want JSON
4
+
5
+ Background:
6
+ Given a JSON formatter
7
+ And a "ruby" "root" parser
8
+
9
+ Scenario: Only a Feature
10
+ Given the following text is parsed:
11
+ """
12
+ # language: no
13
+ # Another comment
14
+ Egenskap: Kjapp
15
+ """
16
+ And the following text is parsed:
17
+ """
18
+ # language: no
19
+ # Yet another comment
20
+ Egenskap: Kjappere
21
+ """
22
+ Then the outputted JSON should be:
23
+ """
24
+ [
25
+ {
26
+ "comments": [
27
+ {
28
+ "line": 1,
29
+ "value": "# language: no"
30
+ },
31
+ {
32
+ "line": 2,
33
+ "value": "# Another comment"
34
+ }
35
+ ],
36
+ "description": "",
37
+ "keyword": "Egenskap",
38
+ "line": 3,
39
+ "name": "Kjapp",
40
+ "uri": "test.feature",
41
+ "id": "kjapp"
42
+ },
43
+ {
44
+ "comments": [
45
+ {
46
+ "line": 1,
47
+ "value": "# language: no"
48
+ },
49
+ {
50
+ "line": 2,
51
+ "value": "# Yet another comment"
52
+ }
53
+ ],
54
+ "description": "",
55
+ "keyword": "Egenskap",
56
+ "line": 3,
57
+ "name": "Kjappere",
58
+ "uri": "test.feature",
59
+ "id": "kjappere"
60
+ }
61
+ ]
62
+ """
63
+
64
+ Scenario: Feature with scenarios and outlines
65
+ Given the following text is parsed:
66
+ """
67
+ @one
68
+ Feature: OH HAI
69
+
70
+ Scenario: Fujin
71
+ Given wind
72
+ Then spirit
73
+
74
+ @two
75
+ Scenario: _why
76
+ Given chunky
77
+ Then bacon
78
+
79
+ @three @four
80
+ Scenario Outline: Life
81
+ Given some <boredom>
82
+
83
+ @five
84
+ Examples: Real life
85
+ |boredom|
86
+ |airport|
87
+ |meeting|
88
+
89
+ Scenario: who stole my mojo?
90
+ When I was
91
+ |asleep|
92
+ And so
93
+ \"\"\"plaintext
94
+ innocent
95
+ \"\"\"
96
+
97
+ # The
98
+ Scenario Outline: with
99
+ # all
100
+ Then nice
101
+
102
+ # comments
103
+ # everywhere
104
+ Examples: An example
105
+ # I mean
106
+ | partout |
107
+ """
108
+ Then the outputted JSON should be:
109
+ """
110
+ [
111
+ {
112
+ "uri": "test.feature",
113
+ "description": "",
114
+ "elements": [
115
+ {
116
+ "description": "",
117
+ "keyword": "Scenario",
118
+ "line": 4,
119
+ "id": "oh-hai;fujin",
120
+ "name": "Fujin",
121
+ "steps": [
122
+ {
123
+ "keyword": "Given ",
124
+ "line": 5,
125
+ "name": "wind"
126
+ },
127
+ {
128
+ "keyword": "Then ",
129
+ "line": 6,
130
+ "name": "spirit"
131
+ }
132
+ ],
133
+ "type": "scenario"
134
+ },
135
+ {
136
+ "description": "",
137
+ "keyword": "Scenario",
138
+ "line": 9,
139
+ "id": "oh-hai;-why",
140
+ "name": "_why",
141
+ "steps": [
142
+ {
143
+ "keyword": "Given ",
144
+ "line": 10,
145
+ "name": "chunky"
146
+ },
147
+ {
148
+ "keyword": "Then ",
149
+ "line": 11,
150
+ "name": "bacon"
151
+ }
152
+ ],
153
+ "tags": [
154
+ {
155
+ "line": 8,
156
+ "name": "@two"
157
+ }
158
+ ],
159
+ "type": "scenario"
160
+ },
161
+ {
162
+ "description": "",
163
+ "examples": [
164
+ {
165
+ "description": "",
166
+ "keyword": "Examples",
167
+ "line": 18,
168
+ "id": "oh-hai;life;real-life",
169
+ "name": "Real life",
170
+ "rows": [
171
+ {
172
+ "id": "oh-hai;life;real-life;1",
173
+ "cells": [
174
+ "boredom"
175
+ ],
176
+ "line": 19
177
+ },
178
+ {
179
+ "id": "oh-hai;life;real-life;2",
180
+ "cells": [
181
+ "airport"
182
+ ],
183
+ "line": 20
184
+ },
185
+ {
186
+ "id": "oh-hai;life;real-life;3",
187
+ "cells": [
188
+ "meeting"
189
+ ],
190
+ "line": 21
191
+ }
192
+ ],
193
+ "tags": [
194
+ {
195
+ "line": 17,
196
+ "name": "@five"
197
+ }
198
+ ]
199
+ }
200
+ ],
201
+ "keyword": "Scenario Outline",
202
+ "line": 14,
203
+ "id": "oh-hai;life",
204
+ "name": "Life",
205
+ "steps": [
206
+ {
207
+ "keyword": "Given ",
208
+ "line": 15,
209
+ "name": "some <boredom>"
210
+ }
211
+ ],
212
+ "tags": [
213
+ {
214
+ "line": 13,
215
+ "name": "@three"
216
+ },
217
+ {
218
+ "line": 13,
219
+ "name": "@four"
220
+ }
221
+ ],
222
+ "type": "scenario_outline"
223
+ },
224
+ {
225
+ "description": "",
226
+ "keyword": "Scenario",
227
+ "line": 23,
228
+ "id": "oh-hai;who-stole-my-mojo?",
229
+ "name": "who stole my mojo?",
230
+ "steps": [
231
+ {
232
+ "keyword": "When ",
233
+ "line": 24,
234
+ "name": "I was",
235
+ "rows": [
236
+ {
237
+ "cells": [
238
+ "asleep"
239
+ ],
240
+ "line": 25
241
+ }
242
+ ]
243
+ },
244
+ {
245
+ "doc_string": {
246
+ "content_type": "plaintext",
247
+ "line": 27,
248
+ "value": "innocent"
249
+ },
250
+ "keyword": "And ",
251
+ "line": 26,
252
+ "name": "so"
253
+ }
254
+ ],
255
+ "type": "scenario"
256
+ },
257
+ {
258
+ "comments": [
259
+ {
260
+ "line": 31,
261
+ "value": "# The"
262
+ }
263
+ ],
264
+ "description": "",
265
+ "examples": [
266
+ {
267
+ "comments": [
268
+ {
269
+ "line": 36,
270
+ "value": "# comments"
271
+ },
272
+ {
273
+ "line": 37,
274
+ "value": "# everywhere"
275
+ }
276
+ ],
277
+ "description": "",
278
+ "keyword": "Examples",
279
+ "line": 38,
280
+ "id": "oh-hai;with;an-example",
281
+ "name": "An example",
282
+ "rows": [
283
+ {
284
+ "id": "oh-hai;with;an-example;1",
285
+ "cells": [
286
+ "partout"
287
+ ],
288
+ "comments": [
289
+ {
290
+ "line": 39,
291
+ "value": "# I mean"
292
+ }
293
+ ],
294
+ "line": 40
295
+ }
296
+ ]
297
+ }
298
+ ],
299
+ "keyword": "Scenario Outline",
300
+ "line": 32,
301
+ "id": "oh-hai;with",
302
+ "name": "with",
303
+ "steps": [
304
+ {
305
+ "comments": [
306
+ {
307
+ "line": 33,
308
+ "value": "# all"
309
+ }
310
+ ],
311
+ "keyword": "Then ",
312
+ "line": 34,
313
+ "name": "nice"
314
+ }
315
+ ],
316
+ "type": "scenario_outline"
317
+ }
318
+ ],
319
+ "keyword": "Feature",
320
+ "line": 2,
321
+ "id": "oh-hai",
322
+ "name": "OH HAI",
323
+ "tags": [
324
+ {
325
+ "line": 1,
326
+ "name": "@one"
327
+ }
328
+ ]
329
+ }
330
+ ]
331
+ """
332
+
333
+ Scenario: Feature with Background
334
+ Given the following text is parsed:
335
+ """
336
+ Feature: Kjapp
337
+
338
+ Background: No idea what Kjapp means
339
+ Given I Google it
340
+
341
+ # Writing JSON by hand sucks
342
+ Scenario:
343
+ Then I think it means "fast"
344
+ """
345
+ Then the outputted JSON should be:
346
+ """
347
+ [
348
+ {
349
+ "uri": "test.feature",
350
+ "keyword": "Feature",
351
+ "name": "Kjapp",
352
+ "id": "kjapp",
353
+ "description": "",
354
+ "line": 1,
355
+ "elements": [
356
+ {
357
+ "type": "background",
358
+ "keyword": "Background",
359
+ "line": 3,
360
+ "name": "No idea what Kjapp means",
361
+ "description": "",
362
+ "steps": [
363
+ {
364
+ "keyword": "Given ",
365
+ "line": 4,
366
+ "name": "I Google it"
367
+ }
368
+ ]
369
+ },
370
+ {
371
+ "type": "scenario",
372
+ "comments": [{"value": "# Writing JSON by hand sucks", "line": 6}],
373
+ "keyword": "Scenario",
374
+ "id": "kjapp;",
375
+ "name": "",
376
+ "description": "",
377
+ "line": 7,
378
+ "steps": [
379
+ {
380
+ "keyword": "Then ",
381
+ "name": "I think it means \"fast\"",
382
+ "line": 8
383
+ }
384
+ ]
385
+ }
386
+ ]
387
+ }
388
+ ]
389
+ """
390
+
391
+ Scenario: Feature with a description
392
+
393
+ We want people to be able to put markdown formatting into their descriptions
394
+ but this means we need to respect whitespace at the start and end of lines
395
+ in the description.
396
+
397
+ Pay close attention to the whitespace in this example.
398
+
399
+ Given the following text is parsed:
400
+ """
401
+ Feature: Foo
402
+ one line
403
+ another line
404
+
405
+ some pre-formatted stuff
406
+
407
+ Background: b name
408
+ test
409
+ test
410
+
411
+ Scenario: s name
412
+ test
413
+ test
414
+
415
+ Scenario Outline: s o name
416
+ test
417
+ test
418
+
419
+ Given <foo>
420
+
421
+ Examples: e name
422
+ test
423
+ test
424
+ | foo |
425
+ | table |
426
+ """
427
+ Then the outputted JSON should be:
428
+ """
429
+ [
430
+ {
431
+ "uri": "test.feature",
432
+ "keyword": "Feature",
433
+ "id": "foo",
434
+ "name": "Foo",
435
+ "description": "one line \nanother line \n\n some pre-formatted stuff",
436
+ "line": 1,
437
+ "elements": [
438
+ {
439
+ "description": " test \n test",
440
+ "keyword": "Background",
441
+ "line": 7,
442
+ "name": "b name",
443
+ "type": "background"
444
+ },
445
+ {
446
+ "description": " test \n test",
447
+ "keyword": "Scenario",
448
+ "line": 11,
449
+ "id": "foo;s-name",
450
+ "name": "s name",
451
+ "type": "scenario"
452
+ },
453
+ {
454
+ "description": " test \n test",
455
+ "examples": [
456
+ {
457
+ "description": " test \n test",
458
+ "keyword": "Examples",
459
+ "line": 21,
460
+ "id": "foo;s-o-name;e-name",
461
+ "name": "e name",
462
+ "rows": [
463
+ {
464
+ "id": "foo;s-o-name;e-name;1",
465
+ "cells": [
466
+ "foo"
467
+ ],
468
+ "line": 24
469
+ },
470
+ {
471
+ "id": "foo;s-o-name;e-name;2",
472
+ "cells": [
473
+ "table"
474
+ ],
475
+ "line": 25
476
+ }
477
+ ]
478
+ }
479
+ ],
480
+ "keyword": "Scenario Outline",
481
+ "line": 15,
482
+ "id": "foo;s-o-name",
483
+ "name": "s o name",
484
+ "steps": [
485
+ {
486
+ "keyword": "Given ",
487
+ "line": 19,
488
+ "name": "<foo>"
489
+ }
490
+ ],
491
+ "type": "scenario_outline"
492
+ }
493
+ ]
494
+ }
495
+ ]
496
+ """
497
+
498
+