dwaite-cucumber 0.3.101

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 (454) hide show
  1. data/History.txt +1067 -0
  2. data/License.txt +22 -0
  3. data/Manifest.txt +453 -0
  4. data/README.txt +4 -0
  5. data/Rakefile +9 -0
  6. data/bin/cucumber +17 -0
  7. data/config/hoe.rb +78 -0
  8. data/config/requirements.rb +15 -0
  9. data/cucumber.yml +2 -0
  10. data/examples/cs/README.textile +1 -0
  11. data/examples/cs/Rakefile +12 -0
  12. data/examples/cs/compile.bat +1 -0
  13. data/examples/cs/features/addition.feature +16 -0
  14. data/examples/cs/features/step_definitons/calculator_steps.rb +19 -0
  15. data/examples/cs/src/demo/Calculator.cs +20 -0
  16. data/examples/dos_line_endings/Rakefile +6 -0
  17. data/examples/dos_line_endings/features/dos_line_endings.feature +9 -0
  18. data/examples/i18n/README.textile +18 -0
  19. data/examples/i18n/Rakefile +32 -0
  20. data/examples/i18n/ar/Rakefile +6 -0
  21. data/examples/i18n/ar/features/addition.feature +17 -0
  22. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +24 -0
  23. data/examples/i18n/ar/lib/calculator.rb +11 -0
  24. data/examples/i18n/bg/Rakefile +6 -0
  25. data/examples/i18n/bg/features/addition.feature +12 -0
  26. data/examples/i18n/bg/features/consecutive_calculations.feature +19 -0
  27. data/examples/i18n/bg/features/division.feature +17 -0
  28. data/examples/i18n/bg/features/step_definitons/calculator_steps.rb +24 -0
  29. data/examples/i18n/bg/features/support/env.rb +6 -0
  30. data/examples/i18n/bg/features/support/world.rb +8 -0
  31. data/examples/i18n/bg/lib/calculator.rb +24 -0
  32. data/examples/i18n/cat/Rakefile +6 -0
  33. data/examples/i18n/cat/features/step_definitons/calculator_steps.rb +21 -0
  34. data/examples/i18n/cat/features/suma.feature +17 -0
  35. data/examples/i18n/cat/lib/calculadora.rb +16 -0
  36. data/examples/i18n/da/Rakefile +6 -0
  37. data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +24 -0
  38. data/examples/i18n/da/features/summering.feature +18 -0
  39. data/examples/i18n/da/lib/kalkulator.rb +11 -0
  40. data/examples/i18n/de/Rakefile +6 -0
  41. data/examples/i18n/de/features/addition.feature +17 -0
  42. data/examples/i18n/de/features/division.feature +10 -0
  43. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +24 -0
  44. data/examples/i18n/de/lib/calculator.rb +14 -0
  45. data/examples/i18n/en/Rakefile +6 -0
  46. data/examples/i18n/en/features/addition.feature +17 -0
  47. data/examples/i18n/en/features/division.feature +10 -0
  48. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +24 -0
  49. data/examples/i18n/en/lib/calculator.rb +14 -0
  50. data/examples/i18n/en-lol/Rakefile +6 -0
  51. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
  52. data/examples/i18n/en-lol/features/stuffing.feature +8 -0
  53. data/examples/i18n/en-lol/features/support/env.rb +8 -0
  54. data/examples/i18n/en-lol/lib/basket.rb +12 -0
  55. data/examples/i18n/en-lol/lib/belly.rb +11 -0
  56. data/examples/i18n/es/Rakefile +6 -0
  57. data/examples/i18n/es/features/adicion.feature +17 -0
  58. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +21 -0
  59. data/examples/i18n/es/lib/calculador.rb +14 -0
  60. data/examples/i18n/et/Rakefile +6 -0
  61. data/examples/i18n/et/features/jagamine.feature +10 -0
  62. data/examples/i18n/et/features/liitmine.feature +17 -0
  63. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +24 -0
  64. data/examples/i18n/et/lib/kalkulaator.rb +14 -0
  65. data/examples/i18n/fi/Rakefile +6 -0
  66. data/examples/i18n/fi/features/jakolasku.feature +10 -0
  67. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
  68. data/examples/i18n/fi/features/yhteenlasku.feature +17 -0
  69. data/examples/i18n/fi/lib/laskin.rb +14 -0
  70. data/examples/i18n/fr/Rakefile +6 -0
  71. data/examples/i18n/fr/features/addition.feature +18 -0
  72. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +25 -0
  73. data/examples/i18n/fr/lib/calculatrice.rb +10 -0
  74. data/examples/i18n/he/Rakefile +6 -0
  75. data/examples/i18n/he/features/addition.feature +17 -0
  76. data/examples/i18n/he/features/division.feature +10 -0
  77. data/examples/i18n/he/features/step_definitons/calculator_steps.rb +24 -0
  78. data/examples/i18n/he/lib/calculator.rb +14 -0
  79. data/examples/i18n/hu/Rakefile +6 -0
  80. data/examples/i18n/hu/features/addition.feature +17 -0
  81. data/examples/i18n/hu/features/division.feature +10 -0
  82. data/examples/i18n/hu/features/step_definitons/calculator_steps.rb +25 -0
  83. data/examples/i18n/hu/lib/calculator.rb +14 -0
  84. data/examples/i18n/id/Rakefile +6 -0
  85. data/examples/i18n/id/features/addition.feature +17 -0
  86. data/examples/i18n/id/features/division.feature +10 -0
  87. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +24 -0
  88. data/examples/i18n/id/lib/calculator.rb +14 -0
  89. data/examples/i18n/it/Rakefile +6 -0
  90. data/examples/i18n/it/features/somma.feature +11 -0
  91. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +24 -0
  92. data/examples/i18n/it/lib/calcolatrice.rb +11 -0
  93. data/examples/i18n/ja/Rakefile +6 -0
  94. data/examples/i18n/ja/features/addition.feature +17 -0
  95. data/examples/i18n/ja/features/division.feature +10 -0
  96. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +24 -0
  97. data/examples/i18n/ja/lib/calculator.rb +14 -0
  98. data/examples/i18n/ko/Rakefile +6 -0
  99. data/examples/i18n/ko/features/addition.feature +17 -0
  100. data/examples/i18n/ko/features/division.feature +11 -0
  101. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +24 -0
  102. data/examples/i18n/ko/lib/calculator.rb +14 -0
  103. data/examples/i18n/lt/Rakefile +6 -0
  104. data/examples/i18n/lt/features/addition.feature +17 -0
  105. data/examples/i18n/lt/features/division.feature +10 -0
  106. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +24 -0
  107. data/examples/i18n/lt/lib/calculator.rb +14 -0
  108. data/examples/i18n/lv/Rakefile +6 -0
  109. data/examples/i18n/lv/features/addition.feature +17 -0
  110. data/examples/i18n/lv/features/division.feature +10 -0
  111. data/examples/i18n/lv/features/step_definitons/calculator_steps.rb +24 -0
  112. data/examples/i18n/lv/lib/calculator.rb +14 -0
  113. data/examples/i18n/no/Rakefile +6 -0
  114. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +17 -0
  115. data/examples/i18n/no/features/summering.feature +19 -0
  116. data/examples/i18n/no/features/support/env.rb +6 -0
  117. data/examples/i18n/no/lib/kalkulator.rb +11 -0
  118. data/examples/i18n/pl/Rakefile +6 -0
  119. data/examples/i18n/pl/features/addition.feature +17 -0
  120. data/examples/i18n/pl/features/division.feature +10 -0
  121. data/examples/i18n/pl/features/step_definitons/calculator_steps.rb +24 -0
  122. data/examples/i18n/pl/features/support/env.rb +6 -0
  123. data/examples/i18n/pl/lib/calculator.rb +14 -0
  124. data/examples/i18n/pt/Rakefile +6 -0
  125. data/examples/i18n/pt/features/adicao.feature +11 -0
  126. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +20 -0
  127. data/examples/i18n/pt/features/support/env.rb +6 -0
  128. data/examples/i18n/pt/lib/calculadora.rb +10 -0
  129. data/examples/i18n/ro/Rakefile +6 -0
  130. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +24 -0
  131. data/examples/i18n/ro/features/suma.feature +11 -0
  132. data/examples/i18n/ro/lib/calculator.rb +11 -0
  133. data/examples/i18n/ru/Rakefile +6 -0
  134. data/examples/i18n/ru/features/addition.feature +11 -0
  135. data/examples/i18n/ru/features/consecutive_calculations.feature +17 -0
  136. data/examples/i18n/ru/features/division.feature +16 -0
  137. data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
  138. data/examples/i18n/ru/features/support/env.rb +6 -0
  139. data/examples/i18n/ru/features/support/world.rb +8 -0
  140. data/examples/i18n/ru/lib/calculator.rb +24 -0
  141. data/examples/i18n/se/Rakefile +6 -0
  142. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +24 -0
  143. data/examples/i18n/se/features/summering.feature +18 -0
  144. data/examples/i18n/se/lib/kalkulator.rb +11 -0
  145. data/examples/i18n/sk/Rakefile +6 -0
  146. data/examples/i18n/sk/features/addition.feature +17 -0
  147. data/examples/i18n/sk/features/division.feature +10 -0
  148. data/examples/i18n/sk/features/step_definitons/calculator_steps.rb +24 -0
  149. data/examples/i18n/sk/lib/calculator.rb +14 -0
  150. data/examples/i18n/uz/Rakefile +6 -0
  151. data/examples/i18n/uz/features/addition.feature +10 -0
  152. data/examples/i18n/uz/features/consecutive_calculations.feature +17 -0
  153. data/examples/i18n/uz/features/division.feature +17 -0
  154. data/examples/i18n/uz/features/step_definitons/calculator_steps.rb +19 -0
  155. data/examples/i18n/uz/features/support/env.rb +6 -0
  156. data/examples/i18n/uz/features/support/world.rb +8 -0
  157. data/examples/i18n/uz/lib/calculator.rb +24 -0
  158. data/examples/i18n/zh-CN/Rakefile +6 -0
  159. data/examples/i18n/zh-CN/features/addition.feature +18 -0
  160. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +26 -0
  161. data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
  162. data/examples/i18n/zh-TW/Rakefile +6 -0
  163. data/examples/i18n/zh-TW/features/addition.feature +17 -0
  164. data/examples/i18n/zh-TW/features/division.feature +11 -0
  165. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
  166. data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
  167. data/examples/java/README.textile +18 -0
  168. data/examples/java/build.xml +33 -0
  169. data/examples/java/features/hello.feature +11 -0
  170. data/examples/java/features/step_definitons/hello_steps.rb +23 -0
  171. data/examples/java/features/step_definitons/tree_steps.rb +14 -0
  172. data/examples/java/features/tree.feature +9 -0
  173. data/examples/java/src/cucumber/demo/Hello.java +16 -0
  174. data/examples/junit/features/one_passing_one_failing.feature +8 -0
  175. data/examples/junit/features/pending.feature +5 -0
  176. data/examples/junit/features/step_definitions/steps.rb +11 -0
  177. data/examples/pure_java/README.textile +5 -0
  178. data/examples/python/features/fibonacci.feature +19 -0
  179. data/examples/python/features/step_definitions/fib_steps.py +3 -0
  180. data/examples/python/features/step_definitions/fib_steps.rb +7 -0
  181. data/examples/python/features/support/env.rb +21 -0
  182. data/examples/python/lib/fib.py +7 -0
  183. data/examples/selenium/Rakefile +6 -0
  184. data/examples/selenium/features/search.feature +9 -0
  185. data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
  186. data/examples/selenium/features/support/env.rb +19 -0
  187. data/examples/selenium_webrat/Rakefile +6 -0
  188. data/examples/selenium_webrat/config.ru +0 -0
  189. data/examples/selenium_webrat/features/search.feature +9 -0
  190. data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
  191. data/examples/selenium_webrat/features/support/env.rb +45 -0
  192. data/examples/self_test/README.textile +6 -0
  193. data/examples/self_test/Rakefile +6 -0
  194. data/examples/self_test/features/background/background_tagged_before_on_outline.feature +12 -0
  195. data/examples/self_test/features/background/background_with_name.feature +7 -0
  196. data/examples/self_test/features/background/failing_background.feature +12 -0
  197. data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
  198. data/examples/self_test/features/background/multiline_args_background.feature +32 -0
  199. data/examples/self_test/features/background/passing_background.feature +10 -0
  200. data/examples/self_test/features/background/pending_background.feature +10 -0
  201. data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
  202. data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
  203. data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  204. data/examples/self_test/features/failing_expectation.feature +4 -0
  205. data/examples/self_test/features/lots_of_undefined.feature +8 -0
  206. data/examples/self_test/features/multiline_name.feature +27 -0
  207. data/examples/self_test/features/outline_sample.feature +15 -0
  208. data/examples/self_test/features/sample.feature +21 -0
  209. data/examples/self_test/features/search_sample.feature +32 -0
  210. data/examples/self_test/features/step_definitions/sample_steps.rb +93 -0
  211. data/examples/self_test/features/support/env.rb +24 -0
  212. data/examples/self_test/features/tags_sample.feature +17 -0
  213. data/examples/self_test/features/tons_of_cukes.feature +52 -0
  214. data/examples/self_test/features/transform_sample.feature +10 -0
  215. data/examples/self_test/features/undefined_multiline_args.feature +12 -0
  216. data/examples/self_test/list-of-features.txt +1 -0
  217. data/examples/sinatra/README.textile +13 -0
  218. data/examples/sinatra/Rakefile +6 -0
  219. data/examples/sinatra/app.rb +14 -0
  220. data/examples/sinatra/features/add.feature +11 -0
  221. data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
  222. data/examples/sinatra/features/support/env.rb +32 -0
  223. data/examples/sinatra/views/add.erb +5 -0
  224. data/examples/sinatra/views/layout.erb +8 -0
  225. data/examples/steps_library/features/step_definitions/steps_lib1.rb +8 -0
  226. data/examples/steps_library/features/step_definitions/steps_lib2.rb +8 -0
  227. data/examples/test_unit/Rakefile +6 -0
  228. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +23 -0
  229. data/examples/test_unit/features/test_unit.feature +9 -0
  230. data/examples/tickets/Rakefile +16 -0
  231. data/examples/tickets/features/172.feature +28 -0
  232. data/examples/tickets/features/177/1.feature +29 -0
  233. data/examples/tickets/features/177/2.feature +21 -0
  234. data/examples/tickets/features/177/3.feature +18 -0
  235. data/examples/tickets/features/180.feature +7 -0
  236. data/examples/tickets/features/229/tagged_hooks.feature +8 -0
  237. data/examples/tickets/features/229/tagged_hooks.rb +14 -0
  238. data/examples/tickets/features/236.feature +13 -0
  239. data/examples/tickets/features/241.feature +13 -0
  240. data/examples/tickets/features/246.feature +4 -0
  241. data/examples/tickets/features/248.feature +11 -0
  242. data/examples/tickets/features/270/back.feature +14 -0
  243. data/examples/tickets/features/270/back.steps.rb +14 -0
  244. data/examples/tickets/features/272/hooks.feature +26 -0
  245. data/examples/tickets/features/272/hooks_steps.rb +53 -0
  246. data/examples/tickets/features/279/py_string_indent.feature +25 -0
  247. data/examples/tickets/features/279/py_string_indent.steps.rb +12 -0
  248. data/examples/tickets/features/279/wrong.feature_ +11 -0
  249. data/examples/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
  250. data/examples/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
  251. data/examples/tickets/features/306/only_background.feature +4 -0
  252. data/examples/tickets/features/lib/eatting_machine.rb +18 -0
  253. data/examples/tickets/features/lib/pantry.rb +20 -0
  254. data/examples/tickets/features/scenario_outline.feature +95 -0
  255. data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
  256. data/examples/tickets/features/step_definitons/248_steps.rb +15 -0
  257. data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
  258. data/examples/tickets/features/step_definitons/tickets_steps.rb +81 -0
  259. data/examples/tickets/features/table_diffing.feature +13 -0
  260. data/examples/tickets/features/tickets.feature +28 -0
  261. data/examples/watir/README.textile +16 -0
  262. data/examples/watir/Rakefile +6 -0
  263. data/examples/watir/features/search.feature +12 -0
  264. data/examples/watir/features/step_definitons/search_steps.rb +26 -0
  265. data/examples/watir/features/support/env.rb +32 -0
  266. data/features/background.feature +311 -0
  267. data/features/bug_371.feature +32 -0
  268. data/features/cucumber_cli.feature +667 -0
  269. data/features/cucumber_cli_diff_disabled.feature +54 -0
  270. data/features/cucumber_cli_outlines.feature +109 -0
  271. data/features/custom_formatter.feature +11 -0
  272. data/features/drb_server_integration.feature +173 -0
  273. data/features/exception_in_after_block.feature +102 -0
  274. data/features/exception_in_after_step_block.feature +104 -0
  275. data/features/exception_in_before_block.feature +47 -0
  276. data/features/exclude_files.feature +20 -0
  277. data/features/expand.feature +49 -0
  278. data/features/html_formatter/a.html +183 -0
  279. data/features/html_formatter.feature +7 -0
  280. data/features/junit_formatter.feature +89 -0
  281. data/features/language_from_header.feature +30 -0
  282. data/features/multiline_names.feature +43 -0
  283. data/features/post_configuration_hook.feature +37 -0
  284. data/features/profiles.feature +112 -0
  285. data/features/rake_task.feature +178 -0
  286. data/features/report_called_undefined_steps.feature +35 -0
  287. data/features/snippet.feature +22 -0
  288. data/features/step_definitions/cucumber_steps.rb +154 -0
  289. data/features/step_definitions/extra_steps.rb +2 -0
  290. data/features/steps_formatter.feature +25 -0
  291. data/features/support/env.rb +139 -0
  292. data/features/table_diffing.feature +45 -0
  293. data/features/transform.feature +24 -0
  294. data/features/unicode_table.feature +35 -0
  295. data/features/usage.feature +132 -0
  296. data/features/work_in_progress.feature +158 -0
  297. data/gem_tasks/contributors.rake +12 -0
  298. data/gem_tasks/deployment.rake +11 -0
  299. data/gem_tasks/environment.rake +7 -0
  300. data/gem_tasks/features.rake +11 -0
  301. data/gem_tasks/fix_cr_lf.rake +10 -0
  302. data/gem_tasks/flog.rake +4 -0
  303. data/gem_tasks/gemspec.rake +10 -0
  304. data/gem_tasks/rspec.rake +45 -0
  305. data/gem_tasks/sass.rake +4 -0
  306. data/gem_tasks/sdoc.rake +7 -0
  307. data/lib/README.rdoc +12 -0
  308. data/lib/autotest/cucumber.rb +6 -0
  309. data/lib/autotest/cucumber_mixin.rb +125 -0
  310. data/lib/autotest/cucumber_rails.rb +6 -0
  311. data/lib/autotest/cucumber_rails_rspec.rb +6 -0
  312. data/lib/autotest/cucumber_rspec.rb +6 -0
  313. data/lib/autotest/discover.rb +9 -0
  314. data/lib/cucumber/ast/background.rb +63 -0
  315. data/lib/cucumber/ast/comment.rb +31 -0
  316. data/lib/cucumber/ast/examples.rb +32 -0
  317. data/lib/cucumber/ast/feature.rb +81 -0
  318. data/lib/cucumber/ast/feature_element.rb +61 -0
  319. data/lib/cucumber/ast/features.rb +40 -0
  320. data/lib/cucumber/ast/outline_table.rb +146 -0
  321. data/lib/cucumber/ast/py_string.rb +57 -0
  322. data/lib/cucumber/ast/scenario.rb +108 -0
  323. data/lib/cucumber/ast/scenario_outline.rb +96 -0
  324. data/lib/cucumber/ast/step.rb +116 -0
  325. data/lib/cucumber/ast/step_collection.rb +76 -0
  326. data/lib/cucumber/ast/step_invocation.rb +166 -0
  327. data/lib/cucumber/ast/table.rb +626 -0
  328. data/lib/cucumber/ast/tags.rb +44 -0
  329. data/lib/cucumber/ast/visitor.rb +115 -0
  330. data/lib/cucumber/ast.rb +29 -0
  331. data/lib/cucumber/broadcaster.rb +13 -0
  332. data/lib/cucumber/cli/configuration.rb +190 -0
  333. data/lib/cucumber/cli/drb_client.rb +26 -0
  334. data/lib/cucumber/cli/language_help_formatter.rb +61 -0
  335. data/lib/cucumber/cli/main.rb +116 -0
  336. data/lib/cucumber/cli/options.rb +394 -0
  337. data/lib/cucumber/cli/profile_loader.rb +70 -0
  338. data/lib/cucumber/constantize.rb +28 -0
  339. data/lib/cucumber/core_ext/instance_exec.rb +93 -0
  340. data/lib/cucumber/core_ext/proc.rb +29 -0
  341. data/lib/cucumber/core_ext/string.rb +48 -0
  342. data/lib/cucumber/feature_file.rb +54 -0
  343. data/lib/cucumber/filter.rb +52 -0
  344. data/lib/cucumber/formatter/ansicolor.rb +143 -0
  345. data/lib/cucumber/formatter/color_io.rb +23 -0
  346. data/lib/cucumber/formatter/console.rb +185 -0
  347. data/lib/cucumber/formatter/cucumber.css +132 -0
  348. data/lib/cucumber/formatter/cucumber.sass +139 -0
  349. data/lib/cucumber/formatter/duration.rb +13 -0
  350. data/lib/cucumber/formatter/html.rb +261 -0
  351. data/lib/cucumber/formatter/junit.rb +121 -0
  352. data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
  353. data/lib/cucumber/formatter/pdf.rb +217 -0
  354. data/lib/cucumber/formatter/pretty.rb +222 -0
  355. data/lib/cucumber/formatter/profile.rb +78 -0
  356. data/lib/cucumber/formatter/progress.rb +67 -0
  357. data/lib/cucumber/formatter/rerun.rb +46 -0
  358. data/lib/cucumber/formatter/steps.rb +50 -0
  359. data/lib/cucumber/formatter/tag_cloud.rb +29 -0
  360. data/lib/cucumber/formatter/unicode.rb +35 -0
  361. data/lib/cucumber/formatter/usage.rb +86 -0
  362. data/lib/cucumber/formatters/unicode.rb +7 -0
  363. data/lib/cucumber/language_support/language_methods.rb +75 -0
  364. data/lib/cucumber/language_support/step_definition_methods.rb +46 -0
  365. data/lib/cucumber/language_support.rb +30 -0
  366. data/lib/cucumber/languages.yml +561 -0
  367. data/lib/cucumber/parser/feature.rb +1838 -0
  368. data/lib/cucumber/parser/feature.tt +351 -0
  369. data/lib/cucumber/parser/i18n.tt +42 -0
  370. data/lib/cucumber/parser/natural_language.rb +72 -0
  371. data/lib/cucumber/parser/table.rb +417 -0
  372. data/lib/cucumber/parser/table.tt +71 -0
  373. data/lib/cucumber/parser/treetop_ext.rb +53 -0
  374. data/lib/cucumber/parser.rb +6 -0
  375. data/lib/cucumber/platform.rb +27 -0
  376. data/lib/cucumber/py_support/py_dsl.py +8 -0
  377. data/lib/cucumber/py_support/py_language.py +2 -0
  378. data/lib/cucumber/py_support/py_language.rb +68 -0
  379. data/lib/cucumber/rails/rspec.rb +10 -0
  380. data/lib/cucumber/rails/world.rb +100 -0
  381. data/lib/cucumber/rake/task.rb +241 -0
  382. data/lib/cucumber/rb_support/rb_dsl.rb +100 -0
  383. data/lib/cucumber/rb_support/rb_hook.rb +18 -0
  384. data/lib/cucumber/rb_support/rb_language.rb +153 -0
  385. data/lib/cucumber/rb_support/rb_step_definition.rb +60 -0
  386. data/lib/cucumber/rb_support/rb_world.rb +93 -0
  387. data/lib/cucumber/rspec_neuter.rb +23 -0
  388. data/lib/cucumber/step_match.rb +61 -0
  389. data/lib/cucumber/step_mother.rb +307 -0
  390. data/lib/cucumber/version.rb +10 -0
  391. data/lib/cucumber/webrat/element_locator.rb +87 -0
  392. data/lib/cucumber/webrat/table_locator.rb +1 -0
  393. data/lib/cucumber.rb +10 -0
  394. data/rails_generators/cucumber/USAGE +11 -0
  395. data/rails_generators/cucumber/cucumber_generator.rb +70 -0
  396. data/rails_generators/cucumber/templates/cucumber +9 -0
  397. data/rails_generators/cucumber/templates/cucumber.rake +36 -0
  398. data/rails_generators/cucumber/templates/cucumber_environment.rb +26 -0
  399. data/rails_generators/cucumber/templates/env.rb +27 -0
  400. data/rails_generators/cucumber/templates/paths.rb +27 -0
  401. data/rails_generators/cucumber/templates/spork_env.rb +35 -0
  402. data/rails_generators/cucumber/templates/webrat_steps.rb +236 -0
  403. data/rails_generators/feature/USAGE +12 -0
  404. data/rails_generators/feature/feature_generator.rb +40 -0
  405. data/rails_generators/feature/templates/feature.erb +31 -0
  406. data/rails_generators/feature/templates/steps.erb +14 -0
  407. data/spec/cucumber/ast/background_spec.rb +60 -0
  408. data/spec/cucumber/ast/feature_element_spec.rb +40 -0
  409. data/spec/cucumber/ast/feature_factory.rb +62 -0
  410. data/spec/cucumber/ast/feature_spec.rb +44 -0
  411. data/spec/cucumber/ast/py_string_spec.rb +51 -0
  412. data/spec/cucumber/ast/scenario_outline_spec.rb +72 -0
  413. data/spec/cucumber/ast/scenario_spec.rb +43 -0
  414. data/spec/cucumber/ast/step_collection_spec.rb +17 -0
  415. data/spec/cucumber/ast/step_spec.rb +66 -0
  416. data/spec/cucumber/ast/table_spec.rb +394 -0
  417. data/spec/cucumber/broadcaster_spec.rb +15 -0
  418. data/spec/cucumber/cli/configuration_spec.rb +396 -0
  419. data/spec/cucumber/cli/drb_client_spec.rb +77 -0
  420. data/spec/cucumber/cli/main_spec.rb +172 -0
  421. data/spec/cucumber/cli/options_spec.rb +331 -0
  422. data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
  423. data/spec/cucumber/core_ext/proc_spec.rb +68 -0
  424. data/spec/cucumber/core_ext/string_spec.rb +43 -0
  425. data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
  426. data/spec/cucumber/formatter/color_io_spec.rb +27 -0
  427. data/spec/cucumber/formatter/duration_spec.rb +22 -0
  428. data/spec/cucumber/formatter/html_spec.rb +18 -0
  429. data/spec/cucumber/formatter/progress_spec.rb +33 -0
  430. data/spec/cucumber/parser/feature_parser_spec.rb +396 -0
  431. data/spec/cucumber/parser/table_parser_spec.rb +52 -0
  432. data/spec/cucumber/rails/stubs/mini_rails.rb +18 -0
  433. data/spec/cucumber/rails/stubs/test_help.rb +1 -0
  434. data/spec/cucumber/rails/world_spec.rb +16 -0
  435. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +123 -0
  436. data/spec/cucumber/sell_cucumbers.feature +19 -0
  437. data/spec/cucumber/step_mother_spec.rb +282 -0
  438. data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
  439. data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
  440. data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
  441. data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
  442. data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
  443. data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
  444. data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
  445. data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
  446. data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
  447. data/spec/cucumber/treetop_parser/spaces.feature +12 -0
  448. data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
  449. data/spec/cucumber/treetop_parser/with_comments.feature +23 -0
  450. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  451. data/spec/cucumber/world/pending_spec.rb +46 -0
  452. data/spec/spec.opts +4 -0
  453. data/spec/spec_helper.rb +18 -0
  454. metadata +561 -0
