cucumber 3.0.1 → 3.2.0

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 (517) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +84 -4
  3. data/CONTRIBUTING.md +3 -4
  4. data/README.md +12 -12
  5. data/lib/autotest/cucumber.rb +1 -0
  6. data/lib/autotest/cucumber_mixin.rb +1 -0
  7. data/lib/autotest/cucumber_rails.rb +1 -0
  8. data/lib/autotest/cucumber_rails_rspec.rb +1 -0
  9. data/lib/autotest/cucumber_rails_rspec2.rb +1 -0
  10. data/lib/autotest/cucumber_rspec.rb +1 -0
  11. data/lib/autotest/cucumber_rspec2.rb +1 -0
  12. data/lib/autotest/discover.rb +1 -0
  13. data/lib/cucumber.rb +1 -0
  14. data/lib/cucumber/cli/configuration.rb +1 -0
  15. data/lib/cucumber/cli/main.rb +2 -2
  16. data/lib/cucumber/cli/options.rb +63 -55
  17. data/lib/cucumber/cli/profile_loader.rb +5 -7
  18. data/lib/cucumber/cli/rerun_file.rb +1 -0
  19. data/lib/cucumber/configuration.rb +8 -7
  20. data/lib/cucumber/constantize.rb +6 -5
  21. data/lib/cucumber/core_ext/string.rb +1 -0
  22. data/lib/cucumber/deprecate.rb +1 -1
  23. data/lib/cucumber/encoding.rb +2 -1
  24. data/lib/cucumber/errors.rb +2 -1
  25. data/lib/cucumber/events.rb +1 -2
  26. data/lib/cucumber/events/gherkin_source_read.rb +1 -4
  27. data/lib/cucumber/events/step_activated.rb +4 -5
  28. data/lib/cucumber/events/step_definition_registered.rb +4 -8
  29. data/lib/cucumber/events/test_case_finished.rb +0 -4
  30. data/lib/cucumber/events/test_case_started.rb +0 -4
  31. data/lib/cucumber/events/test_run_finished.rb +2 -3
  32. data/lib/cucumber/events/test_run_started.rb +2 -4
  33. data/lib/cucumber/events/test_step_finished.rb +0 -6
  34. data/lib/cucumber/events/test_step_started.rb +1 -7
  35. data/lib/cucumber/file_specs.rb +2 -1
  36. data/lib/cucumber/filters.rb +1 -0
  37. data/lib/cucumber/filters/activate_steps.rb +1 -1
  38. data/lib/cucumber/filters/apply_after_hooks.rb +1 -0
  39. data/lib/cucumber/filters/apply_after_step_hooks.rb +1 -0
  40. data/lib/cucumber/filters/apply_around_hooks.rb +1 -0
  41. data/lib/cucumber/filters/apply_before_hooks.rb +1 -0
  42. data/lib/cucumber/filters/broadcast_test_run_started_event.rb +2 -1
  43. data/lib/cucumber/filters/gated_receiver.rb +1 -2
  44. data/lib/cucumber/filters/prepare_world.rb +2 -5
  45. data/lib/cucumber/filters/quit.rb +2 -4
  46. data/lib/cucumber/filters/randomizer.rb +6 -7
  47. data/lib/cucumber/filters/retry.rb +2 -2
  48. data/lib/cucumber/filters/tag_limits.rb +2 -2
  49. data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -2
  50. data/lib/cucumber/filters/tag_limits/verifier.rb +1 -2
  51. data/lib/cucumber/formatter/ansicolor.rb +13 -12
  52. data/lib/cucumber/formatter/backtrace_filter.rb +1 -2
  53. data/lib/cucumber/formatter/console.rb +11 -12
  54. data/lib/cucumber/formatter/console_counts.rb +4 -4
  55. data/lib/cucumber/formatter/console_issues.rb +3 -3
  56. data/lib/cucumber/formatter/duration.rb +1 -0
  57. data/lib/cucumber/formatter/duration_extractor.rb +1 -1
  58. data/lib/cucumber/formatter/fail_fast.rb +9 -6
  59. data/lib/cucumber/formatter/fanout.rb +1 -3
  60. data/lib/cucumber/formatter/hook_query_visitor.rb +1 -0
  61. data/lib/cucumber/formatter/html.rb +28 -32
  62. data/lib/cucumber/formatter/html_builder.rb +3 -2
  63. data/lib/cucumber/formatter/http_io.rb +146 -0
  64. data/lib/cucumber/formatter/ignore_missing_messages.rb +1 -3
  65. data/lib/cucumber/formatter/interceptor.rb +18 -5
  66. data/lib/cucumber/formatter/io.rb +18 -11
  67. data/lib/cucumber/formatter/json.rb +11 -4
  68. data/lib/cucumber/formatter/json_pretty.rb +1 -1
  69. data/lib/cucumber/formatter/junit.rb +22 -17
  70. data/lib/cucumber/formatter/pretty.rb +4 -3
  71. data/lib/cucumber/formatter/progress.rb +3 -2
  72. data/lib/cucumber/formatter/rerun.rb +2 -1
  73. data/lib/cucumber/formatter/stepdefs.rb +1 -0
  74. data/lib/cucumber/formatter/steps.rb +2 -2
  75. data/lib/cucumber/formatter/summary.rb +1 -2
  76. data/lib/cucumber/formatter/unicode.rb +2 -2
  77. data/lib/cucumber/formatter/usage.rb +22 -19
  78. data/lib/cucumber/gherkin/data_table_parser.rb +1 -0
  79. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +86 -85
  80. data/lib/cucumber/gherkin/formatter/escaping.rb +13 -12
  81. data/lib/cucumber/gherkin/i18n.rb +1 -0
  82. data/lib/cucumber/gherkin/steps_parser.rb +1 -0
  83. data/lib/cucumber/glue/dsl.rb +1 -0
  84. data/lib/cucumber/glue/hook.rb +1 -0
  85. data/lib/cucumber/glue/invoke_in_world.rb +3 -3
  86. data/lib/cucumber/glue/proto_world.rb +10 -9
  87. data/lib/cucumber/glue/registry_and_more.rb +13 -12
  88. data/lib/cucumber/glue/snippet.rb +1 -5
  89. data/lib/cucumber/glue/step_definition.rb +10 -10
  90. data/lib/cucumber/glue/world_factory.rb +1 -3
  91. data/lib/cucumber/hooks.rb +13 -3
  92. data/lib/cucumber/load_path.rb +1 -0
  93. data/lib/cucumber/multiline_argument.rb +3 -3
  94. data/lib/cucumber/multiline_argument/data_table.rb +16 -20
  95. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +7 -11
  96. data/lib/cucumber/multiline_argument/doc_string.rb +1 -0
  97. data/lib/cucumber/platform.rb +2 -1
  98. data/lib/cucumber/project_initializer.rb +1 -1
  99. data/lib/cucumber/rake/task.rb +8 -5
  100. data/lib/cucumber/rspec/disable_option_parser.rb +1 -0
  101. data/lib/cucumber/rspec/doubles.rb +1 -0
  102. data/lib/cucumber/running_test_case.rb +2 -1
  103. data/lib/cucumber/runtime.rb +6 -6
  104. data/lib/cucumber/runtime/after_hooks.rb +1 -0
  105. data/lib/cucumber/runtime/before_hooks.rb +1 -0
  106. data/lib/cucumber/runtime/for_programming_languages.rb +8 -7
  107. data/lib/cucumber/runtime/step_hooks.rb +2 -0
  108. data/lib/cucumber/runtime/support_code.rb +3 -7
  109. data/lib/cucumber/runtime/user_interface.rb +2 -3
  110. data/lib/cucumber/step_argument.rb +1 -0
  111. data/lib/cucumber/step_definition_light.rb +2 -1
  112. data/lib/cucumber/step_definitions.rb +2 -1
  113. data/lib/cucumber/step_match.rb +9 -8
  114. data/lib/cucumber/step_match_search.rb +8 -9
  115. data/lib/cucumber/term/ansicolor.rb +30 -30
  116. data/lib/cucumber/unit.rb +1 -0
  117. data/lib/cucumber/version +1 -1
  118. data/lib/simplecov_setup.rb +1 -0
  119. metadata +64 -659
  120. data/.coveralls.yml +0 -1
  121. data/.cucumberproignore +0 -6
  122. data/.gitattributes +0 -32
  123. data/.github/ISSUE_TEMPLATE.md +0 -48
  124. data/.github/PULL_REQUEST_TEMPLATE.md +0 -40
  125. data/.rspec +0 -1
  126. data/.rubocop.yml +0 -13
  127. data/.rubocop_todo.yml +0 -991
  128. data/.ruby-gemset +0 -1
  129. data/.travis.yml +0 -70
  130. data/.yardopts +0 -1
  131. data/Gemfile +0 -28
  132. data/Rakefile +0 -32
  133. data/appveyor.yml +0 -27
  134. data/cucumber.gemspec +0 -52
  135. data/cucumber.yml +0 -19
  136. data/examples/i18n/README.textile +0 -3
  137. data/examples/i18n/Rakefile +0 -33
  138. data/examples/i18n/ar/Rakefile +0 -6
  139. data/examples/i18n/ar/features/addition.feature +0 -17
  140. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -29
  141. data/examples/i18n/ar/lib/calculator.rb +0 -11
  142. data/examples/i18n/bg/Rakefile +0 -6
  143. data/examples/i18n/bg/features/addition.feature +0 -12
  144. data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
  145. data/examples/i18n/bg/features/division.feature +0 -17
  146. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
  147. data/examples/i18n/bg/features/support/env.rb +0 -10
  148. data/examples/i18n/bg/features/support/world.rb +0 -8
  149. data/examples/i18n/bg/lib/calculator.rb +0 -25
  150. data/examples/i18n/ca/Rakefile +0 -6
  151. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -26
  152. data/examples/i18n/ca/features/suma.feature +0 -17
  153. data/examples/i18n/ca/lib/calculadora.rb +0 -16
  154. data/examples/i18n/cs/Rakefile +0 -6
  155. data/examples/i18n/cs/features/addition.feature +0 -17
  156. data/examples/i18n/cs/features/division.feature +0 -11
  157. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -29
  158. data/examples/i18n/cs/lib/calculator.rb +0 -14
  159. data/examples/i18n/da/Rakefile +0 -6
  160. data/examples/i18n/da/features/sammenlaegning.feature +0 -18
  161. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -29
  162. data/examples/i18n/da/lib/lommeregner.rb +0 -11
  163. data/examples/i18n/de/Rakefile +0 -6
  164. data/examples/i18n/de/features/addition.feature +0 -17
  165. data/examples/i18n/de/features/division.feature +0 -10
  166. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -29
  167. data/examples/i18n/de/lib/calculator.rb +0 -14
  168. data/examples/i18n/el/Rakefile +0 -6
  169. data/examples/i18n/el/features/addition.feature +0 -17
  170. data/examples/i18n/el/features/division.feature +0 -10
  171. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -29
  172. data/examples/i18n/el/lib/calculator.rb +0 -14
  173. data/examples/i18n/en-lol/Rakefile +0 -4
  174. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
  175. data/examples/i18n/en-lol/features/stuffing.feature +0 -8
  176. data/examples/i18n/en-lol/features/support/env.rb +0 -11
  177. data/examples/i18n/en-lol/lib/basket.rb +0 -12
  178. data/examples/i18n/en-lol/lib/belly.rb +0 -11
  179. data/examples/i18n/en/Rakefile +0 -6
  180. data/examples/i18n/en/features/addition.feature +0 -17
  181. data/examples/i18n/en/features/division.feature +0 -10
  182. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -29
  183. data/examples/i18n/en/lib/calculator.rb +0 -14
  184. data/examples/i18n/eo/Rakefile +0 -6
  185. data/examples/i18n/eo/features/adicio.feature +0 -17
  186. data/examples/i18n/eo/features/divido.feature +0 -10
  187. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -29
  188. data/examples/i18n/eo/lib/calculator.rb +0 -14
  189. data/examples/i18n/es/Rakefile +0 -6
  190. data/examples/i18n/es/features/adicion.feature +0 -17
  191. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -26
  192. data/examples/i18n/es/lib/calculador.rb +0 -14
  193. data/examples/i18n/et/Rakefile +0 -6
  194. data/examples/i18n/et/features/jagamine.feature +0 -10
  195. data/examples/i18n/et/features/liitmine.feature +0 -17
  196. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -29
  197. data/examples/i18n/et/lib/kalkulaator.rb +0 -14
  198. data/examples/i18n/fi/Rakefile +0 -6
  199. data/examples/i18n/fi/features/jakolasku.feature +0 -10
  200. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -29
  201. data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
  202. data/examples/i18n/fi/lib/laskin.rb +0 -14
  203. data/examples/i18n/fr/Rakefile +0 -8
  204. data/examples/i18n/fr/features/addition.feature +0 -18
  205. data/examples/i18n/fr/features/addition2.feature +0 -17
  206. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
  207. data/examples/i18n/fr/features/support/env.rb +0 -10
  208. data/examples/i18n/fr/lib/calculatrice.rb +0 -10
  209. data/examples/i18n/he/Rakefile +0 -6
  210. data/examples/i18n/he/features/addition.feature +0 -17
  211. data/examples/i18n/he/features/division.feature +0 -10
  212. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -29
  213. data/examples/i18n/he/lib/calculator.rb +0 -15
  214. data/examples/i18n/hi/Rakefile +0 -6
  215. data/examples/i18n/hi/features/addition.feature +0 -16
  216. data/examples/i18n/hi/features/division.feature +0 -10
  217. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -29
  218. data/examples/i18n/hi/lib/calculator.rb +0 -15
  219. data/examples/i18n/ht/Rakefile +0 -6
  220. data/examples/i18n/ht/features/adisyon.feature +0 -17
  221. data/examples/i18n/ht/features/divizyon.feature +0 -10
  222. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +0 -29
  223. data/examples/i18n/ht/lib/kalkilatris.rb +0 -14
  224. data/examples/i18n/hu/Rakefile +0 -6
  225. data/examples/i18n/hu/features/osszeadas.feature +0 -17
  226. data/examples/i18n/hu/features/osztas.feature +0 -10
  227. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -30
  228. data/examples/i18n/hu/lib/calculator.rb +0 -14
  229. data/examples/i18n/id/Rakefile +0 -6
  230. data/examples/i18n/id/features/addition.feature +0 -17
  231. data/examples/i18n/id/features/division.feature +0 -10
  232. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -29
  233. data/examples/i18n/id/lib/calculator.rb +0 -14
  234. data/examples/i18n/it/Rakefile +0 -6
  235. data/examples/i18n/it/features/somma.feature +0 -11
  236. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -29
  237. data/examples/i18n/it/lib/calcolatrice.rb +0 -11
  238. data/examples/i18n/ja/Rakefile +0 -6
  239. data/examples/i18n/ja/features/addition.feature +0 -17
  240. data/examples/i18n/ja/features/division.feature +0 -10
  241. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
  242. data/examples/i18n/ja/features/support/env.rb +0 -10
  243. data/examples/i18n/ja/lib/calculator.rb +0 -14
  244. data/examples/i18n/ko/Rakefile +0 -6
  245. data/examples/i18n/ko/features/addition.feature +0 -17
  246. data/examples/i18n/ko/features/division.feature +0 -11
  247. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -29
  248. data/examples/i18n/ko/lib/calculator.rb +0 -14
  249. data/examples/i18n/lt/Rakefile +0 -6
  250. data/examples/i18n/lt/features/addition.feature +0 -17
  251. data/examples/i18n/lt/features/division.feature +0 -10
  252. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -29
  253. data/examples/i18n/lt/lib/calculator.rb +0 -14
  254. data/examples/i18n/lv/Rakefile +0 -6
  255. data/examples/i18n/lv/features/addition.feature +0 -17
  256. data/examples/i18n/lv/features/division.feature +0 -10
  257. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -29
  258. data/examples/i18n/lv/lib/calculator.rb +0 -14
  259. data/examples/i18n/no/Rakefile +0 -6
  260. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
  261. data/examples/i18n/no/features/summering.feature +0 -19
  262. data/examples/i18n/no/features/support/env.rb +0 -11
  263. data/examples/i18n/no/lib/kalkulator.rb +0 -11
  264. data/examples/i18n/pl/Rakefile +0 -6
  265. data/examples/i18n/pl/features/addition.feature +0 -17
  266. data/examples/i18n/pl/features/division.feature +0 -10
  267. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -29
  268. data/examples/i18n/pl/features/support/env.rb +0 -10
  269. data/examples/i18n/pl/lib/calculator.rb +0 -14
  270. data/examples/i18n/pt/Rakefile +0 -6
  271. data/examples/i18n/pt/features/adicao.feature +0 -11
  272. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
  273. data/examples/i18n/pt/features/support/env.rb +0 -10
  274. data/examples/i18n/pt/lib/calculadora.rb +0 -10
  275. data/examples/i18n/ro/Rakefile +0 -6
  276. data/examples/i18n/ro/features/adunare.feature +0 -12
  277. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -26
  278. data/examples/i18n/ro/lib/calculator.rb +0 -11
  279. data/examples/i18n/ru/Rakefile +0 -6
  280. data/examples/i18n/ru/features/addition.feature +0 -11
  281. data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
  282. data/examples/i18n/ru/features/division.feature +0 -16
  283. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
  284. data/examples/i18n/ru/features/support/env.rb +0 -10
  285. data/examples/i18n/ru/features/support/world.rb +0 -8
  286. data/examples/i18n/ru/lib/calculator.rb +0 -25
  287. data/examples/i18n/sk/Rakefile +0 -6
  288. data/examples/i18n/sk/features/addition.feature +0 -17
  289. data/examples/i18n/sk/features/division.feature +0 -10
  290. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -29
  291. data/examples/i18n/sk/lib/calculator.rb +0 -14
  292. data/examples/i18n/sr-Cyrl/Rakefile +0 -6
  293. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
  294. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
  295. data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -10
  296. data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
  297. data/examples/i18n/sr-Latn/Rakefile +0 -6
  298. data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
  299. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -29
  300. data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
  301. data/examples/i18n/sv/Rakefile +0 -6
  302. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -29
  303. data/examples/i18n/sv/features/summering.feature +0 -18
  304. data/examples/i18n/sv/lib/kalkulator.rb +0 -11
  305. data/examples/i18n/tr/Rakefile +0 -6
  306. data/examples/i18n/tr/features/bolme.feature +0 -10
  307. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -29
  308. data/examples/i18n/tr/features/toplama.feature +0 -18
  309. data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
  310. data/examples/i18n/uk/Rakefile +0 -6
  311. data/examples/i18n/uk/features/addition.feature +0 -11
  312. data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
  313. data/examples/i18n/uk/features/division.feature +0 -16
  314. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
  315. data/examples/i18n/uk/features/support/env.rb +0 -10
  316. data/examples/i18n/uk/features/support/world.rb +0 -8
  317. data/examples/i18n/uk/lib/calculator.rb +0 -25
  318. data/examples/i18n/uz/Rakefile +0 -6
  319. data/examples/i18n/uz/features/addition.feature +0 -10
  320. data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
  321. data/examples/i18n/uz/features/division.feature +0 -17
  322. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
  323. data/examples/i18n/uz/features/support/env.rb +0 -10
  324. data/examples/i18n/uz/features/support/world.rb +0 -8
  325. data/examples/i18n/uz/lib/calculator.rb +0 -25
  326. data/examples/i18n/zh-CN/Rakefile +0 -4
  327. data/examples/i18n/zh-CN/features/addition.feature +0 -18
  328. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -31
  329. data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
  330. data/examples/i18n/zh-TW/Rakefile +0 -4
  331. data/examples/i18n/zh-TW/features/addition.feature +0 -17
  332. data/examples/i18n/zh-TW/features/division.feature +0 -11
  333. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -29
  334. data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
  335. data/examples/rspec_doubles/Rakefile +0 -4
  336. data/examples/rspec_doubles/features/mocking.feature +0 -9
  337. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
  338. data/examples/rspec_doubles/features/support/env.rb +0 -12
  339. data/examples/sinatra/README.textile +0 -13
  340. data/examples/sinatra/Rakefile +0 -6
  341. data/examples/sinatra/app.rb +0 -14
  342. data/examples/sinatra/features/add.feature +0 -11
  343. data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
  344. data/examples/sinatra/features/support/env.rb +0 -15
  345. data/examples/sinatra/views/add.erb +0 -7
  346. data/examples/sinatra/views/layout.erb +0 -8
  347. data/examples/tcl/README.textile +0 -11
  348. data/examples/tcl/Rakefile +0 -6
  349. data/examples/tcl/features/fibonnacci.feature +0 -17
  350. data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
  351. data/examples/tcl/features/support/env.rb +0 -7
  352. data/examples/tcl/src/fib.tcl +0 -3
  353. data/examples/test_unit/Gemfile +0 -4
  354. data/examples/test_unit/Rakefile +0 -6
  355. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
  356. data/examples/test_unit/features/test_unit.feature +0 -9
  357. data/examples/watir/README.textile +0 -16
  358. data/examples/watir/Rakefile +0 -12
  359. data/examples/watir/cucumber.yml +0 -1
  360. data/examples/watir/features/search.feature +0 -12
  361. data/examples/watir/features/step_definitions/search_steps.rb +0 -27
  362. data/examples/watir/features/support/env.rb +0 -39
  363. data/examples/watir/features/support/screenshots.rb +0 -47
  364. data/features/docs/api/list_step_defs_as_json.feature +0 -64
  365. data/features/docs/api/listen_for_events.feature +0 -59
  366. data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -27
  367. data/features/docs/cli/backtraces.feature +0 -36
  368. data/features/docs/cli/dry_run.feature +0 -73
  369. data/features/docs/cli/exclude_files.feature +0 -18
  370. data/features/docs/cli/execute_with_tag_filter.feature +0 -119
  371. data/features/docs/cli/fail_fast.feature +0 -48
  372. data/features/docs/cli/finding_steps.feature +0 -28
  373. data/features/docs/cli/help.feature +0 -8
  374. data/features/docs/cli/i18n.feature +0 -42
  375. data/features/docs/cli/randomize.feature +0 -140
  376. data/features/docs/cli/require.feature +0 -27
  377. data/features/docs/cli/retry_failing_tests.feature +0 -92
  378. data/features/docs/cli/run_scenarios_matching_name.feature +0 -105
  379. data/features/docs/cli/run_specific_scenarios.feature +0 -77
  380. data/features/docs/cli/showing_differences.feature +0 -43
  381. data/features/docs/cli/specifying_multiple_formatters.feature +0 -68
  382. data/features/docs/cli/strict_mode.feature +0 -70
  383. data/features/docs/defining_steps/ambiguous_steps.feature +0 -89
  384. data/features/docs/defining_steps/nested_steps.feature +0 -181
  385. data/features/docs/defining_steps/nested_steps_i18n.feature +0 -37
  386. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -56
  387. data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
  388. data/features/docs/defining_steps/printing_messages.feature +0 -147
  389. data/features/docs/defining_steps/skip_scenario.feature +0 -31
  390. data/features/docs/defining_steps/snippets.feature +0 -56
  391. data/features/docs/defining_steps/table_diffing.feature +0 -50
  392. data/features/docs/events/gherkin_source_read_event.feature +0 -43
  393. data/features/docs/events/step_activated_event.feature +0 -36
  394. data/features/docs/events/step_definition_registered_event.feature +0 -29
  395. data/features/docs/events/test_case_finished_event.feature +0 -35
  396. data/features/docs/events/test_case_started_event.feature +0 -54
  397. data/features/docs/events/test_run_finished_event.feature +0 -40
  398. data/features/docs/events/test_run_started_event.feature +0 -41
  399. data/features/docs/events/test_step_finished_event.feature +0 -47
  400. data/features/docs/events/test_step_started_event.feature +0 -43
  401. data/features/docs/exception_in_after_hook.feature +0 -127
  402. data/features/docs/exception_in_after_step_hook.feature +0 -104
  403. data/features/docs/exception_in_around_hook.feature +0 -80
  404. data/features/docs/exception_in_before_hook.feature +0 -98
  405. data/features/docs/extending_cucumber/custom_filter.feature +0 -29
  406. data/features/docs/extending_cucumber/custom_formatter.feature +0 -94
  407. data/features/docs/formatters/api_methods.feature +0 -37
  408. data/features/docs/formatters/html_formatter.feature +0 -91
  409. data/features/docs/formatters/json_formatter.feature +0 -767
  410. data/features/docs/formatters/junit_formatter.feature +0 -455
  411. data/features/docs/formatters/pretty_formatter.feature +0 -74
  412. data/features/docs/formatters/progress_formatter.feature +0 -32
  413. data/features/docs/formatters/rerun_formatter.feature +0 -190
  414. data/features/docs/formatters/summary_formatter.feature +0 -35
  415. data/features/docs/formatters/usage_formatter.feature +0 -101
  416. data/features/docs/getting_started.feature +0 -28
  417. data/features/docs/gherkin/background.feature +0 -548
  418. data/features/docs/gherkin/doc_strings.feature +0 -76
  419. data/features/docs/gherkin/expand_option_for_outlines.feature +0 -47
  420. data/features/docs/gherkin/language_from_header.feature +0 -32
  421. data/features/docs/gherkin/outlines.feature +0 -158
  422. data/features/docs/gherkin/unicode_table.feature +0 -33
  423. data/features/docs/gherkin/using_descriptions.feature +0 -83
  424. data/features/docs/gherkin/using_star_notation.feature +0 -37
  425. data/features/docs/iso-8859-1.feature +0 -6
  426. data/features/docs/post_configuration_hook.feature +0 -33
  427. data/features/docs/profiles.feature +0 -120
  428. data/features/docs/rake_task.feature +0 -146
  429. data/features/docs/raketask.feature +0 -46
  430. data/features/docs/work_in_progress.feature +0 -157
  431. data/features/docs/writing_support_code/after_hooks.feature +0 -102
  432. data/features/docs/writing_support_code/after_step_hooks.feature +0 -55
  433. data/features/docs/writing_support_code/around_hooks.feature +0 -266
  434. data/features/docs/writing_support_code/before_hook.feature +0 -66
  435. data/features/docs/writing_support_code/hook_order.feature +0 -63
  436. data/features/docs/writing_support_code/load_path.feature +0 -17
  437. data/features/docs/writing_support_code/parameter_types.feature +0 -69
  438. data/features/docs/writing_support_code/state.feature +0 -32
  439. data/features/docs/writing_support_code/tagged_hooks.feature +0 -95
  440. data/features/docs/writing_support_code/world.feature +0 -129
  441. data/features/lib/step_definitions/aruba_steps.rb +0 -21
  442. data/features/lib/step_definitions/cli_steps.rb +0 -4
  443. data/features/lib/step_definitions/cucumber_steps.rb +0 -75
  444. data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -16
  445. data/features/lib/step_definitions/json_steps.rb +0 -8
  446. data/features/lib/step_definitions/junit_steps.rb +0 -14
  447. data/features/lib/step_definitions/language_steps.rb +0 -9
  448. data/features/lib/step_definitions/profile_steps.rb +0 -16
  449. data/features/lib/step_definitions/retry_steps.rb +0 -55
  450. data/features/lib/step_definitions/ruby_steps.rb +0 -4
  451. data/features/lib/support/env.rb +0 -22
  452. data/features/lib/support/fake_wire_server.rb +0 -94
  453. data/features/lib/support/feature_factory.rb +0 -68
  454. data/features/lib/support/normalise_output.rb +0 -52
  455. data/features/lib/support/parameter_types.rb +0 -5
  456. data/gem_tasks/contributors.rake +0 -19
  457. data/gem_tasks/cov.rake +0 -6
  458. data/gem_tasks/downloads.rb +0 -8
  459. data/gem_tasks/environment.rake +0 -4
  460. data/gem_tasks/examples.rake +0 -12
  461. data/gem_tasks/fix_cr_lf.rake +0 -22
  462. data/gem_tasks/flog.rake +0 -5
  463. data/gem_tasks/rspec.rake +0 -7
  464. data/gem_tasks/sass.rake +0 -5
  465. data/gem_tasks/stats +0 -16
  466. data/gem_tasks/versions.txt +0 -74
  467. data/scripts/invite-collaborator +0 -40
  468. data/scripts/update-changelog +0 -86
  469. data/spec/cucumber/cli/configuration_spec.rb +0 -446
  470. data/spec/cucumber/cli/main_spec.rb +0 -84
  471. data/spec/cucumber/cli/options_spec.rb +0 -445
  472. data/spec/cucumber/cli/profile_loader_spec.rb +0 -66
  473. data/spec/cucumber/cli/rerun_spec.rb +0 -86
  474. data/spec/cucumber/configuration_spec.rb +0 -148
  475. data/spec/cucumber/constantize_spec.rb +0 -20
  476. data/spec/cucumber/events_spec.rb +0 -9
  477. data/spec/cucumber/file_specs_spec.rb +0 -61
  478. data/spec/cucumber/filters/activate_steps_spec.rb +0 -152
  479. data/spec/cucumber/filters/gated_receiver_spec.rb +0 -48
  480. data/spec/cucumber/filters/retry_spec.rb +0 -98
  481. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -39
  482. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -58
  483. data/spec/cucumber/filters/tag_limits_spec.rb +0 -60
  484. data/spec/cucumber/formatter/ansicolor_spec.rb +0 -33
  485. data/spec/cucumber/formatter/backtrace_filter_spec.rb +0 -32
  486. data/spec/cucumber/formatter/console_counts_spec.rb +0 -14
  487. data/spec/cucumber/formatter/duration_spec.rb +0 -23
  488. data/spec/cucumber/formatter/fail_fast_spec.rb +0 -88
  489. data/spec/cucumber/formatter/html_spec.rb +0 -543
  490. data/spec/cucumber/formatter/interceptor_spec.rb +0 -137
  491. data/spec/cucumber/formatter/json_spec.rb +0 -815
  492. data/spec/cucumber/formatter/junit_spec.rb +0 -251
  493. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2175
  494. data/spec/cucumber/formatter/pretty_spec.rb +0 -907
  495. data/spec/cucumber/formatter/progress_spec.rb +0 -170
  496. data/spec/cucumber/formatter/rerun_spec.rb +0 -97
  497. data/spec/cucumber/formatter/spec_helper.rb +0 -84
  498. data/spec/cucumber/glue/proto_world_spec.rb +0 -63
  499. data/spec/cucumber/glue/registry_and_more_spec.rb +0 -213
  500. data/spec/cucumber/glue/snippet_spec.rb +0 -174
  501. data/spec/cucumber/glue/step_definition_spec.rb +0 -207
  502. data/spec/cucumber/hooks_spec.rb +0 -31
  503. data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -653
  504. data/spec/cucumber/project_initializer_spec.rb +0 -88
  505. data/spec/cucumber/rake/forked_spec.rb +0 -58
  506. data/spec/cucumber/rake/task_spec.rb +0 -86
  507. data/spec/cucumber/running_test_case_spec.rb +0 -140
  508. data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -8
  509. data/spec/cucumber/runtime/support_code_spec.rb +0 -17
  510. data/spec/cucumber/runtime_spec.rb +0 -21
  511. data/spec/cucumber/sell_cucumbers.feature +0 -19
  512. data/spec/cucumber/step_argument_spec.rb +0 -19
  513. data/spec/cucumber/step_match_search_spec.rb +0 -113
  514. data/spec/cucumber/step_match_spec.rb +0 -86
  515. data/spec/cucumber/world/pending_spec.rb +0 -48
  516. data/spec/spec_helper.rb +0 -30
  517. data/spec/support/standard_step_actions.rb +0 -19
