cucumber 3.0.0 → 3.1.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 (429) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +53 -3
  3. data/CONTRIBUTING.md +2 -4
  4. data/README.md +6 -5
  5. data/lib/cucumber/cli/options.rb +3 -1
  6. data/lib/cucumber/errors.rb +1 -1
  7. data/lib/cucumber/events/test_step_finished.rb +0 -2
  8. data/lib/cucumber/events/test_step_started.rb +0 -2
  9. data/lib/cucumber/events.rb +0 -1
  10. data/lib/cucumber/filters/quit.rb +0 -1
  11. data/lib/cucumber/formatter/html.rb +1 -1
  12. data/lib/cucumber/formatter/html_builder.rb +1 -1
  13. data/lib/cucumber/formatter/ignore_missing_messages.rb +0 -1
  14. data/lib/cucumber/formatter/json.rb +1 -1
  15. data/lib/cucumber/formatter/json_pretty.rb +0 -1
  16. data/lib/cucumber/formatter/junit.rb +6 -2
  17. data/lib/cucumber/formatter/rerun.rb +1 -1
  18. data/lib/cucumber/formatter/summary.rb +0 -1
  19. data/lib/cucumber/glue/dsl.rb +6 -2
  20. data/lib/cucumber/glue/proto_world.rb +2 -0
  21. data/lib/cucumber/glue/step_definition.rb +1 -1
  22. data/lib/cucumber/glue/world_factory.rb +1 -1
  23. data/lib/cucumber/hooks.rb +12 -0
  24. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +0 -1
  25. data/lib/cucumber/multiline_argument/data_table.rb +6 -10
  26. data/lib/cucumber/multiline_argument.rb +1 -1
  27. data/lib/cucumber/step_definitions.rb +1 -1
  28. data/lib/cucumber/step_match.rb +4 -1
  29. data/lib/cucumber/step_match_search.rb +1 -1
  30. data/lib/cucumber/version +1 -1
  31. metadata +32 -571
  32. data/.coveralls.yml +0 -1
  33. data/.cucumberproignore +0 -6
  34. data/.gitattributes +0 -32
  35. data/.github/ISSUE_TEMPLATE.md +0 -48
  36. data/.github/PULL_REQUEST_TEMPLATE.md +0 -40
  37. data/.rspec +0 -1
  38. data/.rubocop.yml +0 -13
  39. data/.rubocop_todo.yml +0 -991
  40. data/.ruby-gemset +0 -1
  41. data/.travis.yml +0 -69
  42. data/.yardopts +0 -1
  43. data/Gemfile +0 -28
  44. data/Rakefile +0 -32
  45. data/appveyor.yml +0 -27
  46. data/cucumber.gemspec +0 -52
  47. data/cucumber.yml +0 -19
  48. data/examples/i18n/README.textile +0 -3
  49. data/examples/i18n/Rakefile +0 -33
  50. data/examples/i18n/ar/Rakefile +0 -6
  51. data/examples/i18n/ar/features/addition.feature +0 -17
  52. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -29
  53. data/examples/i18n/ar/lib/calculator.rb +0 -11
  54. data/examples/i18n/bg/Rakefile +0 -6
  55. data/examples/i18n/bg/features/addition.feature +0 -12
  56. data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
  57. data/examples/i18n/bg/features/division.feature +0 -17
  58. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
  59. data/examples/i18n/bg/features/support/env.rb +0 -10
  60. data/examples/i18n/bg/features/support/world.rb +0 -8
  61. data/examples/i18n/bg/lib/calculator.rb +0 -25
  62. data/examples/i18n/ca/Rakefile +0 -6
  63. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -26
  64. data/examples/i18n/ca/features/suma.feature +0 -17
  65. data/examples/i18n/ca/lib/calculadora.rb +0 -16
  66. data/examples/i18n/cs/Rakefile +0 -6
  67. data/examples/i18n/cs/features/addition.feature +0 -17
  68. data/examples/i18n/cs/features/division.feature +0 -11
  69. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -29
  70. data/examples/i18n/cs/lib/calculator.rb +0 -14
  71. data/examples/i18n/da/Rakefile +0 -6
  72. data/examples/i18n/da/features/sammenlaegning.feature +0 -18
  73. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -29
  74. data/examples/i18n/da/lib/lommeregner.rb +0 -11
  75. data/examples/i18n/de/Rakefile +0 -6
  76. data/examples/i18n/de/features/addition.feature +0 -17
  77. data/examples/i18n/de/features/division.feature +0 -10
  78. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -29
  79. data/examples/i18n/de/lib/calculator.rb +0 -14
  80. data/examples/i18n/el/Rakefile +0 -6
  81. data/examples/i18n/el/features/addition.feature +0 -17
  82. data/examples/i18n/el/features/division.feature +0 -10
  83. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -29
  84. data/examples/i18n/el/lib/calculator.rb +0 -14
  85. data/examples/i18n/en/Rakefile +0 -6
  86. data/examples/i18n/en/features/addition.feature +0 -17
  87. data/examples/i18n/en/features/division.feature +0 -10
  88. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -29
  89. data/examples/i18n/en/lib/calculator.rb +0 -14
  90. data/examples/i18n/en-lol/Rakefile +0 -4
  91. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
  92. data/examples/i18n/en-lol/features/stuffing.feature +0 -8
  93. data/examples/i18n/en-lol/features/support/env.rb +0 -11
  94. data/examples/i18n/en-lol/lib/basket.rb +0 -12
  95. data/examples/i18n/en-lol/lib/belly.rb +0 -11
  96. data/examples/i18n/eo/Rakefile +0 -6
  97. data/examples/i18n/eo/features/adicio.feature +0 -17
  98. data/examples/i18n/eo/features/divido.feature +0 -10
  99. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -29
  100. data/examples/i18n/eo/lib/calculator.rb +0 -14
  101. data/examples/i18n/es/Rakefile +0 -6
  102. data/examples/i18n/es/features/adicion.feature +0 -17
  103. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -26
  104. data/examples/i18n/es/lib/calculador.rb +0 -14
  105. data/examples/i18n/et/Rakefile +0 -6
  106. data/examples/i18n/et/features/jagamine.feature +0 -10
  107. data/examples/i18n/et/features/liitmine.feature +0 -17
  108. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -29
  109. data/examples/i18n/et/lib/kalkulaator.rb +0 -14
  110. data/examples/i18n/fi/Rakefile +0 -6
  111. data/examples/i18n/fi/features/jakolasku.feature +0 -10
  112. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -29
  113. data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
  114. data/examples/i18n/fi/lib/laskin.rb +0 -14
  115. data/examples/i18n/fr/Rakefile +0 -8
  116. data/examples/i18n/fr/features/addition.feature +0 -18
  117. data/examples/i18n/fr/features/addition2.feature +0 -17
  118. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
  119. data/examples/i18n/fr/features/support/env.rb +0 -10
  120. data/examples/i18n/fr/lib/calculatrice.rb +0 -10
  121. data/examples/i18n/he/Rakefile +0 -6
  122. data/examples/i18n/he/features/addition.feature +0 -17
  123. data/examples/i18n/he/features/division.feature +0 -10
  124. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -29
  125. data/examples/i18n/he/lib/calculator.rb +0 -15
  126. data/examples/i18n/hi/Rakefile +0 -6
  127. data/examples/i18n/hi/features/addition.feature +0 -16
  128. data/examples/i18n/hi/features/division.feature +0 -10
  129. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -29
  130. data/examples/i18n/hi/lib/calculator.rb +0 -15
  131. data/examples/i18n/ht/Rakefile +0 -6
  132. data/examples/i18n/ht/features/adisyon.feature +0 -17
  133. data/examples/i18n/ht/features/divizyon.feature +0 -10
  134. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +0 -29
  135. data/examples/i18n/ht/lib/kalkilatris.rb +0 -14
  136. data/examples/i18n/hu/Rakefile +0 -6
  137. data/examples/i18n/hu/features/osszeadas.feature +0 -17
  138. data/examples/i18n/hu/features/osztas.feature +0 -10
  139. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -30
  140. data/examples/i18n/hu/lib/calculator.rb +0 -14
  141. data/examples/i18n/id/Rakefile +0 -6
  142. data/examples/i18n/id/features/addition.feature +0 -17
  143. data/examples/i18n/id/features/division.feature +0 -10
  144. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -29
  145. data/examples/i18n/id/lib/calculator.rb +0 -14
  146. data/examples/i18n/it/Rakefile +0 -6
  147. data/examples/i18n/it/features/somma.feature +0 -11
  148. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -29
  149. data/examples/i18n/it/lib/calcolatrice.rb +0 -11
  150. data/examples/i18n/ja/Rakefile +0 -6
  151. data/examples/i18n/ja/features/addition.feature +0 -17
  152. data/examples/i18n/ja/features/division.feature +0 -10
  153. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
  154. data/examples/i18n/ja/features/support/env.rb +0 -10
  155. data/examples/i18n/ja/lib/calculator.rb +0 -14
  156. data/examples/i18n/ko/Rakefile +0 -6
  157. data/examples/i18n/ko/features/addition.feature +0 -17
  158. data/examples/i18n/ko/features/division.feature +0 -11
  159. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -29
  160. data/examples/i18n/ko/lib/calculator.rb +0 -14
  161. data/examples/i18n/lt/Rakefile +0 -6
  162. data/examples/i18n/lt/features/addition.feature +0 -17
  163. data/examples/i18n/lt/features/division.feature +0 -10
  164. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -29
  165. data/examples/i18n/lt/lib/calculator.rb +0 -14
  166. data/examples/i18n/lv/Rakefile +0 -6
  167. data/examples/i18n/lv/features/addition.feature +0 -17
  168. data/examples/i18n/lv/features/division.feature +0 -10
  169. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -29
  170. data/examples/i18n/lv/lib/calculator.rb +0 -14
  171. data/examples/i18n/no/Rakefile +0 -6
  172. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
  173. data/examples/i18n/no/features/summering.feature +0 -19
  174. data/examples/i18n/no/features/support/env.rb +0 -11
  175. data/examples/i18n/no/lib/kalkulator.rb +0 -11
  176. data/examples/i18n/pl/Rakefile +0 -6
  177. data/examples/i18n/pl/features/addition.feature +0 -17
  178. data/examples/i18n/pl/features/division.feature +0 -10
  179. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -29
  180. data/examples/i18n/pl/features/support/env.rb +0 -10
  181. data/examples/i18n/pl/lib/calculator.rb +0 -14
  182. data/examples/i18n/pt/Rakefile +0 -6
  183. data/examples/i18n/pt/features/adicao.feature +0 -11
  184. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
  185. data/examples/i18n/pt/features/support/env.rb +0 -10
  186. data/examples/i18n/pt/lib/calculadora.rb +0 -10
  187. data/examples/i18n/ro/Rakefile +0 -6
  188. data/examples/i18n/ro/features/adunare.feature +0 -12
  189. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -26
  190. data/examples/i18n/ro/lib/calculator.rb +0 -11
  191. data/examples/i18n/ru/Rakefile +0 -6
  192. data/examples/i18n/ru/features/addition.feature +0 -11
  193. data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
  194. data/examples/i18n/ru/features/division.feature +0 -16
  195. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
  196. data/examples/i18n/ru/features/support/env.rb +0 -10
  197. data/examples/i18n/ru/features/support/world.rb +0 -8
  198. data/examples/i18n/ru/lib/calculator.rb +0 -25
  199. data/examples/i18n/sk/Rakefile +0 -6
  200. data/examples/i18n/sk/features/addition.feature +0 -17
  201. data/examples/i18n/sk/features/division.feature +0 -10
  202. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -29
  203. data/examples/i18n/sk/lib/calculator.rb +0 -14
  204. data/examples/i18n/sr-Cyrl/Rakefile +0 -6
  205. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
  206. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
  207. data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -10
  208. data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
  209. data/examples/i18n/sr-Latn/Rakefile +0 -6
  210. data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
  211. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -29
  212. data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
  213. data/examples/i18n/sv/Rakefile +0 -6
  214. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -29
  215. data/examples/i18n/sv/features/summering.feature +0 -18
  216. data/examples/i18n/sv/lib/kalkulator.rb +0 -11
  217. data/examples/i18n/tr/Rakefile +0 -6
  218. data/examples/i18n/tr/features/bolme.feature +0 -10
  219. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -29
  220. data/examples/i18n/tr/features/toplama.feature +0 -18
  221. data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
  222. data/examples/i18n/uk/Rakefile +0 -6
  223. data/examples/i18n/uk/features/addition.feature +0 -11
  224. data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
  225. data/examples/i18n/uk/features/division.feature +0 -16
  226. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
  227. data/examples/i18n/uk/features/support/env.rb +0 -10
  228. data/examples/i18n/uk/features/support/world.rb +0 -8
  229. data/examples/i18n/uk/lib/calculator.rb +0 -25
  230. data/examples/i18n/uz/Rakefile +0 -6
  231. data/examples/i18n/uz/features/addition.feature +0 -10
  232. data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
  233. data/examples/i18n/uz/features/division.feature +0 -17
  234. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
  235. data/examples/i18n/uz/features/support/env.rb +0 -10
  236. data/examples/i18n/uz/features/support/world.rb +0 -8
  237. data/examples/i18n/uz/lib/calculator.rb +0 -25
  238. data/examples/i18n/zh-CN/Rakefile +0 -4
  239. data/examples/i18n/zh-CN/features/addition.feature +0 -18
  240. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -31
  241. data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
  242. data/examples/i18n/zh-TW/Rakefile +0 -4
  243. data/examples/i18n/zh-TW/features/addition.feature +0 -17
  244. data/examples/i18n/zh-TW/features/division.feature +0 -11
  245. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -29
  246. data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
  247. data/examples/rspec_doubles/Rakefile +0 -4
  248. data/examples/rspec_doubles/features/mocking.feature +0 -9
  249. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
  250. data/examples/rspec_doubles/features/support/env.rb +0 -12
  251. data/examples/sinatra/README.textile +0 -13
  252. data/examples/sinatra/Rakefile +0 -6
  253. data/examples/sinatra/app.rb +0 -14
  254. data/examples/sinatra/features/add.feature +0 -11
  255. data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
  256. data/examples/sinatra/features/support/env.rb +0 -15
  257. data/examples/sinatra/views/add.erb +0 -7
  258. data/examples/sinatra/views/layout.erb +0 -8
  259. data/examples/tcl/README.textile +0 -11
  260. data/examples/tcl/Rakefile +0 -6
  261. data/examples/tcl/features/fibonnacci.feature +0 -17
  262. data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
  263. data/examples/tcl/features/support/env.rb +0 -7
  264. data/examples/tcl/src/fib.tcl +0 -3
  265. data/examples/test_unit/Gemfile +0 -4
  266. data/examples/test_unit/Rakefile +0 -6
  267. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
  268. data/examples/test_unit/features/test_unit.feature +0 -9
  269. data/examples/watir/README.textile +0 -16
  270. data/examples/watir/Rakefile +0 -12
  271. data/examples/watir/cucumber.yml +0 -1
  272. data/examples/watir/features/search.feature +0 -12
  273. data/examples/watir/features/step_definitions/search_steps.rb +0 -27
  274. data/examples/watir/features/support/env.rb +0 -39
  275. data/examples/watir/features/support/screenshots.rb +0 -47
  276. data/features/docs/api/list_step_defs_as_json.feature +0 -64
  277. data/features/docs/api/listen_for_events.feature +0 -59
  278. data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -27
  279. data/features/docs/cli/backtraces.feature +0 -36
  280. data/features/docs/cli/dry_run.feature +0 -73
  281. data/features/docs/cli/exclude_files.feature +0 -18
  282. data/features/docs/cli/execute_with_tag_filter.feature +0 -119
  283. data/features/docs/cli/fail_fast.feature +0 -48
  284. data/features/docs/cli/finding_steps.feature +0 -28
  285. data/features/docs/cli/help.feature +0 -8
  286. data/features/docs/cli/i18n.feature +0 -42
  287. data/features/docs/cli/randomize.feature +0 -140
  288. data/features/docs/cli/require.feature +0 -27
  289. data/features/docs/cli/retry_failing_tests.feature +0 -92
  290. data/features/docs/cli/run_scenarios_matching_name.feature +0 -105
  291. data/features/docs/cli/run_specific_scenarios.feature +0 -77
  292. data/features/docs/cli/showing_differences.feature +0 -43
  293. data/features/docs/cli/specifying_multiple_formatters.feature +0 -68
  294. data/features/docs/cli/strict_mode.feature +0 -70
  295. data/features/docs/defining_steps/ambiguous_steps.feature +0 -89
  296. data/features/docs/defining_steps/nested_steps.feature +0 -181
  297. data/features/docs/defining_steps/nested_steps_i18n.feature +0 -37
  298. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -56
  299. data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
  300. data/features/docs/defining_steps/printing_messages.feature +0 -147
  301. data/features/docs/defining_steps/skip_scenario.feature +0 -31
  302. data/features/docs/defining_steps/snippets.feature +0 -56
  303. data/features/docs/defining_steps/table_diffing.feature +0 -50
  304. data/features/docs/events/gherkin_source_read_event.feature +0 -43
  305. data/features/docs/events/step_activated_event.feature +0 -36
  306. data/features/docs/events/step_definition_registered_event.feature +0 -29
  307. data/features/docs/events/test_case_finished_event.feature +0 -35
  308. data/features/docs/events/test_case_started_event.feature +0 -54
  309. data/features/docs/events/test_run_finished_event.feature +0 -40
  310. data/features/docs/events/test_run_started_event.feature +0 -41
  311. data/features/docs/events/test_step_finished_event.feature +0 -47
  312. data/features/docs/events/test_step_started_event.feature +0 -43
  313. data/features/docs/exception_in_after_hook.feature +0 -127
  314. data/features/docs/exception_in_after_step_hook.feature +0 -104
  315. data/features/docs/exception_in_around_hook.feature +0 -80
  316. data/features/docs/exception_in_before_hook.feature +0 -98
  317. data/features/docs/extending_cucumber/custom_filter.feature +0 -29
  318. data/features/docs/extending_cucumber/custom_formatter.feature +0 -94
  319. data/features/docs/formatters/api_methods.feature +0 -37
  320. data/features/docs/formatters/html_formatter.feature +0 -91
  321. data/features/docs/formatters/json_formatter.feature +0 -767
  322. data/features/docs/formatters/junit_formatter.feature +0 -455
  323. data/features/docs/formatters/pretty_formatter.feature +0 -74
  324. data/features/docs/formatters/progress_formatter.feature +0 -32
  325. data/features/docs/formatters/rerun_formatter.feature +0 -190
  326. data/features/docs/formatters/summary_formatter.feature +0 -35
  327. data/features/docs/formatters/usage_formatter.feature +0 -101
  328. data/features/docs/getting_started.feature +0 -28
  329. data/features/docs/gherkin/background.feature +0 -548
  330. data/features/docs/gherkin/doc_strings.feature +0 -76
  331. data/features/docs/gherkin/expand_option_for_outlines.feature +0 -47
  332. data/features/docs/gherkin/language_from_header.feature +0 -32
  333. data/features/docs/gherkin/outlines.feature +0 -158
  334. data/features/docs/gherkin/unicode_table.feature +0 -33
  335. data/features/docs/gherkin/using_descriptions.feature +0 -83
  336. data/features/docs/gherkin/using_star_notation.feature +0 -37
  337. data/features/docs/iso-8859-1.feature +0 -6
  338. data/features/docs/post_configuration_hook.feature +0 -33
  339. data/features/docs/profiles.feature +0 -120
  340. data/features/docs/rake_task.feature +0 -146
  341. data/features/docs/raketask.feature +0 -46
  342. data/features/docs/work_in_progress.feature +0 -157
  343. data/features/docs/writing_support_code/after_hooks.feature +0 -102
  344. data/features/docs/writing_support_code/after_step_hooks.feature +0 -55
  345. data/features/docs/writing_support_code/around_hooks.feature +0 -266
  346. data/features/docs/writing_support_code/before_hook.feature +0 -66
  347. data/features/docs/writing_support_code/hook_order.feature +0 -63
  348. data/features/docs/writing_support_code/load_path.feature +0 -17
  349. data/features/docs/writing_support_code/parameter_types.feature +0 -53
  350. data/features/docs/writing_support_code/state.feature +0 -32
  351. data/features/docs/writing_support_code/tagged_hooks.feature +0 -95
  352. data/features/docs/writing_support_code/world.feature +0 -129
  353. data/features/lib/step_definitions/aruba_steps.rb +0 -21
  354. data/features/lib/step_definitions/cli_steps.rb +0 -4
  355. data/features/lib/step_definitions/cucumber_steps.rb +0 -75
  356. data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -16
  357. data/features/lib/step_definitions/json_steps.rb +0 -8
  358. data/features/lib/step_definitions/junit_steps.rb +0 -14
  359. data/features/lib/step_definitions/language_steps.rb +0 -9
  360. data/features/lib/step_definitions/profile_steps.rb +0 -16
  361. data/features/lib/step_definitions/retry_steps.rb +0 -55
  362. data/features/lib/step_definitions/ruby_steps.rb +0 -4
  363. data/features/lib/support/env.rb +0 -22
  364. data/features/lib/support/fake_wire_server.rb +0 -94
  365. data/features/lib/support/feature_factory.rb +0 -68
  366. data/features/lib/support/normalise_output.rb +0 -52
  367. data/features/lib/support/parameter_types.rb +0 -5
  368. data/gem_tasks/contributors.rake +0 -19
  369. data/gem_tasks/cov.rake +0 -6
  370. data/gem_tasks/downloads.rb +0 -8
  371. data/gem_tasks/environment.rake +0 -4
  372. data/gem_tasks/examples.rake +0 -12
  373. data/gem_tasks/fix_cr_lf.rake +0 -22
  374. data/gem_tasks/flog.rake +0 -5
  375. data/gem_tasks/rspec.rake +0 -7
  376. data/gem_tasks/sass.rake +0 -5
  377. data/gem_tasks/stats +0 -16
  378. data/gem_tasks/versions.txt +0 -74
  379. data/scripts/invite-collaborator +0 -40
  380. data/scripts/update-changelog +0 -86
  381. data/spec/cucumber/cli/configuration_spec.rb +0 -446
  382. data/spec/cucumber/cli/main_spec.rb +0 -84
  383. data/spec/cucumber/cli/options_spec.rb +0 -445
  384. data/spec/cucumber/cli/profile_loader_spec.rb +0 -66
  385. data/spec/cucumber/cli/rerun_spec.rb +0 -86
  386. data/spec/cucumber/configuration_spec.rb +0 -148
  387. data/spec/cucumber/constantize_spec.rb +0 -20
  388. data/spec/cucumber/events_spec.rb +0 -9
  389. data/spec/cucumber/file_specs_spec.rb +0 -61
  390. data/spec/cucumber/filters/activate_steps_spec.rb +0 -152
  391. data/spec/cucumber/filters/gated_receiver_spec.rb +0 -48
  392. data/spec/cucumber/filters/retry_spec.rb +0 -98
  393. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -39
  394. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -58
  395. data/spec/cucumber/filters/tag_limits_spec.rb +0 -60
  396. data/spec/cucumber/formatter/ansicolor_spec.rb +0 -33
  397. data/spec/cucumber/formatter/backtrace_filter_spec.rb +0 -32
  398. data/spec/cucumber/formatter/console_counts_spec.rb +0 -14
  399. data/spec/cucumber/formatter/duration_spec.rb +0 -23
  400. data/spec/cucumber/formatter/fail_fast_spec.rb +0 -88
  401. data/spec/cucumber/formatter/html_spec.rb +0 -543
  402. data/spec/cucumber/formatter/interceptor_spec.rb +0 -137
  403. data/spec/cucumber/formatter/json_spec.rb +0 -815
  404. data/spec/cucumber/formatter/junit_spec.rb +0 -251
  405. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2175
  406. data/spec/cucumber/formatter/pretty_spec.rb +0 -907
  407. data/spec/cucumber/formatter/progress_spec.rb +0 -170
  408. data/spec/cucumber/formatter/rerun_spec.rb +0 -97
  409. data/spec/cucumber/formatter/spec_helper.rb +0 -84
  410. data/spec/cucumber/glue/proto_world_spec.rb +0 -63
  411. data/spec/cucumber/glue/registry_and_more_spec.rb +0 -213
  412. data/spec/cucumber/glue/snippet_spec.rb +0 -174
  413. data/spec/cucumber/glue/step_definition_spec.rb +0 -207
  414. data/spec/cucumber/hooks_spec.rb +0 -31
  415. data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -653
  416. data/spec/cucumber/project_initializer_spec.rb +0 -88
  417. data/spec/cucumber/rake/forked_spec.rb +0 -58
  418. data/spec/cucumber/rake/task_spec.rb +0 -86
  419. data/spec/cucumber/running_test_case_spec.rb +0 -140
  420. data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -8
  421. data/spec/cucumber/runtime/support_code_spec.rb +0 -17
  422. data/spec/cucumber/runtime_spec.rb +0 -21
  423. data/spec/cucumber/sell_cucumbers.feature +0 -19
  424. data/spec/cucumber/step_argument_spec.rb +0 -19
  425. data/spec/cucumber/step_match_search_spec.rb +0 -113
  426. data/spec/cucumber/step_match_spec.rb +0 -86
  427. data/spec/cucumber/world/pending_spec.rb +0 -48
  428. data/spec/spec_helper.rb +0 -30
  429. data/spec/support/standard_step_actions.rb +0 -19
