casecumber 1.0.2.1

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 (563) hide show
  1. data/.gitattributes +1 -0
  2. data/.gitignore +26 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +7 -0
  6. data/.yardopts +0 -0
  7. data/Gemfile +2 -0
  8. data/Gemfile.lock +115 -0
  9. data/History.md +1702 -0
  10. data/LICENSE +22 -0
  11. data/README.md +25 -0
  12. data/Rakefile +12 -0
  13. data/bin/cucumber +22 -0
  14. data/cucumber.gemspec +60 -0
  15. data/cucumber.yml +20 -0
  16. data/examples/i18n/README.textile +18 -0
  17. data/examples/i18n/Rakefile +33 -0
  18. data/examples/i18n/ar/Rakefile +6 -0
  19. data/examples/i18n/ar/features/addition.feature +17 -0
  20. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +24 -0
  21. data/examples/i18n/ar/lib/calculator.rb +11 -0
  22. data/examples/i18n/bg/Rakefile +6 -0
  23. data/examples/i18n/bg/features/addition.feature +12 -0
  24. data/examples/i18n/bg/features/consecutive_calculations.feature +19 -0
  25. data/examples/i18n/bg/features/division.feature +17 -0
  26. data/examples/i18n/bg/features/step_definitons/calculator_steps.rb +24 -0
  27. data/examples/i18n/bg/features/support/env.rb +5 -0
  28. data/examples/i18n/bg/features/support/world.rb +8 -0
  29. data/examples/i18n/bg/lib/calculator.rb +24 -0
  30. data/examples/i18n/ca/Rakefile +6 -0
  31. data/examples/i18n/ca/features/step_definitons/calculator_steps.rb +21 -0
  32. data/examples/i18n/ca/features/suma.feature +17 -0
  33. data/examples/i18n/ca/lib/calculadora.rb +16 -0
  34. data/examples/i18n/da/Rakefile +6 -0
  35. data/examples/i18n/da/features/sammenlaegning.feature +18 -0
  36. data/examples/i18n/da/features/step_definitons/lommeregner_steps.rb +24 -0
  37. data/examples/i18n/da/lib/lommeregner.rb +11 -0
  38. data/examples/i18n/de/.gitignore +1 -0
  39. data/examples/i18n/de/Rakefile +6 -0
  40. data/examples/i18n/de/features/addition.feature +17 -0
  41. data/examples/i18n/de/features/division.feature +10 -0
  42. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +24 -0
  43. data/examples/i18n/de/lib/calculator.rb +14 -0
  44. data/examples/i18n/en-lol/Rakefile +4 -0
  45. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
  46. data/examples/i18n/en-lol/features/stuffing.feature +8 -0
  47. data/examples/i18n/en-lol/features/support/env.rb +7 -0
  48. data/examples/i18n/en-lol/lib/basket.rb +12 -0
  49. data/examples/i18n/en-lol/lib/belly.rb +11 -0
  50. data/examples/i18n/en/.gitignore +1 -0
  51. data/examples/i18n/en/Rakefile +6 -0
  52. data/examples/i18n/en/features/addition.feature +17 -0
  53. data/examples/i18n/en/features/division.feature +10 -0
  54. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +24 -0
  55. data/examples/i18n/en/lib/calculator.rb +14 -0
  56. data/examples/i18n/eo/.gitignore +1 -0
  57. data/examples/i18n/eo/Rakefile +6 -0
  58. data/examples/i18n/eo/features/adicio.feature +17 -0
  59. data/examples/i18n/eo/features/divido.feature +10 -0
  60. data/examples/i18n/eo/features/step_definitons/calculator_steps.rb +24 -0
  61. data/examples/i18n/eo/lib/calculator.rb +14 -0
  62. data/examples/i18n/es/Rakefile +6 -0
  63. data/examples/i18n/es/features/adicion.feature +17 -0
  64. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +21 -0
  65. data/examples/i18n/es/lib/calculador.rb +14 -0
  66. data/examples/i18n/et/Rakefile +6 -0
  67. data/examples/i18n/et/features/jagamine.feature +10 -0
  68. data/examples/i18n/et/features/liitmine.feature +17 -0
  69. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +24 -0
  70. data/examples/i18n/et/lib/kalkulaator.rb +14 -0
  71. data/examples/i18n/fi/.gitignore +1 -0
  72. data/examples/i18n/fi/Rakefile +6 -0
  73. data/examples/i18n/fi/features/jakolasku.feature +10 -0
  74. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
  75. data/examples/i18n/fi/features/yhteenlasku.feature +17 -0
  76. data/examples/i18n/fi/lib/laskin.rb +14 -0
  77. data/examples/i18n/fr/Rakefile +6 -0
  78. data/examples/i18n/fr/features/addition.feature +18 -0
  79. data/examples/i18n/fr/features/addition2.feature +17 -0
  80. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +32 -0
  81. data/examples/i18n/fr/features/support/env.rb +5 -0
  82. data/examples/i18n/fr/lib/calculatrice.rb +10 -0
  83. data/examples/i18n/he/Rakefile +6 -0
  84. data/examples/i18n/he/features/addition.feature +17 -0
  85. data/examples/i18n/he/features/division.feature +10 -0
  86. data/examples/i18n/he/features/step_definitons/calculator_steps.rb +24 -0
  87. data/examples/i18n/he/lib/calculator.rb +15 -0
  88. data/examples/i18n/hu/.gitignore +1 -0
  89. data/examples/i18n/hu/Rakefile +6 -0
  90. data/examples/i18n/hu/features/osszeadas.feature +17 -0
  91. data/examples/i18n/hu/features/osztas.feature +10 -0
  92. data/examples/i18n/hu/features/step_definitons/calculator_steps.rb +25 -0
  93. data/examples/i18n/hu/lib/calculator.rb +14 -0
  94. data/examples/i18n/id/.gitignore +1 -0
  95. data/examples/i18n/id/Rakefile +6 -0
  96. data/examples/i18n/id/features/addition.feature +17 -0
  97. data/examples/i18n/id/features/division.feature +10 -0
  98. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +24 -0
  99. data/examples/i18n/id/lib/calculator.rb +14 -0
  100. data/examples/i18n/it/Rakefile +6 -0
  101. data/examples/i18n/it/features/somma.feature +11 -0
  102. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +24 -0
  103. data/examples/i18n/it/lib/calcolatrice.rb +11 -0
  104. data/examples/i18n/ja/.gitignore +1 -0
  105. data/examples/i18n/ja/Rakefile +6 -0
  106. data/examples/i18n/ja/features/addition.feature +17 -0
  107. data/examples/i18n/ja/features/division.feature +10 -0
  108. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +19 -0
  109. data/examples/i18n/ja/features/support/env.rb +5 -0
  110. data/examples/i18n/ja/lib/calculator.rb +14 -0
  111. data/examples/i18n/ko/.gitignore +1 -0
  112. data/examples/i18n/ko/Rakefile +6 -0
  113. data/examples/i18n/ko/features/addition.feature +17 -0
  114. data/examples/i18n/ko/features/division.feature +11 -0
  115. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +24 -0
  116. data/examples/i18n/ko/lib/calculator.rb +14 -0
  117. data/examples/i18n/lt/.gitignore +1 -0
  118. data/examples/i18n/lt/Rakefile +6 -0
  119. data/examples/i18n/lt/features/addition.feature +17 -0
  120. data/examples/i18n/lt/features/division.feature +10 -0
  121. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +24 -0
  122. data/examples/i18n/lt/lib/calculator.rb +14 -0
  123. data/examples/i18n/lv/Rakefile +6 -0
  124. data/examples/i18n/lv/features/addition.feature +17 -0
  125. data/examples/i18n/lv/features/division.feature +10 -0
  126. data/examples/i18n/lv/features/step_definitons/calculator_steps.rb +24 -0
  127. data/examples/i18n/lv/lib/calculator.rb +14 -0
  128. data/examples/i18n/no/Rakefile +6 -0
  129. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +17 -0
  130. data/examples/i18n/no/features/summering.feature +19 -0
  131. data/examples/i18n/no/features/support/env.rb +6 -0
  132. data/examples/i18n/no/lib/kalkulator.rb +11 -0
  133. data/examples/i18n/pl/.gitignore +1 -0
  134. data/examples/i18n/pl/Rakefile +6 -0
  135. data/examples/i18n/pl/features/addition.feature +17 -0
  136. data/examples/i18n/pl/features/division.feature +10 -0
  137. data/examples/i18n/pl/features/step_definitons/calculator_steps.rb +24 -0
  138. data/examples/i18n/pl/features/support/env.rb +5 -0
  139. data/examples/i18n/pl/lib/calculator.rb +14 -0
  140. data/examples/i18n/pt/Rakefile +6 -0
  141. data/examples/i18n/pt/features/adicao.feature +11 -0
  142. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +20 -0
  143. data/examples/i18n/pt/features/support/env.rb +5 -0
  144. data/examples/i18n/pt/lib/calculadora.rb +10 -0
  145. data/examples/i18n/ro/Rakefile +6 -0
  146. data/examples/i18n/ro/features/adunare.feature +12 -0
  147. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +21 -0
  148. data/examples/i18n/ro/lib/calculator.rb +11 -0
  149. data/examples/i18n/ru/Rakefile +6 -0
  150. data/examples/i18n/ru/features/addition.feature +11 -0
  151. data/examples/i18n/ru/features/consecutive_calculations.feature +17 -0
  152. data/examples/i18n/ru/features/division.feature +16 -0
  153. data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
  154. data/examples/i18n/ru/features/support/env.rb +5 -0
  155. data/examples/i18n/ru/features/support/world.rb +8 -0
  156. data/examples/i18n/ru/lib/calculator.rb +24 -0
  157. data/examples/i18n/sk/.gitignore +1 -0
  158. data/examples/i18n/sk/Rakefile +6 -0
  159. data/examples/i18n/sk/features/addition.feature +17 -0
  160. data/examples/i18n/sk/features/division.feature +10 -0
  161. data/examples/i18n/sk/features/step_definitons/calculator_steps.rb +24 -0
  162. data/examples/i18n/sk/lib/calculator.rb +14 -0
  163. data/examples/i18n/sr-Cyrl/Rakefile +6 -0
  164. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +18 -0
  165. data/examples/i18n/sr-Cyrl/features/step_definitons/calculator_steps.rb +20 -0
  166. data/examples/i18n/sr-Cyrl/features/support/env.rb +5 -0
  167. data/examples/i18n/sr-Cyrl/lib/calculator.rb +12 -0
  168. data/examples/i18n/sr-Latn/Rakefile +6 -0
  169. data/examples/i18n/sr-Latn/features/sabiranje.feature +18 -0
  170. data/examples/i18n/sr-Latn/features/step_definitons/calculator_steps.rb +24 -0
  171. data/examples/i18n/sr-Latn/lib/calculator.rb +12 -0
  172. data/examples/i18n/sv/Rakefile +6 -0
  173. data/examples/i18n/sv/features/step_definitons/kalkulator_steps.rb +24 -0
  174. data/examples/i18n/sv/features/summering.feature +18 -0
  175. data/examples/i18n/sv/lib/kalkulator.rb +11 -0
  176. data/examples/i18n/tr/.gitignore +1 -0
  177. data/examples/i18n/tr/Rakefile +6 -0
  178. data/examples/i18n/tr/features/bolme.feature +10 -0
  179. data/examples/i18n/tr/features/step_definitons/hesap_makinesi_adimlari.rb +24 -0
  180. data/examples/i18n/tr/features/toplama.feature +18 -0
  181. data/examples/i18n/tr/lib/hesap_makinesi.rb +15 -0
  182. data/examples/i18n/uk/Rakefile +6 -0
  183. data/examples/i18n/uk/features/addition.feature +11 -0
  184. data/examples/i18n/uk/features/consecutive_calculations.feature +17 -0
  185. data/examples/i18n/uk/features/division.feature +16 -0
  186. data/examples/i18n/uk/features/step_definitons/calculator_steps.rb +19 -0
  187. data/examples/i18n/uk/features/support/env.rb +5 -0
  188. data/examples/i18n/uk/features/support/world.rb +8 -0
  189. data/examples/i18n/uk/lib/calculator.rb +24 -0
  190. data/examples/i18n/uz/Rakefile +6 -0
  191. data/examples/i18n/uz/features/addition.feature +10 -0
  192. data/examples/i18n/uz/features/consecutive_calculations.feature +17 -0
  193. data/examples/i18n/uz/features/division.feature +17 -0
  194. data/examples/i18n/uz/features/step_definitons/calculator_steps.rb +19 -0
  195. data/examples/i18n/uz/features/support/env.rb +5 -0
  196. data/examples/i18n/uz/features/support/world.rb +8 -0
  197. data/examples/i18n/uz/lib/calculator.rb +24 -0
  198. data/examples/i18n/zh-CN/Rakefile +4 -0
  199. data/examples/i18n/zh-CN/features/addition.feature +18 -0
  200. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +26 -0
  201. data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
  202. data/examples/i18n/zh-TW/.gitignore +1 -0
  203. data/examples/i18n/zh-TW/Rakefile +4 -0
  204. data/examples/i18n/zh-TW/features/addition.feature +17 -0
  205. data/examples/i18n/zh-TW/features/division.feature +11 -0
  206. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
  207. data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
  208. data/examples/python/README.textile +7 -0
  209. data/examples/python/Rakefile +4 -0
  210. data/examples/python/features/fibonacci.feature +19 -0
  211. data/examples/python/features/step_definitions/fib_steps.py +11 -0
  212. data/examples/python/lib/.gitignore +1 -0
  213. data/examples/python/lib/fib.py +7 -0
  214. data/examples/ramaze/README.textile +7 -0
  215. data/examples/ramaze/Rakefile +6 -0
  216. data/examples/ramaze/app.rb +21 -0
  217. data/examples/ramaze/features/add.feature +11 -0
  218. data/examples/ramaze/features/step_definitions/add_steps.rb +15 -0
  219. data/examples/ramaze/features/support/env.rb +32 -0
  220. data/examples/ramaze/layout/default.html.erb +8 -0
  221. data/examples/ramaze/view/index.html.erb +5 -0
  222. data/examples/rspec_doubles/Rakefile +4 -0
  223. data/examples/rspec_doubles/features/mocking.feature +9 -0
  224. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +19 -0
  225. data/examples/rspec_doubles/features/support/env.rb +12 -0
  226. data/examples/ruby2python/README.textile +7 -0
  227. data/examples/ruby2python/Rakefile +4 -0
  228. data/examples/ruby2python/features/fibonacci.feature +19 -0
  229. data/examples/ruby2python/features/step_definitions/fib_steps.rb +7 -0
  230. data/examples/ruby2python/features/support/env.rb +21 -0
  231. data/examples/ruby2python/lib/.gitignore +1 -0
  232. data/examples/ruby2python/lib/fib.py +7 -0
  233. data/examples/sinatra/README.textile +13 -0
  234. data/examples/sinatra/Rakefile +6 -0
  235. data/examples/sinatra/app.rb +14 -0
  236. data/examples/sinatra/features/add.feature +11 -0
  237. data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
  238. data/examples/sinatra/features/support/env.rb +10 -0
  239. data/examples/sinatra/views/add.erb +7 -0
  240. data/examples/sinatra/views/layout.erb +8 -0
  241. data/examples/tcl/README.textile +11 -0
  242. data/examples/tcl/Rakefile +6 -0
  243. data/examples/tcl/features/fibonnacci.feature +17 -0
  244. data/examples/tcl/features/step_definitions/fib_steps.rb +7 -0
  245. data/examples/tcl/features/support/env.rb +6 -0
  246. data/examples/tcl/src/fib.tcl +3 -0
  247. data/examples/test_unit/Rakefile +6 -0
  248. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +23 -0
  249. data/examples/test_unit/features/test_unit.feature +9 -0
  250. data/examples/v8/Rakefile +6 -0
  251. data/examples/v8/features/fibonacci.feature +43 -0
  252. data/examples/v8/features/step_definitions/fib_steps.js +49 -0
  253. data/examples/v8/features/support/env.js +14 -0
  254. data/examples/v8/lib/fibonacci.js +19 -0
  255. data/examples/watir/.gitignore +2 -0
  256. data/examples/watir/README.textile +16 -0
  257. data/examples/watir/Rakefile +12 -0
  258. data/examples/watir/cucumber.yml +1 -0
  259. data/examples/watir/features/search.feature +12 -0
  260. data/examples/watir/features/step_definitions/search_steps.rb +26 -0
  261. data/examples/watir/features/support/env.rb +32 -0
  262. data/examples/watir/features/support/screenshots.rb +47 -0
  263. data/features/background.feature +498 -0
  264. data/features/bootstrap.feature +13 -0
  265. data/features/custom_formatter.feature +41 -0
  266. data/features/execute_with_tag_filter.feature +63 -0
  267. data/features/hooks.feature +59 -0
  268. data/features/iso-8859-1.feature +6 -0
  269. data/features/json_formatter.feature +248 -0
  270. data/features/stats_formatters.feature +70 -0
  271. data/features/step_definitions/cucumber-features/cucumber_ruby_mappings.rb +168 -0
  272. data/features/step_definitions/cucumber_steps.rb +23 -0
  273. data/features/step_definitions/iso-8859-1_steps.rb +24 -0
  274. data/features/support/env.rb +26 -0
  275. data/features/tagged_hooks.feature +217 -0
  276. data/features/transforms.feature +63 -0
  277. data/fixtures/json/features/background.feature +7 -0
  278. data/fixtures/json/features/embed.feature +4 -0
  279. data/fixtures/json/features/one_passing_one_failing.feature +11 -0
  280. data/fixtures/json/features/step_definitions/steps.rb +32 -0
  281. data/fixtures/json/features/tables.feature +13 -0
  282. data/fixtures/junit/features/one_passing_one_failing.feature +8 -0
  283. data/fixtures/junit/features/pending.feature +7 -0
  284. data/fixtures/junit/features/scenario_outline.feature +9 -0
  285. data/fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature +8 -0
  286. data/fixtures/junit/features/step_definitions/steps.rb +11 -0
  287. data/fixtures/self_test/.gitignore +1 -0
  288. data/fixtures/self_test/README.textile +6 -0
  289. data/fixtures/self_test/Rakefile +6 -0
  290. data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  291. data/fixtures/self_test/features/failing_expectation.feature +4 -0
  292. data/fixtures/self_test/features/lots_of_undefined.feature +8 -0
  293. data/fixtures/self_test/features/multiline_name.feature +27 -0
  294. data/fixtures/self_test/features/outline_sample.feature +15 -0
  295. data/fixtures/self_test/features/sample.feature +21 -0
  296. data/fixtures/self_test/features/search_sample.feature +32 -0
  297. data/fixtures/self_test/features/step_definitions/sample_steps.rb +84 -0
  298. data/fixtures/self_test/features/support/bubble_256x256.png +0 -0
  299. data/fixtures/self_test/features/support/env.rb +26 -0
  300. data/fixtures/self_test/features/tags_sample.feature +17 -0
  301. data/fixtures/self_test/features/tons_of_cukes.feature +52 -0
  302. data/fixtures/self_test/features/undefined_multiline_args.feature +12 -0
  303. data/fixtures/self_test/list-of-features.txt +1 -0
  304. data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +8 -0
  305. data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +8 -0
  306. data/fixtures/tickets/Rakefile +20 -0
  307. data/fixtures/tickets/features.html +138 -0
  308. data/fixtures/tickets/features/172.feature +28 -0
  309. data/fixtures/tickets/features/177/1.feature +28 -0
  310. data/fixtures/tickets/features/177/2.feature +20 -0
  311. data/fixtures/tickets/features/177/3.feature +18 -0
  312. data/fixtures/tickets/features/180.feature +7 -0
  313. data/fixtures/tickets/features/229/tagged_hooks.feature +8 -0
  314. data/fixtures/tickets/features/229/tagged_hooks.rb +14 -0
  315. data/fixtures/tickets/features/236.feature +13 -0
  316. data/fixtures/tickets/features/241.feature +12 -0
  317. data/fixtures/tickets/features/246.feature +4 -0
  318. data/fixtures/tickets/features/248.feature +11 -0
  319. data/fixtures/tickets/features/270/back.feature +14 -0
  320. data/fixtures/tickets/features/270/back.steps.rb +14 -0
  321. data/fixtures/tickets/features/272/hooks.feature +26 -0
  322. data/fixtures/tickets/features/272/hooks_steps.rb +53 -0
  323. data/fixtures/tickets/features/279/py_string_indent.feature +25 -0
  324. data/fixtures/tickets/features/279/py_string_indent.steps.rb +12 -0
  325. data/fixtures/tickets/features/279/wrong.feature_ +11 -0
  326. data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +6 -0
  327. data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +12 -0
  328. data/fixtures/tickets/features/306/only_background.feature +4 -0
  329. data/fixtures/tickets/features/around_timeout.feature +6 -0
  330. data/fixtures/tickets/features/gherkin_67.feature +12 -0
  331. data/fixtures/tickets/features/gherkin_68.feature +4 -0
  332. data/fixtures/tickets/features/half_manual.feature +11 -0
  333. data/fixtures/tickets/features/lib/eatting_machine.rb +18 -0
  334. data/fixtures/tickets/features/lib/pantry.rb +20 -0
  335. data/fixtures/tickets/features/scenario_outline.feature +95 -0
  336. data/fixtures/tickets/features/step_definitons/246_steps.rb +3 -0
  337. data/fixtures/tickets/features/step_definitons/248_steps.rb +15 -0
  338. data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +9 -0
  339. data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +11 -0
  340. data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
  341. data/fixtures/tickets/features/step_definitons/tickets_steps.rb +88 -0
  342. data/fixtures/tickets/features/table_diffing.feature +13 -0
  343. data/fixtures/tickets/features/tickets.feature +28 -0
  344. data/gem_tasks/contributors.rake +15 -0
  345. data/gem_tasks/cucumber.rake +21 -0
  346. data/gem_tasks/downloads.rb +7 -0
  347. data/gem_tasks/environment.rake +7 -0
  348. data/gem_tasks/examples.rake +11 -0
  349. data/gem_tasks/fix_cr_lf.rake +10 -0
  350. data/gem_tasks/flog.rake +4 -0
  351. data/gem_tasks/rspec.rake +8 -0
  352. data/gem_tasks/sass.rake +4 -0
  353. data/gem_tasks/stats +14 -0
  354. data/gem_tasks/versions.txt +74 -0
  355. data/gem_tasks/yard.rake +0 -0
  356. data/gem_tasks/yard/default/layout/html/bubble_32x32.png +0 -0
  357. data/gem_tasks/yard/default/layout/html/footer.erb +5 -0
  358. data/gem_tasks/yard/default/layout/html/index.erb +1 -0
  359. data/gem_tasks/yard/default/layout/html/layout.erb +25 -0
  360. data/gem_tasks/yard/default/layout/html/logo.erb +1 -0
  361. data/gem_tasks/yard/default/layout/html/setup.rb +4 -0
  362. data/legacy_features/announce.feature +152 -0
  363. data/legacy_features/api/list_step_defs_as_json.feature +50 -0
  364. data/legacy_features/api/run_cli_main_with_existing_runtime.feature +34 -0
  365. data/legacy_features/around_hooks.feature +232 -0
  366. data/legacy_features/bug_371.feature +32 -0
  367. data/legacy_features/bug_464.feature +16 -0
  368. data/legacy_features/bug_475.feature +42 -0
  369. data/legacy_features/bug_585_tab_indentation.feature +22 -0
  370. data/legacy_features/bug_600.feature +73 -0
  371. data/legacy_features/call_steps_from_stepdefs.feature +154 -0
  372. data/legacy_features/cucumber_cli.feature +591 -0
  373. data/legacy_features/cucumber_cli_outlines.feature +117 -0
  374. data/legacy_features/default_snippets.feature +42 -0
  375. data/legacy_features/diffing.feature +25 -0
  376. data/legacy_features/drb_server_integration.feature +174 -0
  377. data/legacy_features/exception_in_after_block.feature +127 -0
  378. data/legacy_features/exception_in_after_step_block.feature +104 -0
  379. data/legacy_features/exception_in_before_block.feature +98 -0
  380. data/legacy_features/exclude_files.feature +20 -0
  381. data/legacy_features/expand.feature +60 -0
  382. data/legacy_features/html_formatter.feature +8 -0
  383. data/legacy_features/html_formatter/a.html +561 -0
  384. data/legacy_features/junit_formatter.feature +164 -0
  385. data/legacy_features/language_from_header.feature +30 -0
  386. data/legacy_features/language_help.feature +77 -0
  387. data/legacy_features/listener_debugger_formatter.feature +42 -0
  388. data/legacy_features/multiline_names.feature +44 -0
  389. data/legacy_features/post_configuration_hook.feature +50 -0
  390. data/legacy_features/profiles.feature +126 -0
  391. data/legacy_features/rake_task.feature +152 -0
  392. data/legacy_features/report_called_undefined_steps.feature +34 -0
  393. data/legacy_features/rerun_formatter.feature +52 -0
  394. data/legacy_features/simplest.feature +11 -0
  395. data/legacy_features/snippet.feature +23 -0
  396. data/legacy_features/snippets_when_using_star_keyword.feature +36 -0
  397. data/legacy_features/step_definitions/cucumber_steps.rb +172 -0
  398. data/legacy_features/step_definitions/extra_steps.rb +2 -0
  399. data/legacy_features/step_definitions/simplest_steps.rb +3 -0
  400. data/legacy_features/step_definitions/wire_steps.rb +34 -0
  401. data/legacy_features/support/env.rb +157 -0
  402. data/legacy_features/support/env.rb.simplest +7 -0
  403. data/legacy_features/support/fake_wire_server.rb +77 -0
  404. data/legacy_features/table_diffing.feature +45 -0
  405. data/legacy_features/table_mapping.feature +34 -0
  406. data/legacy_features/transform.feature +245 -0
  407. data/legacy_features/unicode_table.feature +35 -0
  408. data/legacy_features/wire_protocol.feature +332 -0
  409. data/legacy_features/wire_protocol_erb.feature +57 -0
  410. data/legacy_features/wire_protocol_table_diffing.feature +119 -0
  411. data/legacy_features/wire_protocol_tags.feature +87 -0
  412. data/legacy_features/wire_protocol_timeouts.feature +63 -0
  413. data/legacy_features/work_in_progress.feature +156 -0
  414. data/lib/README.rdoc +12 -0
  415. data/lib/autotest/cucumber.rb +6 -0
  416. data/lib/autotest/cucumber_mixin.rb +135 -0
  417. data/lib/autotest/cucumber_rails.rb +6 -0
  418. data/lib/autotest/cucumber_rails_rspec.rb +6 -0
  419. data/lib/autotest/cucumber_rails_rspec2.rb +6 -0
  420. data/lib/autotest/cucumber_rspec.rb +6 -0
  421. data/lib/autotest/cucumber_rspec2.rb +6 -0
  422. data/lib/autotest/discover.rb +9 -0
  423. data/lib/cucumber.rb +27 -0
  424. data/lib/cucumber/ast.rb +30 -0
  425. data/lib/cucumber/ast/background.rb +101 -0
  426. data/lib/cucumber/ast/comment.rb +31 -0
  427. data/lib/cucumber/ast/doc_string.rb +80 -0
  428. data/lib/cucumber/ast/examples.rb +46 -0
  429. data/lib/cucumber/ast/feature.rb +106 -0
  430. data/lib/cucumber/ast/feature_element.rb +78 -0
  431. data/lib/cucumber/ast/features.rb +35 -0
  432. data/lib/cucumber/ast/names.rb +13 -0
  433. data/lib/cucumber/ast/outline_table.rb +187 -0
  434. data/lib/cucumber/ast/scenario.rb +119 -0
  435. data/lib/cucumber/ast/scenario_outline.rb +125 -0
  436. data/lib/cucumber/ast/step.rb +126 -0
  437. data/lib/cucumber/ast/step_collection.rb +76 -0
  438. data/lib/cucumber/ast/step_invocation.rb +206 -0
  439. data/lib/cucumber/ast/table.rb +689 -0
  440. data/lib/cucumber/ast/tags.rb +28 -0
  441. data/lib/cucumber/ast/tree_walker.rb +183 -0
  442. data/lib/cucumber/ast/visitor.rb +11 -0
  443. data/lib/cucumber/broadcaster.rb +13 -0
  444. data/lib/cucumber/cli/configuration.rb +209 -0
  445. data/lib/cucumber/cli/drb_client.rb +43 -0
  446. data/lib/cucumber/cli/main.rb +78 -0
  447. data/lib/cucumber/cli/options.rb +410 -0
  448. data/lib/cucumber/cli/profile_loader.rb +91 -0
  449. data/lib/cucumber/configuration.rb +49 -0
  450. data/lib/cucumber/constantize.rb +34 -0
  451. data/lib/cucumber/core_ext/disable_mini_and_test_unit_autorun.rb +25 -0
  452. data/lib/cucumber/core_ext/instance_exec.rb +98 -0
  453. data/lib/cucumber/core_ext/proc.rb +34 -0
  454. data/lib/cucumber/core_ext/string.rb +9 -0
  455. data/lib/cucumber/errors.rb +40 -0
  456. data/lib/cucumber/feature_file.rb +101 -0
  457. data/lib/cucumber/formatter/ansicolor.rb +160 -0
  458. data/lib/cucumber/formatter/console.rb +187 -0
  459. data/lib/cucumber/formatter/cucumber.css +279 -0
  460. data/lib/cucumber/formatter/cucumber.sass +247 -0
  461. data/lib/cucumber/formatter/debug.rb +33 -0
  462. data/lib/cucumber/formatter/duration.rb +13 -0
  463. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +83 -0
  464. data/lib/cucumber/formatter/gpretty.rb +24 -0
  465. data/lib/cucumber/formatter/html.rb +649 -0
  466. data/lib/cucumber/formatter/io.rb +31 -0
  467. data/lib/cucumber/formatter/jquery-min.js +154 -0
  468. data/lib/cucumber/formatter/json.rb +31 -0
  469. data/lib/cucumber/formatter/json_pretty.rb +13 -0
  470. data/lib/cucumber/formatter/junit.rb +155 -0
  471. data/lib/cucumber/formatter/ordered_xml_markup.rb +24 -0
  472. data/lib/cucumber/formatter/pdf.rb +244 -0
  473. data/lib/cucumber/formatter/pretty.rb +237 -0
  474. data/lib/cucumber/formatter/progress.rb +92 -0
  475. data/lib/cucumber/formatter/rerun.rb +68 -0
  476. data/lib/cucumber/formatter/stepdefs.rb +14 -0
  477. data/lib/cucumber/formatter/steps.rb +49 -0
  478. data/lib/cucumber/formatter/summary.rb +35 -0
  479. data/lib/cucumber/formatter/unicode.rb +79 -0
  480. data/lib/cucumber/formatter/usage.rb +127 -0
  481. data/lib/cucumber/js_support/js_dsl.js +57 -0
  482. data/lib/cucumber/js_support/js_language.rb +185 -0
  483. data/lib/cucumber/js_support/js_snippets.rb +27 -0
  484. data/lib/cucumber/language_support.rb +30 -0
  485. data/lib/cucumber/language_support/language_methods.rb +129 -0
  486. data/lib/cucumber/parser.rb +2 -0
  487. data/lib/cucumber/parser/gherkin_builder.rb +129 -0
  488. data/lib/cucumber/platform.rb +29 -0
  489. data/lib/cucumber/py_support/py_dsl.py +10 -0
  490. data/lib/cucumber/py_support/py_language.py +10 -0
  491. data/lib/cucumber/py_support/py_language.rb +84 -0
  492. data/lib/cucumber/rake/task.rb +225 -0
  493. data/lib/cucumber/rb_support/rb_dsl.rb +112 -0
  494. data/lib/cucumber/rb_support/rb_hook.rb +18 -0
  495. data/lib/cucumber/rb_support/rb_language.rb +195 -0
  496. data/lib/cucumber/rb_support/rb_step_definition.rb +82 -0
  497. data/lib/cucumber/rb_support/rb_transform.rb +54 -0
  498. data/lib/cucumber/rb_support/rb_world.rb +103 -0
  499. data/lib/cucumber/rb_support/regexp_argument_matcher.rb +21 -0
  500. data/lib/cucumber/rspec/disable_option_parser.rb +23 -0
  501. data/lib/cucumber/rspec/doubles.rb +16 -0
  502. data/lib/cucumber/runtime.rb +145 -0
  503. data/lib/cucumber/runtime/features_loader.rb +62 -0
  504. data/lib/cucumber/runtime/for_programming_languages.rb +67 -0
  505. data/lib/cucumber/runtime/results.rb +64 -0
  506. data/lib/cucumber/runtime/support_code.rb +203 -0
  507. data/lib/cucumber/runtime/user_interface.rb +81 -0
  508. data/lib/cucumber/step_argument.rb +9 -0
  509. data/lib/cucumber/step_definition_light.rb +20 -0
  510. data/lib/cucumber/step_definitions.rb +14 -0
  511. data/lib/cucumber/step_match.rb +115 -0
  512. data/lib/cucumber/step_mother.rb +10 -0
  513. data/lib/cucumber/wire_support/configuration.rb +31 -0
  514. data/lib/cucumber/wire_support/connection.rb +55 -0
  515. data/lib/cucumber/wire_support/request_handler.rb +32 -0
  516. data/lib/cucumber/wire_support/wire_exception.rb +32 -0
  517. data/lib/cucumber/wire_support/wire_language.rb +54 -0
  518. data/lib/cucumber/wire_support/wire_packet.rb +32 -0
  519. data/lib/cucumber/wire_support/wire_protocol.rb +44 -0
  520. data/lib/cucumber/wire_support/wire_protocol/requests.rb +123 -0
  521. data/lib/cucumber/wire_support/wire_step_definition.rb +26 -0
  522. data/spec/cucumber/ast/background_spec.rb +115 -0
  523. data/spec/cucumber/ast/doc_string_spec.rb +40 -0
  524. data/spec/cucumber/ast/feature_factory.rb +61 -0
  525. data/spec/cucumber/ast/feature_spec.rb +63 -0
  526. data/spec/cucumber/ast/outline_table_spec.rb +21 -0
  527. data/spec/cucumber/ast/scenario_outline_spec.rb +69 -0
  528. data/spec/cucumber/ast/step_spec.rb +66 -0
  529. data/spec/cucumber/ast/table_spec.rb +484 -0
  530. data/spec/cucumber/ast/tree_walker_spec.rb +11 -0
  531. data/spec/cucumber/broadcaster_spec.rb +15 -0
  532. data/spec/cucumber/cli/configuration_spec.rb +431 -0
  533. data/spec/cucumber/cli/drb_client_spec.rb +76 -0
  534. data/spec/cucumber/cli/main_spec.rb +137 -0
  535. data/spec/cucumber/cli/options_spec.rb +358 -0
  536. data/spec/cucumber/cli/profile_loader_spec.rb +35 -0
  537. data/spec/cucumber/configuration_spec.rb +23 -0
  538. data/spec/cucumber/core_ext/proc_spec.rb +68 -0
  539. data/spec/cucumber/formatter/ansicolor_spec.rb +31 -0
  540. data/spec/cucumber/formatter/duration_spec.rb +22 -0
  541. data/spec/cucumber/formatter/html_spec.rb +256 -0
  542. data/spec/cucumber/formatter/junit_spec.rb +125 -0
  543. data/spec/cucumber/formatter/progress_spec.rb +38 -0
  544. data/spec/cucumber/formatter/spec_helper.rb +52 -0
  545. data/spec/cucumber/rake/forked_spec.rb +62 -0
  546. data/spec/cucumber/rake/rcov_spec.rb +71 -0
  547. data/spec/cucumber/rb_support/rb_language_spec.rb +282 -0
  548. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +98 -0
  549. data/spec/cucumber/rb_support/rb_transform_spec.rb +21 -0
  550. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +18 -0
  551. data/spec/cucumber/runtime/support_code_spec.rb +112 -0
  552. data/spec/cucumber/runtime_spec.rb +41 -0
  553. data/spec/cucumber/sell_cucumbers.feature +19 -0
  554. data/spec/cucumber/step_match_spec.rb +69 -0
  555. data/spec/cucumber/wire_support/configuration_spec.rb +51 -0
  556. data/spec/cucumber/wire_support/connection_spec.rb +46 -0
  557. data/spec/cucumber/wire_support/wire_exception_spec.rb +44 -0
  558. data/spec/cucumber/wire_support/wire_language_spec.rb +47 -0
  559. data/spec/cucumber/wire_support/wire_packet_spec.rb +40 -0
  560. data/spec/cucumber/wire_support/wire_step_definition_spec.rb +20 -0
  561. data/spec/cucumber/world/pending_spec.rb +46 -0
  562. data/spec/spec_helper.rb +22 -0
  563. metadata +1044 -0
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ module Cucumber
4
+ module Cli
5
+ describe DRbClient do
6
+ before(:each) do
7
+ @args = ['features']
8
+ @error_stream = StringIO.new
9
+ @out_stream = StringIO.new
10
+
11
+ @drb_object = mock('DRbObject', :run => true)
12
+ DRbObject.stub!(:new_with_uri).and_return(@drb_object)
13
+ end
14
+
15
+ it "starts up a druby service" do
16
+ DRb.should_receive(:start_service).with("druby://localhost:0")
17
+ DRbClient.run(@args, @error_stream, @out_stream)
18
+ end
19
+
20
+ it "connects to the DRb server" do
21
+ DRbObject.should_receive(:new_with_uri).with("druby://127.0.0.1:8990")
22
+ DRbClient.run(@args, @error_stream, @out_stream)
23
+ end
24
+
25
+ it "runs the features on the DRb server" do
26
+ @drb_object.should_receive(:run).with(@args, @error_stream, @out_stream)
27
+ DRbClient.run(@args, @error_stream, @out_stream)
28
+ end
29
+
30
+ it "returns raises an error when it can't connect to the server" do
31
+ DRbObject.stub!(:new_with_uri).and_raise(DRb::DRbConnError)
32
+ lambda { DRbClient.run(@args, @error_stream, @out_stream) }.should raise_error(DRbClientError, "No DRb server is running.")
33
+ end
34
+
35
+ it "returns the result from the DRb server call" do
36
+ @drb_object.should_receive(:run).and_return('foo')
37
+ DRbClient.run(@args, @error_stream, @out_stream).should == 'foo'
38
+ end
39
+
40
+ context "with $CUCUMBER_DRB set" do
41
+ before do
42
+ @original_env = ENV['CUCUMBER_DRB']
43
+ ENV['CUCUMBER_DRB'] = '90000'
44
+ end
45
+ after do
46
+ ENV['CUCUMBER_DRB'] = @original_env
47
+ end
48
+ it "connects to specified DRb server" do
49
+ DRbObject.should_receive(:new_with_uri).with("druby://127.0.0.1:90000")
50
+ DRbClient.run(@args, @error_stream, @out_stream)
51
+ end
52
+ end
53
+
54
+ context "with provided drb_port" do
55
+ before do
56
+ @args = @args + ['--port', '8000']
57
+ end
58
+ it "connects to specified drb port" do
59
+ DRbObject.should_receive(:new_with_uri).with("druby://127.0.0.1:8000")
60
+ DRbClient.run(@args, @error_stream, @out_stream, 8000)
61
+ end
62
+ it "prefers configuration to environment" do
63
+ original = ENV['CUCUMBER_DRB'] = original
64
+ begin
65
+ ENV['CUCUMBER_DRB'] = "4000"
66
+ DRbObject.should_receive(:new_with_uri).with("druby://127.0.0.1:8000")
67
+ DRbClient.run(@args, @error_stream, @out_stream, 8000)
68
+ ensure
69
+ ENV['CUCUMBER_DRB'] = original
70
+ end
71
+ end
72
+ end
73
+
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,137 @@
1
+ require 'spec_helper'
2
+ require 'yaml'
3
+ require 'cucumber/parser/gherkin_builder'
4
+ require 'gherkin/formatter/model'
5
+
6
+ module Cucumber
7
+ module Cli
8
+ describe Main do
9
+ before(:each) do
10
+ @out = StringIO.new
11
+ @err = StringIO.new
12
+ Kernel.stub!(:exit).and_return(nil)
13
+ File.stub!(:exist?).and_return(false) # When Configuration checks for cucumber.yml
14
+ Dir.stub!(:[]).and_return([]) # to prevent cucumber's features dir to being laoded
15
+ end
16
+
17
+ let(:args) { [] }
18
+ let(:out_stream) { nil }
19
+ let(:err_stream) { nil }
20
+ subject { Main.new(args, out_stream, err_stream)}
21
+
22
+ describe "#execute!" do
23
+ context "passed an existing runtime" do
24
+ let(:existing_runtime) { double('runtime').as_null_object }
25
+
26
+ def do_execute
27
+ subject.execute!(existing_runtime)
28
+ end
29
+
30
+ it "configures that runtime" do
31
+ expected_configuration = double('Configuration', :drb? => false).as_null_object
32
+ Configuration.stub!(:new => expected_configuration)
33
+ existing_runtime.should_receive(:configure).with(expected_configuration)
34
+ do_execute
35
+ end
36
+
37
+ it "uses that runtime for running and reporting results" do
38
+ expected_results = double('results', :failure? => true)
39
+ existing_runtime.should_receive(:run!)
40
+ existing_runtime.stub!(:results).and_return(expected_results)
41
+ do_execute.should == expected_results.failure?
42
+ end
43
+ end
44
+ end
45
+
46
+ describe "verbose mode" do
47
+
48
+ before(:each) do
49
+ b = Cucumber::Parser::GherkinBuilder.new
50
+ @empty_feature = b.feature(Gherkin::Formatter::Model::Feature.new([], [], "Feature", "Foo", "", 99))
51
+ end
52
+
53
+ it "should show feature files parsed" do
54
+ @cli = Main.new(%w{--verbose example.feature}, @out)
55
+ @cli.stub!(:require)
56
+
57
+ Cucumber::FeatureFile.stub!(:new).and_return(mock("feature file", :parse => @empty_feature))
58
+
59
+ @cli.execute!
60
+
61
+ @out.string.should include('example.feature')
62
+ end
63
+
64
+ end
65
+
66
+ describe "--format with class" do
67
+ describe "in module" do
68
+ it "should resolve each module until it gets Formatter class" do
69
+ cli = Main.new(%w{--format ZooModule::MonkeyFormatterClass}, nil)
70
+ mock_module = mock('module')
71
+ Object.stub!(:const_defined?).and_return(true)
72
+ mock_module.stub!(:const_defined?).and_return(true)
73
+
74
+ f = stub('formatter').as_null_object
75
+
76
+ Object.should_receive(:const_get).with('ZooModule').and_return(mock_module)
77
+ mock_module.should_receive(:const_get).with('MonkeyFormatterClass').and_return(mock('formatter class', :new => f))
78
+
79
+ cli.execute!
80
+ end
81
+ end
82
+ end
83
+
84
+ [ProfilesNotDefinedError, YmlLoadError, ProfileNotFound].each do |exception_klass|
85
+
86
+ it "rescues #{exception_klass}, prints the message to the error stream and returns true" do
87
+ Configuration.stub!(:new).and_return(configuration = mock('configuration'))
88
+ configuration.stub!(:parse!).and_raise(exception_klass.new("error message"))
89
+
90
+ main = Main.new('', out = StringIO.new, error = StringIO.new)
91
+ main.execute!.should be_true
92
+ error.string.should == "error message\n"
93
+ end
94
+ end
95
+
96
+ context "--drb" do
97
+ before(:each) do
98
+ @configuration = mock('Configuration', :drb? => true).as_null_object
99
+ Configuration.stub!(:new).and_return(@configuration)
100
+
101
+ @args = ['features']
102
+
103
+ @cli = Main.new(@args, @out, @err)
104
+ @step_mother = mock('StepMother').as_null_object
105
+ StepMother.stub!(:new).and_return(@step_mother)
106
+ end
107
+
108
+ it "delegates the execution to the DRB client passing the args and streams" do
109
+ @configuration.stub :drb_port => 1450
110
+ DRbClient.should_receive(:run).with(@args, @err, @out, 1450).and_return(true)
111
+ @cli.execute!
112
+ end
113
+
114
+ it "returns the result from the DRbClient" do
115
+ DRbClient.stub!(:run).and_return('foo')
116
+ @cli.execute!.should == 'foo'
117
+ end
118
+
119
+ it "ceases execution if the DrbClient is able to perform the execution" do
120
+ DRbClient.stub!(:run).and_return(true)
121
+ @configuration.should_not_receive(:build_formatter_broadcaster)
122
+ @cli.execute!
123
+ end
124
+
125
+ context "when the DrbClient is unable to perfrom the execution" do
126
+ before { DRbClient.stub!(:run).and_raise(DRbClientError.new('error message.')) }
127
+
128
+ it "alerts the user that execution will be performed locally" do
129
+ @cli.execute!
130
+ @err.string.should include("WARNING: error message. Running features locally:")
131
+ end
132
+
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,358 @@
1
+ require 'spec_helper'
2
+ require 'yaml'
3
+ require 'cucumber/cli/options'
4
+
5
+ module Cucumber
6
+ module Cli
7
+ describe Options do
8
+
9
+ def given_cucumber_yml_defined_as(hash_or_string)
10
+ File.stub!(:exist?).and_return(true)
11
+ cucumber_yml = hash_or_string.is_a?(Hash) ? hash_or_string.to_yaml : hash_or_string
12
+ IO.stub!(:read).with('cucumber.yml').and_return(cucumber_yml)
13
+ end
14
+
15
+ before(:each) do
16
+ File.stub!(:exist?).and_return(false) # Meaning, no cucumber.yml exists
17
+ Kernel.stub!(:exit).and_return(nil)
18
+ end
19
+
20
+ def output_stream
21
+ @output_stream ||= StringIO.new
22
+ end
23
+
24
+ def error_stream
25
+ @error_stream ||= StringIO.new
26
+ end
27
+
28
+ def options
29
+ @options ||= Options.new(output_stream, error_stream)
30
+ end
31
+
32
+ def prepare_args(args)
33
+ args.is_a?(Array) ? args : args.split(' ')
34
+ end
35
+
36
+ describe 'parsing' do
37
+
38
+ def when_parsing(args)
39
+ yield
40
+ options.parse!(prepare_args(args))
41
+ end
42
+
43
+ def after_parsing(args)
44
+ options.parse!(prepare_args(args))
45
+ yield
46
+ end
47
+
48
+ context '-r or --require' do
49
+ it "collects all specified files into an array" do
50
+ after_parsing('--require some_file.rb -r another_file.rb') do
51
+ options[:require].should == ['some_file.rb', 'another_file.rb']
52
+ end
53
+ end
54
+ end
55
+
56
+ context '--i18n' do
57
+ context "with LANG specified as 'help'" do
58
+ it "lists all known langues" do
59
+ when_parsing '--i18n help' do
60
+ Kernel.should_receive(:exit)
61
+ end
62
+ end
63
+
64
+ it "exits the program" do
65
+ when_parsing('--i18n help') { Kernel.should_receive(:exit) }
66
+ end
67
+ end
68
+ end
69
+
70
+ context "--port PORT" do
71
+ it "sets the drb_port to the provided option" do
72
+ after_parsing('--port 4500') { options[:drb_port].should == '4500' }
73
+ end
74
+ end
75
+
76
+ context '-f FORMAT or --format FORMAT' do
77
+ it "defaults the output for the formatter to the output stream (STDOUT)" do
78
+ after_parsing('-f pretty') { options[:formats].should == [['pretty', output_stream]] }
79
+ end
80
+ end
81
+
82
+ context '-o [FILE|DIR] or --out [FILE|DIR]' do
83
+ it "defaults the formatter to 'pretty' when not specified earlier" do
84
+ after_parsing('-o file.txt') { options[:formats].should == [['pretty', 'file.txt']] }
85
+ end
86
+ it "sets the output for the formatter defined immediatly before it" do
87
+ after_parsing('-f profile --out file.txt -f pretty -o file2.txt') do
88
+ options[:formats].should == [['profile', 'file.txt'], ['pretty', 'file2.txt']]
89
+ end
90
+ end
91
+ end
92
+
93
+ context '-t TAGS --tags TAGS' do
94
+ it "designates tags prefixed with ~ as tags to be excluded" do
95
+ after_parsing('--tags ~@foo,@bar') { options[:tag_expressions].should == ['~@foo,@bar'] }
96
+ end
97
+
98
+ it "stores tags passed with different --tags seperately" do
99
+ after_parsing('--tags @foo --tags @bar') { options[:tag_expressions].should == ['@foo', '@bar'] }
100
+ end
101
+ end
102
+
103
+ context '-n NAME or --name NAME' do
104
+ it "stores the provided names as regular expressions" do
105
+ after_parsing('-n foo --name bar') { options[:name_regexps].should == [/foo/,/bar/] }
106
+ end
107
+ end
108
+
109
+ context '-e PATTERN or --exclude PATTERN' do
110
+ it "stores the provided exclusions as regular expressions" do
111
+ after_parsing('-e foo --exclude bar') { options[:excludes].should == [/foo/,/bar/] }
112
+ end
113
+ end
114
+
115
+ context '-l LINES or --lines LINES' do
116
+ it "adds line numbers to args" do
117
+ options.parse!(%w{-l24 FILE})
118
+ options.instance_variable_get(:@args).should == ['FILE:24']
119
+ end
120
+ end
121
+
122
+ context '-p PROFILE or --profile PROFILE' do
123
+
124
+ it "notifies the user that an individual profile is being used" do
125
+ given_cucumber_yml_defined_as({'foo' => [1,2,3]})
126
+ options.parse!(%w{--profile foo})
127
+ output_stream.string.should =~ /Using the foo profile...\n/
128
+ end
129
+
130
+ it "notifies the user when multiple profiles are being used" do
131
+ given_cucumber_yml_defined_as({'foo' => [1,2,3], 'bar' => ['v'], 'dog' => ['v']})
132
+ options.parse!(%w{--profile foo --profile bar --profile dog})
133
+ output_stream.string.should =~ /Using the foo, bar and dog profiles...\n/
134
+ end
135
+
136
+ it "notifies the user of all profiles being used, even when they are nested" do
137
+ given_cucumber_yml_defined_as('foo' => '-p bar', 'bar' => 'features')
138
+ after_parsing('-p foo') do
139
+ output_stream.string.should =~ /Using the foo and bar profiles.../
140
+ end
141
+ end
142
+
143
+ it "uses the default profile passed in during initialization if none are specified by the user" do
144
+ given_cucumber_yml_defined_as({'default' => '--require some_file'})
145
+
146
+ options = Options.new(output_stream, error_stream, :default_profile => 'default')
147
+ options.parse!(%w{--format progress})
148
+ options[:require].should include('some_file')
149
+ end
150
+
151
+ it "merges all uniq values from both cmd line and the profile" do
152
+ given_cucumber_yml_defined_as('foo' => %w[--verbose])
153
+ options.parse!(%w[--wip --profile foo])
154
+ options[:wip].should be_true
155
+ options[:verbose].should be_true
156
+ end
157
+
158
+ it "gives precendene to the origianl options' paths" do
159
+ given_cucumber_yml_defined_as('foo' => %w[features])
160
+ options.parse!(%w[my.feature -p foo])
161
+ options[:paths].should == %w[my.feature]
162
+ end
163
+
164
+ it "combines the require files of both" do
165
+ given_cucumber_yml_defined_as('bar' => %w[--require features -r dog.rb])
166
+ options.parse!(%w[--require foo.rb -p bar])
167
+ options[:require].should == %w[foo.rb features dog.rb]
168
+ end
169
+
170
+ it "combines the tag names of both" do
171
+ given_cucumber_yml_defined_as('baz' => %w[-t @bar])
172
+ options.parse!(%w[--tags @foo -p baz])
173
+ options[:tag_expressions].should == ["@foo", "@bar"]
174
+ end
175
+
176
+ it "only takes the paths from the original options, and disgregards the profiles" do
177
+ given_cucumber_yml_defined_as('baz' => %w[features])
178
+ options.parse!(%w[my.feature -p baz])
179
+ options[:paths].should == ['my.feature']
180
+ end
181
+
182
+ it "uses the paths from the profile when none are specified originally" do
183
+ given_cucumber_yml_defined_as('baz' => %w[some.feature])
184
+ options.parse!(%w[-p baz])
185
+ options[:paths].should == ['some.feature']
186
+ end
187
+
188
+ it "combines environment variables from the profile but gives precendene to cmd line args" do
189
+ given_cucumber_yml_defined_as('baz' => %w[FOO=bar CHEESE=swiss])
190
+ options.parse!(%w[-p baz CHEESE=cheddar BAR=foo])
191
+ options[:env_vars].should == {'BAR' => 'foo', 'FOO' => 'bar', 'CHEESE' => 'cheddar'}
192
+ end
193
+
194
+ it "disregards STDOUT formatter defined in profile when another is passed in (via cmd line)" do
195
+ given_cucumber_yml_defined_as({'foo' => %w[--format pretty]})
196
+ options.parse!(%w{--format progress --profile foo})
197
+ options[:formats].should == [['progress', output_stream]]
198
+ end
199
+
200
+ it "includes any non-STDOUT formatters from the profile" do
201
+ given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html]})
202
+ options.parse!(%w{--format progress --profile html})
203
+ options[:formats].should == [['progress', output_stream], ['html', 'features.html']]
204
+ end
205
+
206
+ it "does not include STDOUT formatters from the profile if there is a STDOUT formatter in command line" do
207
+ given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html --format pretty]})
208
+ options.parse!(%w{--format progress --profile html})
209
+ options[:formats].should == [['progress', output_stream], ['html', 'features.html']]
210
+ end
211
+
212
+ it "includes any STDOUT formatters from the profile if no STDOUT formatter was specified in command line" do
213
+ given_cucumber_yml_defined_as({'html' => %w[--format html]})
214
+ options.parse!(%w{--format rerun -o rerun.txt --profile html})
215
+ options[:formats].should == [['html', output_stream], ['rerun', 'rerun.txt']]
216
+ end
217
+
218
+ it "assumes all of the formatters defined in the profile when none are specified on cmd line" do
219
+ given_cucumber_yml_defined_as({'html' => %w[--format progress --format html -o features.html]})
220
+ options.parse!(%w{--profile html})
221
+ options[:formats].should == [['progress', output_stream], ['html', 'features.html']]
222
+ end
223
+
224
+ it "respects --quiet when defined in the profile" do
225
+ given_cucumber_yml_defined_as('foo' => '-q')
226
+ options.parse!(%w[-p foo])
227
+ options[:snippets].should be_false
228
+ options[:source].should be_false
229
+ end
230
+ end
231
+
232
+ context '-P or --no-profile' do
233
+
234
+ it "disables profiles" do
235
+ given_cucumber_yml_defined_as({'default' => '-v --require file_specified_in_default_profile.rb'})
236
+
237
+ after_parsing("-P --require some_file.rb") do
238
+ options[:require].should == ['some_file.rb']
239
+ end
240
+ end
241
+
242
+ it "notifies the user that the profiles are being disabled" do
243
+ given_cucumber_yml_defined_as({'default' => '-v'})
244
+
245
+ after_parsing("--no-profile --require some_file.rb") do
246
+ output_stream.string.should =~ /Disabling profiles.../
247
+ end
248
+ end
249
+
250
+ end
251
+
252
+ context '-b or --backtrace' do
253
+ it "turns on cucumber's full backtrace" do
254
+ when_parsing("-b") do
255
+ Cucumber.should_receive(:use_full_backtrace=).with(true)
256
+ end
257
+ end
258
+ end
259
+
260
+ context '--version' do
261
+ it "displays Cucumber's version" do
262
+ after_parsing('--version') do
263
+ output_stream.string.should =~ /#{Cucumber::VERSION}/
264
+ end
265
+ end
266
+ it "exits the program" do
267
+ when_parsing('--version') { Kernel.should_receive(:exit) }
268
+ end
269
+ end
270
+
271
+ context 'environment variables (i.e. MODE=webrat)' do
272
+ it "places all of the environment variables into a hash" do
273
+ after_parsing('MODE=webrat FOO=bar') do
274
+ options[:env_vars].should == {'MODE' => 'webrat', 'FOO' => 'bar'}
275
+ end
276
+ end
277
+ end
278
+
279
+ it "assigns any extra arguments as paths to features" do
280
+ after_parsing('-f pretty my_feature.feature my_other_features') do
281
+ options[:paths].should == ['my_feature.feature', 'my_other_features']
282
+ end
283
+ end
284
+
285
+ it "does not mistake environment variables as feature paths" do
286
+ after_parsing('my_feature.feature FOO=bar') do
287
+ options[:paths].should == ['my_feature.feature']
288
+ end
289
+ end
290
+ end
291
+
292
+ describe '#expanded_args_without_drb' do
293
+ it "returns the orginal args in additon to the args from any profiles" do
294
+ given_cucumber_yml_defined_as('foo' => '-v',
295
+ 'bar' => '--wip -p baz',
296
+ 'baz' => '-r some_file.rb')
297
+ options.parse!(%w[features -p foo --profile bar])
298
+
299
+ options.expanded_args_without_drb.should == %w[features -v --wip -r some_file.rb --no-profile]
300
+ end
301
+
302
+ it "removes the --drb flag so that the args can be safely passed to the drb server" do
303
+ given_cucumber_yml_defined_as('default' => 'features -f pretty --drb')
304
+ options.parse!(%w[--profile default])
305
+
306
+ options.expanded_args_without_drb.should == %w[features -f pretty --no-profile]
307
+ end
308
+
309
+ it "contains the environment variables" do
310
+ options.parse!(%w[features FOO=bar])
311
+ options.expanded_args_without_drb.should == %w[features FOO=bar --no-profile]
312
+ end
313
+
314
+ it "ignores the paths from the profiles if one was specified on the command line" do
315
+ given_cucumber_yml_defined_as('foo' => 'features --drb')
316
+ options.parse!(%w[some_feature.feature -p foo])
317
+ options.expanded_args_without_drb.should == %w[some_feature.feature --no-profile]
318
+ end
319
+
320
+
321
+ it "appends the --no-profile flag so that the DRb server doesn't reload the profiles" do
322
+ given_cucumber_yml_defined_as('foo' => 'features --drb')
323
+ options.parse!(%w[some_feature.feature -p foo])
324
+ options.expanded_args_without_drb.should == %w[some_feature.feature --no-profile]
325
+ end
326
+
327
+ it "does not append --no-profile if already present" do
328
+ options.parse!(%w[some_feature.feature -P])
329
+ options.expanded_args_without_drb.should == %w[some_feature.feature -P]
330
+ end
331
+
332
+
333
+ end
334
+
335
+ describe "dry-run" do
336
+ it "should have the default value for snippets" do
337
+ given_cucumber_yml_defined_as({'foo' => %w[--dry-run]})
338
+ options.parse!(%w{--dry-run})
339
+ options[:snippets].should == true
340
+ end
341
+
342
+ it "should set snippets to false when no-snippets provided after dry-run" do
343
+ given_cucumber_yml_defined_as({'foo' => %w[--dry-run --no-snippets]})
344
+ options.parse!(%w{--dry-run --no-snippets})
345
+ options[:snippets].should == false
346
+ end
347
+
348
+ it "should set snippets to false when no-snippets provided before dry-run" do
349
+ given_cucumber_yml_defined_as({'foo' => %w[--no-snippet --dry-run]})
350
+ options.parse!(%w{--no-snippets --dry-run})
351
+ options[:snippets].should == false
352
+ end
353
+ end
354
+ end
355
+
356
+ end
357
+ end
358
+