gherkin 2.12.2 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (333) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -15
  3. data/CONTRIBUTING.md +23 -0
  4. data/Gemfile +0 -3
  5. data/LICENSE +18 -17
  6. data/Makefile +65 -0
  7. data/README.md +9 -268
  8. data/Rakefile +17 -19
  9. data/bin/gherkin-generate-ast +21 -0
  10. data/bin/gherkin-generate-pickles +25 -0
  11. data/bin/gherkin-generate-tokens +12 -0
  12. data/gherkin-ruby.razor +218 -0
  13. data/gherkin.gemspec +22 -76
  14. data/lib/gherkin/ast_builder.rb +243 -0
  15. data/lib/gherkin/ast_node.rb +30 -0
  16. data/lib/gherkin/dialect.rb +58 -0
  17. data/lib/gherkin/errors.rb +45 -0
  18. data/lib/gherkin/gherkin-languages.json +2968 -0
  19. data/lib/gherkin/gherkin_line.rb +95 -0
  20. data/lib/gherkin/parser.rb +1910 -0
  21. data/lib/gherkin/pickles/compiler.rb +164 -0
  22. data/lib/gherkin/token.rb +18 -0
  23. data/lib/gherkin/token_formatter_builder.rb +39 -0
  24. data/lib/gherkin/token_matcher.rb +169 -0
  25. data/lib/gherkin/token_scanner.rb +40 -0
  26. data/spec/capture_warnings.rb +68 -0
  27. data/spec/coverage.rb +10 -0
  28. data/spec/gherkin/parser_spec.rb +146 -0
  29. metadata +60 -567
  30. data/.gitattributes +0 -2
  31. data/.mailmap +0 -2
  32. data/.rbenv-gemsets +0 -1
  33. data/.rspec +0 -1
  34. data/.ruby-gemset +0 -1
  35. data/.ruby-version +0 -1
  36. data/.yardopts +0 -5
  37. data/History.md +0 -881
  38. data/build_native_gems.sh +0 -7
  39. data/cucumber.yml +0 -5
  40. data/examples/parse_and_output_json.rb +0 -19
  41. data/ext/gherkin_lexer_ar/extconf.rb +0 -6
  42. data/ext/gherkin_lexer_ar/gherkin_lexer_ar.c +0 -1432
  43. data/ext/gherkin_lexer_bg/extconf.rb +0 -6
  44. data/ext/gherkin_lexer_bg/gherkin_lexer_bg.c +0 -1655
  45. data/ext/gherkin_lexer_bm/extconf.rb +0 -6
  46. data/ext/gherkin_lexer_bm/gherkin_lexer_bm.c +0 -1516
  47. data/ext/gherkin_lexer_ca/extconf.rb +0 -6
  48. data/ext/gherkin_lexer_ca/gherkin_lexer_ca.c +0 -1581
  49. data/ext/gherkin_lexer_cs/extconf.rb +0 -6
  50. data/ext/gherkin_lexer_cs/gherkin_lexer_cs.c +0 -1515
  51. data/ext/gherkin_lexer_cy_gb/extconf.rb +0 -6
  52. data/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c +0 -1282
  53. data/ext/gherkin_lexer_da/extconf.rb +0 -6
  54. data/ext/gherkin_lexer_da/gherkin_lexer_da.c +0 -1298
  55. data/ext/gherkin_lexer_de/extconf.rb +0 -6
  56. data/ext/gherkin_lexer_de/gherkin_lexer_de.c +0 -1425
  57. data/ext/gherkin_lexer_el/extconf.rb +0 -6
  58. data/ext/gherkin_lexer_el/gherkin_lexer_el.c +0 -1919
  59. data/ext/gherkin_lexer_en/extconf.rb +0 -6
  60. data/ext/gherkin_lexer_en/gherkin_lexer_en.c +0 -1418
  61. data/ext/gherkin_lexer_en_au/extconf.rb +0 -6
  62. data/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c +0 -1765
  63. data/ext/gherkin_lexer_en_lol/extconf.rb +0 -6
  64. data/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c +0 -1177
  65. data/ext/gherkin_lexer_en_old/extconf.rb +0 -6
  66. data/ext/gherkin_lexer_en_old/gherkin_lexer_en_old.c +0 -1309
  67. data/ext/gherkin_lexer_en_pirate/extconf.rb +0 -6
  68. data/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c +0 -1471
  69. data/ext/gherkin_lexer_en_scouse/extconf.rb +0 -6
  70. data/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c +0 -1634
  71. data/ext/gherkin_lexer_en_tx/extconf.rb +0 -6
  72. data/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c +0 -1265
  73. data/ext/gherkin_lexer_eo/extconf.rb +0 -6
  74. data/ext/gherkin_lexer_eo/gherkin_lexer_eo.c +0 -1241
  75. data/ext/gherkin_lexer_es/extconf.rb +0 -6
  76. data/ext/gherkin_lexer_es/gherkin_lexer_es.c +0 -1399
  77. data/ext/gherkin_lexer_et/extconf.rb +0 -6
  78. data/ext/gherkin_lexer_et/gherkin_lexer_et.c +0 -1236
  79. data/ext/gherkin_lexer_fa/extconf.rb +0 -6
  80. data/ext/gherkin_lexer_fa/gherkin_lexer_fa.c +0 -1475
  81. data/ext/gherkin_lexer_fi/extconf.rb +0 -6
  82. data/ext/gherkin_lexer_fi/gherkin_lexer_fi.c +0 -1215
  83. data/ext/gherkin_lexer_fr/extconf.rb +0 -6
  84. data/ext/gherkin_lexer_fr/gherkin_lexer_fr.c +0 -1493
  85. data/ext/gherkin_lexer_gl/extconf.rb +0 -6
  86. data/ext/gherkin_lexer_gl/gherkin_lexer_gl.c +0 -1374
  87. data/ext/gherkin_lexer_he/extconf.rb +0 -6
  88. data/ext/gherkin_lexer_he/gherkin_lexer_he.c +0 -1374
  89. data/ext/gherkin_lexer_hi/extconf.rb +0 -6
  90. data/ext/gherkin_lexer_hi/gherkin_lexer_hi.c +0 -1848
  91. data/ext/gherkin_lexer_hr/extconf.rb +0 -6
  92. data/ext/gherkin_lexer_hr/gherkin_lexer_hr.c +0 -1323
  93. data/ext/gherkin_lexer_hu/extconf.rb +0 -6
  94. data/ext/gherkin_lexer_hu/gherkin_lexer_hu.c +0 -1376
  95. data/ext/gherkin_lexer_id/extconf.rb +0 -6
  96. data/ext/gherkin_lexer_id/gherkin_lexer_id.c +0 -1208
  97. data/ext/gherkin_lexer_is/extconf.rb +0 -6
  98. data/ext/gherkin_lexer_is/gherkin_lexer_is.c +0 -1376
  99. data/ext/gherkin_lexer_it/extconf.rb +0 -6
  100. data/ext/gherkin_lexer_it/gherkin_lexer_it.c +0 -1340
  101. data/ext/gherkin_lexer_ja/extconf.rb +0 -6
  102. data/ext/gherkin_lexer_ja/gherkin_lexer_ja.c +0 -1699
  103. data/ext/gherkin_lexer_kn/extconf.rb +0 -6
  104. data/ext/gherkin_lexer_kn/gherkin_lexer_kn.c +0 -1965
  105. data/ext/gherkin_lexer_ko/extconf.rb +0 -6
  106. data/ext/gherkin_lexer_ko/gherkin_lexer_ko.c +0 -1360
  107. data/ext/gherkin_lexer_lt/extconf.rb +0 -6
  108. data/ext/gherkin_lexer_lt/gherkin_lexer_lt.c +0 -1296
  109. data/ext/gherkin_lexer_lu/extconf.rb +0 -6
  110. data/ext/gherkin_lexer_lu/gherkin_lexer_lu.c +0 -1389
  111. data/ext/gherkin_lexer_lv/extconf.rb +0 -6
  112. data/ext/gherkin_lexer_lv/gherkin_lexer_lv.c +0 -1425
  113. data/ext/gherkin_lexer_nl/extconf.rb +0 -6
  114. data/ext/gherkin_lexer_nl/gherkin_lexer_nl.c +0 -1368
  115. data/ext/gherkin_lexer_no/extconf.rb +0 -6
  116. data/ext/gherkin_lexer_no/gherkin_lexer_no.c +0 -1311
  117. data/ext/gherkin_lexer_pa/extconf.rb +0 -6
  118. data/ext/gherkin_lexer_pa/gherkin_lexer_pa.c +0 -2160
  119. data/ext/gherkin_lexer_pl/extconf.rb +0 -6
  120. data/ext/gherkin_lexer_pl/gherkin_lexer_pl.c +0 -1738
  121. data/ext/gherkin_lexer_pt/extconf.rb +0 -6
  122. data/ext/gherkin_lexer_pt/gherkin_lexer_pt.c +0 -1711
  123. data/ext/gherkin_lexer_ro/extconf.rb +0 -6
  124. data/ext/gherkin_lexer_ro/gherkin_lexer_ro.c +0 -1427
  125. data/ext/gherkin_lexer_ru/extconf.rb +0 -6
  126. data/ext/gherkin_lexer_ru/gherkin_lexer_ru.c +0 -2071
  127. data/ext/gherkin_lexer_sk/extconf.rb +0 -6
  128. data/ext/gherkin_lexer_sk/gherkin_lexer_sk.c +0 -1739
  129. data/ext/gherkin_lexer_sr_cyrl/extconf.rb +0 -6
  130. data/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c +0 -2112
  131. data/ext/gherkin_lexer_sr_latn/extconf.rb +0 -6
  132. data/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c +0 -1567
  133. data/ext/gherkin_lexer_sv/extconf.rb +0 -6
  134. data/ext/gherkin_lexer_sv/gherkin_lexer_sv.c +0 -1324
  135. data/ext/gherkin_lexer_th/extconf.rb +0 -6
  136. data/ext/gherkin_lexer_th/gherkin_lexer_th.c +0 -2840
  137. data/ext/gherkin_lexer_tl/extconf.rb +0 -6
  138. data/ext/gherkin_lexer_tl/gherkin_lexer_tl.c +0 -2021
  139. data/ext/gherkin_lexer_tr/extconf.rb +0 -6
  140. data/ext/gherkin_lexer_tr/gherkin_lexer_tr.c +0 -1347
  141. data/ext/gherkin_lexer_tt/extconf.rb +0 -6
  142. data/ext/gherkin_lexer_tt/gherkin_lexer_tt.c +0 -1936
  143. data/ext/gherkin_lexer_uk/extconf.rb +0 -6
  144. data/ext/gherkin_lexer_uk/gherkin_lexer_uk.c +0 -1941
  145. data/ext/gherkin_lexer_uz/extconf.rb +0 -6
  146. data/ext/gherkin_lexer_uz/gherkin_lexer_uz.c +0 -1651
  147. data/ext/gherkin_lexer_vi/extconf.rb +0 -6
  148. data/ext/gherkin_lexer_vi/gherkin_lexer_vi.c +0 -1458
  149. data/ext/gherkin_lexer_zh_cn/extconf.rb +0 -6
  150. data/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c +0 -1314
  151. data/ext/gherkin_lexer_zh_tw/extconf.rb +0 -6
  152. data/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c +0 -1307
  153. data/features/.cucumber/stepdefs.json +0 -244
  154. data/features/escaped_pipes.feature +0 -8
  155. data/features/feature_parser.feature +0 -237
  156. data/features/json_formatter.feature +0 -498
  157. data/features/json_parser.feature +0 -331
  158. data/features/native_lexer.feature +0 -19
  159. data/features/parser_with_native_lexer.feature +0 -205
  160. data/features/pretty_formatter.feature +0 -17
  161. data/features/step_definitions/eyeball_steps.rb +0 -3
  162. data/features/step_definitions/gherkin_steps.rb +0 -29
  163. data/features/step_definitions/json_formatter_steps.rb +0 -30
  164. data/features/step_definitions/json_parser_steps.rb +0 -21
  165. data/features/step_definitions/pretty_formatter_steps.rb +0 -85
  166. data/features/steps_parser.feature +0 -46
  167. data/features/support/env.rb +0 -41
  168. data/install_mingw_os_x.sh +0 -5
  169. data/js/.npmignore +0 -1
  170. data/js/lib/gherkin/lexer/.npmignore +0 -0
  171. data/lib/gherkin.rb +0 -2
  172. data/lib/gherkin/README.md +0 -7
  173. data/lib/gherkin/c_lexer.rb +0 -17
  174. data/lib/gherkin/formatter/ansi_escapes.rb +0 -97
  175. data/lib/gherkin/formatter/argument.rb +0 -16
  176. data/lib/gherkin/formatter/escaping.rb +0 -15
  177. data/lib/gherkin/formatter/filter_formatter.rb +0 -150
  178. data/lib/gherkin/formatter/hashable.rb +0 -25
  179. data/lib/gherkin/formatter/json_formatter.rb +0 -133
  180. data/lib/gherkin/formatter/line_filter.rb +0 -26
  181. data/lib/gherkin/formatter/model.rb +0 -281
  182. data/lib/gherkin/formatter/pretty_formatter.rb +0 -245
  183. data/lib/gherkin/formatter/regexp_filter.rb +0 -21
  184. data/lib/gherkin/formatter/step_printer.rb +0 -21
  185. data/lib/gherkin/formatter/tag_count_formatter.rb +0 -47
  186. data/lib/gherkin/formatter/tag_filter.rb +0 -19
  187. data/lib/gherkin/i18n.json +0 -786
  188. data/lib/gherkin/i18n.rb +0 -176
  189. data/lib/gherkin/json_parser.rb +0 -177
  190. data/lib/gherkin/lexer/ar.rb +0 -1170
  191. data/lib/gherkin/lexer/bg.rb +0 -1382
  192. data/lib/gherkin/lexer/bm.rb +0 -1250
  193. data/lib/gherkin/lexer/ca.rb +0 -1310
  194. data/lib/gherkin/lexer/cs.rb +0 -1246
  195. data/lib/gherkin/lexer/cy_gb.rb +0 -1032
  196. data/lib/gherkin/lexer/da.rb +0 -1048
  197. data/lib/gherkin/lexer/de.rb +0 -1166
  198. data/lib/gherkin/lexer/el.rb +0 -1628
  199. data/lib/gherkin/lexer/en.rb +0 -1156
  200. data/lib/gherkin/lexer/en_au.rb +0 -1486
  201. data/lib/gherkin/lexer/en_lol.rb +0 -934
  202. data/lib/gherkin/lexer/en_old.rb +0 -1037
  203. data/lib/gherkin/lexer/en_pirate.rb +0 -1210
  204. data/lib/gherkin/lexer/en_scouse.rb +0 -1362
  205. data/lib/gherkin/lexer/en_tx.rb +0 -1016
  206. data/lib/gherkin/lexer/encoding.rb +0 -41
  207. data/lib/gherkin/lexer/eo.rb +0 -995
  208. data/lib/gherkin/lexer/es.rb +0 -1140
  209. data/lib/gherkin/lexer/et.rb +0 -990
  210. data/lib/gherkin/lexer/fa.rb +0 -1214
  211. data/lib/gherkin/lexer/fi.rb +0 -969
  212. data/lib/gherkin/lexer/fr.rb +0 -1228
  213. data/lib/gherkin/lexer/gl.rb +0 -1117
  214. data/lib/gherkin/lexer/he.rb +0 -1118
  215. data/lib/gherkin/lexer/hi.rb +0 -1559
  216. data/lib/gherkin/lexer/hr.rb +0 -1066
  217. data/lib/gherkin/lexer/hu.rb +0 -1118
  218. data/lib/gherkin/lexer/i18n_lexer.rb +0 -48
  219. data/lib/gherkin/lexer/id.rb +0 -963
  220. data/lib/gherkin/lexer/is.rb +0 -1120
  221. data/lib/gherkin/lexer/it.rb +0 -1086
  222. data/lib/gherkin/lexer/ja.rb +0 -1418
  223. data/lib/gherkin/lexer/kn.rb +0 -1672
  224. data/lib/gherkin/lexer/ko.rb +0 -1102
  225. data/lib/gherkin/lexer/lt.rb +0 -1045
  226. data/lib/gherkin/lexer/lu.rb +0 -1132
  227. data/lib/gherkin/lexer/lv.rb +0 -1166
  228. data/lib/gherkin/lexer/nl.rb +0 -1115
  229. data/lib/gherkin/lexer/no.rb +0 -1060
  230. data/lib/gherkin/lexer/pa.rb +0 -1852
  231. data/lib/gherkin/lexer/pl.rb +0 -1457
  232. data/lib/gherkin/lexer/pt.rb +0 -1430
  233. data/lib/gherkin/lexer/ro.rb +0 -1164
  234. data/lib/gherkin/lexer/ru.rb +0 -1766
  235. data/lib/gherkin/lexer/sk.rb +0 -1452
  236. data/lib/gherkin/lexer/sr_cyrl.rb +0 -1803
  237. data/lib/gherkin/lexer/sr_latn.rb +0 -1294
  238. data/lib/gherkin/lexer/sv.rb +0 -1070
  239. data/lib/gherkin/lexer/th.rb +0 -2492
  240. data/lib/gherkin/lexer/tl.rb +0 -1726
  241. data/lib/gherkin/lexer/tr.rb +0 -1092
  242. data/lib/gherkin/lexer/tt.rb +0 -1643
  243. data/lib/gherkin/lexer/uk.rb +0 -1646
  244. data/lib/gherkin/lexer/uz.rb +0 -1376
  245. data/lib/gherkin/lexer/vi.rb +0 -1198
  246. data/lib/gherkin/lexer/zh_cn.rb +0 -1058
  247. data/lib/gherkin/lexer/zh_tw.rb +0 -1052
  248. data/lib/gherkin/listener/event.rb +0 -45
  249. data/lib/gherkin/listener/formatter_listener.rb +0 -150
  250. data/lib/gherkin/native.rb +0 -7
  251. data/lib/gherkin/native/java.rb +0 -72
  252. data/lib/gherkin/native/null.rb +0 -5
  253. data/lib/gherkin/native/therubyracer.rb +0 -41
  254. data/lib/gherkin/parser/meta.txt +0 -5
  255. data/lib/gherkin/parser/parser.rb +0 -166
  256. data/lib/gherkin/parser/root.txt +0 -11
  257. data/lib/gherkin/parser/steps.txt +0 -4
  258. data/lib/gherkin/platform.rb +0 -13
  259. data/lib/gherkin/rubify.rb +0 -31
  260. data/lib/gherkin/tag_expression.rb +0 -63
  261. data/ragel/lexer.c.rl.erb +0 -454
  262. data/ragel/lexer.java.rl.erb +0 -219
  263. data/ragel/lexer.js.rl.erb +0 -322
  264. data/ragel/lexer.rb.rl.erb +0 -179
  265. data/ragel/lexer_common.rl.erb +0 -50
  266. data/spec/gherkin/c_lexer_spec.rb +0 -22
  267. data/spec/gherkin/fixtures/1.feature +0 -8
  268. data/spec/gherkin/fixtures/comments_in_table.feature +0 -9
  269. data/spec/gherkin/fixtures/complex.feature +0 -45
  270. data/spec/gherkin/fixtures/complex.json +0 -139
  271. data/spec/gherkin/fixtures/complex_for_filtering.feature +0 -60
  272. data/spec/gherkin/fixtures/complex_with_tags.feature +0 -61
  273. data/spec/gherkin/fixtures/dos_line_endings.feature +0 -45
  274. data/spec/gherkin/fixtures/examples_with_only_header.feature +0 -14
  275. data/spec/gherkin/fixtures/hantu_pisang.feature +0 -35
  276. data/spec/gherkin/fixtures/i18n_fr.feature +0 -14
  277. data/spec/gherkin/fixtures/i18n_fr2.feature +0 -8
  278. data/spec/gherkin/fixtures/i18n_no.feature +0 -7
  279. data/spec/gherkin/fixtures/i18n_pt1.feature +0 -44
  280. data/spec/gherkin/fixtures/i18n_pt2.feature +0 -4
  281. data/spec/gherkin/fixtures/i18n_pt3.feature +0 -4
  282. data/spec/gherkin/fixtures/i18n_pt4.feature +0 -4
  283. data/spec/gherkin/fixtures/i18n_zh-CN.feature +0 -9
  284. data/spec/gherkin/fixtures/iso-8859-1.feature +0 -6
  285. data/spec/gherkin/fixtures/issue_145.feature +0 -22
  286. data/spec/gherkin/fixtures/scenario_outline_with_tags.feature +0 -13
  287. data/spec/gherkin/fixtures/scenario_without_steps.feature +0 -5
  288. data/spec/gherkin/fixtures/simple_with_comments.feature +0 -7
  289. data/spec/gherkin/fixtures/simple_with_tags.feature +0 -11
  290. data/spec/gherkin/fixtures/with_bom.feature +0 -3
  291. data/spec/gherkin/fixtures/with_bom_and_language_spec.feature +0 -4
  292. data/spec/gherkin/formatter/ansi_escapes_spec.rb +0 -32
  293. data/spec/gherkin/formatter/filter_formatter_spec.rb +0 -204
  294. data/spec/gherkin/formatter/json_formatter_spec.rb +0 -179
  295. data/spec/gherkin/formatter/model_spec.rb +0 -28
  296. data/spec/gherkin/formatter/pretty_formatter_spec.rb +0 -184
  297. data/spec/gherkin/formatter/spaces.feature +0 -9
  298. data/spec/gherkin/formatter/step_printer_spec.rb +0 -55
  299. data/spec/gherkin/formatter/tabs.feature +0 -9
  300. data/spec/gherkin/formatter/tag_count_formatter_spec.rb +0 -30
  301. data/spec/gherkin/i18n_spec.rb +0 -256
  302. data/spec/gherkin/java_lexer_spec.rb +0 -20
  303. data/spec/gherkin/json_parser_spec.rb +0 -165
  304. data/spec/gherkin/lexer/i18n_lexer_spec.rb +0 -65
  305. data/spec/gherkin/native_lexer_spec.rb +0 -29
  306. data/spec/gherkin/parser/parser_spec.rb +0 -16
  307. data/spec/gherkin/rubify_spec.rb +0 -23
  308. data/spec/gherkin/sexp_recorder.rb +0 -59
  309. data/spec/gherkin/shared/doc_string_group.rb +0 -161
  310. data/spec/gherkin/shared/encoding_group.rb +0 -48
  311. data/spec/gherkin/shared/lexer_group.rb +0 -589
  312. data/spec/gherkin/shared/row_group.rb +0 -123
  313. data/spec/gherkin/shared/tags_group.rb +0 -52
  314. data/spec/gherkin/tag_expression_spec.rb +0 -146
  315. data/spec/spec_helper.rb +0 -94
  316. data/tasks/apidoc.rake +0 -32
  317. data/tasks/bench.rake +0 -184
  318. data/tasks/bench/feature_builder.rb +0 -49
  319. data/tasks/bench/null_listener.rb +0 -4
  320. data/tasks/compile.rake +0 -83
  321. data/tasks/cucumber.rake +0 -23
  322. data/tasks/gems.rake +0 -46
  323. data/tasks/ikvm.rake +0 -126
  324. data/tasks/ragel_task.rb +0 -124
  325. data/tasks/release.rake +0 -34
  326. data/tasks/rspec.rake +0 -6
  327. data/tasks/yard/default/layout/html/bubble_32x32.png +0 -0
  328. data/tasks/yard/default/layout/html/bubble_48x48.png +0 -0
  329. data/tasks/yard/default/layout/html/footer.erb +0 -5
  330. data/tasks/yard/default/layout/html/index.erb +0 -1
  331. data/tasks/yard/default/layout/html/layout.erb +0 -25
  332. data/tasks/yard/default/layout/html/logo.erb +0 -1
  333. data/tasks/yard/default/layout/html/setup.rb +0 -4