@@ -1,446 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'yaml'
4
-
5
- module Cucumber
6
- module Cli
7
- describe Configuration do
8
- module ExposesOptions
9
- attr_reader :options
10
- end
11
-
12
- def given_cucumber_yml_defined_as(hash_or_string)
13
- allow(File).to receive(:exist?) { true }
14
-
15
- cucumber_yml = hash_or_string.is_a?(Hash) ? hash_or_string.to_yaml : hash_or_string
16
-
17
- allow(IO).to receive(:read).with('cucumber.yml') { cucumber_yml }
18
- end
19
-
20
- def given_the_following_files(*files)
21
- allow(File).to receive(:directory?) { true }
22
- allow(File).to receive(:file?) { true }
23
- allow(Dir).to receive(:[]) { files }
24
- end
25
-
26
- before(:each) do
27
- allow(File).to receive(:exist?) { false } # Meaning, no cucumber.yml exists
28
- allow(Kernel).to receive(:exit)
29
- end
30
-
31
- def config
32
- @config ||= Configuration.new(@out = StringIO.new, @error = StringIO.new).extend(ExposesOptions)
33
- end
34
-
35
- def reset_config
36
- @config = nil
37
- end
38
-
39
- attr_reader :out, :error
40
-
41
- it 'uses the default profile when no profile is defined' do
42
- given_cucumber_yml_defined_as({'default' => '--require some_file'})
43
-
44
- config.parse!(%w{--format progress})
45
-
46
- expect(config.options[:require]).to include('some_file')
47
- end
48
-
49
- context '--profile' do
50
- include RSpec::WorkInProgress
51
-
52
- it 'expands args from profiles in the cucumber.yml file' do
53
- given_cucumber_yml_defined_as({'bongo' => '--require from/yml'})
54
-
55
- config.parse!(%w{--format progress --profile bongo})
56
-
57
- expect(config.options[:formats]).to eq [['progress', {}, out]]
58
- expect(config.options[:require]).to eq ['from/yml']
59
- end
60
-
61
- it 'expands args from the default profile when no flags are provided' do
62
- given_cucumber_yml_defined_as({'default' => '--require from/yml'})
63
-
64
- config.parse!([])
65
-
66
- expect(config.options[:require]).to eq ['from/yml']
67
- end
68
-
69
- it 'allows --strict to be set by a profile' do
70
- given_cucumber_yml_defined_as({'bongo' => '--strict'})
71
-
72
- config.parse!(%w{--profile bongo})
73
-
74
- expect(config.options[:strict].strict?(:undefined)).to be true
75
- expect(config.options[:strict].strict?(:pending)).to be true
76
- expect(config.options[:strict].strict?(:flaky)).to be true
77
- end
78
-
79
- it 'allows --strict from a profile to be selectively overridden' do
80
- given_cucumber_yml_defined_as({'bongo' => '--strict'})
81
-
82
- config.parse!(%w{--profile bongo --no-strict-flaky})
83
-
84
- expect(config.options[:strict].strict?(:undefined)).to be true
85
- expect(config.options[:strict].strict?(:pending)).to be true
86
- expect(config.options[:strict].strict?(:flaky)).to be false
87
- end
88
-
89
- it 'parses ERB syntax in the cucumber.yml file' do
90
- given_cucumber_yml_defined_as("---\ndefault: \"<%=\"--require some_file\"%>\"\n")
91
-
92
- config.parse!([])
93
-
94
- expect(config.options[:require]).to include('some_file')
95
- end
96
-
97
- it 'parses ERB in cucumber.yml that makes uses nested ERB sessions' do
98
- given_cucumber_yml_defined_as(<<ERB_YML)
99
- <%= ERB.new({'standard' => '--require some_file'}.to_yaml).result %>
100
- <%= ERB.new({'enhanced' => '--require other_file'}.to_yaml).result %>
101
- ERB_YML
102
-
103
- config.parse!(%w(-p standard))
104
-
105
- expect(config.options[:require]).to include('some_file')
106
- end
107
-
108
- it 'provides a helpful error message when a specified profile does not exists in cucumber.yml' do
109
- given_cucumber_yml_defined_as({'default' => '--require from/yml', 'html_report' => '--format html'})
110
-
111
- expected_message = <<-END_OF_MESSAGE
112
- Could not find profile: 'i_do_not_exist'
113
-
114
- Defined profiles in cucumber.yml:
115
- * default
116
- * html_report
117
- END_OF_MESSAGE
118
-
119
- expect(-> { config.parse!(%w{--profile i_do_not_exist}) }).to raise_error(ProfileNotFound, expected_message)
120
- end
121
-
122
- it 'allows profiles to be defined in arrays' do
123
- given_cucumber_yml_defined_as({'foo' => ['-f','progress']})
124
-
125
- config.parse!(%w{--profile foo})
126
-
127
- expect(config.options[:formats]).to eq [['progress', {}, out]]
128
- end
129
-
130
- it 'disregards default STDOUT formatter defined in profile when another is passed in (via cmd line)' do
131
- given_cucumber_yml_defined_as({'foo' => %w[--format pretty]})
132
- config.parse!(%w{--format progress --profile foo})
133
-
134
- expect(config.options[:formats]).to eq [['progress', {}, out]]
135
- end
136
-
137
- ['--no-profile', '-P'].each do |flag|
138
- context 'when none is specified with #{flag}' do
139
- it 'disables profiles' do
140
- given_cucumber_yml_defined_as({'default' => '-v --require file_specified_in_default_profile.rb'})
141
-
142
- config.parse!("#{flag} --require some_file.rb".split(' '))
143
-
144
- expect(config.options[:require]).to eq ['some_file.rb']
145
- end
146
-
147
- it 'notifies the user that the profiles are being disabled' do
148
- given_cucumber_yml_defined_as({'default' => '-v'})
149
-
150
- config.parse!("#{flag} --require some_file.rb".split(' '))
151
-
152
- expect(out.string).to match(/Disabling profiles.../)
153
- end
154
- end
155
- end
156
-
157
- it 'issues a helpful error message when a specified profile exists but is nil or blank' do
158
- [nil, ' '].each do |bad_input|
159
- given_cucumber_yml_defined_as({'foo' => bad_input})
160
-
161
- expected_error = /The 'foo' profile in cucumber.yml was blank. Please define the command line arguments for the 'foo' profile in cucumber.yml./
162
-
163
- expect(-> { config.parse!(%w{--profile foo}) }).to raise_error(expected_error)
164
- end
165
- end
166
-
167
- it 'issues a helpful error message when no YAML file exists and a profile is specified' do
168
- expect(File).to receive(:exist?).with('cucumber.yml') { false }
169
-
170
- expected_error = /cucumber\.yml was not found/
171
-
172
- expect(-> { config.parse!(%w{--profile i_do_not_exist}) }).to raise_error(expected_error)
173
- end
174
-
175
- it 'issues a helpful error message when cucumber.yml is blank or malformed' do
176
- expected_error_message = /cucumber\.yml was found, but was blank or malformed. Please refer to cucumber's documentation on correct profile usage./
177
-
178
- ['', 'sfsadfs', "--- \n- an\n- array\n", '---dddfd'].each do |bad_input|
179
- given_cucumber_yml_defined_as(bad_input)
180
-
181
- expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
182
-
183
- reset_config
184
- end
185
- end
186
-
187
- it 'issues a helpful error message when cucumber.yml can not be parsed' do
188
- expected_error_message = /cucumber.yml was found, but could not be parsed. Please refer to cucumber's documentation on correct profile usage./
189
-
190
- given_cucumber_yml_defined_as('input that causes an exception in YAML loading')
191
-
192
- expect(YAML).to receive(:load).and_raise(ArgumentError)
193
- expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
194
- end
195
-
196
- it 'issues a helpful error message when cucumber.yml can not be parsed by ERB' do
197
- expected_error_message = /cucumber.yml was found, but could not be parsed with ERB. Please refer to cucumber's documentation on correct profile usage./
198
- given_cucumber_yml_defined_as('<% this_fails %>')
199
-
200
- expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
201
- end
202
- end
203
-
204
- it 'accepts --dry-run option' do
205
- config.parse!(%w{--dry-run})
206
-
207
- expect(config.options[:dry_run]).to be true
208
- end
209
-
210
- it 'implies --no-duration with --dry-run option' do
211
- config.parse!(%w{--dry-run})
212
-
213
- expect(config.options[:duration]).to be false
214
- end
215
-
216
- it 'accepts --no-source option' do
217
- config.parse!(%w{--no-source})
218
-
219
- expect(config.options[:source]).to be false
220
- end
221
-
222
- it 'accepts --no-snippets option' do
223
- config.parse!(%w{--no-snippets})
224
-
225
- expect(config.options[:snippets]).to be false
226
- end
227
-
228
- it 'sets snippets and source and duration to false with --quiet option' do
229
- config.parse!(%w{--quiet})
230
-
231
- expect(config.options[:snippets]).to be false
232
- expect(config.options[:source]).to be false
233
- expect(config.options[:duration]).to be false
234
- end
235
-
236
- it 'sets duration to false with --no-duration' do
237
- config.parse!(%w{--no-duration})
238
-
239
- expect(config.options[:duration]).to be false
240
- end
241
-
242
- it 'accepts --verbose option' do
243
- config.parse!(%w{--verbose})
244
-
245
- expect(config.options[:verbose]).to be true
246
- end
247
-
248
- it 'accepts --out option' do
249
- config.parse!(%w{--out jalla.txt})
250
-
251
- expect(config.formats).to eq [['pretty', {}, 'jalla.txt']]
252
- end
253
-
254
- it 'accepts multiple --out options' do
255
- config.parse!(%w{--format progress --out file1 --out file2})
256
-
257
- expect(config.formats).to eq [['progress', {}, 'file2']]
258
- end
259
-
260
- it 'accepts multiple --format options and put the STDOUT one first so progress is seen' do
261
- config.parse!(%w{--format pretty --out pretty.txt --format progress})
262
-
263
- expect(config.formats).to eq [['progress', {}, out], ['pretty', {}, 'pretty.txt']]
264
- end
265
-
266
- it 'does not accept multiple --format options when both use implicit STDOUT' do
267
- expect(-> { config.parse!(%w{--format pretty --format progress}) }).to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
268
- end
269
-
270
- it 'does not accept multiple --format options when both use implicit STDOUT (using profile with no formatters)' do
271
- given_cucumber_yml_defined_as({'default' => ['-q']})
272
- expect(-> { config.parse!(%w{--format pretty --format progress}) }).to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
273
- end
274
-
275
- it 'accepts same --format options with implicit STDOUT, and keep only one' do
276
- config.parse!(%w{--format pretty --format pretty})
277
-
278
- expect(config.formats).to eq [['pretty', {}, out]]
279
- end
280
-
281
- it 'does not accept multiple --out streams pointing to the same place' do
282
- expect(-> { config.parse!(%w{--format pretty --out file1 --format progress --out file1}) }).to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
283
- end
284
-
285
- it 'does not accept multiple --out streams pointing to the same place (one from profile, one from command line)' do
286
- given_cucumber_yml_defined_as({'default' => ['-f','progress', '--out', 'file1']})
287
- expect(-> { config.parse!(%w{--format pretty --out file1}) }).to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
288
- end
289
-
290
- it 'associates --out to previous --format' do
291
- config.parse!(%w{--format progress --out file1 --format profile --out file2})
292
-
293
- expect(config.formats).to eq [['progress', {}, 'file1'], ['profile', {}, 'file2']]
294
- end
295
-
296
- it 'accepts same --format options with same --out streams and keep only one' do
297
- config.parse!(%w{--format html --out file --format pretty --format html --out file})
298
-
299
- expect(config.formats).to eq [['pretty', {}, out], ['html', {}, 'file']]
300
- end
301
-
302
- it 'accepts same --format options with different --out streams' do
303
- config.parse!(%w{--format html --out file1 --format html --out file2})
304
-
305
- expect(config.formats).to eq [['html', {}, 'file1'], ['html', {}, 'file2']]
306
- end
307
-
308
- it 'accepts --color option' do
309
- expect(Cucumber::Term::ANSIColor).to receive(:coloring=).with(true)
310
-
311
- config.parse!(['--color'])
312
- end
313
-
314
- it 'accepts --no-color option' do
315
- expect(Cucumber::Term::ANSIColor).to receive(:coloring=).with(false)
316
-
317
- config = Configuration.new(StringIO.new)
318
- config.parse!(['--no-color'])
319
- end
320
-
321
- describe '--backtrace' do
322
- before do
323
- Cucumber.use_full_backtrace = false
324
- end
325
-
326
- it 'shows full backtrace when --backtrace is present' do
327
- Main.new(['--backtrace'])
328
- begin
329
- expect('x').to eq 'y'
330
- rescue RSpec::Expectations::ExpectationNotMetError => e
331
- expect(e.backtrace[0]).not_to eq "#{__FILE__}:#{__LINE__ - 2}"
332
- end
333
- end
334
-
335
- after do
336
- Cucumber.use_full_backtrace = false
337
- end
338
- end
339
-
340
- it 'accepts multiple --name options' do
341
- config.parse!(['--name', 'User logs in', '--name', 'User signs up'])
342
-
343
- expect(config.options[:name_regexps]).to include(/User logs in/)
344
- expect(config.options[:name_regexps]).to include(/User signs up/)
345
- end
346
-
347
- it 'accepts multiple -n options' do
348
- config.parse!(['-n', 'User logs in', '-n', 'User signs up'])
349
-
350
- expect(config.options[:name_regexps]).to include(/User logs in/)
351
- expect(config.options[:name_regexps]).to include(/User signs up/)
352
- end
353
-
354
- it 'should allow specifying environment variables on the command line' do
355
- config.parse!(['foo=bar'])
356
-
357
- expect(ENV['foo']).to eq 'bar'
358
- expect(config.paths).not_to include('foo=bar')
359
- end
360
-
361
- it 'allows specifying environment variables in profiles' do
362
- given_cucumber_yml_defined_as({'selenium' => 'RAILS_ENV=selenium'})
363
- config.parse!(['--profile', 'selenium'])
364
-
365
- expect(ENV['RAILS_ENV']).to eq 'selenium'
366
- expect(config.paths).not_to include('RAILS_ENV=selenium')
367
- end
368
-
369
- describe '#tag_expressions' do
370
- it 'returns an empty expression when no tags are specified' do
371
- config.parse!([])
372
-
373
- expect(config.tag_expressions).to be_empty
374
- end
375
-
376
- it 'returns an expression when tags are specified' do
377
- config.parse!(['--tags','@foo'])
378
-
379
- expect(config.tag_expressions).not_to be_empty
380
- end
381
- end
382
-
383
- describe '#tag_limits' do
384
- it 'returns an empty hash when no limits are specified' do
385
- config.parse!([])
386
-
387
- expect(config.tag_limits).to eq({ })
388
- end
389
-
390
- it 'returns a hash of limits when limits are specified' do
391
- config.parse!(['--tags','@foo:1'])
392
-
393
- expect(config.tag_limits).to eq({ '@foo' => 1 })
394
- end
395
- end
396
-
397
- describe '#dry_run?' do
398
- it 'returns true when --dry-run was specified on in the arguments' do
399
- config.parse!(['--dry-run'])
400
-
401
- expect(config.dry_run?).to be true
402
- end
403
-
404
- it 'returns true when --dry-run was specified in yaml file' do
405
- given_cucumber_yml_defined_as({'default' => '--dry-run'})
406
- config.parse!([])
407
-
408
- expect(config.dry_run?).to be true
409
- end
410
-
411
- it 'returns false by default' do
412
- config.parse!([])
413
-
414
- expect(config.dry_run?).to be false
415
- end
416
- end
417
-
418
- describe '#snippet_type' do
419
- it 'returns the snippet type when it was set' do
420
- config.parse!(['--snippet-type', 'classic'])
421
-
422
- expect(config.snippet_type).to eq :classic
423
- end
424
-
425
- it 'returns the snippet type when it was set with shorthand option' do
426
- config.parse!(['-I', 'classic'])
427
-
428
- expect(config.snippet_type).to eq :classic
429
- end
430
-
431
- it 'returns the default snippet type if it was not set' do
432
- config.parse!([])
433
-
434
- expect(config.snippet_type).to eq :cucumber_expression
435
- end
436
- end
437
-
438
- describe '#retry_attempts' do
439
- it 'returns the specified number of retries' do
440
- config.parse!(['--retry=3'])
441
- expect(config.retry_attempts).to eql 3
442
- end
443
- end
444
- end
445
- end
446
- end
@@ -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