cucumber 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +53 -3
  3. data/CONTRIBUTING.md +2 -4
  4. data/README.md +6 -5
  5. data/lib/cucumber/cli/options.rb +3 -1
  6. data/lib/cucumber/errors.rb +1 -1
  7. data/lib/cucumber/events/test_step_finished.rb +0 -2
  8. data/lib/cucumber/events/test_step_started.rb +0 -2
  9. data/lib/cucumber/events.rb +0 -1
  10. data/lib/cucumber/filters/quit.rb +0 -1
  11. data/lib/cucumber/formatter/html.rb +1 -1
  12. data/lib/cucumber/formatter/html_builder.rb +1 -1
  13. data/lib/cucumber/formatter/ignore_missing_messages.rb +0 -1
  14. data/lib/cucumber/formatter/json.rb +1 -1
  15. data/lib/cucumber/formatter/json_pretty.rb +0 -1
  16. data/lib/cucumber/formatter/junit.rb +6 -2
  17. data/lib/cucumber/formatter/rerun.rb +1 -1
  18. data/lib/cucumber/formatter/summary.rb +0 -1
  19. data/lib/cucumber/glue/dsl.rb +6 -2
  20. data/lib/cucumber/glue/proto_world.rb +2 -0
  21. data/lib/cucumber/glue/step_definition.rb +1 -1
  22. data/lib/cucumber/glue/world_factory.rb +1 -1
  23. data/lib/cucumber/hooks.rb +12 -0
  24. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +0 -1
  25. data/lib/cucumber/multiline_argument/data_table.rb +6 -10
  26. data/lib/cucumber/multiline_argument.rb +1 -1
  27. data/lib/cucumber/step_definitions.rb +1 -1
  28. data/lib/cucumber/step_match.rb +4 -1
  29. data/lib/cucumber/step_match_search.rb +1 -1
  30. data/lib/cucumber/version +1 -1
  31. metadata +32 -571
  32. data/.coveralls.yml +0 -1
  33. data/.cucumberproignore +0 -6
  34. data/.gitattributes +0 -32
  35. data/.github/ISSUE_TEMPLATE.md +0 -48
  36. data/.github/PULL_REQUEST_TEMPLATE.md +0 -40
  37. data/.rspec +0 -1
  38. data/.rubocop.yml +0 -13
  39. data/.rubocop_todo.yml +0 -991
  40. data/.ruby-gemset +0 -1
  41. data/.travis.yml +0 -69
  42. data/.yardopts +0 -1
  43. data/Gemfile +0 -28
  44. data/Rakefile +0 -32
  45. data/appveyor.yml +0 -27
  46. data/cucumber.gemspec +0 -52
  47. data/cucumber.yml +0 -19
  48. data/examples/i18n/README.textile +0 -3
  49. data/examples/i18n/Rakefile +0 -33
  50. data/examples/i18n/ar/Rakefile +0 -6
  51. data/examples/i18n/ar/features/addition.feature +0 -17
  52. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -29
  53. data/examples/i18n/ar/lib/calculator.rb +0 -11
  54. data/examples/i18n/bg/Rakefile +0 -6
  55. data/examples/i18n/bg/features/addition.feature +0 -12
  56. data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
  57. data/examples/i18n/bg/features/division.feature +0 -17
  58. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
  59. data/examples/i18n/bg/features/support/env.rb +0 -10
  60. data/examples/i18n/bg/features/support/world.rb +0 -8
  61. data/examples/i18n/bg/lib/calculator.rb +0 -25
  62. data/examples/i18n/ca/Rakefile +0 -6
  63. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -26
  64. data/examples/i18n/ca/features/suma.feature +0 -17
  65. data/examples/i18n/ca/lib/calculadora.rb +0 -16
  66. data/examples/i18n/cs/Rakefile +0 -6
  67. data/examples/i18n/cs/features/addition.feature +0 -17
  68. data/examples/i18n/cs/features/division.feature +0 -11
  69. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -29
  70. data/examples/i18n/cs/lib/calculator.rb +0 -14
  71. data/examples/i18n/da/Rakefile +0 -6
  72. data/examples/i18n/da/features/sammenlaegning.feature +0 -18
  73. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -29
  74. data/examples/i18n/da/lib/lommeregner.rb +0 -11
  75. data/examples/i18n/de/Rakefile +0 -6
  76. data/examples/i18n/de/features/addition.feature +0 -17
  77. data/examples/i18n/de/features/division.feature +0 -10
  78. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -29
  79. data/examples/i18n/de/lib/calculator.rb +0 -14
  80. data/examples/i18n/el/Rakefile +0 -6
  81. data/examples/i18n/el/features/addition.feature +0 -17
  82. data/examples/i18n/el/features/division.feature +0 -10
  83. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -29
  84. data/examples/i18n/el/lib/calculator.rb +0 -14
  85. data/examples/i18n/en/Rakefile +0 -6
  86. data/examples/i18n/en/features/addition.feature +0 -17
  87. data/examples/i18n/en/features/division.feature +0 -10
  88. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -29
  89. data/examples/i18n/en/lib/calculator.rb +0 -14
  90. data/examples/i18n/en-lol/Rakefile +0 -4
  91. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
  92. data/examples/i18n/en-lol/features/stuffing.feature +0 -8
  93. data/examples/i18n/en-lol/features/support/env.rb +0 -11
  94. data/examples/i18n/en-lol/lib/basket.rb +0 -12
  95. data/examples/i18n/en-lol/lib/belly.rb +0 -11
  96. data/examples/i18n/eo/Rakefile +0 -6
  97. data/examples/i18n/eo/features/adicio.feature +0 -17
  98. data/examples/i18n/eo/features/divido.feature +0 -10
  99. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -29
  100. data/examples/i18n/eo/lib/calculator.rb +0 -14
  101. data/examples/i18n/es/Rakefile +0 -6
  102. data/examples/i18n/es/features/adicion.feature +0 -17
  103. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -26
  104. data/examples/i18n/es/lib/calculador.rb +0 -14
  105. data/examples/i18n/et/Rakefile +0 -6
  106. data/examples/i18n/et/features/jagamine.feature +0 -10
  107. data/examples/i18n/et/features/liitmine.feature +0 -17
  108. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -29
  109. data/examples/i18n/et/lib/kalkulaator.rb +0 -14
  110. data/examples/i18n/fi/Rakefile +0 -6
  111. data/examples/i18n/fi/features/jakolasku.feature +0 -10
  112. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -29
  113. data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
  114. data/examples/i18n/fi/lib/laskin.rb +0 -14
  115. data/examples/i18n/fr/Rakefile +0 -8
  116. data/examples/i18n/fr/features/addition.feature +0 -18
  117. data/examples/i18n/fr/features/addition2.feature +0 -17
  118. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
  119. data/examples/i18n/fr/features/support/env.rb +0 -10
  120. data/examples/i18n/fr/lib/calculatrice.rb +0 -10
  121. data/examples/i18n/he/Rakefile +0 -6
  122. data/examples/i18n/he/features/addition.feature +0 -17
  123. data/examples/i18n/he/features/division.feature +0 -10
  124. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -29
  125. data/examples/i18n/he/lib/calculator.rb +0 -15
  126. data/examples/i18n/hi/Rakefile +0 -6
  127. data/examples/i18n/hi/features/addition.feature +0 -16
  128. data/examples/i18n/hi/features/division.feature +0 -10
  129. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -29
  130. data/examples/i18n/hi/lib/calculator.rb +0 -15
  131. data/examples/i18n/ht/Rakefile +0 -6
  132. data/examples/i18n/ht/features/adisyon.feature +0 -17
  133. data/examples/i18n/ht/features/divizyon.feature +0 -10
  134. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +0 -29
  135. data/examples/i18n/ht/lib/kalkilatris.rb +0 -14
  136. data/examples/i18n/hu/Rakefile +0 -6
  137. data/examples/i18n/hu/features/osszeadas.feature +0 -17
  138. data/examples/i18n/hu/features/osztas.feature +0 -10
  139. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -30
  140. data/examples/i18n/hu/lib/calculator.rb +0 -14
  141. data/examples/i18n/id/Rakefile +0 -6
  142. data/examples/i18n/id/features/addition.feature +0 -17
  143. data/examples/i18n/id/features/division.feature +0 -10
  144. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -29
  145. data/examples/i18n/id/lib/calculator.rb +0 -14
  146. data/examples/i18n/it/Rakefile +0 -6
  147. data/examples/i18n/it/features/somma.feature +0 -11
  148. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -29
  149. data/examples/i18n/it/lib/calcolatrice.rb +0 -11
  150. data/examples/i18n/ja/Rakefile +0 -6
  151. data/examples/i18n/ja/features/addition.feature +0 -17
  152. data/examples/i18n/ja/features/division.feature +0 -10
  153. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
  154. data/examples/i18n/ja/features/support/env.rb +0 -10
  155. data/examples/i18n/ja/lib/calculator.rb +0 -14
  156. data/examples/i18n/ko/Rakefile +0 -6
  157. data/examples/i18n/ko/features/addition.feature +0 -17
  158. data/examples/i18n/ko/features/division.feature +0 -11
  159. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -29
  160. data/examples/i18n/ko/lib/calculator.rb +0 -14
  161. data/examples/i18n/lt/Rakefile +0 -6
  162. data/examples/i18n/lt/features/addition.feature +0 -17
  163. data/examples/i18n/lt/features/division.feature +0 -10
  164. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -29
  165. data/examples/i18n/lt/lib/calculator.rb +0 -14
  166. data/examples/i18n/lv/Rakefile +0 -6
  167. data/examples/i18n/lv/features/addition.feature +0 -17
  168. data/examples/i18n/lv/features/division.feature +0 -10
  169. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -29
  170. data/examples/i18n/lv/lib/calculator.rb +0 -14
  171. data/examples/i18n/no/Rakefile +0 -6
  172. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
  173. data/examples/i18n/no/features/summering.feature +0 -19
  174. data/examples/i18n/no/features/support/env.rb +0 -11
  175. data/examples/i18n/no/lib/kalkulator.rb +0 -11
  176. data/examples/i18n/pl/Rakefile +0 -6
  177. data/examples/i18n/pl/features/addition.feature +0 -17
  178. data/examples/i18n/pl/features/division.feature +0 -10
  179. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -29
  180. data/examples/i18n/pl/features/support/env.rb +0 -10
  181. data/examples/i18n/pl/lib/calculator.rb +0 -14
  182. data/examples/i18n/pt/Rakefile +0 -6
  183. data/examples/i18n/pt/features/adicao.feature +0 -11
  184. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
  185. data/examples/i18n/pt/features/support/env.rb +0 -10
  186. data/examples/i18n/pt/lib/calculadora.rb +0 -10
  187. data/examples/i18n/ro/Rakefile +0 -6
  188. data/examples/i18n/ro/features/adunare.feature +0 -12
  189. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -26
  190. data/examples/i18n/ro/lib/calculator.rb +0 -11
  191. data/examples/i18n/ru/Rakefile +0 -6
  192. data/examples/i18n/ru/features/addition.feature +0 -11
  193. data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
  194. data/examples/i18n/ru/features/division.feature +0 -16
  195. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
  196. data/examples/i18n/ru/features/support/env.rb +0 -10
  197. data/examples/i18n/ru/features/support/world.rb +0 -8
  198. data/examples/i18n/ru/lib/calculator.rb +0 -25
  199. data/examples/i18n/sk/Rakefile +0 -6
  200. data/examples/i18n/sk/features/addition.feature +0 -17
  201. data/examples/i18n/sk/features/division.feature +0 -10
  202. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -29
  203. data/examples/i18n/sk/lib/calculator.rb +0 -14
  204. data/examples/i18n/sr-Cyrl/Rakefile +0 -6
  205. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
  206. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
  207. data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -10
  208. data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
  209. data/examples/i18n/sr-Latn/Rakefile +0 -6
  210. data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
  211. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -29
  212. data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
  213. data/examples/i18n/sv/Rakefile +0 -6
  214. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -29
  215. data/examples/i18n/sv/features/summering.feature +0 -18
  216. data/examples/i18n/sv/lib/kalkulator.rb +0 -11
  217. data/examples/i18n/tr/Rakefile +0 -6
  218. data/examples/i18n/tr/features/bolme.feature +0 -10
  219. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -29
  220. data/examples/i18n/tr/features/toplama.feature +0 -18
  221. data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
  222. data/examples/i18n/uk/Rakefile +0 -6
  223. data/examples/i18n/uk/features/addition.feature +0 -11
  224. data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
  225. data/examples/i18n/uk/features/division.feature +0 -16
  226. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
  227. data/examples/i18n/uk/features/support/env.rb +0 -10
  228. data/examples/i18n/uk/features/support/world.rb +0 -8
  229. data/examples/i18n/uk/lib/calculator.rb +0 -25
  230. data/examples/i18n/uz/Rakefile +0 -6
  231. data/examples/i18n/uz/features/addition.feature +0 -10
  232. data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
  233. data/examples/i18n/uz/features/division.feature +0 -17
  234. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
  235. data/examples/i18n/uz/features/support/env.rb +0 -10
  236. data/examples/i18n/uz/features/support/world.rb +0 -8
  237. data/examples/i18n/uz/lib/calculator.rb +0 -25
  238. data/examples/i18n/zh-CN/Rakefile +0 -4
  239. data/examples/i18n/zh-CN/features/addition.feature +0 -18
  240. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -31
  241. data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
  242. data/examples/i18n/zh-TW/Rakefile +0 -4
  243. data/examples/i18n/zh-TW/features/addition.feature +0 -17
  244. data/examples/i18n/zh-TW/features/division.feature +0 -11
  245. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -29
  246. data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
  247. data/examples/rspec_doubles/Rakefile +0 -4
  248. data/examples/rspec_doubles/features/mocking.feature +0 -9
  249. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
  250. data/examples/rspec_doubles/features/support/env.rb +0 -12
  251. data/examples/sinatra/README.textile +0 -13
  252. data/examples/sinatra/Rakefile +0 -6
  253. data/examples/sinatra/app.rb +0 -14
  254. data/examples/sinatra/features/add.feature +0 -11
  255. data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
  256. data/examples/sinatra/features/support/env.rb +0 -15
  257. data/examples/sinatra/views/add.erb +0 -7
  258. data/examples/sinatra/views/layout.erb +0 -8
  259. data/examples/tcl/README.textile +0 -11
  260. data/examples/tcl/Rakefile +0 -6
  261. data/examples/tcl/features/fibonnacci.feature +0 -17
  262. data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
  263. data/examples/tcl/features/support/env.rb +0 -7
  264. data/examples/tcl/src/fib.tcl +0 -3
  265. data/examples/test_unit/Gemfile +0 -4
  266. data/examples/test_unit/Rakefile +0 -6
  267. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
  268. data/examples/test_unit/features/test_unit.feature +0 -9
  269. data/examples/watir/README.textile +0 -16
  270. data/examples/watir/Rakefile +0 -12
  271. data/examples/watir/cucumber.yml +0 -1
  272. data/examples/watir/features/search.feature +0 -12
  273. data/examples/watir/features/step_definitions/search_steps.rb +0 -27
  274. data/examples/watir/features/support/env.rb +0 -39
  275. data/examples/watir/features/support/screenshots.rb +0 -47
  276. data/features/docs/api/list_step_defs_as_json.feature +0 -64
  277. data/features/docs/api/listen_for_events.feature +0 -59
  278. data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -27
  279. data/features/docs/cli/backtraces.feature +0 -36
  280. data/features/docs/cli/dry_run.feature +0 -73
  281. data/features/docs/cli/exclude_files.feature +0 -18
  282. data/features/docs/cli/execute_with_tag_filter.feature +0 -119
  283. data/features/docs/cli/fail_fast.feature +0 -48
  284. data/features/docs/cli/finding_steps.feature +0 -28
  285. data/features/docs/cli/help.feature +0 -8
  286. data/features/docs/cli/i18n.feature +0 -42
  287. data/features/docs/cli/randomize.feature +0 -140
  288. data/features/docs/cli/require.feature +0 -27
  289. data/features/docs/cli/retry_failing_tests.feature +0 -92
  290. data/features/docs/cli/run_scenarios_matching_name.feature +0 -105
  291. data/features/docs/cli/run_specific_scenarios.feature +0 -77
  292. data/features/docs/cli/showing_differences.feature +0 -43
  293. data/features/docs/cli/specifying_multiple_formatters.feature +0 -68
  294. data/features/docs/cli/strict_mode.feature +0 -70
  295. data/features/docs/defining_steps/ambiguous_steps.feature +0 -89
  296. data/features/docs/defining_steps/nested_steps.feature +0 -181
  297. data/features/docs/defining_steps/nested_steps_i18n.feature +0 -37
  298. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -56
  299. data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
  300. data/features/docs/defining_steps/printing_messages.feature +0 -147
  301. data/features/docs/defining_steps/skip_scenario.feature +0 -31
  302. data/features/docs/defining_steps/snippets.feature +0 -56
  303. data/features/docs/defining_steps/table_diffing.feature +0 -50
  304. data/features/docs/events/gherkin_source_read_event.feature +0 -43
  305. data/features/docs/events/step_activated_event.feature +0 -36
  306. data/features/docs/events/step_definition_registered_event.feature +0 -29
  307. data/features/docs/events/test_case_finished_event.feature +0 -35
  308. data/features/docs/events/test_case_started_event.feature +0 -54
  309. data/features/docs/events/test_run_finished_event.feature +0 -40
  310. data/features/docs/events/test_run_started_event.feature +0 -41
  311. data/features/docs/events/test_step_finished_event.feature +0 -47
  312. data/features/docs/events/test_step_started_event.feature +0 -43
  313. data/features/docs/exception_in_after_hook.feature +0 -127
  314. data/features/docs/exception_in_after_step_hook.feature +0 -104
  315. data/features/docs/exception_in_around_hook.feature +0 -80
  316. data/features/docs/exception_in_before_hook.feature +0 -98
  317. data/features/docs/extending_cucumber/custom_filter.feature +0 -29
  318. data/features/docs/extending_cucumber/custom_formatter.feature +0 -94
  319. data/features/docs/formatters/api_methods.feature +0 -37
  320. data/features/docs/formatters/html_formatter.feature +0 -91
  321. data/features/docs/formatters/json_formatter.feature +0 -767
  322. data/features/docs/formatters/junit_formatter.feature +0 -455
  323. data/features/docs/formatters/pretty_formatter.feature +0 -74
  324. data/features/docs/formatters/progress_formatter.feature +0 -32
  325. data/features/docs/formatters/rerun_formatter.feature +0 -190
  326. data/features/docs/formatters/summary_formatter.feature +0 -35
  327. data/features/docs/formatters/usage_formatter.feature +0 -101
  328. data/features/docs/getting_started.feature +0 -28
  329. data/features/docs/gherkin/background.feature +0 -548
  330. data/features/docs/gherkin/doc_strings.feature +0 -76
  331. data/features/docs/gherkin/expand_option_for_outlines.feature +0 -47
  332. data/features/docs/gherkin/language_from_header.feature +0 -32
  333. data/features/docs/gherkin/outlines.feature +0 -158
  334. data/features/docs/gherkin/unicode_table.feature +0 -33
  335. data/features/docs/gherkin/using_descriptions.feature +0 -83
  336. data/features/docs/gherkin/using_star_notation.feature +0 -37
  337. data/features/docs/iso-8859-1.feature +0 -6
  338. data/features/docs/post_configuration_hook.feature +0 -33
  339. data/features/docs/profiles.feature +0 -120
  340. data/features/docs/rake_task.feature +0 -146
  341. data/features/docs/raketask.feature +0 -46
  342. data/features/docs/work_in_progress.feature +0 -157
  343. data/features/docs/writing_support_code/after_hooks.feature +0 -102
  344. data/features/docs/writing_support_code/after_step_hooks.feature +0 -55
  345. data/features/docs/writing_support_code/around_hooks.feature +0 -266
  346. data/features/docs/writing_support_code/before_hook.feature +0 -66
  347. data/features/docs/writing_support_code/hook_order.feature +0 -63
  348. data/features/docs/writing_support_code/load_path.feature +0 -17
  349. data/features/docs/writing_support_code/parameter_types.feature +0 -53
  350. data/features/docs/writing_support_code/state.feature +0 -32
  351. data/features/docs/writing_support_code/tagged_hooks.feature +0 -95
  352. data/features/docs/writing_support_code/world.feature +0 -129
  353. data/features/lib/step_definitions/aruba_steps.rb +0 -21
  354. data/features/lib/step_definitions/cli_steps.rb +0 -4
  355. data/features/lib/step_definitions/cucumber_steps.rb +0 -75
  356. data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -16
  357. data/features/lib/step_definitions/json_steps.rb +0 -8
  358. data/features/lib/step_definitions/junit_steps.rb +0 -14
  359. data/features/lib/step_definitions/language_steps.rb +0 -9
  360. data/features/lib/step_definitions/profile_steps.rb +0 -16
  361. data/features/lib/step_definitions/retry_steps.rb +0 -55
  362. data/features/lib/step_definitions/ruby_steps.rb +0 -4
  363. data/features/lib/support/env.rb +0 -22
  364. data/features/lib/support/fake_wire_server.rb +0 -94
  365. data/features/lib/support/feature_factory.rb +0 -68
  366. data/features/lib/support/normalise_output.rb +0 -52
  367. data/features/lib/support/parameter_types.rb +0 -5
  368. data/gem_tasks/contributors.rake +0 -19
  369. data/gem_tasks/cov.rake +0 -6
  370. data/gem_tasks/downloads.rb +0 -8
  371. data/gem_tasks/environment.rake +0 -4
  372. data/gem_tasks/examples.rake +0 -12
  373. data/gem_tasks/fix_cr_lf.rake +0 -22
  374. data/gem_tasks/flog.rake +0 -5
  375. data/gem_tasks/rspec.rake +0 -7
  376. data/gem_tasks/sass.rake +0 -5
  377. data/gem_tasks/stats +0 -16
  378. data/gem_tasks/versions.txt +0 -74
  379. data/scripts/invite-collaborator +0 -40
  380. data/scripts/update-changelog +0 -86
  381. data/spec/cucumber/cli/configuration_spec.rb +0 -446
  382. data/spec/cucumber/cli/main_spec.rb +0 -84
  383. data/spec/cucumber/cli/options_spec.rb +0 -445
  384. data/spec/cucumber/cli/profile_loader_spec.rb +0 -66
  385. data/spec/cucumber/cli/rerun_spec.rb +0 -86
  386. data/spec/cucumber/configuration_spec.rb +0 -148
  387. data/spec/cucumber/constantize_spec.rb +0 -20
  388. data/spec/cucumber/events_spec.rb +0 -9
  389. data/spec/cucumber/file_specs_spec.rb +0 -61
  390. data/spec/cucumber/filters/activate_steps_spec.rb +0 -152
  391. data/spec/cucumber/filters/gated_receiver_spec.rb +0 -48
  392. data/spec/cucumber/filters/retry_spec.rb +0 -98
  393. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -39
  394. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -58
  395. data/spec/cucumber/filters/tag_limits_spec.rb +0 -60
  396. data/spec/cucumber/formatter/ansicolor_spec.rb +0 -33
  397. data/spec/cucumber/formatter/backtrace_filter_spec.rb +0 -32
  398. data/spec/cucumber/formatter/console_counts_spec.rb +0 -14
  399. data/spec/cucumber/formatter/duration_spec.rb +0 -23
  400. data/spec/cucumber/formatter/fail_fast_spec.rb +0 -88
  401. data/spec/cucumber/formatter/html_spec.rb +0 -543
  402. data/spec/cucumber/formatter/interceptor_spec.rb +0 -137
  403. data/spec/cucumber/formatter/json_spec.rb +0 -815
  404. data/spec/cucumber/formatter/junit_spec.rb +0 -251
  405. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2175
  406. data/spec/cucumber/formatter/pretty_spec.rb +0 -907
  407. data/spec/cucumber/formatter/progress_spec.rb +0 -170
  408. data/spec/cucumber/formatter/rerun_spec.rb +0 -97
  409. data/spec/cucumber/formatter/spec_helper.rb +0 -84
  410. data/spec/cucumber/glue/proto_world_spec.rb +0 -63
  411. data/spec/cucumber/glue/registry_and_more_spec.rb +0 -213
  412. data/spec/cucumber/glue/snippet_spec.rb +0 -174
  413. data/spec/cucumber/glue/step_definition_spec.rb +0 -207
  414. data/spec/cucumber/hooks_spec.rb +0 -31
  415. data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -653
  416. data/spec/cucumber/project_initializer_spec.rb +0 -88
  417. data/spec/cucumber/rake/forked_spec.rb +0 -58
  418. data/spec/cucumber/rake/task_spec.rb +0 -86
  419. data/spec/cucumber/running_test_case_spec.rb +0 -140
  420. data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -8
  421. data/spec/cucumber/runtime/support_code_spec.rb +0 -17
  422. data/spec/cucumber/runtime_spec.rb +0 -21
  423. data/spec/cucumber/sell_cucumbers.feature +0 -19
  424. data/spec/cucumber/step_argument_spec.rb +0 -19
  425. data/spec/cucumber/step_match_search_spec.rb +0 -113
  426. data/spec/cucumber/step_match_spec.rb +0 -86
  427. data/spec/cucumber/world/pending_spec.rb +0 -48
  428. data/spec/spec_helper.rb +0 -30
  429. data/spec/support/standard_step_actions.rb +0 -19
