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,417 @@
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 Table
13
+ include Treetop::Runtime
14
+
15
+ def root
16
+ @root || :table
17
+ end
18
+
19
+ module Table0
20
+ def at_line?(line)
21
+ elements.detect{|table_row| table_row.at_line?(line)}
22
+ end
23
+
24
+ def build(filter=nil)
25
+ Ast::Table.new(raw)
26
+ end
27
+
28
+ def raw(filter=nil, scenario_outline=nil)
29
+ elements.map do |table_row|
30
+ if(filter.nil? || table_row == elements[0] || filter.at_line?(table_row) || (scenario_outline && filter.outline_at_line?(scenario_outline)))
31
+ table_row.build
32
+ end
33
+ end.compact
34
+ end
35
+ end
36
+
37
+ def _nt_table
38
+ start_index = index
39
+ if node_cache[:table].has_key?(index)
40
+ cached = node_cache[:table][index]
41
+ @index = cached.interval.end if cached
42
+ return cached
43
+ end
44
+
45
+ s0, i0 = [], index
46
+ loop do
47
+ r1 = _nt_table_row
48
+ if r1
49
+ s0 << r1
50
+ else
51
+ break
52
+ end
53
+ end
54
+ if s0.empty?
55
+ @index = i0
56
+ r0 = nil
57
+ else
58
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
59
+ r0.extend(Table0)
60
+ end
61
+
62
+ node_cache[:table][start_index] = r0
63
+
64
+ r0
65
+ end
66
+
67
+ module TableRow0
68
+ def cell
69
+ elements[0]
70
+ end
71
+
72
+ end
73
+
74
+ module TableRow1
75
+ def cells
76
+ elements[2]
77
+ end
78
+
79
+ end
80
+
81
+ module TableRow2
82
+ def at_line?(line)
83
+ cells.line == line
84
+ end
85
+
86
+ def build
87
+ row = cells.elements.map do |elt|
88
+ value = elt.cell.text_value.strip
89
+ value.empty? ? nil : value
90
+ end
91
+
92
+ class << row
93
+ attr_accessor :line
94
+ end
95
+ row.line = cells.line
96
+
97
+ row
98
+ end
99
+ end
100
+
101
+ def _nt_table_row
102
+ start_index = index
103
+ if node_cache[:table_row].has_key?(index)
104
+ cached = node_cache[:table_row][index]
105
+ @index = cached.interval.end if cached
106
+ return cached
107
+ end
108
+
109
+ i0, s0 = index, []
110
+ s1, i1 = [], index
111
+ loop do
112
+ r2 = _nt_space
113
+ if r2
114
+ s1 << r2
115
+ else
116
+ break
117
+ end
118
+ end
119
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
120
+ s0 << r1
121
+ if r1
122
+ if has_terminal?('|', false, index)
123
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
124
+ @index += 1
125
+ else
126
+ terminal_parse_failure('|')
127
+ r3 = nil
128
+ end
129
+ s0 << r3
130
+ if r3
131
+ s4, i4 = [], index
132
+ loop do
133
+ i5, s5 = index, []
134
+ r6 = _nt_cell
135
+ s5 << r6
136
+ if r6
137
+ if has_terminal?('|', false, index)
138
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
139
+ @index += 1
140
+ else
141
+ terminal_parse_failure('|')
142
+ r7 = nil
143
+ end
144
+ s5 << r7
145
+ end
146
+ if s5.last
147
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
148
+ r5.extend(TableRow0)
149
+ else
150
+ @index = i5
151
+ r5 = nil
152
+ end
153
+ if r5
154
+ s4 << r5
155
+ else
156
+ break
157
+ end
158
+ end
159
+ if s4.empty?
160
+ @index = i4
161
+ r4 = nil
162
+ else
163
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
164
+ end
165
+ s0 << r4
166
+ if r4
167
+ s8, i8 = [], index
168
+ loop do
169
+ r9 = _nt_space
170
+ if r9
171
+ s8 << r9
172
+ else
173
+ break
174
+ end
175
+ end
176
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
177
+ s0 << r8
178
+ if r8
179
+ i10 = index
180
+ s11, i11 = [], index
181
+ loop do
182
+ r12 = _nt_eol
183
+ if r12
184
+ s11 << r12
185
+ else
186
+ break
187
+ end
188
+ end
189
+ if s11.empty?
190
+ @index = i11
191
+ r11 = nil
192
+ else
193
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
194
+ end
195
+ if r11
196
+ r10 = r11
197
+ else
198
+ r13 = _nt_eof
199
+ if r13
200
+ r10 = r13
201
+ else
202
+ @index = i10
203
+ r10 = nil
204
+ end
205
+ end
206
+ s0 << r10
207
+ end
208
+ end
209
+ end
210
+ end
211
+ if s0.last
212
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
213
+ r0.extend(TableRow1)
214
+ r0.extend(TableRow2)
215
+ else
216
+ @index = i0
217
+ r0 = nil
218
+ end
219
+
220
+ node_cache[:table_row][start_index] = r0
221
+
222
+ r0
223
+ end
224
+
225
+ module Cell0
226
+ end
227
+
228
+ def _nt_cell
229
+ start_index = index
230
+ if node_cache[:cell].has_key?(index)
231
+ cached = node_cache[:cell][index]
232
+ @index = cached.interval.end if cached
233
+ return cached
234
+ end
235
+
236
+ s0, i0 = [], index
237
+ loop do
238
+ i1, s1 = index, []
239
+ i2 = index
240
+ i3 = index
241
+ if has_terminal?('|', false, index)
242
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
243
+ @index += 1
244
+ else
245
+ terminal_parse_failure('|')
246
+ r4 = nil
247
+ end
248
+ if r4
249
+ r3 = r4
250
+ else
251
+ r5 = _nt_eol
252
+ if r5
253
+ r3 = r5
254
+ else
255
+ @index = i3
256
+ r3 = nil
257
+ end
258
+ end
259
+ if r3
260
+ r2 = nil
261
+ else
262
+ @index = i2
263
+ r2 = instantiate_node(SyntaxNode,input, index...index)
264
+ end
265
+ s1 << r2
266
+ if r2
267
+ if index < input_length
268
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
269
+ @index += 1
270
+ else
271
+ terminal_parse_failure("any character")
272
+ r6 = nil
273
+ end
274
+ s1 << r6
275
+ end
276
+ if s1.last
277
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
278
+ r1.extend(Cell0)
279
+ else
280
+ @index = i1
281
+ r1 = nil
282
+ end
283
+ if r1
284
+ s0 << r1
285
+ else
286
+ break
287
+ end
288
+ end
289
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
290
+
291
+ node_cache[:cell][start_index] = r0
292
+
293
+ r0
294
+ end
295
+
296
+ def _nt_space
297
+ start_index = index
298
+ if node_cache[:space].has_key?(index)
299
+ cached = node_cache[:space][index]
300
+ @index = cached.interval.end if cached
301
+ return cached
302
+ end
303
+
304
+ if has_terminal?('\G[ \\t]', true, index)
305
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
306
+ @index += 1
307
+ else
308
+ r0 = nil
309
+ end
310
+
311
+ node_cache[:space][start_index] = r0
312
+
313
+ r0
314
+ end
315
+
316
+ module Eol0
317
+ end
318
+
319
+ def _nt_eol
320
+ start_index = index
321
+ if node_cache[:eol].has_key?(index)
322
+ cached = node_cache[:eol][index]
323
+ @index = cached.interval.end if cached
324
+ return cached
325
+ end
326
+
327
+ i0 = index
328
+ if has_terminal?("\n", false, index)
329
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
330
+ @index += 1
331
+ else
332
+ terminal_parse_failure("\n")
333
+ r1 = nil
334
+ end
335
+ if r1
336
+ r0 = r1
337
+ else
338
+ i2, s2 = index, []
339
+ if has_terminal?("\r", false, index)
340
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
341
+ @index += 1
342
+ else
343
+ terminal_parse_failure("\r")
344
+ r3 = nil
345
+ end
346
+ s2 << r3
347
+ if r3
348
+ if has_terminal?("\n", false, index)
349
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
350
+ @index += 1
351
+ else
352
+ terminal_parse_failure("\n")
353
+ r5 = nil
354
+ end
355
+ if r5
356
+ r4 = r5
357
+ else
358
+ r4 = instantiate_node(SyntaxNode,input, index...index)
359
+ end
360
+ s2 << r4
361
+ end
362
+ if s2.last
363
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
364
+ r2.extend(Eol0)
365
+ else
366
+ @index = i2
367
+ r2 = nil
368
+ end
369
+ if r2
370
+ r0 = r2
371
+ else
372
+ @index = i0
373
+ r0 = nil
374
+ end
375
+ end
376
+
377
+ node_cache[:eol][start_index] = r0
378
+
379
+ r0
380
+ end
381
+
382
+ def _nt_eof
383
+ start_index = index
384
+ if node_cache[:eof].has_key?(index)
385
+ cached = node_cache[:eof][index]
386
+ @index = cached.interval.end if cached
387
+ return cached
388
+ end
389
+
390
+ i0 = index
391
+ if index < input_length
392
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
393
+ @index += 1
394
+ else
395
+ terminal_parse_failure("any character")
396
+ r1 = nil
397
+ end
398
+ if r1
399
+ r0 = nil
400
+ else
401
+ @index = i0
402
+ r0 = instantiate_node(SyntaxNode,input, index...index)
403
+ end
404
+
405
+ node_cache[:eof][start_index] = r0
406
+
407
+ r0
408
+ end
409
+
410
+ end
411
+
412
+ class TableParser < Treetop::Runtime::CompiledParser
413
+ include Table
414
+ end
415
+
416
+ end
417
+ end
@@ -0,0 +1,71 @@
1
+ module Cucumber
2
+ module Parser
3
+ # TIP: When you hack on the grammar, just delete feature.rb in this directory.
4
+ # Also make sure you have uninstalled all cucumber gems (don't forget xxx-cucumber
5
+ # github gems).
6
+ #
7
+ # Treetop will then generate the parser in-memory. When you're happy, just generate
8
+ # the rb file with tt feature.tt
9
+ grammar Table
10
+
11
+ rule table
12
+ table_row+ {
13
+ def at_line?(line)
14
+ elements.detect{|table_row| table_row.at_line?(line)}
15
+ end
16
+
17
+ def build(filter=nil)
18
+ Ast::Table.new(raw)
19
+ end
20
+
21
+ def raw(filter=nil, scenario_outline=nil)
22
+ elements.map do |table_row|
23
+ if(filter.nil? || table_row == elements[0] || filter.at_line?(table_row) || (scenario_outline && filter.outline_at_line?(scenario_outline)))
24
+ table_row.build
25
+ end
26
+ end.compact
27
+ end
28
+ }
29
+ end
30
+
31
+ rule table_row
32
+ space* '|' cells:(cell '|')+ space* (eol+ / eof) {
33
+ def at_line?(line)
34
+ cells.line == line
35
+ end
36
+
37
+ def build
38
+ row = cells.elements.map do |elt|
39
+ value = elt.cell.text_value.strip
40
+ value.empty? ? nil : value
41
+ end
42
+
43
+ class << row
44
+ attr_accessor :line
45
+ end
46
+ row.line = cells.line
47
+
48
+ row
49
+ end
50
+ }
51
+ end
52
+
53
+ rule cell
54
+ (!('|' / eol) .)*
55
+ end
56
+
57
+ rule space
58
+ [ \t]
59
+ end
60
+
61
+ rule eol
62
+ "\n" / ("\r" "\n"?)
63
+ end
64
+
65
+ rule eof
66
+ !.
67
+ end
68
+
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,53 @@
1
+ begin
2
+ require 'treetop'
3
+ require 'treetop/runtime'
4
+ require 'treetop/ruby_extensions'
5
+ rescue LoadError
6
+ require "rubygems"
7
+ gem "treetop"
8
+ require 'treetop'
9
+ require 'treetop/runtime'
10
+ require 'treetop/ruby_extensions'
11
+ end
12
+
13
+ module Cucumber
14
+ module Parser
15
+ # Raised if Cucumber fails to parse a feature file
16
+ class SyntaxError < StandardError
17
+ def initialize(parser, file, line_offset)
18
+ tf = parser.terminal_failures
19
+ expected = tf.size == 1 ? tf[0].expected_string.inspect : "one of #{tf.map{|f| f.expected_string.inspect}.uniq*', '}"
20
+ line = parser.failure_line + line_offset
21
+ message = "#{file}:#{line}:#{parser.failure_column}: Parse error, expected #{expected}."
22
+ super(message)
23
+ end
24
+ end
25
+
26
+ module TreetopExt #:nodoc:
27
+ def parse_or_fail(source, file=nil, filter=nil, line_offset=0)
28
+ parse_tree = parse(source)
29
+ if parse_tree.nil?
30
+ raise Cucumber::Parser::SyntaxError.new(self, file, line_offset)
31
+ else
32
+ ast = parse_tree.build(filter) # may return nil if it doesn't match filter.
33
+ ast.file = file unless ast.nil?
34
+ ast
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ module Treetop #:nodoc:
42
+ module Runtime #:nodoc:
43
+ class SyntaxNode #:nodoc:
44
+ def line
45
+ input.line_of(interval.first)
46
+ end
47
+ end
48
+
49
+ class CompiledParser #:nodoc:
50
+ include Cucumber::Parser::TreetopExt
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,6 @@
1
+ require 'erb'
2
+ require 'cucumber/platform'
3
+ require 'cucumber/ast'
4
+ require 'cucumber/parser/treetop_ext'
5
+ require 'cucumber/parser/table'
6
+ require 'cucumber/parser/feature'
@@ -0,0 +1,27 @@
1
+ # Detect the platform we're running on so we can tweak behaviour
2
+ # in various places.
3
+ require 'rbconfig'
4
+ require 'yaml'
5
+
6
+ module Cucumber
7
+ LANGUAGE_FILE = File.expand_path(File.dirname(__FILE__) + '/languages.yml')
8
+ LANGUAGES = YAML.load_file(LANGUAGE_FILE)
9
+ BINARY = File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
10
+ LIBDIR = File.expand_path(File.dirname(__FILE__) + '/../../lib')
11
+ JRUBY = defined?(JRUBY_VERSION)
12
+ IRONRUBY = Config::CONFIG['sitedir'] =~ /IronRuby/
13
+ WINDOWS = Config::CONFIG['host_os'] =~ /mswin|mingw/
14
+ WINDOWS_MRI = WINDOWS && !JRUBY && !IRONRUBY
15
+ RAILS = defined?(Rails)
16
+ RUBY_BINARY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
17
+ RUBY_1_9 = RUBY_VERSION =~ /^1\.9/
18
+
19
+ class << self
20
+ attr_accessor :use_full_backtrace
21
+
22
+ def file_mode(m) #:nodoc:
23
+ RUBY_1_9 ? "#{m}:UTF-8" : m
24
+ end
25
+ end
26
+ self.use_full_backtrace = false
27
+ end
@@ -0,0 +1,8 @@
1
+ def Given(s):
2
+ register_rb_step_definition(s)
3
+
4
+ def register_rb_step_definition(s):
5
+ print "REGGED"
6
+
7
+ def set_py_language(py_language):
8
+ print "YAY"
@@ -0,0 +1,2 @@
1
+ import py_dsl
2
+
@@ -0,0 +1,68 @@
1
+ require 'rubypython'
2
+
3
+ module Cucumber
4
+ module PySupport
5
+ class PyLanguage
6
+ # include LanguageSupport::LanguageMethods
7
+
8
+ def initialize(step_mother)
9
+ @python_path = ENV['PYTHONPATH'] ? ENV['PYTHONPATH'].split(':') : []
10
+ add_to_python_path(File.dirname(__FILE__))
11
+
12
+ RubyPython.start
13
+ at_exit{RubyPython.stop}
14
+
15
+ import(File.dirname(__FILE__) + '/py_language.py')
16
+ end
17
+
18
+ def alias_adverbs(adverbs)
19
+ end
20
+
21
+ def step_definitions_for(py_file)
22
+ mod = import(py_file)
23
+ end
24
+
25
+ def snippet_text(step_keyword, step_name, multiline_arg_class = nil)
26
+ "python snippet: #{step_keyword}, #{step_name}"
27
+ end
28
+
29
+ protected
30
+
31
+ def begin_scenario
32
+ end
33
+
34
+ def end_scenario
35
+ end
36
+
37
+ private
38
+
39
+ def import(path)
40
+ modname = File.basename(path)[0...-File.extname(path).length]
41
+ begin
42
+ mod = RubyPython.import(modname)
43
+ rescue PythonError => e
44
+ e.message << "Couldn't load #{path}\nConsider adding #{File.expand_path(File.dirname(path))} to your PYTHONPATH"
45
+ raise e
46
+ end
47
+ end
48
+
49
+ def add_to_python_path(dir)
50
+ dir = File.expand_path(dir)
51
+ @python_path.unshift(dir)
52
+ @python_path.uniq!
53
+ ENV['PYTHONPATH'] = @python_path.join(':')
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ class String #:nodoc:
60
+ # RubyPython incorrectly to expects String#end_with? to exist.
61
+ unless defined? end_with? # 1.9
62
+ def end_with?(str) #:nodoc:
63
+ str = str.to_str
64
+ tail = self[-str.length, str.length]
65
+ tail == str
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,10 @@
1
+ require 'cucumber/rails/world'
2
+ require 'spec/expectations'
3
+ require 'spec/rails/matchers'
4
+
5
+ [Cucumber::Rails::World, ActionController::Integration::Session].each do |klass|
6
+ klass.class_eval do
7
+ include Spec::Matchers
8
+ include Spec::Rails::Matchers
9
+ end
10
+ end