cucumber 3.0.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +84 -4
  3. data/CONTRIBUTING.md +3 -4
  4. data/README.md +12 -12
  5. data/lib/autotest/cucumber.rb +1 -0
  6. data/lib/autotest/cucumber_mixin.rb +1 -0
  7. data/lib/autotest/cucumber_rails.rb +1 -0
  8. data/lib/autotest/cucumber_rails_rspec.rb +1 -0
  9. data/lib/autotest/cucumber_rails_rspec2.rb +1 -0
  10. data/lib/autotest/cucumber_rspec.rb +1 -0
  11. data/lib/autotest/cucumber_rspec2.rb +1 -0
  12. data/lib/autotest/discover.rb +1 -0
  13. data/lib/cucumber.rb +1 -0
  14. data/lib/cucumber/cli/configuration.rb +1 -0
  15. data/lib/cucumber/cli/main.rb +2 -2
  16. data/lib/cucumber/cli/options.rb +63 -55
  17. data/lib/cucumber/cli/profile_loader.rb +5 -7
  18. data/lib/cucumber/cli/rerun_file.rb +1 -0
  19. data/lib/cucumber/configuration.rb +8 -7
  20. data/lib/cucumber/constantize.rb +6 -5
  21. data/lib/cucumber/core_ext/string.rb +1 -0
  22. data/lib/cucumber/deprecate.rb +1 -1
  23. data/lib/cucumber/encoding.rb +2 -1
  24. data/lib/cucumber/errors.rb +2 -1
  25. data/lib/cucumber/events.rb +1 -2
  26. data/lib/cucumber/events/gherkin_source_read.rb +1 -4
  27. data/lib/cucumber/events/step_activated.rb +4 -5
  28. data/lib/cucumber/events/step_definition_registered.rb +4 -8
  29. data/lib/cucumber/events/test_case_finished.rb +0 -4
  30. data/lib/cucumber/events/test_case_started.rb +0 -4
  31. data/lib/cucumber/events/test_run_finished.rb +2 -3
  32. data/lib/cucumber/events/test_run_started.rb +2 -4
  33. data/lib/cucumber/events/test_step_finished.rb +0 -6
  34. data/lib/cucumber/events/test_step_started.rb +1 -7
  35. data/lib/cucumber/file_specs.rb +2 -1
  36. data/lib/cucumber/filters.rb +1 -0
  37. data/lib/cucumber/filters/activate_steps.rb +1 -1
  38. data/lib/cucumber/filters/apply_after_hooks.rb +1 -0
  39. data/lib/cucumber/filters/apply_after_step_hooks.rb +1 -0
  40. data/lib/cucumber/filters/apply_around_hooks.rb +1 -0
  41. data/lib/cucumber/filters/apply_before_hooks.rb +1 -0
  42. data/lib/cucumber/filters/broadcast_test_run_started_event.rb +2 -1
  43. data/lib/cucumber/filters/gated_receiver.rb +1 -2
  44. data/lib/cucumber/filters/prepare_world.rb +2 -5
  45. data/lib/cucumber/filters/quit.rb +2 -4
  46. data/lib/cucumber/filters/randomizer.rb +6 -7
  47. data/lib/cucumber/filters/retry.rb +2 -2
  48. data/lib/cucumber/filters/tag_limits.rb +2 -2
  49. data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -2
  50. data/lib/cucumber/filters/tag_limits/verifier.rb +1 -2
  51. data/lib/cucumber/formatter/ansicolor.rb +13 -12
  52. data/lib/cucumber/formatter/backtrace_filter.rb +1 -2
  53. data/lib/cucumber/formatter/console.rb +11 -12
  54. data/lib/cucumber/formatter/console_counts.rb +4 -4
  55. data/lib/cucumber/formatter/console_issues.rb +3 -3
  56. data/lib/cucumber/formatter/duration.rb +1 -0
  57. data/lib/cucumber/formatter/duration_extractor.rb +1 -1
  58. data/lib/cucumber/formatter/fail_fast.rb +9 -6
  59. data/lib/cucumber/formatter/fanout.rb +1 -3
  60. data/lib/cucumber/formatter/hook_query_visitor.rb +1 -0
  61. data/lib/cucumber/formatter/html.rb +28 -32
  62. data/lib/cucumber/formatter/html_builder.rb +3 -2
  63. data/lib/cucumber/formatter/http_io.rb +146 -0
  64. data/lib/cucumber/formatter/ignore_missing_messages.rb +1 -3
  65. data/lib/cucumber/formatter/interceptor.rb +18 -5
  66. data/lib/cucumber/formatter/io.rb +18 -11
  67. data/lib/cucumber/formatter/json.rb +11 -4
  68. data/lib/cucumber/formatter/json_pretty.rb +1 -1
  69. data/lib/cucumber/formatter/junit.rb +22 -17
  70. data/lib/cucumber/formatter/pretty.rb +4 -3
  71. data/lib/cucumber/formatter/progress.rb +3 -2
  72. data/lib/cucumber/formatter/rerun.rb +2 -1
  73. data/lib/cucumber/formatter/stepdefs.rb +1 -0
  74. data/lib/cucumber/formatter/steps.rb +2 -2
  75. data/lib/cucumber/formatter/summary.rb +1 -2
  76. data/lib/cucumber/formatter/unicode.rb +2 -2
  77. data/lib/cucumber/formatter/usage.rb +22 -19
  78. data/lib/cucumber/gherkin/data_table_parser.rb +1 -0
  79. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +86 -85
  80. data/lib/cucumber/gherkin/formatter/escaping.rb +13 -12
  81. data/lib/cucumber/gherkin/i18n.rb +1 -0
  82. data/lib/cucumber/gherkin/steps_parser.rb +1 -0
  83. data/lib/cucumber/glue/dsl.rb +1 -0
  84. data/lib/cucumber/glue/hook.rb +1 -0
  85. data/lib/cucumber/glue/invoke_in_world.rb +3 -3
  86. data/lib/cucumber/glue/proto_world.rb +10 -9
  87. data/lib/cucumber/glue/registry_and_more.rb +13 -12
  88. data/lib/cucumber/glue/snippet.rb +1 -5
  89. data/lib/cucumber/glue/step_definition.rb +10 -10
  90. data/lib/cucumber/glue/world_factory.rb +1 -3
  91. data/lib/cucumber/hooks.rb +13 -3
  92. data/lib/cucumber/load_path.rb +1 -0
  93. data/lib/cucumber/multiline_argument.rb +3 -3
  94. data/lib/cucumber/multiline_argument/data_table.rb +16 -20
  95. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +7 -11
  96. data/lib/cucumber/multiline_argument/doc_string.rb +1 -0
  97. data/lib/cucumber/platform.rb +2 -1
  98. data/lib/cucumber/project_initializer.rb +1 -1
  99. data/lib/cucumber/rake/task.rb +8 -5
  100. data/lib/cucumber/rspec/disable_option_parser.rb +1 -0
  101. data/lib/cucumber/rspec/doubles.rb +1 -0
  102. data/lib/cucumber/running_test_case.rb +2 -1
  103. data/lib/cucumber/runtime.rb +6 -6
  104. data/lib/cucumber/runtime/after_hooks.rb +1 -0
  105. data/lib/cucumber/runtime/before_hooks.rb +1 -0
  106. data/lib/cucumber/runtime/for_programming_languages.rb +8 -7
  107. data/lib/cucumber/runtime/step_hooks.rb +2 -0
  108. data/lib/cucumber/runtime/support_code.rb +3 -7
  109. data/lib/cucumber/runtime/user_interface.rb +2 -3
  110. data/lib/cucumber/step_argument.rb +1 -0
  111. data/lib/cucumber/step_definition_light.rb +2 -1
  112. data/lib/cucumber/step_definitions.rb +2 -1
  113. data/lib/cucumber/step_match.rb +9 -8
  114. data/lib/cucumber/step_match_search.rb +8 -9
  115. data/lib/cucumber/term/ansicolor.rb +30 -30
  116. data/lib/cucumber/unit.rb +1 -0
  117. data/lib/cucumber/version +1 -1
  118. data/lib/simplecov_setup.rb +1 -0
  119. metadata +64 -659
  120. data/.coveralls.yml +0 -1
  121. data/.cucumberproignore +0 -6
  122. data/.gitattributes +0 -32
  123. data/.github/ISSUE_TEMPLATE.md +0 -48
  124. data/.github/PULL_REQUEST_TEMPLATE.md +0 -40
  125. data/.rspec +0 -1
  126. data/.rubocop.yml +0 -13
  127. data/.rubocop_todo.yml +0 -991
  128. data/.ruby-gemset +0 -1
  129. data/.travis.yml +0 -70
  130. data/.yardopts +0 -1
  131. data/Gemfile +0 -28
  132. data/Rakefile +0 -32
  133. data/appveyor.yml +0 -27
  134. data/cucumber.gemspec +0 -52
  135. data/cucumber.yml +0 -19
  136. data/examples/i18n/README.textile +0 -3
  137. data/examples/i18n/Rakefile +0 -33
  138. data/examples/i18n/ar/Rakefile +0 -6
  139. data/examples/i18n/ar/features/addition.feature +0 -17
  140. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -29
  141. data/examples/i18n/ar/lib/calculator.rb +0 -11
  142. data/examples/i18n/bg/Rakefile +0 -6
  143. data/examples/i18n/bg/features/addition.feature +0 -12
  144. data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
  145. data/examples/i18n/bg/features/division.feature +0 -17
  146. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
  147. data/examples/i18n/bg/features/support/env.rb +0 -10
  148. data/examples/i18n/bg/features/support/world.rb +0 -8
  149. data/examples/i18n/bg/lib/calculator.rb +0 -25
  150. data/examples/i18n/ca/Rakefile +0 -6
  151. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -26
  152. data/examples/i18n/ca/features/suma.feature +0 -17
  153. data/examples/i18n/ca/lib/calculadora.rb +0 -16
  154. data/examples/i18n/cs/Rakefile +0 -6
  155. data/examples/i18n/cs/features/addition.feature +0 -17
  156. data/examples/i18n/cs/features/division.feature +0 -11
  157. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -29
  158. data/examples/i18n/cs/lib/calculator.rb +0 -14
  159. data/examples/i18n/da/Rakefile +0 -6
  160. data/examples/i18n/da/features/sammenlaegning.feature +0 -18
  161. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -29
  162. data/examples/i18n/da/lib/lommeregner.rb +0 -11
  163. data/examples/i18n/de/Rakefile +0 -6
  164. data/examples/i18n/de/features/addition.feature +0 -17
  165. data/examples/i18n/de/features/division.feature +0 -10
  166. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -29
  167. data/examples/i18n/de/lib/calculator.rb +0 -14
  168. data/examples/i18n/el/Rakefile +0 -6
  169. data/examples/i18n/el/features/addition.feature +0 -17
  170. data/examples/i18n/el/features/division.feature +0 -10
  171. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -29
  172. data/examples/i18n/el/lib/calculator.rb +0 -14
  173. data/examples/i18n/en-lol/Rakefile +0 -4
  174. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
  175. data/examples/i18n/en-lol/features/stuffing.feature +0 -8
  176. data/examples/i18n/en-lol/features/support/env.rb +0 -11
  177. data/examples/i18n/en-lol/lib/basket.rb +0 -12
  178. data/examples/i18n/en-lol/lib/belly.rb +0 -11
  179. data/examples/i18n/en/Rakefile +0 -6
  180. data/examples/i18n/en/features/addition.feature +0 -17
  181. data/examples/i18n/en/features/division.feature +0 -10
  182. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -29
  183. data/examples/i18n/en/lib/calculator.rb +0 -14
  184. data/examples/i18n/eo/Rakefile +0 -6
  185. data/examples/i18n/eo/features/adicio.feature +0 -17
  186. data/examples/i18n/eo/features/divido.feature +0 -10
  187. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -29
  188. data/examples/i18n/eo/lib/calculator.rb +0 -14
  189. data/examples/i18n/es/Rakefile +0 -6
  190. data/examples/i18n/es/features/adicion.feature +0 -17
  191. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -26
  192. data/examples/i18n/es/lib/calculador.rb +0 -14
  193. data/examples/i18n/et/Rakefile +0 -6
  194. data/examples/i18n/et/features/jagamine.feature +0 -10
  195. data/examples/i18n/et/features/liitmine.feature +0 -17
  196. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -29
  197. data/examples/i18n/et/lib/kalkulaator.rb +0 -14
  198. data/examples/i18n/fi/Rakefile +0 -6
  199. data/examples/i18n/fi/features/jakolasku.feature +0 -10
  200. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -29
  201. data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
  202. data/examples/i18n/fi/lib/laskin.rb +0 -14
  203. data/examples/i18n/fr/Rakefile +0 -8
  204. data/examples/i18n/fr/features/addition.feature +0 -18
  205. data/examples/i18n/fr/features/addition2.feature +0 -17
  206. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
  207. data/examples/i18n/fr/features/support/env.rb +0 -10
  208. data/examples/i18n/fr/lib/calculatrice.rb +0 -10
  209. data/examples/i18n/he/Rakefile +0 -6
  210. data/examples/i18n/he/features/addition.feature +0 -17
  211. data/examples/i18n/he/features/division.feature +0 -10
  212. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -29
  213. data/examples/i18n/he/lib/calculator.rb +0 -15
  214. data/examples/i18n/hi/Rakefile +0 -6
  215. data/examples/i18n/hi/features/addition.feature +0 -16
  216. data/examples/i18n/hi/features/division.feature +0 -10
  217. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -29
  218. data/examples/i18n/hi/lib/calculator.rb +0 -15
  219. data/examples/i18n/ht/Rakefile +0 -6
  220. data/examples/i18n/ht/features/adisyon.feature +0 -17
  221. data/examples/i18n/ht/features/divizyon.feature +0 -10
  222. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +0 -29
  223. data/examples/i18n/ht/lib/kalkilatris.rb +0 -14
  224. data/examples/i18n/hu/Rakefile +0 -6
  225. data/examples/i18n/hu/features/osszeadas.feature +0 -17
  226. data/examples/i18n/hu/features/osztas.feature +0 -10
  227. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -30
  228. data/examples/i18n/hu/lib/calculator.rb +0 -14
  229. data/examples/i18n/id/Rakefile +0 -6
  230. data/examples/i18n/id/features/addition.feature +0 -17
  231. data/examples/i18n/id/features/division.feature +0 -10
  232. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -29
  233. data/examples/i18n/id/lib/calculator.rb +0 -14
  234. data/examples/i18n/it/Rakefile +0 -6
  235. data/examples/i18n/it/features/somma.feature +0 -11
  236. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -29
  237. data/examples/i18n/it/lib/calcolatrice.rb +0 -11
  238. data/examples/i18n/ja/Rakefile +0 -6
  239. data/examples/i18n/ja/features/addition.feature +0 -17
  240. data/examples/i18n/ja/features/division.feature +0 -10
  241. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
  242. data/examples/i18n/ja/features/support/env.rb +0 -10
  243. data/examples/i18n/ja/lib/calculator.rb +0 -14
  244. data/examples/i18n/ko/Rakefile +0 -6
  245. data/examples/i18n/ko/features/addition.feature +0 -17
  246. data/examples/i18n/ko/features/division.feature +0 -11
  247. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -29
  248. data/examples/i18n/ko/lib/calculator.rb +0 -14
  249. data/examples/i18n/lt/Rakefile +0 -6
  250. data/examples/i18n/lt/features/addition.feature +0 -17
  251. data/examples/i18n/lt/features/division.feature +0 -10
  252. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -29
  253. data/examples/i18n/lt/lib/calculator.rb +0 -14
  254. data/examples/i18n/lv/Rakefile +0 -6
  255. data/examples/i18n/lv/features/addition.feature +0 -17
  256. data/examples/i18n/lv/features/division.feature +0 -10
  257. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -29
  258. data/examples/i18n/lv/lib/calculator.rb +0 -14
  259. data/examples/i18n/no/Rakefile +0 -6
  260. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
  261. data/examples/i18n/no/features/summering.feature +0 -19
  262. data/examples/i18n/no/features/support/env.rb +0 -11
  263. data/examples/i18n/no/lib/kalkulator.rb +0 -11
  264. data/examples/i18n/pl/Rakefile +0 -6
  265. data/examples/i18n/pl/features/addition.feature +0 -17
  266. data/examples/i18n/pl/features/division.feature +0 -10
  267. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -29
  268. data/examples/i18n/pl/features/support/env.rb +0 -10
  269. data/examples/i18n/pl/lib/calculator.rb +0 -14
  270. data/examples/i18n/pt/Rakefile +0 -6
  271. data/examples/i18n/pt/features/adicao.feature +0 -11
  272. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
  273. data/examples/i18n/pt/features/support/env.rb +0 -10
  274. data/examples/i18n/pt/lib/calculadora.rb +0 -10
  275. data/examples/i18n/ro/Rakefile +0 -6
  276. data/examples/i18n/ro/features/adunare.feature +0 -12
  277. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -26
  278. data/examples/i18n/ro/lib/calculator.rb +0 -11
  279. data/examples/i18n/ru/Rakefile +0 -6
  280. data/examples/i18n/ru/features/addition.feature +0 -11
  281. data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
  282. data/examples/i18n/ru/features/division.feature +0 -16
  283. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
  284. data/examples/i18n/ru/features/support/env.rb +0 -10
  285. data/examples/i18n/ru/features/support/world.rb +0 -8
  286. data/examples/i18n/ru/lib/calculator.rb +0 -25
  287. data/examples/i18n/sk/Rakefile +0 -6
  288. data/examples/i18n/sk/features/addition.feature +0 -17
  289. data/examples/i18n/sk/features/division.feature +0 -10
  290. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -29
  291. data/examples/i18n/sk/lib/calculator.rb +0 -14
  292. data/examples/i18n/sr-Cyrl/Rakefile +0 -6
  293. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
  294. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
  295. data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -10
  296. data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
  297. data/examples/i18n/sr-Latn/Rakefile +0 -6
  298. data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
  299. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -29
  300. data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
  301. data/examples/i18n/sv/Rakefile +0 -6
  302. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -29
  303. data/examples/i18n/sv/features/summering.feature +0 -18
  304. data/examples/i18n/sv/lib/kalkulator.rb +0 -11
  305. data/examples/i18n/tr/Rakefile +0 -6
  306. data/examples/i18n/tr/features/bolme.feature +0 -10
  307. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -29
  308. data/examples/i18n/tr/features/toplama.feature +0 -18
  309. data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
  310. data/examples/i18n/uk/Rakefile +0 -6
  311. data/examples/i18n/uk/features/addition.feature +0 -11
  312. data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
  313. data/examples/i18n/uk/features/division.feature +0 -16
  314. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
  315. data/examples/i18n/uk/features/support/env.rb +0 -10
  316. data/examples/i18n/uk/features/support/world.rb +0 -8
  317. data/examples/i18n/uk/lib/calculator.rb +0 -25
  318. data/examples/i18n/uz/Rakefile +0 -6
  319. data/examples/i18n/uz/features/addition.feature +0 -10
  320. data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
  321. data/examples/i18n/uz/features/division.feature +0 -17
  322. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
  323. data/examples/i18n/uz/features/support/env.rb +0 -10
  324. data/examples/i18n/uz/features/support/world.rb +0 -8
  325. data/examples/i18n/uz/lib/calculator.rb +0 -25
  326. data/examples/i18n/zh-CN/Rakefile +0 -4
  327. data/examples/i18n/zh-CN/features/addition.feature +0 -18
  328. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -31
  329. data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
  330. data/examples/i18n/zh-TW/Rakefile +0 -4
  331. data/examples/i18n/zh-TW/features/addition.feature +0 -17
  332. data/examples/i18n/zh-TW/features/division.feature +0 -11
  333. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -29
  334. data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
  335. data/examples/rspec_doubles/Rakefile +0 -4
  336. data/examples/rspec_doubles/features/mocking.feature +0 -9
  337. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
  338. data/examples/rspec_doubles/features/support/env.rb +0 -12
  339. data/examples/sinatra/README.textile +0 -13
  340. data/examples/sinatra/Rakefile +0 -6
  341. data/examples/sinatra/app.rb +0 -14
  342. data/examples/sinatra/features/add.feature +0 -11
  343. data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
  344. data/examples/sinatra/features/support/env.rb +0 -15
  345. data/examples/sinatra/views/add.erb +0 -7
  346. data/examples/sinatra/views/layout.erb +0 -8
  347. data/examples/tcl/README.textile +0 -11
  348. data/examples/tcl/Rakefile +0 -6
  349. data/examples/tcl/features/fibonnacci.feature +0 -17
  350. data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
  351. data/examples/tcl/features/support/env.rb +0 -7
  352. data/examples/tcl/src/fib.tcl +0 -3
  353. data/examples/test_unit/Gemfile +0 -4
  354. data/examples/test_unit/Rakefile +0 -6
  355. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
  356. data/examples/test_unit/features/test_unit.feature +0 -9
  357. data/examples/watir/README.textile +0 -16
  358. data/examples/watir/Rakefile +0 -12
  359. data/examples/watir/cucumber.yml +0 -1
  360. data/examples/watir/features/search.feature +0 -12
  361. data/examples/watir/features/step_definitions/search_steps.rb +0 -27
  362. data/examples/watir/features/support/env.rb +0 -39
  363. data/examples/watir/features/support/screenshots.rb +0 -47
  364. data/features/docs/api/list_step_defs_as_json.feature +0 -64
  365. data/features/docs/api/listen_for_events.feature +0 -59
  366. data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -27
  367. data/features/docs/cli/backtraces.feature +0 -36
  368. data/features/docs/cli/dry_run.feature +0 -73
  369. data/features/docs/cli/exclude_files.feature +0 -18
  370. data/features/docs/cli/execute_with_tag_filter.feature +0 -119
  371. data/features/docs/cli/fail_fast.feature +0 -48
  372. data/features/docs/cli/finding_steps.feature +0 -28
  373. data/features/docs/cli/help.feature +0 -8
  374. data/features/docs/cli/i18n.feature +0 -42
  375. data/features/docs/cli/randomize.feature +0 -140
  376. data/features/docs/cli/require.feature +0 -27
  377. data/features/docs/cli/retry_failing_tests.feature +0 -92
  378. data/features/docs/cli/run_scenarios_matching_name.feature +0 -105
  379. data/features/docs/cli/run_specific_scenarios.feature +0 -77
  380. data/features/docs/cli/showing_differences.feature +0 -43
  381. data/features/docs/cli/specifying_multiple_formatters.feature +0 -68
  382. data/features/docs/cli/strict_mode.feature +0 -70
  383. data/features/docs/defining_steps/ambiguous_steps.feature +0 -89
  384. data/features/docs/defining_steps/nested_steps.feature +0 -181
  385. data/features/docs/defining_steps/nested_steps_i18n.feature +0 -37
  386. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -56
  387. data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
  388. data/features/docs/defining_steps/printing_messages.feature +0 -147
  389. data/features/docs/defining_steps/skip_scenario.feature +0 -31
  390. data/features/docs/defining_steps/snippets.feature +0 -56
  391. data/features/docs/defining_steps/table_diffing.feature +0 -50
  392. data/features/docs/events/gherkin_source_read_event.feature +0 -43
  393. data/features/docs/events/step_activated_event.feature +0 -36
  394. data/features/docs/events/step_definition_registered_event.feature +0 -29
  395. data/features/docs/events/test_case_finished_event.feature +0 -35
  396. data/features/docs/events/test_case_started_event.feature +0 -54
  397. data/features/docs/events/test_run_finished_event.feature +0 -40
  398. data/features/docs/events/test_run_started_event.feature +0 -41
  399. data/features/docs/events/test_step_finished_event.feature +0 -47
  400. data/features/docs/events/test_step_started_event.feature +0 -43
  401. data/features/docs/exception_in_after_hook.feature +0 -127
  402. data/features/docs/exception_in_after_step_hook.feature +0 -104
  403. data/features/docs/exception_in_around_hook.feature +0 -80
  404. data/features/docs/exception_in_before_hook.feature +0 -98
  405. data/features/docs/extending_cucumber/custom_filter.feature +0 -29
  406. data/features/docs/extending_cucumber/custom_formatter.feature +0 -94
  407. data/features/docs/formatters/api_methods.feature +0 -37
  408. data/features/docs/formatters/html_formatter.feature +0 -91
  409. data/features/docs/formatters/json_formatter.feature +0 -767
  410. data/features/docs/formatters/junit_formatter.feature +0 -455
  411. data/features/docs/formatters/pretty_formatter.feature +0 -74
  412. data/features/docs/formatters/progress_formatter.feature +0 -32
  413. data/features/docs/formatters/rerun_formatter.feature +0 -190
  414. data/features/docs/formatters/summary_formatter.feature +0 -35
  415. data/features/docs/formatters/usage_formatter.feature +0 -101
  416. data/features/docs/getting_started.feature +0 -28
  417. data/features/docs/gherkin/background.feature +0 -548
  418. data/features/docs/gherkin/doc_strings.feature +0 -76
  419. data/features/docs/gherkin/expand_option_for_outlines.feature +0 -47
  420. data/features/docs/gherkin/language_from_header.feature +0 -32
  421. data/features/docs/gherkin/outlines.feature +0 -158
  422. data/features/docs/gherkin/unicode_table.feature +0 -33
  423. data/features/docs/gherkin/using_descriptions.feature +0 -83
  424. data/features/docs/gherkin/using_star_notation.feature +0 -37
  425. data/features/docs/iso-8859-1.feature +0 -6
  426. data/features/docs/post_configuration_hook.feature +0 -33
  427. data/features/docs/profiles.feature +0 -120
  428. data/features/docs/rake_task.feature +0 -146
  429. data/features/docs/raketask.feature +0 -46
  430. data/features/docs/work_in_progress.feature +0 -157
  431. data/features/docs/writing_support_code/after_hooks.feature +0 -102
  432. data/features/docs/writing_support_code/after_step_hooks.feature +0 -55
  433. data/features/docs/writing_support_code/around_hooks.feature +0 -266
  434. data/features/docs/writing_support_code/before_hook.feature +0 -66
  435. data/features/docs/writing_support_code/hook_order.feature +0 -63
  436. data/features/docs/writing_support_code/load_path.feature +0 -17
  437. data/features/docs/writing_support_code/parameter_types.feature +0 -69
  438. data/features/docs/writing_support_code/state.feature +0 -32
  439. data/features/docs/writing_support_code/tagged_hooks.feature +0 -95
  440. data/features/docs/writing_support_code/world.feature +0 -129
  441. data/features/lib/step_definitions/aruba_steps.rb +0 -21
  442. data/features/lib/step_definitions/cli_steps.rb +0 -4
  443. data/features/lib/step_definitions/cucumber_steps.rb +0 -75
  444. data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -16
  445. data/features/lib/step_definitions/json_steps.rb +0 -8
  446. data/features/lib/step_definitions/junit_steps.rb +0 -14
  447. data/features/lib/step_definitions/language_steps.rb +0 -9
  448. data/features/lib/step_definitions/profile_steps.rb +0 -16
  449. data/features/lib/step_definitions/retry_steps.rb +0 -55
  450. data/features/lib/step_definitions/ruby_steps.rb +0 -4
  451. data/features/lib/support/env.rb +0 -22
  452. data/features/lib/support/fake_wire_server.rb +0 -94
  453. data/features/lib/support/feature_factory.rb +0 -68
  454. data/features/lib/support/normalise_output.rb +0 -52
  455. data/features/lib/support/parameter_types.rb +0 -5
  456. data/gem_tasks/contributors.rake +0 -19
  457. data/gem_tasks/cov.rake +0 -6
  458. data/gem_tasks/downloads.rb +0 -8
  459. data/gem_tasks/environment.rake +0 -4
  460. data/gem_tasks/examples.rake +0 -12
  461. data/gem_tasks/fix_cr_lf.rake +0 -22
  462. data/gem_tasks/flog.rake +0 -5
  463. data/gem_tasks/rspec.rake +0 -7
  464. data/gem_tasks/sass.rake +0 -5
  465. data/gem_tasks/stats +0 -16
  466. data/gem_tasks/versions.txt +0 -74
  467. data/scripts/invite-collaborator +0 -40
  468. data/scripts/update-changelog +0 -86
  469. data/spec/cucumber/cli/configuration_spec.rb +0 -446
  470. data/spec/cucumber/cli/main_spec.rb +0 -84
  471. data/spec/cucumber/cli/options_spec.rb +0 -445
  472. data/spec/cucumber/cli/profile_loader_spec.rb +0 -66
  473. data/spec/cucumber/cli/rerun_spec.rb +0 -86
  474. data/spec/cucumber/configuration_spec.rb +0 -148
  475. data/spec/cucumber/constantize_spec.rb +0 -20
  476. data/spec/cucumber/events_spec.rb +0 -9
  477. data/spec/cucumber/file_specs_spec.rb +0 -61
  478. data/spec/cucumber/filters/activate_steps_spec.rb +0 -152
  479. data/spec/cucumber/filters/gated_receiver_spec.rb +0 -48
  480. data/spec/cucumber/filters/retry_spec.rb +0 -98
  481. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -39
  482. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -58
  483. data/spec/cucumber/filters/tag_limits_spec.rb +0 -60
  484. data/spec/cucumber/formatter/ansicolor_spec.rb +0 -33
  485. data/spec/cucumber/formatter/backtrace_filter_spec.rb +0 -32
  486. data/spec/cucumber/formatter/console_counts_spec.rb +0 -14
  487. data/spec/cucumber/formatter/duration_spec.rb +0 -23
  488. data/spec/cucumber/formatter/fail_fast_spec.rb +0 -88
  489. data/spec/cucumber/formatter/html_spec.rb +0 -543
  490. data/spec/cucumber/formatter/interceptor_spec.rb +0 -137
  491. data/spec/cucumber/formatter/json_spec.rb +0 -815
  492. data/spec/cucumber/formatter/junit_spec.rb +0 -251
  493. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2175
  494. data/spec/cucumber/formatter/pretty_spec.rb +0 -907
  495. data/spec/cucumber/formatter/progress_spec.rb +0 -170
  496. data/spec/cucumber/formatter/rerun_spec.rb +0 -97
  497. data/spec/cucumber/formatter/spec_helper.rb +0 -84
  498. data/spec/cucumber/glue/proto_world_spec.rb +0 -63
  499. data/spec/cucumber/glue/registry_and_more_spec.rb +0 -213
  500. data/spec/cucumber/glue/snippet_spec.rb +0 -174
  501. data/spec/cucumber/glue/step_definition_spec.rb +0 -207
  502. data/spec/cucumber/hooks_spec.rb +0 -31
  503. data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -653
  504. data/spec/cucumber/project_initializer_spec.rb +0 -88
  505. data/spec/cucumber/rake/forked_spec.rb +0 -58
  506. data/spec/cucumber/rake/task_spec.rb +0 -86
  507. data/spec/cucumber/running_test_case_spec.rb +0 -140
  508. data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -8
  509. data/spec/cucumber/runtime/support_code_spec.rb +0 -17
  510. data/spec/cucumber/runtime_spec.rb +0 -21
  511. data/spec/cucumber/sell_cucumbers.feature +0 -19
  512. data/spec/cucumber/step_argument_spec.rb +0 -19
  513. data/spec/cucumber/step_match_search_spec.rb +0 -113
  514. data/spec/cucumber/step_match_spec.rb +0 -86
  515. data/spec/cucumber/world/pending_spec.rb +0 -48
  516. data/spec/spec_helper.rb +0 -30
  517. data/spec/support/standard_step_actions.rb +0 -19
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
- desc 'Run flog over significant files'
3
- task :flog do
4
- sh 'find lib/cucumber -name \\*.rb | grep -v parser/feature\\.rb | xargs flog'
5
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'rspec/core/rake_task'
3
-
4
- desc 'Run RSpec'
5
- RSpec::Core::RakeTask.new do |t|
6
- t.verbose = true
7
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
- desc 'Generate the css for the html formatter from sass'
3
- task :sass do
4
- sh 'sass -t expanded lib/cucumber/formatter/cucumber.sass > lib/cucumber/formatter/cucumber.css'
5
- end
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env sh
2
-
3
- echo 'Commits'
4
- git log --pretty=format:'' | wc -l
5
-
6
- echo 'Contributors'
7
- git log --pretty=short --no-merges | git shortlog -ne | egrep -ve '^ +' | egrep -ve '^$' | wc -l
8
-
9
- echo 'Resolved bugs/feature requests'
10
- egrep -e '^\*' History.md | wc -l
11
-
12
- echo 'Open tickets'
13
- curl -s https://api.github.com/repos/cucumber/cucumber/issues?state=open | ruby -e "require 'multi_json'; puts MultiJson.load(STDIN.read).length"
14
-
15
- echo 'Group members'
16
- curl -s http://groups.google.com/group/cukes | grep Members
@@ -1,74 +0,0 @@
1
- 0.10.2
2
- 0.10.1
3
- 0.10.0
4
- 0.9.4
5
- 0.9.3
6
- 0.9.2
7
- 0.9.1
8
- 0.9.0
9
- 0.8.5
10
- 0.8.4
11
- 0.8.3
12
- 0.8.2
13
- 0.8.1
14
- 0.8.0
15
- 0.7.3
16
- 0.7.2
17
- 0.7.1
18
- 0.7.0
19
- 0.6.4
20
- 0.6.3
21
- 0.6.2
22
- 0.6.1
23
- 0.6.0
24
- 0.5.3
25
- 0.5.2
26
- 0.5.1
27
- 0.5.0
28
- 0.4.4
29
- 0.4.3
30
- 0.4.2
31
- 0.4.1
32
- 0.4.0
33
- 0.3.104
34
- 0.3.103
35
- 0.3.102
36
- 0.3.101
37
- 0.3.100
38
- 0.3.99
39
- 0.3.98
40
- 0.3.97
41
- 0.3.96
42
- 0.3.95
43
- 0.3.94
44
- 0.3.93
45
- 0.3.92
46
- 0.3.91
47
- 0.3.90
48
- 0.3.11
49
- 0.3.10
50
- 0.3.9
51
- 0.3.8
52
- 0.3.7
53
- 0.3.6
54
- 0.3.5
55
- 0.3.4
56
- 0.3.3
57
- 0.3.2
58
- 0.3.1
59
- 0.3.0
60
- 0.2.3
61
- 0.2.2
62
- 0.2.1
63
- 0.2.0
64
- 0.1.16
65
- 0.1.15
66
- 0.1.14
67
- 0.1.13
68
- 0.1.12
69
- 0.1.11
70
- 0.1.10
71
- 0.1.9
72
- 0.1.8
73
- 0.1.7
74
- 0.1.6
@@ -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,86 +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
- username = pr['user']['login']
15
- url = pr['html_url']
16
- title = pr['title']
17
- "#{title} ([##{num}](#{url}) [@#{username}](https://github.com/#{username}))"
18
- end
19
-
20
- def labels
21
- gh.labels_for_issue('cucumber/cucumber-ruby', num).map { |label| label['name'] }
22
- end
23
-
24
- def type_label
25
- types = labels.select { |label| label =~ /^type: / }
26
- if types.empty?
27
- raise('This pull request does not have a \'type\' label on it. Please add one.')
28
- end
29
-
30
- if types.length > 1
31
- raise('This pull request has more than one \'type\' label on it. Please choose just one.')
32
- end
33
-
34
- types.first
35
- end
36
- end
37
-
38
- class Changelog
39
- def self.open(path, &block)
40
- full_path = File.expand_path(File.dirname(__FILE__) + '/' + path + '/CHANGELOG.md')
41
- log = new(File.read(full_path))
42
- log.instance_exec(&block)
43
- File.write(full_path, log.body)
44
- end
45
-
46
- attr_reader :lines
47
-
48
- def initialize(body)
49
- @lines = body.lines
50
- end
51
-
52
- def insert(label, entry)
53
- section_index = lines.index { |line| line.strip == heading_for(label) }
54
- unless section_index
55
- raise("Unable to find matching heading in CHANGELOG.md for '#{label}' (#{heading_for(label)})")
56
- end
57
- lines.insert(section_index + 2, "* #{entry}\n")
58
- end
59
-
60
- def heading_for(label)
61
- text = {
62
- 'type: new feature' => 'Added',
63
- 'type: bug' => 'Fixed',
64
- 'type: refactoring / developer experience' => 'Changed'
65
- }.fetch(label)
66
- "### #{text}"
67
- end
68
-
69
- def body
70
- lines.join
71
- end
72
- end
73
-
74
- begin
75
- token = ENV['GITHUB_TOKEN'] || raise('You need to set GITHUB_TOKEN')
76
- num = (ARGV[0] || raise("syntax: #{$0} <PULL-REQUEST-NUMBER>")).to_i
77
-
78
- gh = Octokit::Client.new(access_token: token)
79
- pr = PullRequest.new(gh, num)
80
-
81
- Changelog.open('..') do
82
- insert(pr.type_label, pr.entry)
83
- end
84
- rescue StandardError => error
85
- abort error.message
86
- end
@@ -1,446 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'yaml'
4
-
5
- module Cucumber
6
- module Cli
7
- describe Configuration do
8
- module ExposesOptions
9
- attr_reader :options
10
- end
11
-
12
- def given_cucumber_yml_defined_as(hash_or_string)
13
- allow(File).to receive(:exist?) { true }
14
-
15
- cucumber_yml = hash_or_string.is_a?(Hash) ? hash_or_string.to_yaml : hash_or_string
16
-
17
- allow(IO).to receive(:read).with('cucumber.yml') { cucumber_yml }
18
- end
19
-
20
- def given_the_following_files(*files)
21
- allow(File).to receive(:directory?) { true }
22
- allow(File).to receive(:file?) { true }
23
- allow(Dir).to receive(:[]) { files }
24
- end
25
-
26
- before(:each) do
27
- allow(File).to receive(:exist?) { false } # Meaning, no cucumber.yml exists
28
- allow(Kernel).to receive(:exit)
29
- end
30
-
31
- def config
32
- @config ||= Configuration.new(@out = StringIO.new, @error = StringIO.new).extend(ExposesOptions)
33
- end
34
-
35
- def reset_config
36
- @config = nil
37
- end
38
-
39
- attr_reader :out, :error
40
-
41
- it 'uses the default profile when no profile is defined' do
42
- given_cucumber_yml_defined_as({'default' => '--require some_file'})
43
-
44
- config.parse!(%w{--format progress})
45
-
46
- expect(config.options[:require]).to include('some_file')
47
- end
48
-
49
- context '--profile' do
50
- include RSpec::WorkInProgress
51
-
52
- it 'expands args from profiles in the cucumber.yml file' do
53
- given_cucumber_yml_defined_as({'bongo' => '--require from/yml'})
54
-
55
- config.parse!(%w{--format progress --profile bongo})
56
-
57
- expect(config.options[:formats]).to eq [['progress', {}, out]]
58
- expect(config.options[:require]).to eq ['from/yml']
59
- end
60
-
61
- it 'expands args from the default profile when no flags are provided' do
62
- given_cucumber_yml_defined_as({'default' => '--require from/yml'})
63
-
64
- config.parse!([])
65
-
66
- expect(config.options[:require]).to eq ['from/yml']
67
- end
68
-
69
- it 'allows --strict to be set by a profile' do
70
- given_cucumber_yml_defined_as({'bongo' => '--strict'})
71
-
72
- config.parse!(%w{--profile bongo})
73
-
74
- expect(config.options[:strict].strict?(:undefined)).to be true
75
- expect(config.options[:strict].strict?(:pending)).to be true
76
- expect(config.options[:strict].strict?(:flaky)).to be true
77
- end
78
-
79
- it 'allows --strict from a profile to be selectively overridden' do
80
- given_cucumber_yml_defined_as({'bongo' => '--strict'})
81
-
82
- config.parse!(%w{--profile bongo --no-strict-flaky})
83
-
84
- expect(config.options[:strict].strict?(:undefined)).to be true
85
- expect(config.options[:strict].strict?(:pending)).to be true
86
- expect(config.options[:strict].strict?(:flaky)).to be false
87
- end
88
-
89
- it 'parses ERB syntax in the cucumber.yml file' do
90
- given_cucumber_yml_defined_as("---\ndefault: \"<%=\"--require some_file\"%>\"\n")
91
-
92
- config.parse!([])
93
-
94
- expect(config.options[:require]).to include('some_file')
95
- end
96
-
97
- it 'parses ERB in cucumber.yml that makes uses nested ERB sessions' do
98
- given_cucumber_yml_defined_as(<<ERB_YML)
99
- <%= ERB.new({'standard' => '--require some_file'}.to_yaml).result %>
100
- <%= ERB.new({'enhanced' => '--require other_file'}.to_yaml).result %>
101
- ERB_YML
102
-
103
- config.parse!(%w(-p standard))
104
-
105
- expect(config.options[:require]).to include('some_file')
106
- end
107
-
108
- it 'provides a helpful error message when a specified profile does not exists in cucumber.yml' do
109
- given_cucumber_yml_defined_as({'default' => '--require from/yml', 'html_report' => '--format html'})
110
-
111
- expected_message = <<-END_OF_MESSAGE
112
- Could not find profile: 'i_do_not_exist'
113
-
114
- Defined profiles in cucumber.yml:
115
- * default
116
- * html_report
117
- END_OF_MESSAGE
118
-
119
- expect(-> { config.parse!(%w{--profile i_do_not_exist}) }).to raise_error(ProfileNotFound, expected_message)
120
- end
121
-
122
- it 'allows profiles to be defined in arrays' do
123
- given_cucumber_yml_defined_as({'foo' => ['-f','progress']})
124
-
125
- config.parse!(%w{--profile foo})
126
-
127
- expect(config.options[:formats]).to eq [['progress', {}, out]]
128
- end
129
-
130
- it 'disregards default STDOUT formatter defined in profile when another is passed in (via cmd line)' do
131
- given_cucumber_yml_defined_as({'foo' => %w[--format pretty]})
132
- config.parse!(%w{--format progress --profile foo})
133
-
134
- expect(config.options[:formats]).to eq [['progress', {}, out]]
135
- end
136
-
137
- ['--no-profile', '-P'].each do |flag|
138
- context 'when none is specified with #{flag}' do
139
- it 'disables profiles' do
140
- given_cucumber_yml_defined_as({'default' => '-v --require file_specified_in_default_profile.rb'})
141
-
142
- config.parse!("#{flag} --require some_file.rb".split(' '))
143
-
144
- expect(config.options[:require]).to eq ['some_file.rb']
145
- end
146
-
147
- it 'notifies the user that the profiles are being disabled' do
148
- given_cucumber_yml_defined_as({'default' => '-v'})
149
-
150
- config.parse!("#{flag} --require some_file.rb".split(' '))
151
-
152
- expect(out.string).to match(/Disabling profiles.../)
153
- end
154
- end
155
- end
156
-
157
- it 'issues a helpful error message when a specified profile exists but is nil or blank' do
158
- [nil, ' '].each do |bad_input|
159
- given_cucumber_yml_defined_as({'foo' => bad_input})
160
-
161
- expected_error = /The 'foo' profile in cucumber.yml was blank. Please define the command line arguments for the 'foo' profile in cucumber.yml./
162
-
163
- expect(-> { config.parse!(%w{--profile foo}) }).to raise_error(expected_error)
164
- end
165
- end
166
-
167
- it 'issues a helpful error message when no YAML file exists and a profile is specified' do
168
- expect(File).to receive(:exist?).with('cucumber.yml') { false }
169
-
170
- expected_error = /cucumber\.yml was not found/
171
-
172
- expect(-> { config.parse!(%w{--profile i_do_not_exist}) }).to raise_error(expected_error)
173
- end
174
-
175
- it 'issues a helpful error message when cucumber.yml is blank or malformed' do
176
- expected_error_message = /cucumber\.yml was found, but was blank or malformed. Please refer to cucumber's documentation on correct profile usage./
177
-
178
- ['', 'sfsadfs', "--- \n- an\n- array\n", '---dddfd'].each do |bad_input|
179
- given_cucumber_yml_defined_as(bad_input)
180
-
181
- expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
182
-
183
- reset_config
184
- end
185
- end
186
-
187
- it 'issues a helpful error message when cucumber.yml can not be parsed' do
188
- expected_error_message = /cucumber.yml was found, but could not be parsed. Please refer to cucumber's documentation on correct profile usage./
189
-
190
- given_cucumber_yml_defined_as('input that causes an exception in YAML loading')
191
-
192
- expect(YAML).to receive(:load).and_raise(ArgumentError)
193
- expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
194
- end
195
-
196
- it 'issues a helpful error message when cucumber.yml can not be parsed by ERB' do
197
- expected_error_message = /cucumber.yml was found, but could not be parsed with ERB. Please refer to cucumber's documentation on correct profile usage./
198
- given_cucumber_yml_defined_as('<% this_fails %>')
199
-
200
- expect(-> { config.parse!([]) }).to raise_error(expected_error_message)
201
- end
202
- end
203
-
204
- it 'accepts --dry-run option' do
205
- config.parse!(%w{--dry-run})
206
-
207
- expect(config.options[:dry_run]).to be true
208
- end
209
-
210
- it 'implies --no-duration with --dry-run option' do
211
- config.parse!(%w{--dry-run})
212
-
213
- expect(config.options[:duration]).to be false
214
- end
215
-
216
- it 'accepts --no-source option' do
217
- config.parse!(%w{--no-source})
218
-
219
- expect(config.options[:source]).to be false
220
- end
221
-
222
- it 'accepts --no-snippets option' do
223
- config.parse!(%w{--no-snippets})
224
-
225
- expect(config.options[:snippets]).to be false
226
- end
227
-
228
- it 'sets snippets and source and duration to false with --quiet option' do
229
- config.parse!(%w{--quiet})
230
-
231
- expect(config.options[:snippets]).to be false
232
- expect(config.options[:source]).to be false
233
- expect(config.options[:duration]).to be false
234
- end
235
-
236
- it 'sets duration to false with --no-duration' do
237
- config.parse!(%w{--no-duration})
238
-
239
- expect(config.options[:duration]).to be false
240
- end
241
-
242
- it 'accepts --verbose option' do
243
- config.parse!(%w{--verbose})
244
-
245
- expect(config.options[:verbose]).to be true
246
- end
247
-
248
- it 'accepts --out option' do
249
- config.parse!(%w{--out jalla.txt})
250
-
251
- expect(config.formats).to eq [['pretty', {}, 'jalla.txt']]
252
- end
253
-
254
- it 'accepts multiple --out options' do
255
- config.parse!(%w{--format progress --out file1 --out file2})
256
-
257
- expect(config.formats).to eq [['progress', {}, 'file2']]
258
- end
259
-
260
- it 'accepts multiple --format options and put the STDOUT one first so progress is seen' do
261
- config.parse!(%w{--format pretty --out pretty.txt --format progress})
262
-
263
- expect(config.formats).to eq [['progress', {}, out], ['pretty', {}, 'pretty.txt']]
264
- end
265
-
266
- it 'does not accept multiple --format options when both use implicit STDOUT' do
267
- expect(-> { config.parse!(%w{--format pretty --format progress}) }).to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
268
- end
269
-
270
- it 'does not accept multiple --format options when both use implicit STDOUT (using profile with no formatters)' do
271
- given_cucumber_yml_defined_as({'default' => ['-q']})
272
- expect(-> { config.parse!(%w{--format pretty --format progress}) }).to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
273
- end
274
-
275
- it 'accepts same --format options with implicit STDOUT, and keep only one' do
276
- config.parse!(%w{--format pretty --format pretty})
277
-
278
- expect(config.formats).to eq [['pretty', {}, out]]
279
- end
280
-
281
- it 'does not accept multiple --out streams pointing to the same place' do
282
- expect(-> { config.parse!(%w{--format pretty --out file1 --format progress --out file1}) }).to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
283
- end
284
-
285
- it 'does not accept multiple --out streams pointing to the same place (one from profile, one from command line)' do
286
- given_cucumber_yml_defined_as({'default' => ['-f','progress', '--out', 'file1']})
287
- expect(-> { config.parse!(%w{--format pretty --out file1}) }).to raise_error('All but one formatter must use --out, only one can print to each stream (or STDOUT)')
288
- end
289
-
290
- it 'associates --out to previous --format' do
291
- config.parse!(%w{--format progress --out file1 --format profile --out file2})
292
-
293
- expect(config.formats).to eq [['progress', {}, 'file1'], ['profile', {}, 'file2']]
294
- end
295
-
296
- it 'accepts same --format options with same --out streams and keep only one' do
297
- config.parse!(%w{--format html --out file --format pretty --format html --out file})
298
-
299
- expect(config.formats).to eq [['pretty', {}, out], ['html', {}, 'file']]
300
- end
301
-
302
- it 'accepts same --format options with different --out streams' do
303
- config.parse!(%w{--format html --out file1 --format html --out file2})
304
-
305
- expect(config.formats).to eq [['html', {}, 'file1'], ['html', {}, 'file2']]
306
- end
307
-
308
- it 'accepts --color option' do
309
- expect(Cucumber::Term::ANSIColor).to receive(:coloring=).with(true)
310
-
311
- config.parse!(['--color'])
312
- end
313
-
314
- it 'accepts --no-color option' do
315
- expect(Cucumber::Term::ANSIColor).to receive(:coloring=).with(false)
316
-
317
- config = Configuration.new(StringIO.new)
318
- config.parse!(['--no-color'])
319
- end
320
-
321
- describe '--backtrace' do
322
- before do
323
- Cucumber.use_full_backtrace = false
324
- end
325
-
326
- it 'shows full backtrace when --backtrace is present' do
327
- Main.new(['--backtrace'])
328
- begin
329
- expect('x').to eq 'y'
330
- rescue RSpec::Expectations::ExpectationNotMetError => e
331
- expect(e.backtrace[0]).not_to eq "#{__FILE__}:#{__LINE__ - 2}"
332
- end
333
- end
334
-
335
- after do
336
- Cucumber.use_full_backtrace = false
337
- end
338
- end
339
-
340
- it 'accepts multiple --name options' do
341
- config.parse!(['--name', 'User logs in', '--name', 'User signs up'])
342
-
343
- expect(config.options[:name_regexps]).to include(/User logs in/)
344
- expect(config.options[:name_regexps]).to include(/User signs up/)
345
- end
346
-
347
- it 'accepts multiple -n options' do
348
- config.parse!(['-n', 'User logs in', '-n', 'User signs up'])
349
-
350
- expect(config.options[:name_regexps]).to include(/User logs in/)
351
- expect(config.options[:name_regexps]).to include(/User signs up/)
352
- end
353
-
354
- it 'should allow specifying environment variables on the command line' do
355
- config.parse!(['foo=bar'])
356
-
357
- expect(ENV['foo']).to eq 'bar'
358
- expect(config.paths).not_to include('foo=bar')
359
- end
360
-
361
- it 'allows specifying environment variables in profiles' do
362
- given_cucumber_yml_defined_as({'selenium' => 'RAILS_ENV=selenium'})
363
- config.parse!(['--profile', 'selenium'])
364
-
365
- expect(ENV['RAILS_ENV']).to eq 'selenium'
366
- expect(config.paths).not_to include('RAILS_ENV=selenium')
367
- end
368
-
369
- describe '#tag_expressions' do
370
- it 'returns an empty expression when no tags are specified' do
371
- config.parse!([])
372
-
373
- expect(config.tag_expressions).to be_empty
374
- end
375
-
376
- it 'returns an expression when tags are specified' do
377
- config.parse!(['--tags','@foo'])
378
-
379
- expect(config.tag_expressions).not_to be_empty
380
- end
381
- end
382
-
383
- describe '#tag_limits' do
384
- it 'returns an empty hash when no limits are specified' do
385
- config.parse!([])
386
-
387
- expect(config.tag_limits).to eq({ })
388
- end
389
-
390
- it 'returns a hash of limits when limits are specified' do
391
- config.parse!(['--tags','@foo:1'])
392
-
393
- expect(config.tag_limits).to eq({ '@foo' => 1 })
394
- end
395
- end
396
-
397
- describe '#dry_run?' do
398
- it 'returns true when --dry-run was specified on in the arguments' do
399
- config.parse!(['--dry-run'])
400
-
401
- expect(config.dry_run?).to be true
402
- end
403
-
404
- it 'returns true when --dry-run was specified in yaml file' do
405
- given_cucumber_yml_defined_as({'default' => '--dry-run'})
406
- config.parse!([])
407
-
408
- expect(config.dry_run?).to be true
409
- end
410
-
411
- it 'returns false by default' do
412
- config.parse!([])
413
-
414
- expect(config.dry_run?).to be false
415
- end
416
- end
417
-
418
- describe '#snippet_type' do
419
- it 'returns the snippet type when it was set' do
420
- config.parse!(['--snippet-type', 'classic'])
421
-
422
- expect(config.snippet_type).to eq :classic
423
- end
424
-
425
- it 'returns the snippet type when it was set with shorthand option' do
426
- config.parse!(['-I', 'classic'])
427
-
428
- expect(config.snippet_type).to eq :classic
429
- end
430
-
431
- it 'returns the default snippet type if it was not set' do
432
- config.parse!([])
433
-
434
- expect(config.snippet_type).to eq :cucumber_expression
435
- end
436
- end
437
-
438
- describe '#retry_attempts' do
439
- it 'returns the specified number of retries' do
440
- config.parse!(['--retry=3'])
441
- expect(config.retry_attempts).to eql 3
442
- end
443
- end
444
- end
445
- end
446
- end