@@ -1,148 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
-
4
- module Cucumber
5
- describe Configuration do
6
- describe '.default' do
7
- subject { Configuration.default }
8
-
9
- it 'has an autoload_code_paths containing the standard support and step_definitions folders' do
10
- expect(subject.autoload_code_paths).to include('features/support')
11
- expect(subject.autoload_code_paths).to include('features/step_definitions')
12
- end
13
- end
14
-
15
- describe 'with custom user options' do
16
- let(:user_options) { { :autoload_code_paths => ['foo/bar/baz'] } }
17
- subject { Configuration.new(user_options) }
18
-
19
- it 'allows you to override the defaults' do
20
- expect(subject.autoload_code_paths).to eq ['foo/bar/baz']
21
- end
22
- end
23
-
24
- context 'selecting files to load' do
25
-
26
- def given_the_following_files(*files)
27
- allow(File).to receive(:directory?) { true }
28
- allow(File).to receive(:file?) { true }
29
- allow(Dir).to receive(:[]) { files }
30
- end
31
-
32
- it 'requires env.rb files first' do
33
- configuration = Configuration.new
34
- given_the_following_files('/features/support/a_file.rb','/features/support/env.rb')
35
-
36
- expect(configuration.support_to_load).to eq [
37
- '/features/support/env.rb',
38
- '/features/support/a_file.rb'
39
- ]
40
- end
41
-
42
- it 'does not require env.rb files when dry run' do
43
- configuration = Configuration.new(dry_run: true)
44
- given_the_following_files('/features/support/a_file.rb','/features/support/env.rb')
45
-
46
- expect(configuration.support_to_load).to eq [
47
- '/features/support/a_file.rb'
48
- ]
49
- end
50
-
51
- it 'requires step defs in vendor/{plugins,gems}/*/cucumber/*.rb' do
52
- given_the_following_files('/vendor/gems/gem_a/cucumber/bar.rb',
53
- '/vendor/plugins/plugin_a/cucumber/foo.rb')
54
-
55
- configuration = Configuration.new
56
-
57
- expect(configuration.step_defs_to_load).to eq [
58
- '/vendor/gems/gem_a/cucumber/bar.rb',
59
- '/vendor/plugins/plugin_a/cucumber/foo.rb'
60
- ]
61
- end
62
-
63
- describe '--exclude' do
64
-
65
- it 'excludes a ruby file from requiring when the name matches exactly' do
66
- given_the_following_files('/features/support/a_file.rb','/features/support/env.rb')
67
-
68
- configuration = Configuration.new(excludes: [/a_file.rb/])
69
-
70
- expect(configuration.all_files_to_load).to eq [
71
- '/features/support/env.rb'
72
- ]
73
- end
74
-
75
- it 'excludes all ruby files that match the provided patterns from requiring' do
76
- given_the_following_files('/features/support/foof.rb','/features/support/bar.rb',
77
- '/features/support/food.rb','/features/blah.rb',
78
- '/features/support/fooz.rb')
79
-
80
- configuration = Configuration.new(excludes: [/foo[df]/, /blah/])
81
-
82
- expect(configuration.all_files_to_load).to eq [
83
- '/features/support/bar.rb',
84
- '/features/support/fooz.rb'
85
- ]
86
- end
87
- end
88
-
89
- end
90
-
91
- context 'selecting feature files' do
92
-
93
- it 'preserves the order of the feature files' do
94
- configuration = Configuration.new(paths: %w{b.feature c.feature a.feature})
95
-
96
- expect(configuration.feature_files).to eq ['b.feature', 'c.feature', 'a.feature']
97
- end
98
-
99
- it 'searchs for all features in the specified directory' do
100
- allow(File).to receive(:directory?) { true }
101
- allow(Dir).to receive(:[]).with('feature_directory/**/*.feature') { ['cucumber.feature'] }
102
-
103
- configuration = Configuration.new(paths: %w{feature_directory/})
104
-
105
- expect(configuration.feature_files).to eq ['cucumber.feature']
106
- end
107
-
108
- it 'defaults to the features directory when no feature file are provided' do
109
- allow(File).to receive(:directory?) { true }
110
- allow(Dir).to receive(:[]).with('features/**/*.feature') { ['cucumber.feature'] }
111
-
112
- configuration = Configuration.new(paths: [])
113
-
114
- expect(configuration.feature_files).to eq ['cucumber.feature']
115
- end
116
-
117
- it 'gets the feature files from the rerun file' do
118
- allow(File).to receive(:directory?).and_return(false)
119
- allow(File).to receive(:file?).and_return(true)
120
- allow(IO).to receive(:read).and_return(
121
- "cucumber.feature:1:3\ncucumber.feature:5 cucumber.feature:10\n"\
122
- "domain folder/different cuke.feature:134 domain folder/cuke.feature:1\n"\
123
- 'domain folder/different cuke.feature:4:5 bar.feature')
124
-
125
- configuration = Configuration.new(paths: %w{@rerun.txt})
126
-
127
- expect(configuration.feature_files).to eq [
128
- 'cucumber.feature:1:3',
129
- 'cucumber.feature:5',
130
- 'cucumber.feature:10',
131
- 'domain folder/different cuke.feature:134',
132
- 'domain folder/cuke.feature:1',
133
- 'domain folder/different cuke.feature:4:5',
134
- 'bar.feature']
135
- end
136
- end
137
-
138
- describe '#with_options' do
139
- it 'returns a copy of the configuration with new options' do
140
- old_out_stream = double('Old out_stream')
141
- new_out_stream = double('New out_stream')
142
- config = Configuration.new(out_stream: old_out_stream).with_options(out_stream: new_out_stream)
143
- expect(config.out_stream).to eq new_out_stream
144
- end
145
- end
146
-
147
- end
148
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
-
4
- module Html end
5
-
6
- module Cucumber
7
- describe Constantize do
8
- include Constantize
9
-
10
- it 'loads html formatter' do
11
- clazz = constantize('Cucumber::Formatter::Html')
12
-
13
- expect(clazz.name).to eq 'Cucumber::Formatter::Html'
14
- end
15
-
16
- it 'fails to load a made up class' do
17
- expect { constantize('My::MadeUp::ClassName') }.to raise_error(LoadError)
18
- end
19
- end
20
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cucumber
4
- describe Events do
5
- it 'builds a registry without failing' do
6
- expect { described_class.registry }.not_to raise_error
7
- end
8
- end
9
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/file_specs'
3
-
4
- module Cucumber
5
- describe FileSpecs do
6
- let(:file_specs) { FileSpecs.new(['features/foo.feature:1:2:3', 'features/bar.feature:4:5:6']) }
7
- let(:locations) { file_specs.locations }
8
- let(:files) { file_specs.files }
9
-
10
- it 'parses locations from multiple files' do
11
- expect(locations.length).to eq 6
12
- expect(locations).to eq [
13
- Cucumber::Core::Ast::Location.new('features/foo.feature', 1),
14
- Cucumber::Core::Ast::Location.new('features/foo.feature', 2),
15
- Cucumber::Core::Ast::Location.new('features/foo.feature', 3),
16
- Cucumber::Core::Ast::Location.new('features/bar.feature', 4),
17
- Cucumber::Core::Ast::Location.new('features/bar.feature', 5),
18
- Cucumber::Core::Ast::Location.new('features/bar.feature', 6)
19
- ]
20
- end
21
-
22
- it 'parses file names from multiple file specs' do
23
- expect(files.length).to eq 2
24
- expect(files).to eq [
25
- 'features/foo.feature',
26
- 'features/bar.feature'
27
- ]
28
- end
29
-
30
- context 'when files are not unique' do
31
- let(:file_specs) { FileSpecs.new(['features/foo.feature:4', 'features/foo.feature:34']) }
32
-
33
- it 'parses unique file names' do
34
- expect(files.length).to eq 1
35
- expect(files).to eq ['features/foo.feature']
36
- end
37
- end
38
-
39
- context 'when no line number is specified' do
40
- let(:file_specs) { FileSpecs.new(['features/foo.feature', 'features/bar.feature:34']) }
41
-
42
- it 'returns a wildcard location for that file' do
43
- expect(locations).to eq [
44
- Cucumber::Core::Ast::Location.new('features/foo.feature'),
45
- Cucumber::Core::Ast::Location.new('features/bar.feature', 34)
46
- ]
47
- end
48
- end
49
-
50
- context 'when the same file is referenced more than once' do
51
- let(:file_specs) { FileSpecs.new(['features/foo.feature:10', 'features/foo.feature:1']) }
52
-
53
- it 'returns locations in the order specified' do
54
- expect(locations).to eq [
55
- Cucumber::Core::Ast::Location.new('features/foo.feature', 10),
56
- Cucumber::Core::Ast::Location.new('features/foo.feature', 1)
57
- ]
58
- end
59
- end
60
- end
61
- end
@@ -1,152 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/filters/activate_steps'
3
- require 'cucumber/core/gherkin/writer'
4
- require 'cucumber/core'
5
-
6
- describe Cucumber::Filters::ActivateSteps do
7
- include Cucumber::Core::Gherkin::Writer
8
- include Cucumber::Core
9
-
10
- let(:step_match) { double(activate: activated_test_step) }
11
- let(:activated_test_step) { double }
12
- let(:receiver) { double.as_null_object }
13
- let(:filter) { Cucumber::Filters::ActivateSteps.new(step_match_search, configuration) }
14
- let(:step_match_search) { Proc.new { [step_match] } }
15
- let(:configuration) { double(dry_run?: false, notify: nil) }
16
-
17
- context 'a scenario with a single step' do
18
- let(:doc) do
19
- gherkin do
20
- feature do
21
- scenario do
22
- step 'a passing step'
23
- end
24
- end
25
- end
26
- end
27
-
28
- it 'activates each step' do
29
- expect(step_match).to receive(:activate) do |test_step|
30
- expect(test_step.text).to eq 'a passing step'
31
- end
32
- compile [doc], receiver, [filter]
33
- end
34
-
35
- it 'notifies with a StepActivated event' do
36
- expect(configuration).to receive(:notify) do |message, test_step, step_match|
37
- expect(message).to eq :step_activated
38
- expect(test_step.text).to eq 'a passing step'
39
- expect(step_match).to eq step_match
40
- end
41
- compile [doc], receiver, [filter]
42
- end
43
- end
44
-
45
- context 'a scenario outline' do
46
- let(:doc) do
47
- gherkin do
48
- feature do
49
- scenario_outline do
50
- step 'a <status> step'
51
-
52
- examples do
53
- row 'status'
54
- row 'passing'
55
- end
56
- end
57
- end
58
- end
59
- end
60
-
61
- it 'activates each step' do
62
- expect(step_match).to receive(:activate) do |test_step|
63
- expect(test_step.text).to eq 'a passing step'
64
- end
65
- compile [doc], receiver, [filter]
66
- end
67
- end
68
-
69
- context 'undefined step' do
70
- let(:step_match_search) { Proc.new { [] } }
71
-
72
- let(:doc) do
73
- gherkin do
74
- feature do
75
- scenario do
76
- step 'an undefined step'
77
- end
78
- end
79
- end
80
- end
81
-
82
- it 'does not activate the step' do
83
- expect(receiver).to receive(:test_case) do |test_case|
84
- expect(test_case.test_steps[0].execute).to be_undefined
85
- end
86
- compile [doc], receiver, [filter]
87
- end
88
-
89
- it 'does not notify' do
90
- expect(configuration).not_to receive(:notify)
91
- compile [doc], receiver, [filter]
92
- end
93
- end
94
-
95
- context 'dry run' do
96
- let(:configuration) { double(dry_run?: true, notify: nil) }
97
-
98
- let(:doc) do
99
- gherkin do
100
- feature do
101
- scenario do
102
- step 'a passing step'
103
- end
104
- end
105
- end
106
- end
107
-
108
- it 'activates each step with a skipping action' do
109
- expect(receiver).to receive(:test_case) do |test_case|
110
- expect(test_case.test_steps[0].execute).to be_skipped
111
- end
112
- compile [doc], receiver, [filter]
113
- end
114
-
115
- it 'notifies with a StepActivated event' do
116
- expect(configuration).to receive(:notify) do |message, test_step, step_match|
117
- expect(message).to eq :step_activated
118
- expect(test_step.text).to eq 'a passing step'
119
- expect(step_match).to eq step_match
120
- end
121
- compile [doc], receiver, [filter]
122
- end
123
- end
124
-
125
- context 'undefined step in a dry run' do
126
- let(:step_match_search) { Proc.new { [] } }
127
- let(:configuration) { double(dry_run?: true, notify: nil) }
128
-
129
- let(:doc) do
130
- gherkin do
131
- feature do
132
- scenario do
133
- step 'an undefined step'
134
- end
135
- end
136
- end
137
- end
138
-
139
- it 'does not activate the step' do
140
- expect(receiver).to receive(:test_case) do |test_case|
141
- expect(test_case.test_steps[0].execute).to be_undefined
142
- end
143
- compile [doc], receiver, [filter]
144
- end
145
-
146
- it 'does not notify' do
147
- expect(configuration).not_to receive(:notify)
148
- compile [doc], receiver, [filter]
149
- end
150
- end
151
-
152
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/filters/gated_receiver'
3
-
4
- describe Cucumber::Filters::GatedReceiver do
5
- subject(:gated_receiver) { Cucumber::Filters::GatedReceiver.new(receiver) }
6
-
7
- let(:receiver) { double(:receiver) }
8
- let(:test_cases){ [double(:test_case), double(:test_case)] }
9
-
10
- describe '#test_case' do
11
- it 'does not immediately describe the test case to the receiver' do
12
- test_cases.each do |test_case|
13
- expect(test_case).to_not receive(:describe_to).with(receiver)
14
- end
15
-
16
- test_cases.each do |test_case|
17
- gated_receiver.test_case(test_case)
18
- end
19
- end
20
- end
21
-
22
- describe '#done' do
23
- before do
24
- test_cases.each do |test_case|
25
- gated_receiver.test_case(test_case)
26
- end
27
-
28
- test_cases.each do |test_case|
29
- allow(test_case).to receive(:describe_to).with(receiver)
30
- end
31
-
32
- allow(receiver).to receive(:done)
33
- end
34
-
35
- it 'describes all test cases to the receiver' do
36
- test_cases.each do |test_case|
37
- expect(test_case).to receive(:describe_to).with(receiver)
38
- end
39
-
40
- gated_receiver.done
41
- end
42
-
43
- it 'calls done on the receiver' do
44
- expect(receiver).to receive(:done)
45
- gated_receiver.done
46
- end
47
- end
48
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber'
3
- require 'cucumber/filters/retry'
4
- require 'cucumber/core/gherkin/writer'
5
- require 'cucumber/configuration'
6
- require 'cucumber/core/test/case'
7
- require 'cucumber/core'
8
- require 'cucumber/events'
9
-
10
- describe Cucumber::Filters::Retry do
11
- include Cucumber::Core::Gherkin::Writer
12
- include Cucumber::Core
13
- include Cucumber::Events
14
-
15
- let(:configuration) { Cucumber::Configuration.new(:retry => 2) }
16
- let(:test_case) { Cucumber::Core::Test::Case.new([double('test steps')], double('source').as_null_object) }
17
- let(:receiver) { double('receiver').as_null_object }
18
- let(:filter) { Cucumber::Filters::Retry.new(configuration, receiver) }
19
- let(:fail) { Cucumber::Events::AfterTestCase.new(test_case, double('result', :failed? => true, :ok? => false)) }
20
- let(:pass) { Cucumber::Events::AfterTestCase.new(test_case, double('result', :failed? => false, :ok? => true)) }
21
-
22
- it { is_expected.to respond_to(:test_case) }
23
- it { is_expected.to respond_to(:with_receiver) }
24
- it { is_expected.to respond_to(:done) }
25
-
26
- context 'passing test case' do
27
- let(:result) { Cucumber::Core::Test::Result::Passed.new(0) }
28
-
29
- it 'describes the test case once' do
30
- expect(receiver).to receive(:test_case).with(test_case).once
31
- test_case.describe_to filter
32
- configuration.notify :test_case_finished, test_case, result
33
- end
34
- end
35
-
36
- context 'when performing retry' do
37
- let(:result) { Cucumber::Core::Test::Result::Failed.new(0, StandardError.new) }
38
-
39
- it 'describes the same test case object each time' do
40
- allow(receiver).to receive(:test_case) {|tc|
41
- expect(tc).to equal(test_case)
42
- configuration.notify :test_case_finished, tc.with_steps(tc.test_steps), result
43
- }
44
-
45
- filter.test_case(test_case)
46
- end
47
- end
48
-
49
- context 'consistently failing test case' do
50
- let(:result) { Cucumber::Core::Test::Result::Failed.new(0, StandardError.new) }
51
-
52
- it 'describes the test case the specified number of times' do
53
- expect(receiver).to receive(:test_case) {|test_case|
54
- configuration.notify :test_case_finished, test_case, result
55
- }.exactly(3).times
56
-
57
- filter.test_case(test_case)
58
- end
59
- end
60
-
61
- context 'flaky test cases' do
62
-
63
- context 'a little flaky' do
64
- let(:results) {
65
- [
66
- Cucumber::Core::Test::Result::Failed.new(0, StandardError.new),
67
- Cucumber::Core::Test::Result::Passed.new(0)
68
- ]
69
- }
70
-
71
- it 'describes the test case twice' do
72
- expect(receiver).to receive(:test_case) {|test_case|
73
- configuration.notify :test_case_finished, test_case, results.shift
74
- }.exactly(2).times
75
-
76
- filter.test_case(test_case)
77
- end
78
- end
79
-
80
- context 'really flaky' do
81
- let(:results) {
82
- [
83
- Cucumber::Core::Test::Result::Failed.new(0, StandardError.new),
84
- Cucumber::Core::Test::Result::Failed.new(0, StandardError.new),
85
- Cucumber::Core::Test::Result::Passed.new(0)
86
- ]
87
- }
88
-
89
- it 'describes the test case 3 times' do
90
- expect(receiver).to receive(:test_case) {|test_case|
91
- configuration.notify :test_case_finished, test_case, results.shift
92
- }.exactly(3).times
93
-
94
- filter.test_case(test_case)
95
- end
96
- end
97
- end
98
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/filters/tag_limits'
3
-
4
- describe Cucumber::Filters::TagLimits::TestCaseIndex do
5
- subject(:index) { Cucumber::Filters::TagLimits::TestCaseIndex.new }
6
-
7
- let(:test_cases) do
8
- [
9
- double(:test_case, tags: [tag_one], location: a_location_of_tag_one),
10
- double(:test_case, tags: [tag_one, tag_two], location: a_location_of_tag_one_and_tag_two)
11
- ]
12
- end
13
-
14
- let(:tag_one) { double(:tag_one, name: '@one') }
15
- let(:tag_two) { double(:tag_two, name: '@two') }
16
-
17
- let(:a_location_of_tag_one) { double(:a_location_of_tag_one) }
18
- let(:a_location_of_tag_one_and_tag_two) { double(:a_location_of_tag_one_and_tag_two) }
19
-
20
- before do
21
- test_cases.map do |test_case|
22
- index.add(test_case)
23
- end
24
- end
25
-
26
- describe '#count_by_tag_name' do
27
- it 'returns the number of test cases with the tag' do
28
- expect(index.count_by_tag_name('@one')).to eq(2)
29
- expect(index.count_by_tag_name('@two')).to eq(1)
30
- end
31
- end
32
-
33
- describe '#locations_by_tag_name' do
34
- it 'returns the locations of test cases with the tag' do
35
- expect(index.locations_of_tag_name('@one')).to eq([a_location_of_tag_one, a_location_of_tag_one_and_tag_two])
36
- expect(index.locations_of_tag_name('@two')).to eq([a_location_of_tag_one_and_tag_two])
37
- end
38
- end
39
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/filters/tag_limits'
3
-
4
- describe Cucumber::Filters::TagLimits::Verifier do
5
- describe '#verify!' do
6
- subject(:verifier) { Cucumber::Filters::TagLimits::Verifier.new(tag_limits) }
7
- let(:test_case_index) { double(:test_case_index) }
8
-
9
- context 'the tag counts exceed the tag limits' do
10
- let(:tag_limits) do
11
- {
12
- '@exceed_me' => 1
13
- }
14
- end
15
-
16
- let(:locations) do
17
- [
18
- double(:location, to_s: 'path/to/some.feature:3'),
19
- double(:location, to_s: 'path/to/some/other.feature:8')
20
- ]
21
- end
22
-
23
- before do
24
- allow(test_case_index).to receive(:count_by_tag_name).with('@exceed_me') { 2 }
25
- allow(test_case_index).to receive(:locations_of_tag_name).with('@exceed_me') { locations }
26
- end
27
-
28
- it 'raises a TagLimitExceeded error with the locations of the tags' do
29
- expect {
30
- verifier.verify!(test_case_index)
31
- }.to raise_error(
32
- Cucumber::Filters::TagLimitExceededError,
33
- "@exceed_me occurred 2 times, but the limit was set to 1\n" +
34
- " path/to/some.feature:3\n" +
35
- ' path/to/some/other.feature:8'
36
- )
37
- end
38
- end
39
-
40
- context 'the tag counts do not exceed the tag limits' do
41
- let(:tag_limits) do
42
- {
43
- '@dont_exceed_me' => 2
44
- }
45
- end
46
-
47
- before do
48
- allow(test_case_index).to receive(:count_by_tag_name).with('@dont_exceed_me') { 1 }
49
- end
50
-
51
- it 'does not raise an error' do
52
- expect {
53
- verifier.verify!(test_case_index)
54
- }.to_not raise_error
55
- end
56
- end
57
- end
58
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/filters/tag_limits'
3
-
4
- describe Cucumber::Filters::TagLimits do
5
- subject(:filter) { Cucumber::Filters::TagLimits.new(tag_limits, receiver) }
6
-
7
- let(:tag_limits) { double(:tag_limits) }
8
- let(:receiver) { double(:receiver) }
9
-
10
- let(:gated_receiver) { double(:gated_receiver) }
11
- let(:test_case_index) { double(:test_case_index) }
12
- let(:test_case) { double(:test_case) }
13
-
14
- before do
15
- allow(Cucumber::Filters::GatedReceiver).to receive(:new).with(receiver) { gated_receiver }
16
- allow(Cucumber::Filters::TagLimits::TestCaseIndex).to receive(:new) { test_case_index }
17
- end
18
-
19
- describe '#test_case' do
20
- before do
21
- allow(test_case_index).to receive(:add)
22
- allow(gated_receiver).to receive(:test_case)
23
- end
24
-
25
- it 'indexes the test case' do
26
- expect(test_case_index).to receive(:add).with(test_case)
27
- filter.test_case(test_case)
28
- end
29
-
30
- it 'adds the test case to the gated receiver' do
31
- expect(gated_receiver).to receive(:test_case).with(test_case)
32
- filter.test_case(test_case)
33
- end
34
- end
35
-
36
- describe '#done' do
37
- let(:verifier) { double(:verifier) }
38
-
39
- before do
40
- allow(Cucumber::Filters::TagLimits::Verifier).to receive(:new).with(tag_limits) { verifier }
41
- allow(gated_receiver).to receive(:done)
42
- end
43
-
44
- it 'verifies tag limits have not been exceeded' do
45
- expect(verifier).to receive(:verify!).with(test_case_index)
46
- filter.done
47
- end
48
-
49
- context 'the verifier verifies successfully' do
50
- before do
51
- allow(verifier).to receive(:verify!).with(test_case_index)
52
- end
53
-
54
- it 'calls done on the receiver gate' do
55
- expect(gated_receiver).to receive(:done)
56
- filter.done
57
- end
58
- end
59
- end
60
- end