cucumber 3.0.0.pre.1 → 4.0.0.rc.4

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 (533) hide show
  1. checksums.yaml +5 -5
  2. data/{History.md → CHANGELOG.md} +339 -37
  3. data/CONTRIBUTING.md +11 -21
  4. data/README.md +20 -12
  5. data/bin/cucumber +2 -1
  6. data/lib/autotest/cucumber.rb +1 -0
  7. data/lib/autotest/cucumber_mixin.rb +44 -48
  8. data/lib/autotest/cucumber_rails.rb +1 -0
  9. data/lib/autotest/cucumber_rails_rspec.rb +1 -0
  10. data/lib/autotest/cucumber_rails_rspec2.rb +1 -0
  11. data/lib/autotest/cucumber_rspec.rb +1 -0
  12. data/lib/autotest/cucumber_rspec2.rb +1 -0
  13. data/lib/autotest/discover.rb +3 -2
  14. data/lib/cucumber.rb +2 -1
  15. data/lib/cucumber/cli/configuration.rb +15 -20
  16. data/lib/cucumber/cli/main.rb +15 -15
  17. data/lib/cucumber/cli/options.rb +249 -197
  18. data/lib/cucumber/cli/profile_loader.rb +63 -38
  19. data/lib/cucumber/cli/rerun_file.rb +1 -0
  20. data/lib/cucumber/configuration.rb +49 -44
  21. data/lib/cucumber/constantize.rb +8 -10
  22. data/lib/cucumber/core_ext/string.rb +2 -1
  23. data/lib/cucumber/deprecate.rb +34 -10
  24. data/lib/cucumber/encoding.rb +2 -1
  25. data/lib/cucumber/errors.rb +10 -8
  26. data/lib/cucumber/events.rb +18 -3
  27. data/lib/cucumber/events/envelope.rb +9 -0
  28. data/lib/cucumber/events/gherkin_source_parsed.rb +11 -0
  29. data/lib/cucumber/events/gherkin_source_read.rb +14 -0
  30. data/lib/cucumber/events/hook_test_step_created.rb +13 -0
  31. data/lib/cucumber/events/{step_match.rb → step_activated.rb} +8 -8
  32. data/lib/cucumber/events/step_definition_registered.rb +5 -9
  33. data/lib/cucumber/events/test_case_created.rb +13 -0
  34. data/lib/cucumber/events/test_case_finished.rb +14 -0
  35. data/lib/cucumber/events/test_case_ready.rb +12 -0
  36. data/lib/cucumber/events/test_case_started.rb +11 -0
  37. data/lib/cucumber/events/test_run_finished.rb +2 -3
  38. data/lib/cucumber/events/test_run_started.rb +14 -0
  39. data/lib/cucumber/events/test_step_created.rb +13 -0
  40. data/lib/cucumber/events/test_step_finished.rb +14 -0
  41. data/lib/cucumber/events/test_step_started.rb +11 -0
  42. data/lib/cucumber/file_specs.rb +7 -6
  43. data/lib/cucumber/filters.rb +3 -0
  44. data/lib/cucumber/filters/activate_steps.rb +12 -6
  45. data/lib/cucumber/filters/apply_after_hooks.rb +1 -0
  46. data/lib/cucumber/filters/apply_after_step_hooks.rb +1 -0
  47. data/lib/cucumber/filters/apply_around_hooks.rb +1 -0
  48. data/lib/cucumber/filters/apply_before_hooks.rb +1 -0
  49. data/lib/cucumber/filters/broadcast_test_case_ready_event.rb +12 -0
  50. data/lib/cucumber/filters/broadcast_test_run_started_event.rb +28 -0
  51. data/lib/cucumber/filters/gated_receiver.rb +1 -2
  52. data/lib/cucumber/filters/prepare_world.rb +6 -13
  53. data/lib/cucumber/filters/quit.rb +3 -7
  54. data/lib/cucumber/filters/randomizer.rb +6 -7
  55. data/lib/cucumber/filters/retry.rb +3 -3
  56. data/lib/cucumber/filters/tag_limits.rb +5 -5
  57. data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -2
  58. data/lib/cucumber/filters/tag_limits/verifier.rb +4 -7
  59. data/lib/cucumber/formatter/ansicolor.rb +38 -45
  60. data/lib/cucumber/formatter/ast_lookup.rb +165 -0
  61. data/lib/cucumber/formatter/backtrace_filter.rb +24 -12
  62. data/lib/cucumber/formatter/console.rb +48 -88
  63. data/lib/cucumber/formatter/console_counts.rb +11 -29
  64. data/lib/cucumber/formatter/console_issues.rb +34 -10
  65. data/lib/cucumber/formatter/duration.rb +2 -1
  66. data/lib/cucumber/formatter/duration_extractor.rb +4 -2
  67. data/lib/cucumber/formatter/errors.rb +6 -0
  68. data/lib/cucumber/formatter/fail_fast.rb +8 -5
  69. data/lib/cucumber/formatter/fanout.rb +3 -3
  70. data/lib/cucumber/formatter/ignore_missing_messages.rb +2 -4
  71. data/lib/cucumber/formatter/interceptor.rb +12 -14
  72. data/lib/cucumber/formatter/io.rb +5 -4
  73. data/lib/cucumber/formatter/json.rb +109 -115
  74. data/lib/cucumber/formatter/junit.rb +85 -80
  75. data/lib/cucumber/formatter/message.rb +246 -0
  76. data/lib/cucumber/formatter/pretty.rb +353 -153
  77. data/lib/cucumber/formatter/progress.rb +34 -38
  78. data/lib/cucumber/formatter/query/hook_by_test_step.rb +31 -0
  79. data/lib/cucumber/formatter/query/pickle_by_test.rb +26 -0
  80. data/lib/cucumber/formatter/query/pickle_step_by_test_step.rb +26 -0
  81. data/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +40 -0
  82. data/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +40 -0
  83. data/lib/cucumber/formatter/rerun.rb +24 -5
  84. data/lib/cucumber/formatter/stepdefs.rb +2 -2
  85. data/lib/cucumber/formatter/steps.rb +5 -6
  86. data/lib/cucumber/formatter/summary.rb +18 -11
  87. data/lib/cucumber/formatter/unicode.rb +16 -18
  88. data/lib/cucumber/formatter/usage.rb +37 -33
  89. data/lib/cucumber/gherkin/data_table_parser.rb +18 -6
  90. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +83 -86
  91. data/lib/cucumber/gherkin/formatter/escaping.rb +13 -12
  92. data/lib/cucumber/gherkin/i18n.rb +1 -0
  93. data/lib/cucumber/gherkin/steps_parser.rb +18 -8
  94. data/lib/cucumber/{rb_support/rb_dsl.rb → glue/dsl.rb} +37 -23
  95. data/lib/cucumber/glue/hook.rb +67 -0
  96. data/lib/cucumber/glue/invoke_in_world.rb +65 -0
  97. data/lib/cucumber/glue/proto_world.rb +231 -0
  98. data/lib/cucumber/glue/registry_and_more.rb +221 -0
  99. data/lib/cucumber/glue/snippet.rb +205 -0
  100. data/lib/cucumber/glue/step_definition.rb +166 -0
  101. data/lib/cucumber/glue/world_factory.rb +21 -0
  102. data/lib/cucumber/hooks.rb +30 -20
  103. data/lib/cucumber/load_path.rb +1 -0
  104. data/lib/cucumber/multiline_argument.rb +9 -19
  105. data/lib/cucumber/multiline_argument/data_table.rb +143 -250
  106. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +154 -0
  107. data/lib/cucumber/multiline_argument/doc_string.rb +2 -1
  108. data/lib/cucumber/platform.rb +5 -6
  109. data/lib/cucumber/project_initializer.rb +2 -2
  110. data/lib/cucumber/rake/task.rb +34 -27
  111. data/lib/cucumber/rspec/disable_option_parser.rb +10 -8
  112. data/lib/cucumber/rspec/doubles.rb +2 -1
  113. data/lib/cucumber/running_test_case.rb +4 -54
  114. data/lib/cucumber/runtime.rb +54 -72
  115. data/lib/cucumber/runtime/after_hooks.rb +10 -5
  116. data/lib/cucumber/runtime/before_hooks.rb +9 -4
  117. data/lib/cucumber/runtime/for_programming_languages.rb +12 -44
  118. data/lib/cucumber/runtime/step_hooks.rb +5 -2
  119. data/lib/cucumber/runtime/support_code.rb +30 -32
  120. data/lib/cucumber/runtime/user_interface.rb +16 -34
  121. data/lib/cucumber/step_definition_light.rb +7 -4
  122. data/lib/cucumber/step_definitions.rb +3 -2
  123. data/lib/cucumber/step_match.rb +42 -26
  124. data/lib/cucumber/step_match_search.rb +11 -12
  125. data/lib/cucumber/term/ansicolor.rb +39 -39
  126. data/lib/cucumber/unit.rb +1 -0
  127. data/lib/cucumber/version +1 -1
  128. data/lib/simplecov_setup.rb +2 -1
  129. metadata +238 -623
  130. data/.coveralls.yml +0 -1
  131. data/.github/ISSUE_TEMPLATE.md +0 -48
  132. data/.github/PULL_REQUEST_TEMPLATE.md +0 -39
  133. data/.rspec +0 -1
  134. data/.ruby-gemset +0 -1
  135. data/.travis.yml +0 -35
  136. data/.yardopts +0 -1
  137. data/Gemfile +0 -22
  138. data/Rakefile +0 -22
  139. data/cucumber.gemspec +0 -47
  140. data/cucumber.yml +0 -20
  141. data/examples/i18n/README.textile +0 -3
  142. data/examples/i18n/Rakefile +0 -33
  143. data/examples/i18n/ar/Rakefile +0 -6
  144. data/examples/i18n/ar/features/addition.feature +0 -17
  145. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -24
  146. data/examples/i18n/ar/lib/calculator.rb +0 -11
  147. data/examples/i18n/bg/Rakefile +0 -6
  148. data/examples/i18n/bg/features/addition.feature +0 -12
  149. data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
  150. data/examples/i18n/bg/features/division.feature +0 -17
  151. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
  152. data/examples/i18n/bg/features/support/env.rb +0 -5
  153. data/examples/i18n/bg/features/support/world.rb +0 -8
  154. data/examples/i18n/bg/lib/calculator.rb +0 -24
  155. data/examples/i18n/ca/Rakefile +0 -6
  156. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -21
  157. data/examples/i18n/ca/features/suma.feature +0 -17
  158. data/examples/i18n/ca/lib/calculadora.rb +0 -16
  159. data/examples/i18n/cs/Rakefile +0 -6
  160. data/examples/i18n/cs/features/addition.feature +0 -17
  161. data/examples/i18n/cs/features/division.feature +0 -11
  162. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -24
  163. data/examples/i18n/cs/lib/calculator.rb +0 -14
  164. data/examples/i18n/da/Rakefile +0 -6
  165. data/examples/i18n/da/features/sammenlaegning.feature +0 -18
  166. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -24
  167. data/examples/i18n/da/lib/lommeregner.rb +0 -11
  168. data/examples/i18n/de/Rakefile +0 -6
  169. data/examples/i18n/de/features/addition.feature +0 -17
  170. data/examples/i18n/de/features/division.feature +0 -10
  171. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -24
  172. data/examples/i18n/de/lib/calculator.rb +0 -14
  173. data/examples/i18n/el/Rakefile +0 -6
  174. data/examples/i18n/el/features/addition.feature +0 -17
  175. data/examples/i18n/el/features/division.feature +0 -10
  176. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -24
  177. data/examples/i18n/el/lib/calculator.rb +0 -14
  178. data/examples/i18n/en-lol/Rakefile +0 -4
  179. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
  180. data/examples/i18n/en-lol/features/stuffing.feature +0 -8
  181. data/examples/i18n/en-lol/features/support/env.rb +0 -7
  182. data/examples/i18n/en-lol/lib/basket.rb +0 -12
  183. data/examples/i18n/en-lol/lib/belly.rb +0 -11
  184. data/examples/i18n/en/Rakefile +0 -6
  185. data/examples/i18n/en/features/addition.feature +0 -17
  186. data/examples/i18n/en/features/division.feature +0 -10
  187. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -24
  188. data/examples/i18n/en/lib/calculator.rb +0 -14
  189. data/examples/i18n/eo/Rakefile +0 -6
  190. data/examples/i18n/eo/features/adicio.feature +0 -17
  191. data/examples/i18n/eo/features/divido.feature +0 -10
  192. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -24
  193. data/examples/i18n/eo/lib/calculator.rb +0 -14
  194. data/examples/i18n/es/Rakefile +0 -6
  195. data/examples/i18n/es/features/adicion.feature +0 -17
  196. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -21
  197. data/examples/i18n/es/lib/calculador.rb +0 -14
  198. data/examples/i18n/et/Rakefile +0 -6
  199. data/examples/i18n/et/features/jagamine.feature +0 -10
  200. data/examples/i18n/et/features/liitmine.feature +0 -17
  201. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -24
  202. data/examples/i18n/et/lib/kalkulaator.rb +0 -14
  203. data/examples/i18n/fi/Rakefile +0 -6
  204. data/examples/i18n/fi/features/jakolasku.feature +0 -10
  205. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -24
  206. data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
  207. data/examples/i18n/fi/lib/laskin.rb +0 -14
  208. data/examples/i18n/fr/Rakefile +0 -8
  209. data/examples/i18n/fr/features/addition.feature +0 -18
  210. data/examples/i18n/fr/features/addition2.feature +0 -17
  211. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
  212. data/examples/i18n/fr/features/support/env.rb +0 -5
  213. data/examples/i18n/fr/lib/calculatrice.rb +0 -10
  214. data/examples/i18n/he/Rakefile +0 -6
  215. data/examples/i18n/he/features/addition.feature +0 -17
  216. data/examples/i18n/he/features/division.feature +0 -10
  217. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -24
  218. data/examples/i18n/he/lib/calculator.rb +0 -15
  219. data/examples/i18n/hi/Rakefile +0 -6
  220. data/examples/i18n/hi/features/addition.feature +0 -16
  221. data/examples/i18n/hi/features/division.feature +0 -10
  222. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -24
  223. data/examples/i18n/hi/lib/calculator.rb +0 -15
  224. data/examples/i18n/ht/Rakefile +0 -6
  225. data/examples/i18n/ht/features/adisyon.feature +0 -17
  226. data/examples/i18n/ht/features/divizyon.feature +0 -10
  227. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +0 -25
  228. data/examples/i18n/ht/lib/kalkilatris.rb +0 -14
  229. data/examples/i18n/hu/Rakefile +0 -6
  230. data/examples/i18n/hu/features/osszeadas.feature +0 -17
  231. data/examples/i18n/hu/features/osztas.feature +0 -10
  232. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -25
  233. data/examples/i18n/hu/lib/calculator.rb +0 -14
  234. data/examples/i18n/id/Rakefile +0 -6
  235. data/examples/i18n/id/features/addition.feature +0 -17
  236. data/examples/i18n/id/features/division.feature +0 -10
  237. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -24
  238. data/examples/i18n/id/lib/calculator.rb +0 -14
  239. data/examples/i18n/it/Rakefile +0 -6
  240. data/examples/i18n/it/features/somma.feature +0 -11
  241. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -24
  242. data/examples/i18n/it/lib/calcolatrice.rb +0 -11
  243. data/examples/i18n/ja/Rakefile +0 -6
  244. data/examples/i18n/ja/features/addition.feature +0 -17
  245. data/examples/i18n/ja/features/division.feature +0 -10
  246. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
  247. data/examples/i18n/ja/features/support/env.rb +0 -5
  248. data/examples/i18n/ja/lib/calculator.rb +0 -14
  249. data/examples/i18n/ko/Rakefile +0 -6
  250. data/examples/i18n/ko/features/addition.feature +0 -17
  251. data/examples/i18n/ko/features/division.feature +0 -11
  252. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -24
  253. data/examples/i18n/ko/lib/calculator.rb +0 -14
  254. data/examples/i18n/lt/Rakefile +0 -6
  255. data/examples/i18n/lt/features/addition.feature +0 -17
  256. data/examples/i18n/lt/features/division.feature +0 -10
  257. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -24
  258. data/examples/i18n/lt/lib/calculator.rb +0 -14
  259. data/examples/i18n/lv/Rakefile +0 -6
  260. data/examples/i18n/lv/features/addition.feature +0 -17
  261. data/examples/i18n/lv/features/division.feature +0 -10
  262. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -24
  263. data/examples/i18n/lv/lib/calculator.rb +0 -14
  264. data/examples/i18n/no/Rakefile +0 -6
  265. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
  266. data/examples/i18n/no/features/summering.feature +0 -19
  267. data/examples/i18n/no/features/support/env.rb +0 -6
  268. data/examples/i18n/no/lib/kalkulator.rb +0 -11
  269. data/examples/i18n/pl/Rakefile +0 -6
  270. data/examples/i18n/pl/features/addition.feature +0 -17
  271. data/examples/i18n/pl/features/division.feature +0 -10
  272. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -24
  273. data/examples/i18n/pl/features/support/env.rb +0 -5
  274. data/examples/i18n/pl/lib/calculator.rb +0 -14
  275. data/examples/i18n/pt/Rakefile +0 -6
  276. data/examples/i18n/pt/features/adicao.feature +0 -11
  277. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
  278. data/examples/i18n/pt/features/support/env.rb +0 -5
  279. data/examples/i18n/pt/lib/calculadora.rb +0 -10
  280. data/examples/i18n/ro/Rakefile +0 -6
  281. data/examples/i18n/ro/features/adunare.feature +0 -12
  282. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -21
  283. data/examples/i18n/ro/lib/calculator.rb +0 -11
  284. data/examples/i18n/ru/Rakefile +0 -6
  285. data/examples/i18n/ru/features/addition.feature +0 -11
  286. data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
  287. data/examples/i18n/ru/features/division.feature +0 -16
  288. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
  289. data/examples/i18n/ru/features/support/env.rb +0 -5
  290. data/examples/i18n/ru/features/support/world.rb +0 -8
  291. data/examples/i18n/ru/lib/calculator.rb +0 -24
  292. data/examples/i18n/sk/Rakefile +0 -6
  293. data/examples/i18n/sk/features/addition.feature +0 -17
  294. data/examples/i18n/sk/features/division.feature +0 -10
  295. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -24
  296. data/examples/i18n/sk/lib/calculator.rb +0 -14
  297. data/examples/i18n/sr-Cyrl/Rakefile +0 -6
  298. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
  299. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
  300. data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -5
  301. data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
  302. data/examples/i18n/sr-Latn/Rakefile +0 -6
  303. data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
  304. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -24
  305. data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
  306. data/examples/i18n/sv/Rakefile +0 -6
  307. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -24
  308. data/examples/i18n/sv/features/summering.feature +0 -18
  309. data/examples/i18n/sv/lib/kalkulator.rb +0 -11
  310. data/examples/i18n/tr/Rakefile +0 -6
  311. data/examples/i18n/tr/features/bolme.feature +0 -10
  312. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -24
  313. data/examples/i18n/tr/features/toplama.feature +0 -18
  314. data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
  315. data/examples/i18n/uk/Rakefile +0 -6
  316. data/examples/i18n/uk/features/addition.feature +0 -11
  317. data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
  318. data/examples/i18n/uk/features/division.feature +0 -16
  319. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
  320. data/examples/i18n/uk/features/support/env.rb +0 -5
  321. data/examples/i18n/uk/features/support/world.rb +0 -8
  322. data/examples/i18n/uk/lib/calculator.rb +0 -24
  323. data/examples/i18n/uz/Rakefile +0 -6
  324. data/examples/i18n/uz/features/addition.feature +0 -10
  325. data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
  326. data/examples/i18n/uz/features/division.feature +0 -17
  327. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
  328. data/examples/i18n/uz/features/support/env.rb +0 -5
  329. data/examples/i18n/uz/features/support/world.rb +0 -8
  330. data/examples/i18n/uz/lib/calculator.rb +0 -24
  331. data/examples/i18n/zh-CN/Rakefile +0 -4
  332. data/examples/i18n/zh-CN/features/addition.feature +0 -18
  333. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -26
  334. data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
  335. data/examples/i18n/zh-TW/Rakefile +0 -4
  336. data/examples/i18n/zh-TW/features/addition.feature +0 -17
  337. data/examples/i18n/zh-TW/features/division.feature +0 -11
  338. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -24
  339. data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
  340. data/examples/rspec_doubles/Rakefile +0 -4
  341. data/examples/rspec_doubles/features/mocking.feature +0 -9
  342. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
  343. data/examples/rspec_doubles/features/support/env.rb +0 -12
  344. data/examples/sinatra/README.textile +0 -13
  345. data/examples/sinatra/Rakefile +0 -6
  346. data/examples/sinatra/app.rb +0 -14
  347. data/examples/sinatra/features/add.feature +0 -11
  348. data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
  349. data/examples/sinatra/features/support/env.rb +0 -10
  350. data/examples/sinatra/views/add.erb +0 -7
  351. data/examples/sinatra/views/layout.erb +0 -8
  352. data/examples/tcl/README.textile +0 -11
  353. data/examples/tcl/Rakefile +0 -6
  354. data/examples/tcl/features/fibonnacci.feature +0 -17
  355. data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
  356. data/examples/tcl/features/support/env.rb +0 -6
  357. data/examples/tcl/src/fib.tcl +0 -3
  358. data/examples/test_unit/Gemfile +0 -4
  359. data/examples/test_unit/Rakefile +0 -6
  360. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
  361. data/examples/test_unit/features/test_unit.feature +0 -9
  362. data/examples/watir/README.textile +0 -16
  363. data/examples/watir/Rakefile +0 -12
  364. data/examples/watir/cucumber.yml +0 -1
  365. data/examples/watir/features/search.feature +0 -12
  366. data/examples/watir/features/step_definitions/search_steps.rb +0 -26
  367. data/examples/watir/features/support/env.rb +0 -35
  368. data/examples/watir/features/support/screenshots.rb +0 -47
  369. data/features/docs/api/list_step_defs_as_json.feature +0 -50
  370. data/features/docs/api/listen_for_events.feature +0 -59
  371. data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -26
  372. data/features/docs/cli/backtraces.feature +0 -36
  373. data/features/docs/cli/dry_run.feature +0 -70
  374. data/features/docs/cli/exclude_files.feature +0 -18
  375. data/features/docs/cli/execute_with_tag_filter.feature +0 -117
  376. data/features/docs/cli/fail_fast.feature +0 -46
  377. data/features/docs/cli/finding_steps.feature +0 -28
  378. data/features/docs/cli/help.feature +0 -8
  379. data/features/docs/cli/randomize.feature +0 -140
  380. data/features/docs/cli/require.feature +0 -27
  381. data/features/docs/cli/retry_failing_tests.feature +0 -67
  382. data/features/docs/cli/run_scenarios_matching_name.feature +0 -104
  383. data/features/docs/cli/run_specific_scenarios.feature +0 -77
  384. data/features/docs/cli/showing_differences.feature +0 -43
  385. data/features/docs/cli/specifying_multiple_formatters.feature +0 -65
  386. data/features/docs/cli/strict_mode.feature +0 -64
  387. data/features/docs/defining_steps/nested_steps.feature +0 -177
  388. data/features/docs/defining_steps/nested_steps_i18n.feature +0 -36
  389. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -54
  390. data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
  391. data/features/docs/defining_steps/printing_messages.feature +0 -147
  392. data/features/docs/defining_steps/skip_scenario.feature +0 -30
  393. data/features/docs/defining_steps/snippets.feature +0 -56
  394. data/features/docs/defining_steps/table_diffing.feature +0 -50
  395. data/features/docs/exception_in_after_hook.feature +0 -126
  396. data/features/docs/exception_in_after_step_hook.feature +0 -102
  397. data/features/docs/exception_in_around_hook.feature +0 -78
  398. data/features/docs/exception_in_before_hook.feature +0 -96
  399. data/features/docs/extending_cucumber/custom_filter.feature +0 -29
  400. data/features/docs/extending_cucumber/custom_formatter.feature +0 -102
  401. data/features/docs/formatters/api_methods.feature +0 -37
  402. data/features/docs/formatters/debug_formatter.feature +0 -47
  403. data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
  404. data/features/docs/formatters/html_formatter.feature +0 -91
  405. data/features/docs/formatters/json_formatter.feature +0 -767
  406. data/features/docs/formatters/junit_formatter.feature +0 -454
  407. data/features/docs/formatters/pretty_formatter.feature +0 -73
  408. data/features/docs/formatters/progress_formatter.feature +0 -31
  409. data/features/docs/formatters/rerun_formatter.feature +0 -188
  410. data/features/docs/formatters/summary_formatter.feature +0 -34
  411. data/features/docs/formatters/usage_formatter.feature +0 -98
  412. data/features/docs/getting_started.feature +0 -27
  413. data/features/docs/gherkin/background.feature +0 -548
  414. data/features/docs/gherkin/doc_strings.feature +0 -74
  415. data/features/docs/gherkin/expand_option_for_outlines.feature +0 -46
  416. data/features/docs/gherkin/language_from_header.feature +0 -32
  417. data/features/docs/gherkin/language_help.feature +0 -42
  418. data/features/docs/gherkin/outlines.feature +0 -156
  419. data/features/docs/gherkin/unicode_table.feature +0 -32
  420. data/features/docs/gherkin/using_descriptions.feature +0 -82
  421. data/features/docs/gherkin/using_star_notation.feature +0 -37
  422. data/features/docs/iso-8859-1.feature +0 -6
  423. data/features/docs/post_configuration_hook.feature +0 -33
  424. data/features/docs/profiles.feature +0 -120
  425. data/features/docs/rake_task.feature +0 -141
  426. data/features/docs/raketask.feature +0 -44
  427. data/features/docs/work_in_progress.feature +0 -154
  428. data/features/docs/writing_support_code/after_hooks.feature +0 -102
  429. data/features/docs/writing_support_code/after_step_hooks.feature +0 -53
  430. data/features/docs/writing_support_code/around_hooks.feature +0 -260
  431. data/features/docs/writing_support_code/before_hook.feature +0 -65
  432. data/features/docs/writing_support_code/hook_order.feature +0 -61
  433. data/features/docs/writing_support_code/load_path.feature +0 -17
  434. data/features/docs/writing_support_code/state.feature +0 -32
  435. data/features/docs/writing_support_code/tagged_hooks.feature +0 -95
  436. data/features/docs/writing_support_code/transforms.feature +0 -98
  437. data/features/docs/writing_support_code/world.feature +0 -129
  438. data/features/lib/step_definitions/aruba_steps.rb +0 -27
  439. data/features/lib/step_definitions/cli_steps.rb +0 -4
  440. data/features/lib/step_definitions/cucumber_steps.rb +0 -79
  441. data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -13
  442. data/features/lib/step_definitions/json_steps.rb +0 -8
  443. data/features/lib/step_definitions/junit_steps.rb +0 -14
  444. data/features/lib/step_definitions/language_steps.rb +0 -9
  445. data/features/lib/step_definitions/profile_steps.rb +0 -16
  446. data/features/lib/step_definitions/retry_steps.rb +0 -55
  447. data/features/lib/step_definitions/ruby_steps.rb +0 -4
  448. data/features/lib/step_definitions/wire_steps.rb +0 -59
  449. data/features/lib/support/env.rb +0 -22
  450. data/features/lib/support/fake_wire_server.rb +0 -81
  451. data/features/lib/support/feature_factory.rb +0 -68
  452. data/features/lib/support/normalise_output.rb +0 -51
  453. data/gem_tasks/contributors.rake +0 -16
  454. data/gem_tasks/cov.rake +0 -6
  455. data/gem_tasks/cucumber.rake +0 -26
  456. data/gem_tasks/downloads.rb +0 -8
  457. data/gem_tasks/environment.rake +0 -8
  458. data/gem_tasks/examples.rake +0 -12
  459. data/gem_tasks/fix_cr_lf.rake +0 -11
  460. data/gem_tasks/flog.rake +0 -5
  461. data/gem_tasks/rspec.rake +0 -7
  462. data/gem_tasks/sass.rake +0 -5
  463. data/gem_tasks/stats +0 -16
  464. data/gem_tasks/versions.txt +0 -74
  465. data/lib/cucumber/core_ext/instance_exec.rb +0 -71
  466. data/lib/cucumber/formatter/cucumber.css +0 -286
  467. data/lib/cucumber/formatter/cucumber.sass +0 -247
  468. data/lib/cucumber/formatter/debug.rb +0 -36
  469. data/lib/cucumber/formatter/hook_query_visitor.rb +0 -41
  470. data/lib/cucumber/formatter/html.rb +0 -690
  471. data/lib/cucumber/formatter/jquery-min.js +0 -154
  472. data/lib/cucumber/formatter/json_pretty.rb +0 -11
  473. data/lib/cucumber/formatter/legacy_api/adapter.rb +0 -1012
  474. data/lib/cucumber/formatter/legacy_api/ast.rb +0 -390
  475. data/lib/cucumber/formatter/legacy_api/results.rb +0 -52
  476. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +0 -32
  477. data/lib/cucumber/rb_support/rb_hook.rb +0 -20
  478. data/lib/cucumber/rb_support/rb_language.rb +0 -227
  479. data/lib/cucumber/rb_support/rb_step_definition.rb +0 -132
  480. data/lib/cucumber/rb_support/rb_transform.rb +0 -60
  481. data/lib/cucumber/rb_support/rb_world.rb +0 -171
  482. data/lib/cucumber/rb_support/snippet.rb +0 -171
  483. data/lib/cucumber/step_argument.rb +0 -26
  484. data/spec/cucumber/cli/configuration_spec.rb +0 -436
  485. data/spec/cucumber/cli/main_spec.rb +0 -84
  486. data/spec/cucumber/cli/options_spec.rb +0 -411
  487. data/spec/cucumber/cli/profile_loader_spec.rb +0 -47
  488. data/spec/cucumber/cli/rerun_spec.rb +0 -86
  489. data/spec/cucumber/configuration_spec.rb +0 -148
  490. data/spec/cucumber/constantize_spec.rb +0 -20
  491. data/spec/cucumber/core_ext/instance_exec_spec.rb +0 -5
  492. data/spec/cucumber/file_specs_spec.rb +0 -61
  493. data/spec/cucumber/filters/activate_steps_spec.rb +0 -152
  494. data/spec/cucumber/filters/gated_receiver_spec.rb +0 -48
  495. data/spec/cucumber/filters/retry_spec.rb +0 -85
  496. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -39
  497. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -58
  498. data/spec/cucumber/filters/tag_limits_spec.rb +0 -60
  499. data/spec/cucumber/formatter/ansicolor_spec.rb +0 -33
  500. data/spec/cucumber/formatter/console_counts_spec.rb +0 -14
  501. data/spec/cucumber/formatter/debug_spec.rb +0 -65
  502. data/spec/cucumber/formatter/duration_spec.rb +0 -23
  503. data/spec/cucumber/formatter/fail_fast_spec.rb +0 -88
  504. data/spec/cucumber/formatter/html_spec.rb +0 -543
  505. data/spec/cucumber/formatter/interceptor_spec.rb +0 -137
  506. data/spec/cucumber/formatter/json_spec.rb +0 -842
  507. data/spec/cucumber/formatter/junit_spec.rb +0 -253
  508. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2187
  509. data/spec/cucumber/formatter/pretty_spec.rb +0 -920
  510. data/spec/cucumber/formatter/progress_spec.rb +0 -170
  511. data/spec/cucumber/formatter/rerun_spec.rb +0 -97
  512. data/spec/cucumber/formatter/spec_helper.rb +0 -83
  513. data/spec/cucumber/hooks_spec.rb +0 -31
  514. data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -604
  515. data/spec/cucumber/project_initializer_spec.rb +0 -88
  516. data/spec/cucumber/rake/forked_spec.rb +0 -54
  517. data/spec/cucumber/rake/task_spec.rb +0 -86
  518. data/spec/cucumber/rb_support/rb_language_spec.rb +0 -321
  519. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +0 -200
  520. data/spec/cucumber/rb_support/rb_transform_spec.rb +0 -47
  521. data/spec/cucumber/rb_support/rb_world_spec.rb +0 -48
  522. data/spec/cucumber/rb_support/snippet_spec.rb +0 -138
  523. data/spec/cucumber/running_test_case_spec.rb +0 -140
  524. data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -37
  525. data/spec/cucumber/runtime/support_code_spec.rb +0 -17
  526. data/spec/cucumber/runtime_spec.rb +0 -21
  527. data/spec/cucumber/sell_cucumbers.feature +0 -19
  528. data/spec/cucumber/step_argument_spec.rb +0 -19
  529. data/spec/cucumber/step_match_search_spec.rb +0 -123
  530. data/spec/cucumber/step_match_spec.rb +0 -86
  531. data/spec/cucumber/world/pending_spec.rb +0 -48
  532. data/spec/spec_helper.rb +0 -30
  533. data/spec/support/standard_step_actions.rb +0 -19
