cucumber 3.0.0.pre.2 → 4.0.0.rc.5

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 (541) hide show
  1. checksums.yaml +5 -5
  2. data/{History.md → CHANGELOG.md} +267 -14
  3. data/CONTRIBUTING.md +4 -21
  4. data/README.md +14 -15
  5. data/bin/cucumber +2 -1
  6. data/lib/autotest/cucumber.rb +1 -0
  7. data/lib/autotest/cucumber_mixin.rb +36 -40
  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 +1 -0
  14. data/lib/cucumber.rb +2 -1
  15. data/lib/cucumber/cli/configuration.rb +8 -7
  16. data/lib/cucumber/cli/main.rb +14 -14
  17. data/lib/cucumber/cli/options.rb +141 -120
  18. data/lib/cucumber/cli/profile_loader.rb +50 -29
  19. data/lib/cucumber/cli/rerun_file.rb +1 -0
  20. data/lib/cucumber/configuration.rb +40 -30
  21. data/lib/cucumber/constantize.rb +8 -10
  22. data/lib/cucumber/core_ext/string.rb +1 -0
  23. data/lib/cucumber/deprecate.rb +33 -9
  24. data/lib/cucumber/encoding.rb +2 -1
  25. data/lib/cucumber/errors.rb +10 -8
  26. data/lib/cucumber/events.rb +14 -9
  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 +1 -4
  30. data/lib/cucumber/events/hook_test_step_created.rb +13 -0
  31. data/lib/cucumber/events/step_activated.rb +6 -6
  32. data/lib/cucumber/events/step_definition_registered.rb +4 -8
  33. data/lib/cucumber/events/test_case_created.rb +13 -0
  34. data/lib/cucumber/events/test_case_finished.rb +1 -5
  35. data/lib/cucumber/events/test_case_ready.rb +12 -0
  36. data/lib/cucumber/events/{test_case_starting.rb → test_case_started.rb} +1 -5
  37. data/lib/cucumber/events/test_run_finished.rb +2 -3
  38. data/lib/cucumber/events/{test_run_starting.rb → test_run_started.rb} +3 -5
  39. data/lib/cucumber/events/test_step_created.rb +13 -0
  40. data/lib/cucumber/events/test_step_finished.rb +0 -6
  41. data/lib/cucumber/events/{test_step_starting.rb → test_step_started.rb} +2 -8
  42. data/lib/cucumber/file_specs.rb +7 -6
  43. data/lib/cucumber/filters.rb +3 -1
  44. data/lib/cucumber/filters/activate_steps.rb +11 -5
  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_starting_event.rb → broadcast_test_run_started_event.rb} +4 -3
  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 +2 -2
  56. data/lib/cucumber/filters/tag_limits.rb +2 -2
  57. data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -2
  58. data/lib/cucumber/filters/tag_limits/verifier.rb +3 -6
  59. data/lib/cucumber/formatter/ansicolor.rb +33 -37
  60. data/lib/cucumber/formatter/ast_lookup.rb +165 -0
  61. data/lib/cucumber/formatter/backtrace_filter.rb +10 -10
  62. data/lib/cucumber/formatter/console.rb +37 -74
  63. data/lib/cucumber/formatter/console_counts.rb +4 -9
  64. data/lib/cucumber/formatter/console_issues.rb +10 -7
  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 +9 -6
  69. data/lib/cucumber/formatter/fanout.rb +3 -3
  70. data/lib/cucumber/formatter/html.rb +11 -603
  71. data/lib/cucumber/formatter/http_io.rb +93 -0
  72. data/lib/cucumber/formatter/ignore_missing_messages.rb +2 -4
  73. data/lib/cucumber/formatter/interceptor.rb +10 -12
  74. data/lib/cucumber/formatter/io.rb +19 -12
  75. data/lib/cucumber/formatter/json.rb +106 -112
  76. data/lib/cucumber/formatter/junit.rb +81 -76
  77. data/lib/cucumber/formatter/message.rb +22 -0
  78. data/lib/cucumber/formatter/message_builder.rb +241 -0
  79. data/lib/cucumber/formatter/pretty.rb +353 -153
  80. data/lib/cucumber/formatter/progress.rb +30 -33
  81. data/lib/cucumber/formatter/query/hook_by_test_step.rb +31 -0
  82. data/lib/cucumber/formatter/query/pickle_by_test.rb +26 -0
  83. data/lib/cucumber/formatter/query/pickle_step_by_test_step.rb +26 -0
  84. data/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +40 -0
  85. data/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +40 -0
  86. data/lib/cucumber/formatter/rerun.rb +24 -5
  87. data/lib/cucumber/formatter/stepdefs.rb +2 -2
  88. data/lib/cucumber/formatter/steps.rb +4 -5
  89. data/lib/cucumber/formatter/summary.rb +18 -11
  90. data/lib/cucumber/formatter/unicode.rb +16 -18
  91. data/lib/cucumber/formatter/usage.rb +30 -26
  92. data/lib/cucumber/gherkin/data_table_parser.rb +18 -6
  93. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +83 -86
  94. data/lib/cucumber/gherkin/formatter/escaping.rb +13 -12
  95. data/lib/cucumber/gherkin/i18n.rb +1 -0
  96. data/lib/cucumber/gherkin/steps_parser.rb +18 -8
  97. data/lib/cucumber/glue/dsl.rb +13 -26
  98. data/lib/cucumber/glue/hook.rb +35 -11
  99. data/lib/cucumber/glue/invoke_in_world.rb +15 -20
  100. data/lib/cucumber/glue/proto_world.rb +48 -42
  101. data/lib/cucumber/glue/registry_and_more.rb +58 -23
  102. data/lib/cucumber/glue/snippet.rb +23 -26
  103. data/lib/cucumber/glue/step_definition.rb +51 -28
  104. data/lib/cucumber/glue/world_factory.rb +2 -4
  105. data/lib/cucumber/hooks.rb +27 -17
  106. data/lib/cucumber/load_path.rb +1 -0
  107. data/lib/cucumber/multiline_argument.rb +7 -17
  108. data/lib/cucumber/multiline_argument/data_table.rb +113 -82
  109. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +8 -12
  110. data/lib/cucumber/multiline_argument/doc_string.rb +2 -1
  111. data/lib/cucumber/platform.rb +4 -3
  112. data/lib/cucumber/project_initializer.rb +2 -2
  113. data/lib/cucumber/rake/task.rb +28 -21
  114. data/lib/cucumber/rspec/disable_option_parser.rb +10 -8
  115. data/lib/cucumber/rspec/doubles.rb +1 -0
  116. data/lib/cucumber/running_test_case.rb +4 -54
  117. data/lib/cucumber/runtime.rb +32 -63
  118. data/lib/cucumber/runtime/after_hooks.rb +9 -4
  119. data/lib/cucumber/runtime/before_hooks.rb +9 -4
  120. data/lib/cucumber/runtime/for_programming_languages.rb +12 -9
  121. data/lib/cucumber/runtime/step_hooks.rb +5 -2
  122. data/lib/cucumber/runtime/support_code.rb +16 -22
  123. data/lib/cucumber/runtime/user_interface.rb +12 -23
  124. data/lib/cucumber/step_definition_light.rb +6 -4
  125. data/lib/cucumber/step_definitions.rb +3 -2
  126. data/lib/cucumber/step_match.rb +29 -14
  127. data/lib/cucumber/step_match_search.rb +10 -10
  128. data/lib/cucumber/term/ansicolor.rb +39 -39
  129. data/lib/cucumber/unit.rb +1 -0
  130. data/lib/cucumber/version +1 -1
  131. data/lib/simplecov_setup.rb +1 -0
  132. metadata +206 -678
  133. data/.coveralls.yml +0 -1
  134. data/.cucumberproignore +0 -6
  135. data/.github/ISSUE_TEMPLATE.md +0 -48
  136. data/.github/PULL_REQUEST_TEMPLATE.md +0 -39
  137. data/.rspec +0 -1
  138. data/.rubocop.yml +0 -13
  139. data/.rubocop_todo.yml +0 -1075
  140. data/.ruby-gemset +0 -1
  141. data/.travis.yml +0 -69
  142. data/.yardopts +0 -1
  143. data/Gemfile +0 -28
  144. data/Rakefile +0 -32
  145. data/appveyor.yml +0 -26
  146. data/cucumber.gemspec +0 -52
  147. data/cucumber.yml +0 -19
  148. data/examples/i18n/README.textile +0 -3
  149. data/examples/i18n/Rakefile +0 -33
  150. data/examples/i18n/ar/Rakefile +0 -6
  151. data/examples/i18n/ar/features/addition.feature +0 -17
  152. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -24
  153. data/examples/i18n/ar/lib/calculator.rb +0 -11
  154. data/examples/i18n/bg/Rakefile +0 -6
  155. data/examples/i18n/bg/features/addition.feature +0 -12
  156. data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
  157. data/examples/i18n/bg/features/division.feature +0 -17
  158. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
  159. data/examples/i18n/bg/features/support/env.rb +0 -5
  160. data/examples/i18n/bg/features/support/world.rb +0 -8
  161. data/examples/i18n/bg/lib/calculator.rb +0 -24
  162. data/examples/i18n/ca/Rakefile +0 -6
  163. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -21
  164. data/examples/i18n/ca/features/suma.feature +0 -17
  165. data/examples/i18n/ca/lib/calculadora.rb +0 -16
  166. data/examples/i18n/cs/Rakefile +0 -6
  167. data/examples/i18n/cs/features/addition.feature +0 -17
  168. data/examples/i18n/cs/features/division.feature +0 -11
  169. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -24
  170. data/examples/i18n/cs/lib/calculator.rb +0 -14
  171. data/examples/i18n/da/Rakefile +0 -6
  172. data/examples/i18n/da/features/sammenlaegning.feature +0 -18
  173. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -24
  174. data/examples/i18n/da/lib/lommeregner.rb +0 -11
  175. data/examples/i18n/de/Rakefile +0 -6
  176. data/examples/i18n/de/features/addition.feature +0 -17
  177. data/examples/i18n/de/features/division.feature +0 -10
  178. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -24
  179. data/examples/i18n/de/lib/calculator.rb +0 -14
  180. data/examples/i18n/el/Rakefile +0 -6
  181. data/examples/i18n/el/features/addition.feature +0 -17
  182. data/examples/i18n/el/features/division.feature +0 -10
  183. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -24
  184. data/examples/i18n/el/lib/calculator.rb +0 -14
  185. data/examples/i18n/en-lol/Rakefile +0 -4
  186. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
  187. data/examples/i18n/en-lol/features/stuffing.feature +0 -8
  188. data/examples/i18n/en-lol/features/support/env.rb +0 -7
  189. data/examples/i18n/en-lol/lib/basket.rb +0 -12
  190. data/examples/i18n/en-lol/lib/belly.rb +0 -11
  191. data/examples/i18n/en/Rakefile +0 -6
  192. data/examples/i18n/en/features/addition.feature +0 -17
  193. data/examples/i18n/en/features/division.feature +0 -10
  194. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -24
  195. data/examples/i18n/en/lib/calculator.rb +0 -14
  196. data/examples/i18n/eo/Rakefile +0 -6
  197. data/examples/i18n/eo/features/adicio.feature +0 -17
  198. data/examples/i18n/eo/features/divido.feature +0 -10
  199. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -24
  200. data/examples/i18n/eo/lib/calculator.rb +0 -14
  201. data/examples/i18n/es/Rakefile +0 -6
  202. data/examples/i18n/es/features/adicion.feature +0 -17
  203. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -21
  204. data/examples/i18n/es/lib/calculador.rb +0 -14
  205. data/examples/i18n/et/Rakefile +0 -6
  206. data/examples/i18n/et/features/jagamine.feature +0 -10
  207. data/examples/i18n/et/features/liitmine.feature +0 -17
  208. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -24
  209. data/examples/i18n/et/lib/kalkulaator.rb +0 -14
  210. data/examples/i18n/fi/Rakefile +0 -6
  211. data/examples/i18n/fi/features/jakolasku.feature +0 -10
  212. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -24
  213. data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
  214. data/examples/i18n/fi/lib/laskin.rb +0 -14
  215. data/examples/i18n/fr/Rakefile +0 -8
  216. data/examples/i18n/fr/features/addition.feature +0 -18
  217. data/examples/i18n/fr/features/addition2.feature +0 -17
  218. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
  219. data/examples/i18n/fr/features/support/env.rb +0 -5
  220. data/examples/i18n/fr/lib/calculatrice.rb +0 -10
  221. data/examples/i18n/he/Rakefile +0 -6
  222. data/examples/i18n/he/features/addition.feature +0 -17
  223. data/examples/i18n/he/features/division.feature +0 -10
  224. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -24
  225. data/examples/i18n/he/lib/calculator.rb +0 -15
  226. data/examples/i18n/hi/Rakefile +0 -6
  227. data/examples/i18n/hi/features/addition.feature +0 -16
  228. data/examples/i18n/hi/features/division.feature +0 -10
  229. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -24
  230. data/examples/i18n/hi/lib/calculator.rb +0 -15
  231. data/examples/i18n/ht/Rakefile +0 -6
  232. data/examples/i18n/ht/features/adisyon.feature +0 -17
  233. data/examples/i18n/ht/features/divizyon.feature +0 -10
  234. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +0 -25
  235. data/examples/i18n/ht/lib/kalkilatris.rb +0 -14
  236. data/examples/i18n/hu/Rakefile +0 -6
  237. data/examples/i18n/hu/features/osszeadas.feature +0 -17
  238. data/examples/i18n/hu/features/osztas.feature +0 -10
  239. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -25
  240. data/examples/i18n/hu/lib/calculator.rb +0 -14
  241. data/examples/i18n/id/Rakefile +0 -6
  242. data/examples/i18n/id/features/addition.feature +0 -17
  243. data/examples/i18n/id/features/division.feature +0 -10
  244. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -24
  245. data/examples/i18n/id/lib/calculator.rb +0 -14
  246. data/examples/i18n/it/Rakefile +0 -6
  247. data/examples/i18n/it/features/somma.feature +0 -11
  248. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -24
  249. data/examples/i18n/it/lib/calcolatrice.rb +0 -11
  250. data/examples/i18n/ja/Rakefile +0 -6
  251. data/examples/i18n/ja/features/addition.feature +0 -17
  252. data/examples/i18n/ja/features/division.feature +0 -10
  253. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
  254. data/examples/i18n/ja/features/support/env.rb +0 -5
  255. data/examples/i18n/ja/lib/calculator.rb +0 -14
  256. data/examples/i18n/ko/Rakefile +0 -6
  257. data/examples/i18n/ko/features/addition.feature +0 -17
  258. data/examples/i18n/ko/features/division.feature +0 -11
  259. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -24
  260. data/examples/i18n/ko/lib/calculator.rb +0 -14
  261. data/examples/i18n/lt/Rakefile +0 -6
  262. data/examples/i18n/lt/features/addition.feature +0 -17
  263. data/examples/i18n/lt/features/division.feature +0 -10
  264. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -24
  265. data/examples/i18n/lt/lib/calculator.rb +0 -14
  266. data/examples/i18n/lv/Rakefile +0 -6
  267. data/examples/i18n/lv/features/addition.feature +0 -17
  268. data/examples/i18n/lv/features/division.feature +0 -10
  269. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -24
  270. data/examples/i18n/lv/lib/calculator.rb +0 -14
  271. data/examples/i18n/no/Rakefile +0 -6
  272. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
  273. data/examples/i18n/no/features/summering.feature +0 -19
  274. data/examples/i18n/no/features/support/env.rb +0 -6
  275. data/examples/i18n/no/lib/kalkulator.rb +0 -11
  276. data/examples/i18n/pl/Rakefile +0 -6
  277. data/examples/i18n/pl/features/addition.feature +0 -17
  278. data/examples/i18n/pl/features/division.feature +0 -10
  279. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -24
  280. data/examples/i18n/pl/features/support/env.rb +0 -5
  281. data/examples/i18n/pl/lib/calculator.rb +0 -14
  282. data/examples/i18n/pt/Rakefile +0 -6
  283. data/examples/i18n/pt/features/adicao.feature +0 -11
  284. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
  285. data/examples/i18n/pt/features/support/env.rb +0 -5
  286. data/examples/i18n/pt/lib/calculadora.rb +0 -10
  287. data/examples/i18n/ro/Rakefile +0 -6
  288. data/examples/i18n/ro/features/adunare.feature +0 -12
  289. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -21
  290. data/examples/i18n/ro/lib/calculator.rb +0 -11
  291. data/examples/i18n/ru/Rakefile +0 -6
  292. data/examples/i18n/ru/features/addition.feature +0 -11
  293. data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
  294. data/examples/i18n/ru/features/division.feature +0 -16
  295. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
  296. data/examples/i18n/ru/features/support/env.rb +0 -5
  297. data/examples/i18n/ru/features/support/world.rb +0 -8
  298. data/examples/i18n/ru/lib/calculator.rb +0 -24
  299. data/examples/i18n/sk/Rakefile +0 -6
  300. data/examples/i18n/sk/features/addition.feature +0 -17
  301. data/examples/i18n/sk/features/division.feature +0 -10
  302. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -24
  303. data/examples/i18n/sk/lib/calculator.rb +0 -14
  304. data/examples/i18n/sr-Cyrl/Rakefile +0 -6
  305. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
  306. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
  307. data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -5
  308. data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
  309. data/examples/i18n/sr-Latn/Rakefile +0 -6
  310. data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
  311. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -24
  312. data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
  313. data/examples/i18n/sv/Rakefile +0 -6
  314. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -24
  315. data/examples/i18n/sv/features/summering.feature +0 -18
  316. data/examples/i18n/sv/lib/kalkulator.rb +0 -11
  317. data/examples/i18n/tr/Rakefile +0 -6
  318. data/examples/i18n/tr/features/bolme.feature +0 -10
  319. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -24
  320. data/examples/i18n/tr/features/toplama.feature +0 -18
  321. data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
  322. data/examples/i18n/uk/Rakefile +0 -6
  323. data/examples/i18n/uk/features/addition.feature +0 -11
  324. data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
  325. data/examples/i18n/uk/features/division.feature +0 -16
  326. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
  327. data/examples/i18n/uk/features/support/env.rb +0 -5
  328. data/examples/i18n/uk/features/support/world.rb +0 -8
  329. data/examples/i18n/uk/lib/calculator.rb +0 -24
  330. data/examples/i18n/uz/Rakefile +0 -6
  331. data/examples/i18n/uz/features/addition.feature +0 -10
  332. data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
  333. data/examples/i18n/uz/features/division.feature +0 -17
  334. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
  335. data/examples/i18n/uz/features/support/env.rb +0 -5
  336. data/examples/i18n/uz/features/support/world.rb +0 -8
  337. data/examples/i18n/uz/lib/calculator.rb +0 -24
  338. data/examples/i18n/zh-CN/Rakefile +0 -4
  339. data/examples/i18n/zh-CN/features/addition.feature +0 -18
  340. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -26
  341. data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
  342. data/examples/i18n/zh-TW/Rakefile +0 -4
  343. data/examples/i18n/zh-TW/features/addition.feature +0 -17
  344. data/examples/i18n/zh-TW/features/division.feature +0 -11
  345. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -24
  346. data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
  347. data/examples/rspec_doubles/Rakefile +0 -4
  348. data/examples/rspec_doubles/features/mocking.feature +0 -9
  349. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
  350. data/examples/rspec_doubles/features/support/env.rb +0 -12
  351. data/examples/sinatra/README.textile +0 -13
  352. data/examples/sinatra/Rakefile +0 -6
  353. data/examples/sinatra/app.rb +0 -14
  354. data/examples/sinatra/features/add.feature +0 -11
  355. data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
  356. data/examples/sinatra/features/support/env.rb +0 -10
  357. data/examples/sinatra/views/add.erb +0 -7
  358. data/examples/sinatra/views/layout.erb +0 -8
  359. data/examples/tcl/README.textile +0 -11
  360. data/examples/tcl/Rakefile +0 -6
  361. data/examples/tcl/features/fibonnacci.feature +0 -17
  362. data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
  363. data/examples/tcl/features/support/env.rb +0 -6
  364. data/examples/tcl/src/fib.tcl +0 -3
  365. data/examples/test_unit/Gemfile +0 -4
  366. data/examples/test_unit/Rakefile +0 -6
  367. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
  368. data/examples/test_unit/features/test_unit.feature +0 -9
  369. data/examples/watir/README.textile +0 -16
  370. data/examples/watir/Rakefile +0 -12
  371. data/examples/watir/cucumber.yml +0 -1
  372. data/examples/watir/features/search.feature +0 -12
  373. data/examples/watir/features/step_definitions/search_steps.rb +0 -26
  374. data/examples/watir/features/support/env.rb +0 -35
  375. data/examples/watir/features/support/screenshots.rb +0 -47
  376. data/features/docs/api/list_step_defs_as_json.feature +0 -64
  377. data/features/docs/api/listen_for_events.feature +0 -59
  378. data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -27
  379. data/features/docs/cli/backtraces.feature +0 -36
  380. data/features/docs/cli/dry_run.feature +0 -73
  381. data/features/docs/cli/exclude_files.feature +0 -18
  382. data/features/docs/cli/execute_with_tag_filter.feature +0 -117
  383. data/features/docs/cli/fail_fast.feature +0 -48
  384. data/features/docs/cli/finding_steps.feature +0 -28
  385. data/features/docs/cli/help.feature +0 -8
  386. data/features/docs/cli/i18n.feature +0 -42
  387. data/features/docs/cli/randomize.feature +0 -140
  388. data/features/docs/cli/require.feature +0 -27
  389. data/features/docs/cli/retry_failing_tests.feature +0 -92
  390. data/features/docs/cli/run_scenarios_matching_name.feature +0 -105
  391. data/features/docs/cli/run_specific_scenarios.feature +0 -77
  392. data/features/docs/cli/showing_differences.feature +0 -43
  393. data/features/docs/cli/specifying_multiple_formatters.feature +0 -68
  394. data/features/docs/cli/strict_mode.feature +0 -70
  395. data/features/docs/defining_steps/nested_steps.feature +0 -181
  396. data/features/docs/defining_steps/nested_steps_i18n.feature +0 -37
  397. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -56
  398. data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
  399. data/features/docs/defining_steps/printing_messages.feature +0 -147
  400. data/features/docs/defining_steps/skip_scenario.feature +0 -31
  401. data/features/docs/defining_steps/snippets.feature +0 -56
  402. data/features/docs/defining_steps/table_diffing.feature +0 -50
  403. data/features/docs/events/gherkin_source_read_event.feature +0 -43
  404. data/features/docs/events/step_activated_event.feature +0 -36
  405. data/features/docs/events/step_definition_registered_event.feature +0 -29
  406. data/features/docs/events/test_case_finished_event.feature +0 -35
  407. data/features/docs/events/test_case_starting_event.feature +0 -54
  408. data/features/docs/events/test_run_finished_event.feature +0 -40
  409. data/features/docs/events/test_run_starting_event.feature +0 -41
  410. data/features/docs/events/test_step_finished_event.feature +0 -47
  411. data/features/docs/events/test_step_starting_event.feature +0 -43
  412. data/features/docs/exception_in_after_hook.feature +0 -127
  413. data/features/docs/exception_in_after_step_hook.feature +0 -104
  414. data/features/docs/exception_in_around_hook.feature +0 -80
  415. data/features/docs/exception_in_before_hook.feature +0 -98
  416. data/features/docs/extending_cucumber/custom_filter.feature +0 -29
  417. data/features/docs/extending_cucumber/custom_formatter.feature +0 -122
  418. data/features/docs/formatters/api_methods.feature +0 -37
  419. data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
  420. data/features/docs/formatters/html_formatter.feature +0 -91
  421. data/features/docs/formatters/json_formatter.feature +0 -767
  422. data/features/docs/formatters/junit_formatter.feature +0 -455
  423. data/features/docs/formatters/pretty_formatter.feature +0 -74
  424. data/features/docs/formatters/progress_formatter.feature +0 -32
  425. data/features/docs/formatters/rerun_formatter.feature +0 -190
  426. data/features/docs/formatters/summary_formatter.feature +0 -35
  427. data/features/docs/formatters/usage_formatter.feature +0 -101
  428. data/features/docs/getting_started.feature +0 -28
  429. data/features/docs/gherkin/background.feature +0 -548
  430. data/features/docs/gherkin/doc_strings.feature +0 -76
  431. data/features/docs/gherkin/expand_option_for_outlines.feature +0 -47
  432. data/features/docs/gherkin/language_from_header.feature +0 -32
  433. data/features/docs/gherkin/outlines.feature +0 -160
  434. data/features/docs/gherkin/unicode_table.feature +0 -33
  435. data/features/docs/gherkin/using_descriptions.feature +0 -83
  436. data/features/docs/gherkin/using_star_notation.feature +0 -37
  437. data/features/docs/iso-8859-1.feature +0 -6
  438. data/features/docs/post_configuration_hook.feature +0 -33
  439. data/features/docs/profiles.feature +0 -120
  440. data/features/docs/rake_task.feature +0 -146
  441. data/features/docs/raketask.feature +0 -46
  442. data/features/docs/work_in_progress.feature +0 -157
  443. data/features/docs/writing_support_code/after_hooks.feature +0 -102
  444. data/features/docs/writing_support_code/after_step_hooks.feature +0 -55
  445. data/features/docs/writing_support_code/around_hooks.feature +0 -266
  446. data/features/docs/writing_support_code/before_hook.feature +0 -66
  447. data/features/docs/writing_support_code/hook_order.feature +0 -63
  448. data/features/docs/writing_support_code/load_path.feature +0 -17
  449. data/features/docs/writing_support_code/parameter_types.feature +0 -75
  450. data/features/docs/writing_support_code/state.feature +0 -32
  451. data/features/docs/writing_support_code/tagged_hooks.feature +0 -95
  452. data/features/docs/writing_support_code/world.feature +0 -129
  453. data/features/lib/step_definitions/aruba_steps.rb +0 -21
  454. data/features/lib/step_definitions/cli_steps.rb +0 -4
  455. data/features/lib/step_definitions/cucumber_steps.rb +0 -75
  456. data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -13
  457. data/features/lib/step_definitions/json_steps.rb +0 -8
  458. data/features/lib/step_definitions/junit_steps.rb +0 -14
  459. data/features/lib/step_definitions/language_steps.rb +0 -9
  460. data/features/lib/step_definitions/profile_steps.rb +0 -16
  461. data/features/lib/step_definitions/retry_steps.rb +0 -55
  462. data/features/lib/step_definitions/ruby_steps.rb +0 -4
  463. data/features/lib/support/env.rb +0 -22
  464. data/features/lib/support/fake_wire_server.rb +0 -86
  465. data/features/lib/support/feature_factory.rb +0 -68
  466. data/features/lib/support/normalise_output.rb +0 -52
  467. data/features/lib/support/parameter_types.rb +0 -8
  468. data/gem_tasks/contributors.rake +0 -19
  469. data/gem_tasks/cov.rake +0 -6
  470. data/gem_tasks/downloads.rb +0 -8
  471. data/gem_tasks/environment.rake +0 -4
  472. data/gem_tasks/examples.rake +0 -12
  473. data/gem_tasks/fix_cr_lf.rake +0 -11
  474. data/gem_tasks/flog.rake +0 -5
  475. data/gem_tasks/rspec.rake +0 -7
  476. data/gem_tasks/sass.rake +0 -5
  477. data/gem_tasks/stats +0 -16
  478. data/gem_tasks/versions.txt +0 -74
  479. data/lib/cucumber/formatter/cucumber.css +0 -286
  480. data/lib/cucumber/formatter/cucumber.sass +0 -247
  481. data/lib/cucumber/formatter/hook_query_visitor.rb +0 -41
  482. data/lib/cucumber/formatter/html_builder.rb +0 -110
  483. data/lib/cucumber/formatter/inline-js.js +0 -30
  484. data/lib/cucumber/formatter/jquery-min.js +0 -154
  485. data/lib/cucumber/formatter/json_pretty.rb +0 -11
  486. data/lib/cucumber/formatter/legacy_api/adapter.rb +0 -1012
  487. data/lib/cucumber/formatter/legacy_api/ast.rb +0 -386
  488. data/lib/cucumber/formatter/legacy_api/results.rb +0 -50
  489. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +0 -32
  490. data/lib/cucumber/step_argument.rb +0 -24
  491. data/scripts/invite-collaborator +0 -40
  492. data/scripts/update-history +0 -83
  493. data/spec/cucumber/cli/configuration_spec.rb +0 -434
  494. data/spec/cucumber/cli/main_spec.rb +0 -84
  495. data/spec/cucumber/cli/options_spec.rb +0 -445
  496. data/spec/cucumber/cli/profile_loader_spec.rb +0 -66
  497. data/spec/cucumber/cli/rerun_spec.rb +0 -86
  498. data/spec/cucumber/configuration_spec.rb +0 -148
  499. data/spec/cucumber/constantize_spec.rb +0 -20
  500. data/spec/cucumber/events_spec.rb +0 -9
  501. data/spec/cucumber/file_specs_spec.rb +0 -61
  502. data/spec/cucumber/filters/activate_steps_spec.rb +0 -152
  503. data/spec/cucumber/filters/gated_receiver_spec.rb +0 -48
  504. data/spec/cucumber/filters/retry_spec.rb +0 -98
  505. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -39
  506. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -58
  507. data/spec/cucumber/filters/tag_limits_spec.rb +0 -60
  508. data/spec/cucumber/formatter/ansicolor_spec.rb +0 -33
  509. data/spec/cucumber/formatter/backtrace_filter_spec.rb +0 -32
  510. data/spec/cucumber/formatter/console_counts_spec.rb +0 -14
  511. data/spec/cucumber/formatter/duration_spec.rb +0 -23
  512. data/spec/cucumber/formatter/fail_fast_spec.rb +0 -88
  513. data/spec/cucumber/formatter/html_spec.rb +0 -543
  514. data/spec/cucumber/formatter/interceptor_spec.rb +0 -137
  515. data/spec/cucumber/formatter/json_spec.rb +0 -840
  516. data/spec/cucumber/formatter/junit_spec.rb +0 -251
  517. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2187
  518. data/spec/cucumber/formatter/pretty_spec.rb +0 -920
  519. data/spec/cucumber/formatter/progress_spec.rb +0 -170
  520. data/spec/cucumber/formatter/rerun_spec.rb +0 -97
  521. data/spec/cucumber/formatter/spec_helper.rb +0 -84
  522. data/spec/cucumber/glue/proto_world_spec.rb +0 -63
  523. data/spec/cucumber/glue/registry_and_more_spec.rb +0 -213
  524. data/spec/cucumber/glue/snippet_spec.rb +0 -174
  525. data/spec/cucumber/glue/step_definition_spec.rb +0 -207
  526. data/spec/cucumber/hooks_spec.rb +0 -31
  527. data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -648
  528. data/spec/cucumber/project_initializer_spec.rb +0 -88
  529. data/spec/cucumber/rake/forked_spec.rb +0 -54
  530. data/spec/cucumber/rake/task_spec.rb +0 -86
  531. data/spec/cucumber/running_test_case_spec.rb +0 -140
  532. data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -8
  533. data/spec/cucumber/runtime/support_code_spec.rb +0 -17
  534. data/spec/cucumber/runtime_spec.rb +0 -21
  535. data/spec/cucumber/sell_cucumbers.feature +0 -19
  536. data/spec/cucumber/step_argument_spec.rb +0 -19
  537. data/spec/cucumber/step_match_search_spec.rb +0 -113
  538. data/spec/cucumber/step_match_spec.rb +0 -86
  539. data/spec/cucumber/world/pending_spec.rb +0 -48
  540. data/spec/spec_helper.rb +0 -30
  541. data/spec/support/standard_step_actions.rb +0 -19