@@ -0,0 +1,1838 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Cucumber
5
+ module Parser
6
+ # TIP: When you hack on the grammar, just delete feature.rb in this directory.
7
+ # Also make sure you have uninstalled all cucumber gems (don't forget xxx-cucumber
8
+ # github gems).
9
+ #
10
+ # Treetop will then generate the parser in-memory. When you're happy, just generate
11
+ # the rb file with tt feature.tt
12
+ module Feature
13
+ include Treetop::Runtime
14
+
15
+ def root
16
+ @root || :feature_sub
17
+ end
18
+
19
+ module FeatureSub0
20
+ end
21
+
22
+ module FeatureSub1
23
+ def white1
24
+ elements[0]
25
+ end
26
+
27
+ def comment
28
+ elements[1]
29
+ end
30
+
31
+ def white2
32
+ elements[2]
33
+ end
34
+
35
+ def tags
36
+ elements[3]
37
+ end
38
+
39
+ def white3
40
+ elements[4]
41
+ end
42
+
43
+ def header
44
+ elements[5]
45
+ end
46
+
47
+ def bg
48
+ elements[6]
49
+ end
50
+
51
+ def feature_elements
52
+ elements[7]
53
+ end
54
+
55
+ end
56
+
57
+ module FeatureSub2
58
+ def has_tags?(tag_names)
59
+ tags.has_tags?(tag_names)
60
+ end
61
+
62
+ def has_all_tags?(tag_names)
63
+ tags.has_all_tags?(tag_names)
64
+ end
65
+
66
+ def build(filter)
67
+ if(filter.nil? || feature_elements.accept?(filter) || (!bg.empty? && filter.accept?(bg)))
68
+ background = bg.respond_to?(:build) ? bg.build : nil
69
+ Ast::Feature.new(
70
+ background,
71
+ comment.build,
72
+ tags.build,
73
+ header.text_value,
74
+ feature_elements.build(background, filter)
75
+ )
76
+ end
77
+ end
78
+ end
79
+
80
+ def _nt_feature_sub
81
+ start_index = index
82
+ if node_cache[:feature_sub].has_key?(index)
83
+ cached = node_cache[:feature_sub][index]
84
+ @index = cached.interval.end if cached
85
+ return cached
86
+ end
87
+
88
+ i0, s0 = index, []
89
+ r1 = _nt_white
90
+ s0 << r1
91
+ if r1
92
+ r2 = _nt_comment
93
+ s0 << r2
94
+ if r2
95
+ r3 = _nt_white
96
+ s0 << r3
97
+ if r3
98
+ r4 = _nt_tags
99
+ s0 << r4
100
+ if r4
101
+ r5 = _nt_white
102
+ s0 << r5
103
+ if r5
104
+ s6, i6 = [], index
105
+ loop do
106
+ i7, s7 = index, []
107
+ i8 = index
108
+ i9 = index
109
+ r10 = _nt_scenario_outline
110
+ if r10
111
+ r9 = r10
112
+ else
113
+ r11 = _nt_scenario
114
+ if r11
115
+ r9 = r11
116
+ else
117
+ r12 = _nt_background
118
+ if r12
119
+ r9 = r12
120
+ else
121
+ @index = i9
122
+ r9 = nil
123
+ end
124
+ end
125
+ end
126
+ if r9
127
+ r8 = nil
128
+ else
129
+ @index = i8
130
+ r8 = instantiate_node(SyntaxNode,input, index...index)
131
+ end
132
+ s7 << r8
133
+ if r8
134
+ if index < input_length
135
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
136
+ @index += 1
137
+ else
138
+ terminal_parse_failure("any character")
139
+ r13 = nil
140
+ end
141
+ s7 << r13
142
+ end
143
+ if s7.last
144
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
145
+ r7.extend(FeatureSub0)
146
+ else
147
+ @index = i7
148
+ r7 = nil
149
+ end
150
+ if r7
151
+ s6 << r7
152
+ else
153
+ break
154
+ end
155
+ end
156
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
157
+ s0 << r6
158
+ if r6
159
+ r15 = _nt_background
160
+ if r15
161
+ r14 = r15
162
+ else
163
+ r14 = instantiate_node(SyntaxNode,input, index...index)
164
+ end
165
+ s0 << r14
166
+ if r14
167
+ r16 = _nt_feature_elements
168
+ s0 << r16
169
+ if r16
170
+ r18 = _nt_comment
171
+ if r18
172
+ r17 = r18
173
+ else
174
+ r17 = instantiate_node(SyntaxNode,input, index...index)
175
+ end
176
+ s0 << r17
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
184
+ end
185
+ if s0.last
186
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
187
+ r0.extend(FeatureSub1)
188
+ r0.extend(FeatureSub2)
189
+ else
190
+ @index = i0
191
+ r0 = nil
192
+ end
193
+
194
+ node_cache[:feature_sub][start_index] = r0
195
+
196
+ r0
197
+ end
198
+
199
+ module Tags0
200
+ def tag
201
+ elements[0]
202
+ end
203
+
204
+ end
205
+
206
+ module Tags1
207
+ def white
208
+ elements[0]
209
+ end
210
+
211
+ def ts
212
+ elements[1]
213
+ end
214
+ end
215
+
216
+ module Tags2
217
+ def at_line?(line)
218
+ ts.elements.detect{|e| e.tag.line == line}
219
+ end
220
+
221
+ def has_tags?(tags)
222
+ (tag_names & tags).any?
223
+ end
224
+
225
+ def has_all_tags?(tags)
226
+ (tags & tag_names) == tags
227
+ end
228
+
229
+ def build
230
+ Ast::Tags.new(ts.line, tag_names)
231
+ end
232
+
233
+ def tag_names
234
+ @tag_names ||= ts.elements.map{|e| e.tag.tag_name.text_value}
235
+ end
236
+ end
237
+
238
+ def _nt_tags
239
+ start_index = index
240
+ if node_cache[:tags].has_key?(index)
241
+ cached = node_cache[:tags][index]
242
+ @index = cached.interval.end if cached
243
+ return cached
244
+ end
245
+
246
+ i0, s0 = index, []
247
+ r1 = _nt_white
248
+ s0 << r1
249
+ if r1
250
+ s2, i2 = [], index
251
+ loop do
252
+ i3, s3 = index, []
253
+ r4 = _nt_tag
254
+ s3 << r4
255
+ if r4
256
+ s5, i5 = [], index
257
+ loop do
258
+ i6 = index
259
+ r7 = _nt_space
260
+ if r7
261
+ r6 = r7
262
+ else
263
+ r8 = _nt_eol
264
+ if r8
265
+ r6 = r8
266
+ else
267
+ @index = i6
268
+ r6 = nil
269
+ end
270
+ end
271
+ if r6
272
+ s5 << r6
273
+ else
274
+ break
275
+ end
276
+ end
277
+ if s5.empty?
278
+ @index = i5
279
+ r5 = nil
280
+ else
281
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
282
+ end
283
+ s3 << r5
284
+ end
285
+ if s3.last
286
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
287
+ r3.extend(Tags0)
288
+ else
289
+ @index = i3
290
+ r3 = nil
291
+ end
292
+ if r3
293
+ s2 << r3
294
+ else
295
+ break
296
+ end
297
+ end
298
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
299
+ s0 << r2
300
+ end
301
+ if s0.last
302
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
303
+ r0.extend(Tags1)
304
+ r0.extend(Tags2)
305
+ else
306
+ @index = i0
307
+ r0 = nil
308
+ end
309
+
310
+ node_cache[:tags][start_index] = r0
311
+
312
+ r0
313
+ end
314
+
315
+ module Tag0
316
+ def tag_name
317
+ elements[1]
318
+ end
319
+ end
320
+
321
+ def _nt_tag
322
+ start_index = index
323
+ if node_cache[:tag].has_key?(index)
324
+ cached = node_cache[:tag][index]
325
+ @index = cached.interval.end if cached
326
+ return cached
327
+ end
328
+
329
+ i0, s0 = index, []
330
+ if has_terminal?('@', false, index)
331
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
332
+ @index += 1
333
+ else
334
+ terminal_parse_failure('@')
335
+ r1 = nil
336
+ end
337
+ s0 << r1
338
+ if r1
339
+ s2, i2 = [], index
340
+ loop do
341
+ if has_terminal?('\G[^@\\r\\n\\t ]', true, index)
342
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
343
+ @index += 1
344
+ else
345
+ r3 = nil
346
+ end
347
+ if r3
348
+ s2 << r3
349
+ else
350
+ break
351
+ end
352
+ end
353
+ if s2.empty?
354
+ @index = i2
355
+ r2 = nil
356
+ else
357
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
358
+ end
359
+ s0 << r2
360
+ end
361
+ if s0.last
362
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
363
+ r0.extend(Tag0)
364
+ else
365
+ @index = i0
366
+ r0 = nil
367
+ end
368
+
369
+ node_cache[:tag][start_index] = r0
370
+
371
+ r0
372
+ end
373
+
374
+ module Comment0
375
+ def comment_line
376
+ elements[0]
377
+ end
378
+
379
+ def white
380
+ elements[1]
381
+ end
382
+ end
383
+
384
+ module Comment1
385
+ def build
386
+ Ast::Comment.new(text_value)
387
+ end
388
+ end
389
+
390
+ def _nt_comment
391
+ start_index = index
392
+ if node_cache[:comment].has_key?(index)
393
+ cached = node_cache[:comment][index]
394
+ @index = cached.interval.end if cached
395
+ return cached
396
+ end
397
+
398
+ s0, i0 = [], index
399
+ loop do
400
+ i1, s1 = index, []
401
+ r2 = _nt_comment_line
402
+ s1 << r2
403
+ if r2
404
+ r3 = _nt_white
405
+ s1 << r3
406
+ end
407
+ if s1.last
408
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
409
+ r1.extend(Comment0)
410
+ else
411
+ @index = i1
412
+ r1 = nil
413
+ end
414
+ if r1
415
+ s0 << r1
416
+ else
417
+ break
418
+ end
419
+ end
420
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
421
+ r0.extend(Comment1)
422
+
423
+ node_cache[:comment][start_index] = r0
424
+
425
+ r0
426
+ end
427
+
428
+ module CommentLine0
429
+ def line_to_eol
430
+ elements[2]
431
+ end
432
+ end
433
+
434
+ def _nt_comment_line
435
+ start_index = index
436
+ if node_cache[:comment_line].has_key?(index)
437
+ cached = node_cache[:comment_line][index]
438
+ @index = cached.interval.end if cached
439
+ return cached
440
+ end
441
+
442
+ i0, s0 = index, []
443
+ s1, i1 = [], index
444
+ loop do
445
+ r2 = _nt_space
446
+ if r2
447
+ s1 << r2
448
+ else
449
+ break
450
+ end
451
+ end
452
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
453
+ s0 << r1
454
+ if r1
455
+ if has_terminal?('#', false, index)
456
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
457
+ @index += 1
458
+ else
459
+ terminal_parse_failure('#')
460
+ r3 = nil
461
+ end
462
+ s0 << r3
463
+ if r3
464
+ r4 = _nt_line_to_eol
465
+ s0 << r4
466
+ end
467
+ end
468
+ if s0.last
469
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
470
+ r0.extend(CommentLine0)
471
+ else
472
+ @index = i0
473
+ r0 = nil
474
+ end
475
+
476
+ node_cache[:comment_line][start_index] = r0
477
+
478
+ r0
479
+ end
480
+
481
+ module Background0
482
+ def comment
483
+ elements[0]
484
+ end
485
+
486
+ def white
487
+ elements[1]
488
+ end
489
+
490
+ def background_keyword
491
+ elements[2]
492
+ end
493
+
494
+ def name
495
+ elements[4]
496
+ end
497
+
498
+ def steps
499
+ elements[6]
500
+ end
501
+ end
502
+
503
+ module Background1
504
+ def matches_name?(regexp_to_match)
505
+ name.build =~ regexp_to_match
506
+ end
507
+
508
+ def at_line?(line)
509
+ background_keyword.line == line ||
510
+ steps.at_line?(line)
511
+ end
512
+
513
+ def has_tags?(tag_names)
514
+ feature_tags = self.parent.tags
515
+ feature_tags.has_tags?(tag_names)
516
+ end
517
+
518
+ def has_all_tags?(tag_names)
519
+ feature_tags = self.parent.tags
520
+ feature_tags.has_all_tags?(tag_names)
521
+ end
522
+
523
+ def build
524
+ Ast::Background.new(
525
+ comment.build,
526
+ background_keyword.line,
527
+ background_keyword.text_value,
528
+ name.build,
529
+ steps.build
530
+ )
531
+ end
532
+ end
533
+
534
+ def _nt_background
535
+ start_index = index
536
+ if node_cache[:background].has_key?(index)
537
+ cached = node_cache[:background][index]
538
+ @index = cached.interval.end if cached
539
+ return cached
540
+ end
541
+
542
+ i0, s0 = index, []
543
+ r1 = _nt_comment
544
+ s0 << r1
545
+ if r1
546
+ r2 = _nt_white
547
+ s0 << r2
548
+ if r2
549
+ r3 = _nt_background_keyword
550
+ s0 << r3
551
+ if r3
552
+ s4, i4 = [], index
553
+ loop do
554
+ r5 = _nt_space
555
+ if r5
556
+ s4 << r5
557
+ else
558
+ break
559
+ end
560
+ end
561
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
562
+ s0 << r4
563
+ if r4
564
+ r7 = _nt_lines_to_keyword
565
+ if r7
566
+ r6 = r7
567
+ else
568
+ r6 = instantiate_node(SyntaxNode,input, index...index)
569
+ end
570
+ s0 << r6
571
+ if r6
572
+ i8 = index
573
+ s9, i9 = [], index
574
+ loop do
575
+ r10 = _nt_eol
576
+ if r10
577
+ s9 << r10
578
+ else
579
+ break
580
+ end
581
+ end
582
+ if s9.empty?
583
+ @index = i9
584
+ r9 = nil
585
+ else
586
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
587
+ end
588
+ if r9
589
+ r8 = r9
590
+ else
591
+ r11 = _nt_eof
592
+ if r11
593
+ r8 = r11
594
+ else
595
+ @index = i8
596
+ r8 = nil
597
+ end
598
+ end
599
+ s0 << r8
600
+ if r8
601
+ r12 = _nt_steps
602
+ s0 << r12
603
+ end
604
+ end
605
+ end
606
+ end
607
+ end
608
+ end
609
+ if s0.last
610
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
611
+ r0.extend(Background0)
612
+ r0.extend(Background1)
613
+ else
614
+ @index = i0
615
+ r0 = nil
616
+ end
617
+
618
+ node_cache[:background][start_index] = r0
619
+
620
+ r0
621
+ end
622
+
623
+ module FeatureElements0
624
+ def accept?(filter)
625
+ filter.nil? || elements.empty? || elements.detect{|feature_element| filter.accept?(feature_element)}
626
+ end
627
+
628
+ def build(background, filter)
629
+ elements.map do |feature_element|
630
+ if filter.nil? || filter.accept?(feature_element)
631
+ feature_element.build(background, filter)
632
+ end
633
+ end.compact
634
+ end
635
+ end
636
+
637
+ def _nt_feature_elements
638
+ start_index = index
639
+ if node_cache[:feature_elements].has_key?(index)
640
+ cached = node_cache[:feature_elements][index]
641
+ @index = cached.interval.end if cached
642
+ return cached
643
+ end
644
+
645
+ s0, i0 = [], index
646
+ loop do
647
+ i1 = index
648
+ r2 = _nt_scenario
649
+ if r2
650
+ r1 = r2
651
+ else
652
+ r3 = _nt_scenario_outline
653
+ if r3
654
+ r1 = r3
655
+ else
656
+ @index = i1
657
+ r1 = nil
658
+ end
659
+ end
660
+ if r1
661
+ s0 << r1
662
+ else
663
+ break
664
+ end
665
+ end
666
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
667
+ r0.extend(FeatureElements0)
668
+
669
+ node_cache[:feature_elements][start_index] = r0
670
+
671
+ r0
672
+ end
673
+
674
+ module Scenario0
675
+ def comment
676
+ elements[0]
677
+ end
678
+
679
+ def tags
680
+ elements[1]
681
+ end
682
+
683
+ def white1
684
+ elements[2]
685
+ end
686
+
687
+ def scenario_keyword
688
+ elements[3]
689
+ end
690
+
691
+ def name
692
+ elements[5]
693
+ end
694
+
695
+ def white2
696
+ elements[6]
697
+ end
698
+
699
+ def steps
700
+ elements[7]
701
+ end
702
+
703
+ def white3
704
+ elements[8]
705
+ end
706
+ end
707
+
708
+ module Scenario1
709
+ def at_line?(line)
710
+ scenario_keyword.line == line ||
711
+ steps.at_line?(line) ||
712
+ tags.at_line?(line)
713
+ end
714
+
715
+ def has_tags?(tag_names)
716
+ feature_tags = self.parent.parent.tags
717
+ tags.has_tags?(tag_names) || feature_tags.has_tags?(tag_names)
718
+ end
719
+
720
+ def has_all_tags?(tag_names)
721
+ feature_tags = self.parent.parent.tags
722
+ tags.has_all_tags?(tag_names) || feature_tags.has_all_tags?(tag_names)
723
+ end
724
+
725
+ def matches_name?(regexp_to_match)
726
+ name.build =~ regexp_to_match
727
+ end
728
+
729
+ def build(background, filter)
730
+ Ast::Scenario.new(
731
+ background,
732
+ comment.build,
733
+ tags.build,
734
+ scenario_keyword.line,
735
+ scenario_keyword.text_value,
736
+ name.build,
737
+ steps.build
738
+ )
739
+ end
740
+ end
741
+
742
+ def _nt_scenario
743
+ start_index = index
744
+ if node_cache[:scenario].has_key?(index)
745
+ cached = node_cache[:scenario][index]
746
+ @index = cached.interval.end if cached
747
+ return cached
748
+ end
749
+
750
+ i0, s0 = index, []
751
+ r1 = _nt_comment
752
+ s0 << r1
753
+ if r1
754
+ r2 = _nt_tags
755
+ s0 << r2
756
+ if r2
757
+ r3 = _nt_white
758
+ s0 << r3
759
+ if r3
760
+ r4 = _nt_scenario_keyword
761
+ s0 << r4
762
+ if r4
763
+ s5, i5 = [], index
764
+ loop do
765
+ r6 = _nt_space
766
+ if r6
767
+ s5 << r6
768
+ else
769
+ break
770
+ end
771
+ end
772
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
773
+ s0 << r5
774
+ if r5
775
+ r7 = _nt_lines_to_keyword
776
+ s0 << r7
777
+ if r7
778
+ r8 = _nt_white
779
+ s0 << r8
780
+ if r8
781
+ r9 = _nt_steps
782
+ s0 << r9
783
+ if r9
784
+ r10 = _nt_white
785
+ s0 << r10
786
+ end
787
+ end
788
+ end
789
+ end
790
+ end
791
+ end
792
+ end
793
+ end
794
+ if s0.last
795
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
796
+ r0.extend(Scenario0)
797
+ r0.extend(Scenario1)
798
+ else
799
+ @index = i0
800
+ r0 = nil
801
+ end
802
+
803
+ node_cache[:scenario][start_index] = r0
804
+
805
+ r0
806
+ end
807
+
808
+ module ScenarioOutline0
809
+ def comment
810
+ elements[0]
811
+ end
812
+
813
+ def tags
814
+ elements[1]
815
+ end
816
+
817
+ def white1
818
+ elements[2]
819
+ end
820
+
821
+ def scenario_outline_keyword
822
+ elements[3]
823
+ end
824
+
825
+ def name
826
+ elements[5]
827
+ end
828
+
829
+ def white2
830
+ elements[6]
831
+ end
832
+
833
+ def steps
834
+ elements[7]
835
+ end
836
+
837
+ def examples_sections
838
+ elements[8]
839
+ end
840
+
841
+ def white3
842
+ elements[9]
843
+ end
844
+ end
845
+
846
+ module ScenarioOutline1
847
+ def at_line?(line)
848
+ outline_at_line?(line) ||
849
+ examples_sections.at_line?(line) ||
850
+ tags.at_line?(line)
851
+ end
852
+
853
+ def outline_at_line?(line)
854
+ scenario_outline_keyword.line == line ||
855
+ steps.at_line?(line)
856
+ end
857
+
858
+ def has_tags?(tag_names)
859
+ feature_tags = self.parent.parent.tags
860
+ tags.has_tags?(tag_names) || feature_tags.has_tags?(tag_names)
861
+ end
862
+
863
+ def has_all_tags?(tag_names)
864
+ feature_tags = self.parent.parent.tags
865
+ tags.has_all_tags?(tag_names) || feature_tags.has_all_tags?(tag_names)
866
+ end
867
+
868
+ def matches_name?(regexp_to_match)
869
+ outline_matches_name?(regexp_to_match) || examples_sections.matches_name?(regexp_to_match)
870
+ end
871
+
872
+ def outline_matches_name?(regexp_to_match)
873
+ name.build =~ regexp_to_match
874
+ end
875
+
876
+ def build(background, filter)
877
+ Ast::ScenarioOutline.new(
878
+ background,
879
+ comment.build,
880
+ tags.build,
881
+ scenario_outline_keyword.line,
882
+ scenario_outline_keyword.text_value,
883
+ name.build,
884
+ steps.build,
885
+ examples_sections.build(filter, self)
886
+ )
887
+ end
888
+ end
889
+
890
+ def _nt_scenario_outline
891
+ start_index = index
892
+ if node_cache[:scenario_outline].has_key?(index)
893
+ cached = node_cache[:scenario_outline][index]
894
+ @index = cached.interval.end if cached
895
+ return cached
896
+ end
897
+
898
+ i0, s0 = index, []
899
+ r1 = _nt_comment
900
+ s0 << r1
901
+ if r1
902
+ r2 = _nt_tags
903
+ s0 << r2
904
+ if r2
905
+ r3 = _nt_white
906
+ s0 << r3
907
+ if r3
908
+ r4 = _nt_scenario_outline_keyword
909
+ s0 << r4
910
+ if r4
911
+ s5, i5 = [], index
912
+ loop do
913
+ r6 = _nt_space
914
+ if r6
915
+ s5 << r6
916
+ else
917
+ break
918
+ end
919
+ end
920
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
921
+ s0 << r5
922
+ if r5
923
+ r7 = _nt_lines_to_keyword
924
+ s0 << r7
925
+ if r7
926
+ r8 = _nt_white
927
+ s0 << r8
928
+ if r8
929
+ r9 = _nt_steps
930
+ s0 << r9
931
+ if r9
932
+ r10 = _nt_examples_sections
933
+ s0 << r10
934
+ if r10
935
+ r11 = _nt_white
936
+ s0 << r11
937
+ end
938
+ end
939
+ end
940
+ end
941
+ end
942
+ end
943
+ end
944
+ end
945
+ end
946
+ if s0.last
947
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
948
+ r0.extend(ScenarioOutline0)
949
+ r0.extend(ScenarioOutline1)
950
+ else
951
+ @index = i0
952
+ r0 = nil
953
+ end
954
+
955
+ node_cache[:scenario_outline][start_index] = r0
956
+
957
+ r0
958
+ end
959
+
960
+ module Steps0
961
+ def at_line?(line)
962
+ elements.detect{|e| e.at_line?(line)}
963
+ end
964
+
965
+ def build
966
+ elements.map{|e| e.build}
967
+ end
968
+ end
969
+
970
+ def _nt_steps
971
+ start_index = index
972
+ if node_cache[:steps].has_key?(index)
973
+ cached = node_cache[:steps][index]
974
+ @index = cached.interval.end if cached
975
+ return cached
976
+ end
977
+
978
+ s0, i0 = [], index
979
+ loop do
980
+ r1 = _nt_step
981
+ if r1
982
+ s0 << r1
983
+ else
984
+ break
985
+ end
986
+ end
987
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
988
+ r0.extend(Steps0)
989
+
990
+ node_cache[:steps][start_index] = r0
991
+
992
+ r0
993
+ end
994
+
995
+ module Step0
996
+ def comment
997
+ elements[0]
998
+ end
999
+
1000
+ def step_keyword
1001
+ elements[2]
1002
+ end
1003
+
1004
+ def keyword_space
1005
+ elements[3]
1006
+ end
1007
+
1008
+ def name
1009
+ elements[4]
1010
+ end
1011
+
1012
+ def multi
1013
+ elements[6]
1014
+ end
1015
+
1016
+ def white
1017
+ elements[7]
1018
+ end
1019
+ end
1020
+
1021
+ module Step1
1022
+ def at_line?(line)
1023
+ step_keyword.line == line ||
1024
+ (multi.respond_to?(:at_line?) && multi.at_line?(line))
1025
+ end
1026
+
1027
+ def build
1028
+ if multi.respond_to?(:build)
1029
+ Ast::Step.new(step_keyword.line, step_keyword.text_value, name.text_value.strip, multi.build)
1030
+ else
1031
+ Ast::Step.new(step_keyword.line, step_keyword.text_value, name.text_value.strip)
1032
+ end
1033
+ end
1034
+ end
1035
+
1036
+ def _nt_step
1037
+ start_index = index
1038
+ if node_cache[:step].has_key?(index)
1039
+ cached = node_cache[:step][index]
1040
+ @index = cached.interval.end if cached
1041
+ return cached
1042
+ end
1043
+
1044
+ i0, s0 = index, []
1045
+ r1 = _nt_comment
1046
+ s0 << r1
1047
+ if r1
1048
+ s2, i2 = [], index
1049
+ loop do
1050
+ r3 = _nt_space
1051
+ if r3
1052
+ s2 << r3
1053
+ else
1054
+ break
1055
+ end
1056
+ end
1057
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1058
+ s0 << r2
1059
+ if r2
1060
+ r4 = _nt_step_keyword
1061
+ s0 << r4
1062
+ if r4
1063
+ r5 = _nt_keyword_space
1064
+ s0 << r5
1065
+ if r5
1066
+ r6 = _nt_line_to_eol
1067
+ s0 << r6
1068
+ if r6
1069
+ i7 = index
1070
+ s8, i8 = [], index
1071
+ loop do
1072
+ r9 = _nt_eol
1073
+ if r9
1074
+ s8 << r9
1075
+ else
1076
+ break
1077
+ end
1078
+ end
1079
+ if s8.empty?
1080
+ @index = i8
1081
+ r8 = nil
1082
+ else
1083
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1084
+ end
1085
+ if r8
1086
+ r7 = r8
1087
+ else
1088
+ r10 = _nt_eof
1089
+ if r10
1090
+ r7 = r10
1091
+ else
1092
+ @index = i7
1093
+ r7 = nil
1094
+ end
1095
+ end
1096
+ s0 << r7
1097
+ if r7
1098
+ r12 = _nt_multiline_arg
1099
+ if r12
1100
+ r11 = r12
1101
+ else
1102
+ r11 = instantiate_node(SyntaxNode,input, index...index)
1103
+ end
1104
+ s0 << r11
1105
+ if r11
1106
+ r13 = _nt_white
1107
+ s0 << r13
1108
+ end
1109
+ end
1110
+ end
1111
+ end
1112
+ end
1113
+ end
1114
+ end
1115
+ if s0.last
1116
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1117
+ r0.extend(Step0)
1118
+ r0.extend(Step1)
1119
+ else
1120
+ @index = i0
1121
+ r0 = nil
1122
+ end
1123
+
1124
+ node_cache[:step][start_index] = r0
1125
+
1126
+ r0
1127
+ end
1128
+
1129
+ module ExamplesSections0
1130
+ def at_line?(line)
1131
+ elements.detect { |e| e.at_line?(line) }
1132
+ end
1133
+
1134
+ def matches_name?(regexp_to_match)
1135
+ elements.detect { |e| e.matches_name?(regexp_to_match) }
1136
+ end
1137
+
1138
+ def build(filter, scenario_outline)
1139
+ elements.map do |e|
1140
+ if(filter.nil? || filter.accept_example?(e, scenario_outline))
1141
+ e.build(filter, scenario_outline)
1142
+ end
1143
+ end.compact
1144
+ end
1145
+ end
1146
+
1147
+ def _nt_examples_sections
1148
+ start_index = index
1149
+ if node_cache[:examples_sections].has_key?(index)
1150
+ cached = node_cache[:examples_sections][index]
1151
+ @index = cached.interval.end if cached
1152
+ return cached
1153
+ end
1154
+
1155
+ s0, i0 = [], index
1156
+ loop do
1157
+ r1 = _nt_examples
1158
+ if r1
1159
+ s0 << r1
1160
+ else
1161
+ break
1162
+ end
1163
+ end
1164
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1165
+ r0.extend(ExamplesSections0)
1166
+
1167
+ node_cache[:examples_sections][start_index] = r0
1168
+
1169
+ r0
1170
+ end
1171
+
1172
+ module Examples0
1173
+ def comment
1174
+ elements[0]
1175
+ end
1176
+
1177
+ def examples_keyword
1178
+ elements[2]
1179
+ end
1180
+
1181
+ def name
1182
+ elements[4]
1183
+ end
1184
+
1185
+ def eol
1186
+ elements[5]
1187
+ end
1188
+
1189
+ def table
1190
+ elements[6]
1191
+ end
1192
+
1193
+ def white
1194
+ elements[7]
1195
+ end
1196
+ end
1197
+
1198
+ module Examples1
1199
+ def at_line?(line)
1200
+ examples_keyword.line == line ||
1201
+ table.at_line?(line)
1202
+ end
1203
+
1204
+ def has_tags?(tag_names)
1205
+ true
1206
+ end
1207
+
1208
+ def has_all_tags?(tag_names)
1209
+ true
1210
+ end
1211
+
1212
+ def outline_at_line?(line)
1213
+ true
1214
+ end
1215
+
1216
+ def matches_name?(regexp_to_match)
1217
+ name.build =~ regexp_to_match
1218
+ end
1219
+
1220
+ def build(filter, scenario_outline)
1221
+ [comment.build, examples_keyword.line, examples_keyword.text_value, name.build, table.raw(filter, scenario_outline)]
1222
+ end
1223
+ end
1224
+
1225
+ def _nt_examples
1226
+ start_index = index
1227
+ if node_cache[:examples].has_key?(index)
1228
+ cached = node_cache[:examples][index]
1229
+ @index = cached.interval.end if cached
1230
+ return cached
1231
+ end
1232
+
1233
+ i0, s0 = index, []
1234
+ r1 = _nt_comment
1235
+ s0 << r1
1236
+ if r1
1237
+ s2, i2 = [], index
1238
+ loop do
1239
+ r3 = _nt_space
1240
+ if r3
1241
+ s2 << r3
1242
+ else
1243
+ break
1244
+ end
1245
+ end
1246
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1247
+ s0 << r2
1248
+ if r2
1249
+ r4 = _nt_examples_keyword
1250
+ s0 << r4
1251
+ if r4
1252
+ s5, i5 = [], index
1253
+ loop do
1254
+ r6 = _nt_space
1255
+ if r6
1256
+ s5 << r6
1257
+ else
1258
+ break
1259
+ end
1260
+ end
1261
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1262
+ s0 << r5
1263
+ if r5
1264
+ r8 = _nt_lines_to_keyword
1265
+ if r8
1266
+ r7 = r8
1267
+ else
1268
+ r7 = instantiate_node(SyntaxNode,input, index...index)
1269
+ end
1270
+ s0 << r7
1271
+ if r7
1272
+ r9 = _nt_eol
1273
+ s0 << r9
1274
+ if r9
1275
+ r10 = _nt_table
1276
+ s0 << r10
1277
+ if r10
1278
+ r11 = _nt_white
1279
+ s0 << r11
1280
+ end
1281
+ end
1282
+ end
1283
+ end
1284
+ end
1285
+ end
1286
+ end
1287
+ if s0.last
1288
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1289
+ r0.extend(Examples0)
1290
+ r0.extend(Examples1)
1291
+ else
1292
+ @index = i0
1293
+ r0 = nil
1294
+ end
1295
+
1296
+ node_cache[:examples][start_index] = r0
1297
+
1298
+ r0
1299
+ end
1300
+
1301
+ def _nt_multiline_arg
1302
+ start_index = index
1303
+ if node_cache[:multiline_arg].has_key?(index)
1304
+ cached = node_cache[:multiline_arg][index]
1305
+ @index = cached.interval.end if cached
1306
+ return cached
1307
+ end
1308
+
1309
+ i0 = index
1310
+ r1 = _nt_table
1311
+ if r1
1312
+ r0 = r1
1313
+ else
1314
+ r2 = _nt_py_string
1315
+ if r2
1316
+ r0 = r2
1317
+ else
1318
+ @index = i0
1319
+ r0 = nil
1320
+ end
1321
+ end
1322
+
1323
+ node_cache[:multiline_arg][start_index] = r0
1324
+
1325
+ r0
1326
+ end
1327
+
1328
+ module LineToEol0
1329
+ end
1330
+
1331
+ def _nt_line_to_eol
1332
+ start_index = index
1333
+ if node_cache[:line_to_eol].has_key?(index)
1334
+ cached = node_cache[:line_to_eol][index]
1335
+ @index = cached.interval.end if cached
1336
+ return cached
1337
+ end
1338
+
1339
+ s0, i0 = [], index
1340
+ loop do
1341
+ i1, s1 = index, []
1342
+ i2 = index
1343
+ r3 = _nt_eol
1344
+ if r3
1345
+ r2 = nil
1346
+ else
1347
+ @index = i2
1348
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1349
+ end
1350
+ s1 << r2
1351
+ if r2
1352
+ if index < input_length
1353
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1354
+ @index += 1
1355
+ else
1356
+ terminal_parse_failure("any character")
1357
+ r4 = nil
1358
+ end
1359
+ s1 << r4
1360
+ end
1361
+ if s1.last
1362
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1363
+ r1.extend(LineToEol0)
1364
+ else
1365
+ @index = i1
1366
+ r1 = nil
1367
+ end
1368
+ if r1
1369
+ s0 << r1
1370
+ else
1371
+ break
1372
+ end
1373
+ end
1374
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1375
+
1376
+ node_cache[:line_to_eol][start_index] = r0
1377
+
1378
+ r0
1379
+ end
1380
+
1381
+ module LinesToKeyword0
1382
+ def eol
1383
+ elements[0]
1384
+ end
1385
+
1386
+ def reserved_words_and_symbols
1387
+ elements[2]
1388
+ end
1389
+ end
1390
+
1391
+ module LinesToKeyword1
1392
+ end
1393
+
1394
+ module LinesToKeyword2
1395
+ def build
1396
+ self.text_value.split("\n").map{|s| s.strip}.join("\n")
1397
+ end
1398
+ end
1399
+
1400
+ def _nt_lines_to_keyword
1401
+ start_index = index
1402
+ if node_cache[:lines_to_keyword].has_key?(index)
1403
+ cached = node_cache[:lines_to_keyword][index]
1404
+ @index = cached.interval.end if cached
1405
+ return cached
1406
+ end
1407
+
1408
+ s0, i0 = [], index
1409
+ loop do
1410
+ i1, s1 = index, []
1411
+ i2 = index
1412
+ i3, s3 = index, []
1413
+ r4 = _nt_eol
1414
+ s3 << r4
1415
+ if r4
1416
+ s5, i5 = [], index
1417
+ loop do
1418
+ r6 = _nt_space
1419
+ if r6
1420
+ s5 << r6
1421
+ else
1422
+ break
1423
+ end
1424
+ end
1425
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1426
+ s3 << r5
1427
+ if r5
1428
+ r7 = _nt_reserved_words_and_symbols
1429
+ s3 << r7
1430
+ end
1431
+ end
1432
+ if s3.last
1433
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1434
+ r3.extend(LinesToKeyword0)
1435
+ else
1436
+ @index = i3
1437
+ r3 = nil
1438
+ end
1439
+ if r3
1440
+ r2 = nil
1441
+ else
1442
+ @index = i2
1443
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1444
+ end
1445
+ s1 << r2
1446
+ if r2
1447
+ if index < input_length
1448
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
1449
+ @index += 1
1450
+ else
1451
+ terminal_parse_failure("any character")
1452
+ r8 = nil
1453
+ end
1454
+ s1 << r8
1455
+ end
1456
+ if s1.last
1457
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1458
+ r1.extend(LinesToKeyword1)
1459
+ else
1460
+ @index = i1
1461
+ r1 = nil
1462
+ end
1463
+ if r1
1464
+ s0 << r1
1465
+ else
1466
+ break
1467
+ end
1468
+ end
1469
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1470
+ r0.extend(LinesToKeyword2)
1471
+
1472
+ node_cache[:lines_to_keyword][start_index] = r0
1473
+
1474
+ r0
1475
+ end
1476
+
1477
+ module ReservedWordsAndSymbols0
1478
+ def step_keyword
1479
+ elements[0]
1480
+ end
1481
+
1482
+ def keyword_space
1483
+ elements[1]
1484
+ end
1485
+ end
1486
+
1487
+ def _nt_reserved_words_and_symbols
1488
+ start_index = index
1489
+ if node_cache[:reserved_words_and_symbols].has_key?(index)
1490
+ cached = node_cache[:reserved_words_and_symbols][index]
1491
+ @index = cached.interval.end if cached
1492
+ return cached
1493
+ end
1494
+
1495
+ i0 = index
1496
+ i1, s1 = index, []
1497
+ r2 = _nt_step_keyword
1498
+ s1 << r2
1499
+ if r2
1500
+ r3 = _nt_keyword_space
1501
+ s1 << r3
1502
+ end
1503
+ if s1.last
1504
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1505
+ r1.extend(ReservedWordsAndSymbols0)
1506
+ else
1507
+ @index = i1
1508
+ r1 = nil
1509
+ end
1510
+ if r1
1511
+ r0 = r1
1512
+ else
1513
+ r4 = _nt_scenario_keyword
1514
+ if r4
1515
+ r0 = r4
1516
+ else
1517
+ r5 = _nt_scenario_outline_keyword
1518
+ if r5
1519
+ r0 = r5
1520
+ else
1521
+ r6 = _nt_table
1522
+ if r6
1523
+ r0 = r6
1524
+ else
1525
+ r7 = _nt_tag
1526
+ if r7
1527
+ r0 = r7
1528
+ else
1529
+ r8 = _nt_comment_line
1530
+ if r8
1531
+ r0 = r8
1532
+ else
1533
+ @index = i0
1534
+ r0 = nil
1535
+ end
1536
+ end
1537
+ end
1538
+ end
1539
+ end
1540
+ end
1541
+
1542
+ node_cache[:reserved_words_and_symbols][start_index] = r0
1543
+
1544
+ r0
1545
+ end
1546
+
1547
+ module PyString0
1548
+ end
1549
+
1550
+ module PyString1
1551
+ def open_py_string
1552
+ elements[0]
1553
+ end
1554
+
1555
+ def s
1556
+ elements[1]
1557
+ end
1558
+
1559
+ def close_py_string
1560
+ elements[2]
1561
+ end
1562
+ end
1563
+
1564
+ module PyString2
1565
+ def at_line?(line)
1566
+ line >= open_py_string.line && line <= close_py_string.line
1567
+ end
1568
+
1569
+ def build
1570
+ Ast::PyString.new(open_py_string.line, close_py_string.line, s.text_value, open_py_string.indentation)
1571
+ end
1572
+ end
1573
+
1574
+ def _nt_py_string
1575
+ start_index = index
1576
+ if node_cache[:py_string].has_key?(index)
1577
+ cached = node_cache[:py_string][index]
1578
+ @index = cached.interval.end if cached
1579
+ return cached
1580
+ end
1581
+
1582
+ i0, s0 = index, []
1583
+ r1 = _nt_open_py_string
1584
+ s0 << r1
1585
+ if r1
1586
+ s2, i2 = [], index
1587
+ loop do
1588
+ i3, s3 = index, []
1589
+ i4 = index
1590
+ r5 = _nt_close_py_string
1591
+ if r5
1592
+ r4 = nil
1593
+ else
1594
+ @index = i4
1595
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1596
+ end
1597
+ s3 << r4
1598
+ if r4
1599
+ if index < input_length
1600
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1601
+ @index += 1
1602
+ else
1603
+ terminal_parse_failure("any character")
1604
+ r6 = nil
1605
+ end
1606
+ s3 << r6
1607
+ end
1608
+ if s3.last
1609
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1610
+ r3.extend(PyString0)
1611
+ else
1612
+ @index = i3
1613
+ r3 = nil
1614
+ end
1615
+ if r3
1616
+ s2 << r3
1617
+ else
1618
+ break
1619
+ end
1620
+ end
1621
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1622
+ s0 << r2
1623
+ if r2
1624
+ r7 = _nt_close_py_string
1625
+ s0 << r7
1626
+ end
1627
+ end
1628
+ if s0.last
1629
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1630
+ r0.extend(PyString1)
1631
+ r0.extend(PyString2)
1632
+ else
1633
+ @index = i0
1634
+ r0 = nil
1635
+ end
1636
+
1637
+ node_cache[:py_string][start_index] = r0
1638
+
1639
+ r0
1640
+ end
1641
+
1642
+ module OpenPyString0
1643
+ def indent
1644
+ elements[0]
1645
+ end
1646
+
1647
+ def eol
1648
+ elements[3]
1649
+ end
1650
+ end
1651
+
1652
+ module OpenPyString1
1653
+ def indentation
1654
+ indent.text_value.length
1655
+ end
1656
+
1657
+ def line
1658
+ indent.line
1659
+ end
1660
+ end
1661
+
1662
+ def _nt_open_py_string
1663
+ start_index = index
1664
+ if node_cache[:open_py_string].has_key?(index)
1665
+ cached = node_cache[:open_py_string][index]
1666
+ @index = cached.interval.end if cached
1667
+ return cached
1668
+ end
1669
+
1670
+ i0, s0 = index, []
1671
+ s1, i1 = [], index
1672
+ loop do
1673
+ r2 = _nt_space
1674
+ if r2
1675
+ s1 << r2
1676
+ else
1677
+ break
1678
+ end
1679
+ end
1680
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1681
+ s0 << r1
1682
+ if r1
1683
+ if has_terminal?('"""', false, index)
1684
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 3))
1685
+ @index += 3
1686
+ else
1687
+ terminal_parse_failure('"""')
1688
+ r3 = nil
1689
+ end
1690
+ s0 << r3
1691
+ if r3
1692
+ s4, i4 = [], index
1693
+ loop do
1694
+ r5 = _nt_space
1695
+ if r5
1696
+ s4 << r5
1697
+ else
1698
+ break
1699
+ end
1700
+ end
1701
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1702
+ s0 << r4
1703
+ if r4
1704
+ r6 = _nt_eol
1705
+ s0 << r6
1706
+ end
1707
+ end
1708
+ end
1709
+ if s0.last
1710
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1711
+ r0.extend(OpenPyString0)
1712
+ r0.extend(OpenPyString1)
1713
+ else
1714
+ @index = i0
1715
+ r0 = nil
1716
+ end
1717
+
1718
+ node_cache[:open_py_string][start_index] = r0
1719
+
1720
+ r0
1721
+ end
1722
+
1723
+ module ClosePyString0
1724
+ def eol
1725
+ elements[0]
1726
+ end
1727
+
1728
+ def quotes
1729
+ elements[2]
1730
+ end
1731
+
1732
+ def white
1733
+ elements[3]
1734
+ end
1735
+ end
1736
+
1737
+ module ClosePyString1
1738
+ def line
1739
+ quotes.line
1740
+ end
1741
+ end
1742
+
1743
+ def _nt_close_py_string
1744
+ start_index = index
1745
+ if node_cache[:close_py_string].has_key?(index)
1746
+ cached = node_cache[:close_py_string][index]
1747
+ @index = cached.interval.end if cached
1748
+ return cached
1749
+ end
1750
+
1751
+ i0, s0 = index, []
1752
+ r1 = _nt_eol
1753
+ s0 << r1
1754
+ if r1
1755
+ s2, i2 = [], index
1756
+ loop do
1757
+ r3 = _nt_space
1758
+ if r3
1759
+ s2 << r3
1760
+ else
1761
+ break
1762
+ end
1763
+ end
1764
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1765
+ s0 << r2
1766
+ if r2
1767
+ if has_terminal?('"""', false, index)
1768
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
1769
+ @index += 3
1770
+ else
1771
+ terminal_parse_failure('"""')
1772
+ r4 = nil
1773
+ end
1774
+ s0 << r4
1775
+ if r4
1776
+ r5 = _nt_white
1777
+ s0 << r5
1778
+ end
1779
+ end
1780
+ end
1781
+ if s0.last
1782
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1783
+ r0.extend(ClosePyString0)
1784
+ r0.extend(ClosePyString1)
1785
+ else
1786
+ @index = i0
1787
+ r0 = nil
1788
+ end
1789
+
1790
+ node_cache[:close_py_string][start_index] = r0
1791
+
1792
+ r0
1793
+ end
1794
+
1795
+ def _nt_white
1796
+ start_index = index
1797
+ if node_cache[:white].has_key?(index)
1798
+ cached = node_cache[:white][index]
1799
+ @index = cached.interval.end if cached
1800
+ return cached
1801
+ end
1802
+
1803
+ s0, i0 = [], index
1804
+ loop do
1805
+ i1 = index
1806
+ r2 = _nt_space
1807
+ if r2
1808
+ r1 = r2
1809
+ else
1810
+ r3 = _nt_eol
1811
+ if r3
1812
+ r1 = r3
1813
+ else
1814
+ @index = i1
1815
+ r1 = nil
1816
+ end
1817
+ end
1818
+ if r1
1819
+ s0 << r1
1820
+ else
1821
+ break
1822
+ end
1823
+ end
1824
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1825
+
1826
+ node_cache[:white][start_index] = r0
1827
+
1828
+ r0
1829
+ end
1830
+
1831
+ end
1832
+
1833
+ class FeatureParser < Treetop::Runtime::CompiledParser
1834
+ include Feature
1835
+ end
1836
+
1837
+ end
1838
+ end