@@ -1,171 +0,0 @@
1
- # frozen_string_literal: true
2
- module Cucumber
3
- module RbSupport
4
- module Snippet
5
-
6
- ARGUMENT_PATTERNS = ['"([^"]*)"', '(\d+)']
7
-
8
- class Generator
9
- def self.register_on(configuration)
10
- configuration.snippet_generators << new
11
- end
12
-
13
- def call(code_keyword, step_name, multiline_arg, snippet_type = :regexp)
14
- snippet_class = typed_snippet_class(snippet_type)
15
- snippet_class.new(code_keyword, step_name, multiline_arg).to_s
16
- end
17
-
18
- def typed_snippet_class(type)
19
- SNIPPET_TYPES.fetch(type || :regexp)
20
- end
21
- end
22
-
23
- class BaseSnippet
24
-
25
- def initialize(code_keyword, pattern, multiline_argument)
26
- @number_of_arguments = 0
27
- @code_keyword = code_keyword
28
- @pattern = replace_and_count_capturing_groups(pattern)
29
- @multiline_argument = MultilineArgumentSnippet.new(multiline_argument)
30
- end
31
-
32
- def to_s
33
- "#{step} #{do_block}"
34
- end
35
-
36
- def step
37
- "#{code_keyword}#{typed_pattern}"
38
- end
39
-
40
- def self.cli_option_string(type)
41
- "%-7s: %-28s e.g. %s" % [type, description, example]
42
- end
43
-
44
- private
45
-
46
- attr_reader :code_keyword, :pattern, :multiline_argument, :number_of_arguments
47
-
48
- def replace_and_count_capturing_groups(pattern)
49
- modified_pattern = ::Regexp.escape(pattern).gsub('\ ', ' ').gsub('/', '\/')
50
-
51
- ARGUMENT_PATTERNS.each do |argument_pattern|
52
- modified_pattern.gsub!(::Regexp.new(argument_pattern), argument_pattern)
53
- @number_of_arguments += modified_pattern.scan(argument_pattern).length
54
- end
55
-
56
- modified_pattern
57
- end
58
-
59
- def do_block
60
- do_block = String.new
61
- do_block << "do#{arguments}\n"
62
- multiline_argument.append_comment_to(do_block)
63
- do_block << " pending # Write code here that turns the phrase above into concrete actions\n"
64
- do_block << "end"
65
- do_block
66
- end
67
-
68
- def arguments
69
- block_args = (0...number_of_arguments).map { |n| "arg#{n+1}" }
70
- multiline_argument.append_block_argument_to(block_args)
71
- block_args.empty? ? "" : " |#{block_args.join(", ")}|"
72
- end
73
-
74
- def self.example
75
- new("Given", "missing step", MultilineArgument::None.new).step
76
- end
77
-
78
- end
79
-
80
- class Regexp < BaseSnippet
81
- def typed_pattern
82
- "(/^#{pattern}$/)"
83
- end
84
-
85
- def self.description
86
- "Snippets with parentheses"
87
- end
88
- end
89
-
90
- class Classic < BaseSnippet
91
- def typed_pattern
92
- " /^#{pattern}$/"
93
- end
94
-
95
- def self.description
96
- "Snippets without parentheses. Note that these cause a warning from modern versions of Ruby."
97
- end
98
- end
99
-
100
- class Percent < BaseSnippet
101
- def typed_pattern
102
- " %r{^#{pattern}$}"
103
- end
104
-
105
- def self.description
106
- "Snippets with percent regexp"
107
- end
108
- end
109
-
110
- SNIPPET_TYPES = {
111
- :regexp => Regexp,
112
- :classic => Classic,
113
- :percent => Percent
114
- }
115
-
116
- module MultilineArgumentSnippet
117
-
118
- def self.new(multiline_argument)
119
- builder = Builder.new
120
- multiline_argument.describe_to(builder)
121
- builder.result
122
- end
123
-
124
- class Builder
125
- def doc_string(*args)
126
- @result = DocString.new
127
- end
128
-
129
- def data_table(table, *args)
130
- @result = DataTable.new(table)
131
- end
132
-
133
- def result
134
- @result || None.new
135
- end
136
- end
137
-
138
- class DocString
139
- def append_block_argument_to(array)
140
- array << 'string'
141
- end
142
-
143
- def append_comment_to(string)
144
- end
145
- end
146
-
147
- class DataTable
148
- def initialize(table)
149
- @table = table
150
- end
151
-
152
- def append_block_argument_to(array)
153
- array << 'table'
154
- end
155
-
156
- def append_comment_to(string)
157
- string << " # table is a #{Cucumber::MultilineArgument::DataTable.to_s}\n"
158
- end
159
- end
160
-
161
- class None
162
- def append_block_argument_to(array)
163
- end
164
-
165
- def append_comment_to(string)
166
- end
167
- end
168
- end
169
- end
170
- end
171
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
- module Cucumber
3
- # Defines the location and value of a captured argument from the step
4
- # text
5
- class StepArgument
6
- def self.arguments_from(regexp, step_name)
7
- match = regexp.match(step_name)
8
- if match
9
- n = 0
10
- match.captures.map do |val|
11
- n += 1
12
- offset = match.offset(n)[0]
13
- new(offset, val)
14
- end
15
- else
16
- nil
17
- end
18
- end
19
-
20
- attr_reader :offset, :val
21
-
22
- def initialize(offset, val)
23
- @offset, @val = offset, val
24
- end
25
- end
26
- end
@@ -1,436 +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]).to be true
75
- end
76
-
77
- it "parses ERB syntax in the cucumber.yml file" do
78
- given_cucumber_yml_defined_as("---\ndefault: \"<%=\"--require some_file\"%>\"\n")
79
-
80
- config.parse!([])
81
-
82
- expect(config.options[:require]).to include('some_file')
83
- end
84
-
85
- it "parses ERB in cucumber.yml that makes uses nested ERB sessions" do
86
- given_cucumber_yml_defined_as(<<ERB_YML)
87
- <%= ERB.new({'standard' => '--require some_file'}.to_yaml).result %>
88
- <%= ERB.new({'enhanced' => '--require other_file'}.to_yaml).result %>
89
- ERB_YML
90
-
91
- config.parse!(%w(-p standard))
92
-
93
- expect(config.options[:require]).to include('some_file')
94
- end
95
-
96
- it "provides a helpful error message when a specified profile does not exists in cucumber.yml" do
97
- given_cucumber_yml_defined_as({'default' => '--require from/yml', 'html_report' => '--format html'})
98
-
99
- expected_message = <<-END_OF_MESSAGE
100
- Could not find profile: 'i_do_not_exist'
101
-
102
- Defined profiles in cucumber.yml:
103
- * default
104
- * html_report
105
- END_OF_MESSAGE
106
-
107
- expect(-> { config.parse!(%w{--profile i_do_not_exist}) }).to raise_error(ProfileNotFound, expected_message)
108
- end
109
-
110
- it "allows profiles to be defined in arrays" do
111
- given_cucumber_yml_defined_as({'foo' => ['-f','progress']})
112
-
113
- config.parse!(%w{--profile foo})
114
-
115
- expect(config.options[:formats]).to eq [['progress', out]]
116
- end
117
-
118
- it "disregards default STDOUT formatter defined in profile when another is passed in (via cmd line)" do
119
- given_cucumber_yml_defined_as({'foo' => %w[--format pretty]})
120
- config.parse!(%w{--format progress --profile foo})
121
-
122
- expect(config.options[:formats]).to eq [['progress', out]]
123
- end
124
-
125
- ["--no-profile", "-P"].each do |flag|
126
- context 'when none is specified with #{flag}' do
127
- it "disables profiles" do
128
- given_cucumber_yml_defined_as({'default' => '-v --require file_specified_in_default_profile.rb'})
129
-
130
- config.parse!("#{flag} --require some_file.rb".split(" "))
131
-
132
- expect(config.options[:require]).to eq ['some_file.rb']
133
- end
134
-
135
- it "notifies the user that the profiles are being disabled" do
136
- given_cucumber_yml_defined_as({'default' => '-v'})
137
-
138
- config.parse!("#{flag} --require some_file.rb".split(" "))
139
-
140
- expect(out.string).to match /Disabling profiles.../
141
- end
142
- end
143
- end
144
-
145
- it "issues a helpful error message when a specified profile exists but is nil or blank" do
146
- [nil, ' '].each do |bad_input|
147
- given_cucumber_yml_defined_as({'foo' => bad_input})
148
-
149
- expected_error = /The 'foo' profile in cucumber.yml was blank. Please define the command line arguments for the 'foo' profile in cucumber.yml./
150
-
151
- expect(-> { config.parse!(%w{--profile foo}) }).to raise_error(expected_error)
152
- end
153
- end
154
-
155
- it "issues a helpful error message when no YAML file exists and a profile is specified" do
156
- expect(File).to receive(:exist?).with('cucumber.yml') { false }
157
-
158
- expected_error = /cucumber\.yml was not found/
159
-
160
- expect(-> { config.parse!(%w{--profile i_do_not_exist}) }).to raise_error(expected_error)
161
- end
162
-
163
- it "issues a helpful error message when cucumber.yml is blank or malformed" do
164
- expected_error_message = /cucumber\.yml was found, but was blank or malformed. Please refer to cucumber's documentation on correct profile usage./
165
-
166
- ['', 'sfsadfs', "--- \n- an\n- array\n", "---dddfd"].each do |bad_input|
167
- given_cucumber_yml_defined_as(bad_input)
168
-
169
- expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
170
-
171
- reset_config
172
- end
173
- end
174
-
175
- it "issues a helpful error message when cucumber.yml can not be parsed" do
176
- expected_error_message = /cucumber.yml was found, but could not be parsed. Please refer to cucumber's documentation on correct profile usage./
177
-
178
- given_cucumber_yml_defined_as("input that causes an exception in YAML loading")
179
-
180
- expect(YAML).to receive(:load).and_raise(ArgumentError)
181
- expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
182
- end
183
-
184
- it "issues a helpful error message when cucumber.yml can not be parsed by ERB" do
185
- expected_error_message = /cucumber.yml was found, but could not be parsed with ERB. Please refer to cucumber's documentation on correct profile usage./
186
- given_cucumber_yml_defined_as("<% this_fails %>")
187
-
188
- expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
189
- end
190
- end
191
-
192
- it "accepts --dry-run option" do
193
- config.parse!(%w{--dry-run})
194
-
195
- expect(config.options[:dry_run]).to be true
196
- end
197
-
198
- it "implies --no-duration with --dry-run option" do
199
- config.parse!(%w{--dry-run})
200
-
201
- expect(config.options[:duration]).to be false
202
- end
203
-
204
- it "accepts --no-source option" do
205
- config.parse!(%w{--no-source})
206
-
207
- expect(config.options[:source]).to be false
208
- end
209
-
210
- it "accepts --no-snippets option" do
211
- config.parse!(%w{--no-snippets})
212
-
213
- expect(config.options[:snippets]).to be false
214
- end
215
-
216
- it "sets snippets and source and duration to false with --quiet option" do
217
- config.parse!(%w{--quiet})
218
-
219
- expect(config.options[:snippets]).to be false
220
- expect(config.options[:source]).to be false
221
- expect(config.options[:duration]).to be false
222
- end
223
-
224
- it "sets duration to false with --no-duration" do
225
- config.parse!(%w{--no-duration})
226
-
227
- expect(config.options[:duration]).to be false
228
- end
229
-
230
- it "accepts --verbose option" do
231
- config.parse!(%w{--verbose})
232
-
233
- expect(config.options[:verbose]).to be true
234
- end
235
-
236
- it "accepts --out option" do
237
- config.parse!(%w{--out jalla.txt})
238
-
239
- expect(config.formats).to eq [['pretty', 'jalla.txt']]
240
- end
241
-
242
- it "accepts multiple --out options" do
243
- config.parse!(%w{--format progress --out file1 --out file2})
244
-
245
- expect(config.formats).to eq [['progress', 'file2']]
246
- end
247
-
248
- it "accepts multiple --format options and put the STDOUT one first so progress is seen" do
249
- config.parse!(%w{--format pretty --out pretty.txt --format progress})
250
-
251
- expect(config.formats).to eq [['progress', out], ['pretty', 'pretty.txt']]
252
- end
253
-
254
- it "does not accept multiple --format options when both use implicit STDOUT" do
255
- 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)")
256
- end
257
-
258
- it "does not accept multiple --format options when both use implicit STDOUT (using profile with no formatters)" do
259
- given_cucumber_yml_defined_as({'default' => ['-q']})
260
- 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)")
261
- end
262
-
263
- it "accepts same --format options with implicit STDOUT, and keep only one" do
264
- config.parse!(%w{--format pretty --format pretty})
265
-
266
- expect(config.formats).to eq [["pretty", out]]
267
- end
268
-
269
- it "does not accept multiple --out streams pointing to the same place" do
270
- 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)")
271
- end
272
-
273
- it "does not accept multiple --out streams pointing to the same place (one from profile, one from command line)" do
274
- given_cucumber_yml_defined_as({'default' => ['-f','progress', '--out', 'file1']})
275
- 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)")
276
- end
277
-
278
- it "associates --out to previous --format" do
279
- config.parse!(%w{--format progress --out file1 --format profile --out file2})
280
-
281
- expect(config.formats).to eq [["progress", "file1"], ["profile" ,"file2"]]
282
- end
283
-
284
- it "accepts same --format options with same --out streams and keep only one" do
285
- config.parse!(%w{--format html --out file --format pretty --format html --out file})
286
-
287
- expect(config.formats).to eq [["pretty", out], ["html", "file"]]
288
- end
289
-
290
- it "accepts same --format options with different --out streams" do
291
- config.parse!(%w{--format html --out file1 --format html --out file2})
292
-
293
- expect(config.formats).to eq [["html", "file1"], ["html", "file2"]]
294
- end
295
-
296
- it "accepts --color option" do
297
- expect(Cucumber::Term::ANSIColor).to receive(:coloring=).with(true)
298
-
299
- config.parse!(['--color'])
300
- end
301
-
302
- it "accepts --no-color option" do
303
- expect(Cucumber::Term::ANSIColor).to receive(:coloring=).with(false)
304
-
305
- config = Configuration.new(StringIO.new)
306
- config.parse!(['--no-color'])
307
- end
308
-
309
- describe "--backtrace" do
310
- before do
311
- Cucumber.use_full_backtrace = false
312
- end
313
-
314
- it "shows full backtrace when --backtrace is present" do
315
- Main.new(['--backtrace'])
316
- begin
317
- expect("x").to eq "y"
318
- rescue RSpec::Expectations::ExpectationNotMetError => e
319
- expect(e.backtrace[0]).not_to eq "#{__FILE__}:#{__LINE__ - 2}"
320
- end
321
- end
322
-
323
- after do
324
- Cucumber.use_full_backtrace = false
325
- end
326
- end
327
-
328
- it "accepts multiple --name options" do
329
- config.parse!(['--name', "User logs in", '--name', "User signs up"])
330
-
331
- expect(config.options[:name_regexps]).to include(/User logs in/)
332
- expect(config.options[:name_regexps]).to include(/User signs up/)
333
- end
334
-
335
- it "accepts multiple -n options" do
336
- config.parse!(['-n', "User logs in", '-n', "User signs up"])
337
-
338
- expect(config.options[:name_regexps]).to include(/User logs in/)
339
- expect(config.options[:name_regexps]).to include(/User signs up/)
340
- end
341
-
342
- it "should allow specifying environment variables on the command line" do
343
- config.parse!(["foo=bar"])
344
-
345
- expect(ENV["foo"]).to eq "bar"
346
- expect(config.paths).not_to include('foo=bar')
347
- end
348
-
349
- it "allows specifying environment variables in profiles" do
350
- given_cucumber_yml_defined_as({'selenium' => 'RAILS_ENV=selenium'})
351
- config.parse!(["--profile", "selenium"])
352
-
353
- expect(ENV["RAILS_ENV"]).to eq "selenium"
354
- expect(config.paths).not_to include('RAILS_ENV=selenium')
355
- end
356
-
357
- describe "#tag_expression" do
358
- include RSpec::WorkInProgress
359
-
360
- it "returns an empty expression when no tags are specified" do
361
- config.parse!([])
362
-
363
- expect(config.tag_expression).to be_empty
364
- end
365
-
366
- it "returns an expression when tags are specified" do
367
- config.parse!(['--tags','@foo'])
368
-
369
- expect(config.tag_expression).not_to be_empty
370
- end
371
- end
372
-
373
- describe '#tag_limits' do
374
- it "returns an empty hash when no limits are specified" do
375
- config.parse!([])
376
-
377
- expect(config.tag_limits).to eq({ })
378
- end
379
-
380
- it "returns a hash of limits when limits are specified" do
381
- config.parse!(['--tags','@foo:1'])
382
-
383
- expect(config.tag_limits).to eq({ "@foo" => 1 })
384
- end
385
- end
386
-
387
- describe "#dry_run?" do
388
- it "returns true when --dry-run was specified on in the arguments" do
389
- config.parse!(['--dry-run'])
390
-
391
- expect(config.dry_run?).to be true
392
- end
393
-
394
- it "returns true when --dry-run was specified in yaml file" do
395
- given_cucumber_yml_defined_as({'default' => '--dry-run'})
396
- config.parse!([])
397
-
398
- expect(config.dry_run?).to be true
399
- end
400
-
401
- it "returns false by default" do
402
- config.parse!([])
403
-
404
- expect(config.dry_run?).to be false
405
- end
406
- end
407
-
408
- describe "#snippet_type" do
409
- it "returns the snippet type when it was set" do
410
- config.parse!(["--snippet-type", "classic"])
411
-
412
- expect(config.snippet_type).to eq :classic
413
- end
414
-
415
- it "returns the snippet type when it was set with shorthand option" do
416
- config.parse!(["-I", "classic"])
417
-
418
- expect(config.snippet_type).to eq :classic
419
- end
420
-
421
- it "returns the default snippet type if it was not set" do
422
- config.parse!([])
423
-
424
- expect(config.snippet_type).to eq :regexp
425
- end
426
- end
427
-
428
- describe "#retry_attempts" do
429
- it "returns the specified number of retries" do
430
- config.parse!(['--retry=3'])
431
- expect(config.retry_attempts).to eql 3
432
- end
433
- end
434
- end
435
- end
436
- end