@@ -1,24 +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
- end
16
- end
17
-
18
- attr_reader :offset, :val
19
-
20
- def initialize(offset, val)
21
- @offset, @val = offset, val
22
- end
23
- end
24
- end
@@ -1,40 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'octokit'
3
-
4
- class Team
5
- attr_reader :gh, :name
6
-
7
- def initialize(gh, name)
8
- @gh = gh
9
- @name = name
10
- end
11
-
12
- def add_member(login)
13
- gh.add_team_membership(id, login)
14
- end
15
-
16
- def id
17
- team['id']
18
- end
19
-
20
- def team
21
- @team ||= gh.organization_teams('cucumber').
22
- find { |team| team['name'] == name } || raise("Unable to find a team named #{name}")
23
- end
24
- end
25
-
26
- begin
27
- token = ENV['GITHUB_TOKEN'] || raise('You need to set GITHUB_TOKEN')
28
- login = (ARGV[0] || raise("syntax: #{$0} <COLLABORATOR_LOGIN>")).to_s
29
-
30
- gh = Octokit::Client.new(access_token: token)
31
- [
32
- Team.new(gh, 'cucumber-ruby'),
33
- Team.new(gh, 'collaborators')
34
- ].each { |team|
35
- team.add_member(login)
36
- }
37
-
38
- rescue StandardError => error
39
- abort error.message
40
- end
@@ -1,83 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'octokit'
3
-
4
- class PullRequest
5
- attr_reader :gh, :num
6
-
7
- def initialize(gh, num)
8
- @gh = gh
9
- @num = num
10
- end
11
-
12
- def entry
13
- pr = gh.pull_request('cucumber/cucumber-ruby', num)
14
- "#{pr['title']} ([##{num}(#{pr['url']}) @#{pr['user']['login']})"
15
- end
16
-
17
- def labels
18
- gh.labels_for_issue('cucumber/cucumber-ruby', num).map { |label| label['name'] }
19
- end
20
-
21
- def type_label
22
- types = labels.select { |label| label =~ /^type: / }
23
- if types.empty?
24
- raise('This pull request does not have a \'type\' label on it. Please add one.')
25
- end
26
-
27
- if types.length > 1
28
- raise('This pull request has more than one \'type\' label on it. Please choose just one.')
29
- end
30
-
31
- types.first
32
- end
33
- end
34
-
35
- class HistoryFile
36
- def self.open(path, &block)
37
- full_path = File.expand_path(File.dirname(__FILE__) + '/' + path + '/History.md')
38
- history = new(File.read(full_path))
39
- history.instance_exec(&block)
40
- File.write(full_path, history.body)
41
- end
42
-
43
- attr_reader :lines
44
-
45
- def initialize(body)
46
- @lines = body.lines
47
- end
48
-
49
- def insert(label, entry)
50
- section_index = lines.index { |line| line.strip == heading_for(label) }
51
- unless section_index
52
- raise("Unable to find matching heading in History.md for '#{label}' (#{heading_for(label)})")
53
- end
54
- lines.insert(section_index + 2, "* #{entry}\n")
55
- end
56
-
57
- def heading_for(label)
58
- text = {
59
- 'type: new feature' => 'New Features',
60
- 'type: bug' => 'Bugfixes',
61
- 'type: refactoring / developer experience' => 'Refactoring / Developer Experience'
62
- }.fetch(label)
63
- "### #{text}"
64
- end
65
-
66
- def body
67
- lines.join
68
- end
69
- end
70
-
71
- begin
72
- token = ENV['GITHUB_TOKEN'] || raise('You need to set GITHUB_TOKEN')
73
- num = (ARGV[0] || raise("syntax: #{$0} <PULL-REQUEST-NUMBER>")).to_i
74
-
75
- gh = Octokit::Client.new(access_token: token)
76
- pr = PullRequest.new(gh, num)
77
-
78
- HistoryFile.open('..') do
79
- insert(pr.type_label, pr.entry)
80
- end
81
- rescue StandardError => error
82
- abort error.message
83
- end
@@ -1,434 +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_expressions' do
358
- it 'returns an empty expression when no tags are specified' do
359
- config.parse!([])
360
-
361
- expect(config.tag_expressions).to be_empty
362
- end
363
-
364
- it 'returns an expression when tags are specified' do
365
- config.parse!(['--tags','@foo'])
366
-
367
- expect(config.tag_expressions).not_to be_empty
368
- end
369
- end
370
-
371
- describe '#tag_limits' do
372
- it 'returns an empty hash when no limits are specified' do
373
- config.parse!([])
374
-
375
- expect(config.tag_limits).to eq({ })
376
- end
377
-
378
- it 'returns a hash of limits when limits are specified' do
379
- config.parse!(['--tags','@foo:1'])
380
-
381
- expect(config.tag_limits).to eq({ '@foo' => 1 })
382
- end
383
- end
384
-
385
- describe '#dry_run?' do
386
- it 'returns true when --dry-run was specified on in the arguments' do
387
- config.parse!(['--dry-run'])
388
-
389
- expect(config.dry_run?).to be true
390
- end
391
-
392
- it 'returns true when --dry-run was specified in yaml file' do
393
- given_cucumber_yml_defined_as({'default' => '--dry-run'})
394
- config.parse!([])
395
-
396
- expect(config.dry_run?).to be true
397
- end
398
-
399
- it 'returns false by default' do
400
- config.parse!([])
401
-
402
- expect(config.dry_run?).to be false
403
- end
404
- end
405
-
406
- describe '#snippet_type' do
407
- it 'returns the snippet type when it was set' do
408
- config.parse!(['--snippet-type', 'classic'])
409
-
410
- expect(config.snippet_type).to eq :classic
411
- end
412
-
413
- it 'returns the snippet type when it was set with shorthand option' do
414
- config.parse!(['-I', 'classic'])
415
-
416
- expect(config.snippet_type).to eq :classic
417
- end
418
-
419
- it 'returns the default snippet type if it was not set' do
420
- config.parse!([])
421
-
422
- expect(config.snippet_type).to eq :cucumber_expression
423
- end
424
- end
425
-
426
- describe '#retry_attempts' do
427
- it 'returns the specified number of retries' do
428
- config.parse!(['--retry=3'])
429
- expect(config.retry_attempts).to eql 3
430
- end
431
- end
432
- end
433
- end
434
- end