@@ -1,331 +0,0 @@
1
- Feature: JSON lexer
2
- In order to support greater access to features
3
- we want JSON
4
-
5
- Background:
6
- Given a PrettyFormatter
7
- And a JSON lexer
8
-
9
- Scenario: Only a Feature
10
- Given the following JSON is parsed:
11
- """
12
- [
13
- {
14
- "comments": [
15
- {"value": "# language: no"},
16
- {"value": "# Another comment"}
17
- ],
18
- "description": "",
19
- "keyword": "Egenskap",
20
- "id": "kjapp",
21
- "name": "Kjapp",
22
- "tags": [],
23
- "uri": "test.feature"
24
- }
25
- ]
26
- """
27
- Then the outputted text should be:
28
- """
29
- # language: no
30
- # Another comment
31
- Egenskap: Kjapp
32
- """
33
-
34
- Scenario: Feature with scenarios and outlines
35
- Given the following JSON is parsed:
36
- """
37
- [
38
- {
39
- "comments": [],
40
- "keyword": "Feature",
41
- "id": "oh-hai",
42
- "name": "OH HAI",
43
- "tags": [{"name": "@one"}],
44
- "uri": "test.feature",
45
- "description": "",
46
- "elements":[
47
- {
48
- "comments": [],
49
- "tags": [],
50
- "keyword": "Scenario",
51
- "id": "oh-hai/fujin",
52
- "name": "Fujin",
53
- "description": "",
54
- "type": "scenario",
55
- "line": 4,
56
- "steps": [
57
- {
58
- "comments": [],
59
- "keyword": "Given ",
60
- "name": "wind",
61
- "line": 5
62
- },
63
- {
64
- "comments": [],
65
- "keyword": "Then ",
66
- "name": "spirit",
67
- "line": 6
68
- }
69
- ]
70
- },
71
- {
72
- "comments": [],
73
- "tags": [{"name": "@two"}],
74
- "keyword": "Scenario",
75
- "id": "oh-hai/_why",
76
- "name": "_why",
77
- "description": "",
78
- "type": "scenario",
79
- "line": 9,
80
- "steps": [
81
- {
82
- "comments": [],
83
- "keyword": "Given ",
84
- "name": "chunky",
85
- "line": 10
86
- },
87
- {
88
- "comments": [],
89
- "keyword": "Then ",
90
- "name": "bacon",
91
- "line": 11
92
- }
93
- ]
94
- },
95
- {
96
- "comments": [],
97
- "tags": [{"name": "@three"}, {"name": "@four"}],
98
- "keyword": "Scenario Outline",
99
- "id": "oh-hai/life",
100
- "name": "Life",
101
- "description": "",
102
- "type": "scenario_outline",
103
- "line": 14,
104
- "steps": [
105
- {
106
- "comments": [],
107
- "keyword": "Given ",
108
- "name": "some <boredom>",
109
- "line": 15
110
- }
111
- ],
112
- "examples": [
113
- {
114
- "type": "examples",
115
- "comments": [],
116
- "tags": [{"name": "@five"}],
117
- "keyword": "Examples",
118
- "id": "oh-hai/life/real-life",
119
- "name": "Real life",
120
- "description": "",
121
- "line": 18,
122
- "rows": [
123
- {
124
- "comments": [],
125
- "cells": ["boredom"],
126
- "line": 19
127
- },
128
- {
129
- "comments": [],
130
- "cells": ["airport"],
131
- "line": 20
132
- },
133
- {
134
- "comments": [],
135
- "cells": ["meeting"],
136
- "line": 21
137
- }
138
- ]
139
- }
140
- ]
141
- },
142
- {
143
- "comments": [],
144
- "tags": [],
145
- "keyword": "Scenario",
146
- "id": "oh-hai/who-stole-my-mojo?",
147
- "name": "who stole my mojo?",
148
- "description": "",
149
- "type": "scenario",
150
- "line": 23,
151
- "steps": [
152
- {
153
- "comments": [],
154
- "keyword": "When ",
155
- "name": "I was",
156
- "line": 24,
157
- "rows": [
158
- {
159
- "comments": [],
160
- "line": 25,
161
- "cells": ["asleep"]
162
- }
163
- ]
164
- },
165
- {
166
- "comments": [],
167
- "keyword": "And ",
168
- "name": "so",
169
- "line": 26,
170
- "doc_string": {
171
- "value": "innocent",
172
- "line": 27
173
- }
174
- }
175
- ]
176
- },
177
- {
178
- "comments": [{"value": "# The"}],
179
- "tags": [],
180
- "keyword": "Scenario Outline",
181
- "description": "",
182
- "type": "scenario_outline",
183
- "line": 32,
184
- "id": "oh-hai/with",
185
- "name": "with",
186
- "steps": [
187
- {
188
- "comments": [{"value": "# all"}],
189
- "keyword": "Then ",
190
- "line": 34,
191
- "name": "nice"
192
- }
193
- ],
194
- "examples": [
195
- {
196
- "type": "examples",
197
- "comments": [{"value": "# comments"}, {"value": "# everywhere"}],
198
- "tags": [],
199
- "keyword": "Examples",
200
- "id": "oh-hai/with/an-example",
201
- "name": "An example",
202
- "description": "",
203
- "line": 38,
204
- "rows": [
205
- {
206
- "comments": [{"value": "# I mean"}],
207
- "line": 40,
208
- "cells": ["partout"]
209
- },
210
- {
211
- "comments": [{"value": "# I really mean"}],
212
- "line": 40,
213
- "cells": ["bartout"]
214
- }
215
- ]
216
- }
217
- ]
218
- }
219
- ]
220
- }
221
- ]
222
- """
223
- Then the outputted text should be:
224
- """
225
- @one
226
- Feature: OH HAI
227
-
228
- Scenario: Fujin
229
- Given wind
230
- Then spirit
231
-
232
- @two
233
- Scenario: _why
234
- Given chunky
235
- Then bacon
236
-
237
- @three @four
238
- Scenario Outline: Life
239
- Given some <boredom>
240
-
241
- @five
242
- Examples: Real life
243
- | boredom |
244
- | airport |
245
- | meeting |
246
-
247
- Scenario: who stole my mojo?
248
- When I was
249
- | asleep |
250
- And so
251
- \"\"\"
252
- innocent
253
- \"\"\"
254
-
255
- # The
256
- Scenario Outline: with
257
- # all
258
- Then nice
259
-
260
- # comments
261
- # everywhere
262
- Examples: An example
263
- # I mean
264
- | partout |
265
- # I really mean
266
- | bartout |
267
- """
268
-
269
- Scenario: Feature with Background
270
- Given the following JSON is parsed:
271
- """
272
- [
273
- {
274
- "comments": [],
275
- "description": "",
276
- "keyword": "Feature",
277
- "id": "kjapp",
278
- "name": "Kjapp",
279
- "tags": [],
280
- "uri": "test.feature",
281
- "elements": [
282
- {
283
- "type": "background",
284
- "comments": [],
285
- "description": "",
286
- "keyword": "Background",
287
- "line": 2,
288
- "name": "No idea what Kjapp means",
289
- "steps": [
290
- {
291
- "comments": [],
292
- "keyword": "Given ",
293
- "line": 3,
294
- "name": "I Google it"
295
- }
296
- ]
297
- },
298
- {
299
- "type": "scenario",
300
- "comments": [{"value": "# Writing JSON by hand sucks"}],
301
- "tags": [],
302
- "keyword": "Scenario",
303
- "id": "kjapp/",
304
- "name": "",
305
- "description": "",
306
- "line": 6,
307
- "steps": [
308
- {
309
- "comments": [],
310
- "keyword": "Then ",
311
- "name": "I think it means \"fast\"",
312
- "line": 7
313
- }
314
- ]
315
- }
316
- ]
317
- }
318
- ]
319
- """
320
- Then the outputted text should be:
321
- """
322
- Feature: Kjapp
323
-
324
- Background: No idea what Kjapp means
325
- Given I Google it
326
-
327
- # Writing JSON by hand sucks
328
- Scenario:
329
- Then I think it means "fast"
330
- """
331
-
@@ -1,19 +0,0 @@
1
- Feature: Native (C/Java) Lexer
2
-
3
- Background:
4
- Given a "native" "root" parser
5
-
6
- Scenario: Parsing an empty feature
7
- Given the following text is parsed:
8
- """
9
- Feature: blah
10
- """
11
- Then there should be no parse errors
12
-
13
- Scenario: Parsing a comment
14
- Given the following text is parsed:
15
- """
16
- # A comment
17
- Feature: Hello
18
- """
19
- Then there should be no parse errors
@@ -1,205 +0,0 @@
1
- Feature: Gherkin Feature lexer/parser
2
- In order to make it easy to control the Gherkin syntax
3
- As a Gherkin developer bent on Gherkin world-domination
4
- I want a feature lexer that uses a feature parser to
5
- make all the syntax decisions for me
6
-
7
- Background:
8
- Given a "native" "root" parser
9
-
10
- Scenario: Correctly formed feature
11
- When the following text is parsed:
12
- """
13
- # Apologies to Bill Watterson
14
- @cardboard_box @wip
15
- Feature: Transmogrification
16
- As a young boy with a hyperactive imagination
17
- I want a cardboard box
18
- In order to transform the ennui of suburban life into something
19
- befitting my imagination
20
-
21
- Background:
22
- Given I have a transmogrifier
23
- And I am a member of G.R.O.S.S
24
-
25
- Scenario: Whoozit to whatzit transmogrification
26
- Given I have a whoozit
27
- When I put it in the transmogrifier
28
- And I press the "transmogrify" button
29
- Then I should have a whatzit
30
-
31
- Scenario Outline: Imaginary Beings
32
- Given I have a <boring being>
33
- When I transmogrify it with the incantation:
34
- \"\"\"
35
- ALAKAZAM!
36
- \"\"\"
37
- Then I should have an <exciting being>
38
-
39
- Examples:
40
- | boring being | exciting being |
41
- | Sparrow | Alicanto |
42
- | Goldfish | Baldanders |
43
- | Cow | Hsiao |
44
-
45
- Scenario: Sense of humor detection
46
- Given the following excerpt:
47
- \"\"\"
48
- WOMAN: Who are the Britons?
49
- ARTHUR: Well, we all are. we're all Britons and I am your king.
50
- WOMAN: I didn't know we had a king. I thought we were an autonomous
51
- collective.
52
- DENNIS: You're fooling yourself. We're living in a dictatorship.
53
- A self-perpetuating autocracy in which the working classes--
54
- WOMAN: Oh there you go, bringing class into it again.
55
- DENNIS: That's what it's all about if only people would--
56
- ARTHUR: Please, please good people. I am in haste. Who lives
57
- in that castle?
58
- \"\"\"
59
- When I read it
60
- Then I should be amused
61
- """
62
- Then there should be no parse errors
63
-
64
- Scenario: Keyword before feature
65
- When the following text is parsed:
66
- """
67
- Scenario: Bullying my way to the head of the line
68
- Given I am a big bully of a scenario
69
- Then I should be caught by the syntax police(y)
70
-
71
- Feature: Too timid to stand up for myself
72
- """
73
- Then there should be parse errors on lines 1 through 3
74
-
75
- Scenario: Tag ends background and scenario
76
- When the following text is parsed:
77
- """
78
- Feature: test feature
79
- Background:
80
- Given a something
81
- @tag
82
- And something else
83
-
84
- @foo
85
- Scenario: my scenario
86
- @tag
87
- Given this is a step
88
- @oh_hai
89
- And this is a horrible idea
90
- Then it shouldn't work
91
- """
92
- Then there should be parse errors on lines 5, 10 and 12
93
-
94
- Scenario: Tables
95
- When the following text is parsed:
96
- """
97
- Feature: Antiques Roadshow
98
- Scenario Outline: Table
99
- Given a <foo>
100
- Then a <bar>
101
-
102
- Examples:
103
- | foo | bar |
104
- | 42 | towel |
105
- @hello
106
- | 1 | prime |
107
-
108
- Scenario: Table arguments
109
- Given this step needs this table:
110
- | foo | bar |
111
- | one | two |
112
- @tag
113
- | aaa | bbb |
114
- """
115
- Then there should be parse errors on lines 10 and 17
116
-
117
- Scenario: Multiline keyword descriptions
118
- When the following text is parsed:
119
- """
120
- Feature: Documentation is fun
121
- Scenario Outline: With lots of docs
122
- We need lots of embedded documentation for some reason
123
- \"\"\" # Not interpreted as a docstring, just plain text
124
- Oh hai
125
- \"\"\"
126
-
127
- La la la
128
-
129
- Examples:
130
- | one | two |
131
- | foo | bar |
132
-
133
- \"\"\"
134
- Oh Hello
135
- \"\"\"
136
-
137
- # Body of the scenario outline starts below
138
- Given <something>
139
- And something <else>
140
-
141
- # The real examples table
142
- Examples:
143
- | something | else |
144
- | orange | apple |
145
- """
146
- Then there should be no parse errors
147
-
148
- Scenario: Scenario Outline with multiple Example groups
149
- When the following text is parsed:
150
- """
151
- Feature: Outline Sample
152
-
153
- Scenario: I have no steps
154
-
155
- Scenario Outline: Test state
156
- Given <state> without a table
157
- Given <other_state> without a table
158
-
159
- Examples: Rainbow colours
160
- | state | other_state |
161
- | missing | passing |
162
- | passing | passing |
163
- | failing | passing |
164
-
165
- Examples: Only passing
166
- | state | other_state |
167
- | passing | passing |
168
- """
169
- Then there should be no parse errors
170
-
171
- Scenario: Multiple Scenario Outlines with multiline outline steps
172
- When the following text is parsed:
173
- """
174
- Feature: Test
175
- Scenario Outline: with step tables
176
- Given I have the following fruits in my pantry
177
- | name | quantity |
178
- | cucumbers | 10 |
179
- | strawberrys | 5 |
180
- | apricots | 7 |
181
-
182
- When I eat <number> <fruits> from the pantry
183
- Then I should have <left> <fruits> in the pantry
184
-
185
- Examples:
186
- | number | fruits | left |
187
- | 2 | cucumbers | 8 |
188
- | 4 | strawberrys | 1 |
189
- | 2 | apricots | 5 |
190
-
191
- Scenario Outline: placeholder in a multiline string
192
- Given my shopping list
193
- \"\"\"
194
- Must buy some <fruits>
195
- \"\"\"
196
- Then my shopping list should equal
197
- \"\"\"
198
- Must buy some cucumbers
199
- \"\"\"
200
-
201
- Examples:
202
- | fruits |
203
- | cucumbers |
204
- """
205
- Then there should be no parse errors