@@ -1,84 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'yaml'
4
-
5
- module Cucumber
6
- module Cli
7
- describe Main do
8
- before(:each) do
9
- allow(File).to receive(:exist?) { false } # When Configuration checks for cucumber.yml
10
- allow(Dir).to receive(:[]) { [] } # to prevent cucumber's features dir to being laoded
11
- end
12
-
13
- let(:args) { [] }
14
- let(:stdin) { StringIO.new }
15
- let(:stdout) { StringIO.new }
16
- let(:stderr) { StringIO.new }
17
- let(:kernel) { double(:kernel) }
18
- subject { Main.new(args, stdin, stdout, stderr, kernel)}
19
-
20
- describe '#execute!' do
21
- context 'passed an existing runtime' do
22
- let(:existing_runtime) { double('runtime').as_null_object }
23
-
24
- def do_execute
25
- subject.execute!(existing_runtime)
26
- end
27
-
28
- it 'configures that runtime' do
29
- expected_configuration = double('Configuration').as_null_object
30
-
31
- allow(Configuration).to receive(:new) { expected_configuration }
32
- expect(existing_runtime).to receive(:configure).with(expected_configuration)
33
- expect(kernel).to receive(:exit).with(1)
34
-
35
- do_execute
36
- end
37
-
38
- it 'uses that runtime for running and reporting results' do
39
- expected_results = double('results', :failure? => true)
40
-
41
- expect(existing_runtime).to receive(:run!)
42
- allow(existing_runtime).to receive(:results) { expected_results }
43
- expect(kernel).to receive(:exit).with(1)
44
-
45
- do_execute
46
- end
47
- end
48
-
49
- context 'interrupted with ctrl-c' do
50
- after do
51
- Cucumber.wants_to_quit = false
52
- end
53
-
54
- it 'exits with error code' do
55
- results = double('results', :failure? => false)
56
-
57
- allow_any_instance_of(Runtime).to receive(:run!)
58
- allow_any_instance_of(Runtime).to receive(:results) { results }
59
-
60
- Cucumber.wants_to_quit = true
61
-
62
- expect(kernel).to receive(:exit).with(2)
63
-
64
- subject.execute!
65
- end
66
- end
67
- end
68
-
69
- [ProfilesNotDefinedError, YmlLoadError, ProfileNotFound].each do |exception_klass|
70
- it "rescues #{exception_klass}, prints the message to the error stream" do
71
- configuration = double('configuration')
72
-
73
- allow(Configuration).to receive(:new) { configuration }
74
- allow(configuration).to receive(:parse!).and_raise(exception_klass.new('error message'))
75
- allow(kernel).to receive(:exit).with(2)
76
-
77
- subject.execute!
78
-
79
- expect(stderr.string).to eq "error message\n"
80
- end
81
- end
82
- end
83
- end
84
- end
@@ -1,445 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'yaml'
4
- require 'cucumber/cli/options'
5
-
6
- module Cucumber
7
- module Cli
8
- describe Options do
9
-
10
- def given_cucumber_yml_defined_as(hash_or_string)
11
- allow(File).to receive(:exist?) { true }
12
-
13
- cucumber_yml = hash_or_string.is_a?(Hash) ? hash_or_string.to_yaml : hash_or_string
14
-
15
- allow(IO).to receive(:read).with('cucumber.yml') { cucumber_yml }
16
- end
17
-
18
- before(:each) do
19
- allow(File).to receive(:exist?) { false } # Meaning, no cucumber.yml exists
20
- allow(Kernel).to receive(:exit)
21
- end
22
-
23
- def output_stream
24
- @output_stream ||= StringIO.new
25
- end
26
-
27
- def error_stream
28
- @error_stream ||= StringIO.new
29
- end
30
-
31
- def options
32
- @options ||= Options.new(output_stream, error_stream)
33
- end
34
-
35
- def prepare_args(args)
36
- args.is_a?(Array) ? args : args.split(' ')
37
- end
38
-
39
- describe 'parsing' do
40
-
41
- def when_parsing(args)
42
- yield
43
- options.parse!(prepare_args(args))
44
- end
45
-
46
- def after_parsing(args)
47
- options.parse!(prepare_args(args))
48
- yield
49
- end
50
-
51
- context '-r or --require' do
52
- it 'collects all specified files into an array' do
53
- after_parsing('--require some_file.rb -r another_file.rb') do
54
- expect(options[:require]).to eq ['some_file.rb', 'another_file.rb']
55
- end
56
- end
57
- end
58
-
59
- context '--i18n-languages' do
60
- include RSpec::WorkInProgress
61
-
62
- it 'lists all known languages' do
63
- after_parsing '--i18n-languages' do
64
- ::Gherkin::DIALECTS.keys.map do |key|
65
- expect(@output_stream.string).to include(key.to_s);
66
- end
67
- end
68
- end
69
-
70
- it 'exits the program' do
71
- when_parsing('--i18n-languages') { expect(Kernel).to receive(:exit) }
72
- end
73
- end
74
-
75
- context '--i18n-keywords' do
76
- context 'with invalid LANG' do
77
- include RSpec::WorkInProgress
78
-
79
- it 'exits' do
80
- when_parsing '--i18n-keywords foo' do
81
- expect(Kernel).to receive(:exit)
82
- end
83
- end
84
-
85
- it 'says the language was invalid' do
86
- after_parsing '--i18n-keywords foo' do
87
- expect(@output_stream.string).to include("Invalid language 'foo'. Available languages are:")
88
- end
89
- end
90
-
91
- it 'displays the language table' do
92
- after_parsing '--i18n-keywords foo' do
93
- ::Gherkin::DIALECTS.keys.map do |key|
94
- expect(@output_stream.string).to include(key.to_s);
95
- end
96
- end
97
- end
98
- end
99
- end
100
-
101
- context '-f FORMAT or --format FORMAT' do
102
- it 'defaults the output for the formatter to the output stream (STDOUT)' do
103
- after_parsing('-f pretty') { expect(options[:formats]).to eq [['pretty', {}, output_stream]] }
104
- end
105
-
106
- it 'extracts per-formatter options' do
107
- after_parsing('-f pretty,foo=bar,foo2=bar2') do
108
- expect(options[:formats]).to eq [['pretty', { 'foo' => 'bar', 'foo2' => 'bar2' }, output_stream]]
109
- end
110
- end
111
- end
112
-
113
- context '-o [FILE|DIR] or --out [FILE|DIR]' do
114
- it "defaults the formatter to 'pretty' when not specified earlier" do
115
- after_parsing('-o file.txt') { expect(options[:formats]).to eq [['pretty', {}, 'file.txt']] }
116
- end
117
- it 'sets the output for the formatter defined immediatly before it' do
118
- after_parsing('-f profile --out file.txt -f pretty -o file2.txt') do
119
- expect(options[:formats]).to eq [['profile', {}, 'file.txt'], ['pretty', {}, 'file2.txt']]
120
- end
121
- end
122
- end
123
-
124
- context 'handling multiple formatters' do
125
- it 'catches multiple command line formatters using the same stream' do
126
- expect{ options.parse!(prepare_args('-f pretty -f progress')) }.to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
127
- end
128
-
129
- it 'catches multiple profile formatters using the same stream' do
130
- given_cucumber_yml_defined_as({'default' => '-f progress -f pretty'})
131
- options = Options.new(output_stream, error_stream, :default_profile => 'default')
132
-
133
- expect{ options.parse!(%w{}) }.to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
134
- end
135
-
136
- it 'profiles does not affect the catching of multiple command line formatters using the same stream' do
137
- given_cucumber_yml_defined_as({'default' => '-q'})
138
- options = Options.new(output_stream, error_stream, :default_profile => 'default')
139
-
140
- expect{ options.parse!(%w{-f progress -f pretty}) }.to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
141
- end
142
-
143
- it 'merges profile formatters and command line formatters' do
144
- given_cucumber_yml_defined_as({'default' => '-f junit -o result.xml'})
145
- options = Options.new(output_stream, error_stream, :default_profile => 'default')
146
-
147
- options.parse!(%w{-f pretty})
148
-
149
- expect(options[:formats]).to eq [['pretty', {}, output_stream], ['junit', {}, 'result.xml']]
150
- end
151
- end
152
-
153
- context '-t TAGS --tags TAGS' do
154
- it 'handles tag expressions as argument' do
155
- after_parsing(['--tags', 'not @foo or @bar']) { expect(options[:tag_expressions]).to eq ['not @foo or @bar'] }
156
- end
157
-
158
- it 'stores tags passed with different --tags seperately' do
159
- after_parsing('--tags @foo --tags @bar') { expect(options[:tag_expressions]).to eq ['@foo', '@bar'] }
160
- end
161
-
162
- it 'strips tag limits from the tag expressions stored' do
163
- after_parsing(['--tags', 'not @foo:2 or @bar:3']) { expect(options[:tag_expressions]).to eq ['not @foo or @bar'] }
164
- end
165
-
166
- it 'stores tag limits separately' do
167
- after_parsing(['--tags', 'not @foo:2 or @bar:3']) { expect(options[:tag_limits]).to eq Hash('@foo' => 2, '@bar' => 3) }
168
- end
169
-
170
- it 'raise exception for inconsistent tag limits' do
171
- expect{ after_parsing('--tags @foo:2 --tags @foo:3') }.to raise_error(RuntimeError, 'Inconsistent tag limits for @foo: 2 and 3')
172
-
173
- end
174
- end
175
-
176
- context '-n NAME or --name NAME' do
177
- it 'stores the provided names as regular expressions' do
178
- after_parsing('-n foo --name bar') { expect(options[:name_regexps]).to eq [/foo/,/bar/] }
179
- end
180
- end
181
-
182
- context '-e PATTERN or --exclude PATTERN' do
183
- it 'stores the provided exclusions as regular expressions' do
184
- after_parsing('-e foo --exclude bar') { expect(options[:excludes]).to eq [/foo/,/bar/] }
185
- end
186
- end
187
-
188
- context '-l LINES or --lines LINES' do
189
- it 'adds line numbers to args' do
190
- options.parse!(%w{-l24 FILE})
191
-
192
- expect(options.instance_variable_get(:@args)).to eq ['FILE:24']
193
- end
194
- end
195
-
196
- context '-p PROFILE or --profile PROFILE' do
197
- it 'uses the default profile passed in during initialization if none are specified by the user' do
198
- given_cucumber_yml_defined_as({'default' => '--require some_file'})
199
-
200
- options = Options.new(output_stream, error_stream, :default_profile => 'default')
201
- options.parse!(%w{--format progress})
202
-
203
- expect(options[:require]).to include('some_file')
204
- end
205
-
206
- it 'merges all uniq values from both cmd line and the profile' do
207
- given_cucumber_yml_defined_as('foo' => %w[--verbose])
208
- options.parse!(%w[--wip --profile foo])
209
-
210
- expect(options[:wip]).to be true
211
- expect(options[:verbose]).to be true
212
- end
213
-
214
- it "gives precendene to the origianl options' paths" do
215
- given_cucumber_yml_defined_as('foo' => %w[features])
216
- options.parse!(%w[my.feature -p foo])
217
-
218
- expect(options[:paths]).to eq %w[my.feature]
219
- end
220
-
221
- it 'combines the require files of both' do
222
- given_cucumber_yml_defined_as('bar' => %w[--require features -r dog.rb])
223
- options.parse!(%w[--require foo.rb -p bar])
224
-
225
- expect(options[:require]).to eq %w[foo.rb features dog.rb]
226
- end
227
-
228
- it 'combines the tag names of both' do
229
- given_cucumber_yml_defined_as('baz' => %w[-t @bar])
230
- options.parse!(%w[--tags @foo -p baz])
231
-
232
- expect(options[:tag_expressions]).to eq ['@foo', '@bar']
233
- end
234
-
235
- it 'combines the tag limits of both' do
236
- given_cucumber_yml_defined_as('baz' => %w[-t @bar:2])
237
- options.parse!(%w[--tags @foo:3 -p baz])
238
-
239
- expect(options[:tag_limits]).to eq Hash('@foo' => 3, '@bar' => 2)
240
- end
241
-
242
- it 'raise exceptions for inconsistent tag limits' do
243
- given_cucumber_yml_defined_as('baz' => %w[-t @bar:2])
244
-
245
- expect{ options.parse!(%w[--tags @bar:3 -p baz]) }.to raise_error(RuntimeError, 'Inconsistent tag limits for @bar: 3 and 2')
246
- end
247
-
248
- it 'only takes the paths from the original options, and disgregards the profiles' do
249
- given_cucumber_yml_defined_as('baz' => %w[features])
250
- options.parse!(%w[my.feature -p baz])
251
-
252
- expect(options[:paths]).to eq ['my.feature']
253
- end
254
-
255
- it 'uses the paths from the profile when none are specified originally' do
256
- given_cucumber_yml_defined_as('baz' => %w[some.feature])
257
- options.parse!(%w[-p baz])
258
-
259
- expect(options[:paths]).to eq ['some.feature']
260
- end
261
-
262
- it 'combines environment variables from the profile but gives precendene to cmd line args' do
263
- given_cucumber_yml_defined_as('baz' => %w[FOO=bar CHEESE=swiss])
264
- options.parse!(%w[-p baz CHEESE=cheddar BAR=foo])
265
-
266
- expect(options[:env_vars]).to eq({ 'BAR' => 'foo', 'FOO' => 'bar', 'CHEESE' => 'cheddar' })
267
- end
268
-
269
- it 'disregards STDOUT formatter defined in profile when another is passed in (via cmd line)' do
270
- given_cucumber_yml_defined_as({'foo' => %w[--format pretty]})
271
- options.parse!(%w{--format progress --profile foo})
272
-
273
- expect(options[:formats]).to eq [['progress', {}, output_stream]]
274
- end
275
-
276
- it 'includes any non-STDOUT formatters from the profile' do
277
- given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html]})
278
- options.parse!(%w{--format progress --profile html})
279
-
280
- expect(options[:formats]).to eq [['progress', {}, output_stream], ['html', {}, 'features.html']]
281
- end
282
-
283
- it 'does not include STDOUT formatters from the profile if there is a STDOUT formatter in command line' do
284
- given_cucumber_yml_defined_as({'html' => %w[--format html -o features.html --format pretty]})
285
- options.parse!(%w{--format progress --profile html})
286
-
287
- expect(options[:formats]).to eq [['progress', {}, output_stream], ['html', {}, 'features.html']]
288
- end
289
-
290
- it 'includes any STDOUT formatters from the profile if no STDOUT formatter was specified in command line' do
291
- given_cucumber_yml_defined_as({'html' => %w[--format html]})
292
- options.parse!(%w{--format rerun -o rerun.txt --profile html})
293
-
294
- expect(options[:formats]).to eq [['html', {}, output_stream], ['rerun', {}, 'rerun.txt']]
295
- end
296
-
297
- it 'assumes all of the formatters defined in the profile when none are specified on cmd line' do
298
- given_cucumber_yml_defined_as({'html' => %w[--format progress --format html -o features.html]})
299
- options.parse!(%w{--profile html})
300
-
301
- expect(options[:formats]).to eq [['progress', {}, output_stream], ['html', {}, 'features.html']]
302
- end
303
-
304
- it 'only reads cucumber.yml once' do
305
- original_parse_count = $cucumber_yml_read_count
306
- $cucumber_yml_read_count = 0
307
-
308
- begin
309
- given_cucumber_yml_defined_as(<<-END
310
- <% $cucumber_yml_read_count += 1 %>
311
- default: --format pretty
312
- END
313
- )
314
- options = Options.new(output_stream, error_stream, :default_profile => 'default')
315
- options.parse!(%w(-f progress))
316
-
317
- expect($cucumber_yml_read_count).to eq 1
318
- ensure
319
- $cucumber_yml_read_count = original_parse_count
320
- end
321
- end
322
-
323
- it 'respects --quiet when defined in the profile' do
324
- given_cucumber_yml_defined_as('foo' => '-q')
325
- options.parse!(%w[-p foo])
326
-
327
- expect(options[:snippets]).to be false
328
- expect(options[:source]).to be false
329
- expect(options[:duration]).to be false
330
- end
331
-
332
- it 'uses --no-duration when defined in the profile' do
333
- given_cucumber_yml_defined_as('foo' => '--no-duration')
334
- options.parse!(%w[-p foo])
335
-
336
- expect(options[:duration]).to be false
337
- end
338
- end
339
-
340
- context '-P or --no-profile' do
341
- it 'disables profiles' do
342
- given_cucumber_yml_defined_as({'default' => '-v --require file_specified_in_default_profile.rb'})
343
-
344
- after_parsing('-P --require some_file.rb') do
345
- expect(options[:require]).to eq ['some_file.rb']
346
- end
347
- end
348
-
349
- it 'notifies the user that the profiles are being disabled' do
350
- given_cucumber_yml_defined_as({'default' => '-v'})
351
-
352
- after_parsing('--no-profile --require some_file.rb') do
353
- expect(output_stream.string).to match(/Disabling profiles.../)
354
- end
355
- end
356
- end
357
-
358
- context '-b or --backtrace' do
359
- it "turns on cucumber's full backtrace" do
360
- when_parsing('-b') do
361
- expect(Cucumber).to receive(:use_full_backtrace=).with(true)
362
- end
363
- end
364
- end
365
-
366
- context '--version' do
367
- it "displays Cucumber's version" do
368
- after_parsing('--version') do
369
- expect(output_stream.string).to match(/#{Cucumber::VERSION}/)
370
- end
371
- end
372
-
373
- it 'exits the program' do
374
- when_parsing('--version') { expect(Kernel).to receive(:exit) }
375
- end
376
- end
377
-
378
- context 'environment variables (i.e. MODE=webrat)' do
379
- it 'places all of the environment variables into a hash' do
380
- after_parsing('MODE=webrat FOO=bar') do
381
- expect(options[:env_vars]).to eq({ 'MODE' => 'webrat', 'FOO' => 'bar' })
382
- end
383
- end
384
- end
385
-
386
- context '--retry ATTEMPTS' do
387
- it 'is 0 by default' do
388
- after_parsing('') do
389
- expect(options[:retry]).to eql 0
390
- end
391
- end
392
-
393
- it 'sets the options[:retry] value' do
394
- after_parsing('--retry 4') do
395
- expect(options[:retry]).to eql 4
396
- end
397
- end
398
- end
399
-
400
- it 'assigns any extra arguments as paths to features' do
401
- after_parsing('-f pretty my_feature.feature my_other_features') do
402
- expect(options[:paths]).to eq ['my_feature.feature', 'my_other_features']
403
- end
404
- end
405
-
406
- it 'does not mistake environment variables as feature paths' do
407
- after_parsing('my_feature.feature FOO=bar') do
408
- expect(options[:paths]).to eq ['my_feature.feature']
409
- end
410
- end
411
-
412
- context '--snippet-type' do
413
- it 'parses the snippet type argument' do
414
- after_parsing('--snippet-type classic') do
415
- expect(options[:snippet_type]).to eq :classic
416
- end
417
- end
418
- end
419
- end
420
-
421
- describe 'dry-run' do
422
- it 'has the default value for snippets' do
423
- given_cucumber_yml_defined_as({'foo' => %w[--dry-run]})
424
- options.parse!(%w{--dry-run})
425
-
426
- expect(options[:snippets]).to be true
427
- end
428
-
429
- it 'sets snippets to false when no-snippets provided after dry-run' do
430
- given_cucumber_yml_defined_as({'foo' => %w[--dry-run --no-snippets]})
431
- options.parse!(%w{--dry-run --no-snippets})
432
-
433
- expect(options[:snippets]).to be false
434
- end
435
-
436
- it 'sets snippets to false when no-snippets provided before dry-run' do
437
- given_cucumber_yml_defined_as({'foo' => %w[--no-snippet --dry-run]})
438
- options.parse!(%w{--no-snippets --dry-run})
439
-
440
- expect(options[:snippets]).to be false
441
- end
442
- end
443
- end
444
- end
445
- end