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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. checksums.yaml +5 -5
  2. data/{History.md → CHANGELOG.md} +267 -14
  3. data/CONTRIBUTING.md +4 -21
  4. data/README.md +14 -15
  5. data/bin/cucumber +2 -1
  6. data/lib/autotest/cucumber.rb +1 -0
  7. data/lib/autotest/cucumber_mixin.rb +36 -40
  8. data/lib/autotest/cucumber_rails.rb +1 -0
  9. data/lib/autotest/cucumber_rails_rspec.rb +1 -0
  10. data/lib/autotest/cucumber_rails_rspec2.rb +1 -0
  11. data/lib/autotest/cucumber_rspec.rb +1 -0
  12. data/lib/autotest/cucumber_rspec2.rb +1 -0
  13. data/lib/autotest/discover.rb +1 -0
  14. data/lib/cucumber.rb +2 -1
  15. data/lib/cucumber/cli/configuration.rb +8 -7
  16. data/lib/cucumber/cli/main.rb +14 -14
  17. data/lib/cucumber/cli/options.rb +141 -120
  18. data/lib/cucumber/cli/profile_loader.rb +50 -29
  19. data/lib/cucumber/cli/rerun_file.rb +1 -0
  20. data/lib/cucumber/configuration.rb +40 -30
  21. data/lib/cucumber/constantize.rb +8 -10
  22. data/lib/cucumber/core_ext/string.rb +1 -0
  23. data/lib/cucumber/deprecate.rb +33 -9
  24. data/lib/cucumber/encoding.rb +2 -1
  25. data/lib/cucumber/errors.rb +10 -8
  26. data/lib/cucumber/events.rb +14 -9
  27. data/lib/cucumber/events/envelope.rb +9 -0
  28. data/lib/cucumber/events/gherkin_source_parsed.rb +11 -0
  29. data/lib/cucumber/events/gherkin_source_read.rb +1 -4
  30. data/lib/cucumber/events/hook_test_step_created.rb +13 -0
  31. data/lib/cucumber/events/step_activated.rb +6 -6
  32. data/lib/cucumber/events/step_definition_registered.rb +4 -8
  33. data/lib/cucumber/events/test_case_created.rb +13 -0
  34. data/lib/cucumber/events/test_case_finished.rb +1 -5
  35. data/lib/cucumber/events/test_case_ready.rb +12 -0
  36. data/lib/cucumber/events/{test_case_starting.rb → test_case_started.rb} +1 -5
  37. data/lib/cucumber/events/test_run_finished.rb +2 -3
  38. data/lib/cucumber/events/{test_run_starting.rb → test_run_started.rb} +3 -5
  39. data/lib/cucumber/events/test_step_created.rb +13 -0
  40. data/lib/cucumber/events/test_step_finished.rb +0 -6
  41. data/lib/cucumber/events/{test_step_starting.rb → test_step_started.rb} +2 -8
  42. data/lib/cucumber/file_specs.rb +7 -6
  43. data/lib/cucumber/filters.rb +3 -1
  44. data/lib/cucumber/filters/activate_steps.rb +11 -5
  45. data/lib/cucumber/filters/apply_after_hooks.rb +1 -0
  46. data/lib/cucumber/filters/apply_after_step_hooks.rb +1 -0
  47. data/lib/cucumber/filters/apply_around_hooks.rb +1 -0
  48. data/lib/cucumber/filters/apply_before_hooks.rb +1 -0
  49. data/lib/cucumber/filters/broadcast_test_case_ready_event.rb +12 -0
  50. data/lib/cucumber/filters/{broadcast_test_run_starting_event.rb → broadcast_test_run_started_event.rb} +4 -3
  51. data/lib/cucumber/filters/gated_receiver.rb +1 -2
  52. data/lib/cucumber/filters/prepare_world.rb +6 -13
  53. data/lib/cucumber/filters/quit.rb +3 -7
  54. data/lib/cucumber/filters/randomizer.rb +6 -7
  55. data/lib/cucumber/filters/retry.rb +2 -2
  56. data/lib/cucumber/filters/tag_limits.rb +2 -2
  57. data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -2
  58. data/lib/cucumber/filters/tag_limits/verifier.rb +3 -6
  59. data/lib/cucumber/formatter/ansicolor.rb +33 -37
  60. data/lib/cucumber/formatter/ast_lookup.rb +165 -0
  61. data/lib/cucumber/formatter/backtrace_filter.rb +10 -10
  62. data/lib/cucumber/formatter/console.rb +37 -74
  63. data/lib/cucumber/formatter/console_counts.rb +4 -9
  64. data/lib/cucumber/formatter/console_issues.rb +10 -7
  65. data/lib/cucumber/formatter/duration.rb +2 -1
  66. data/lib/cucumber/formatter/duration_extractor.rb +4 -2
  67. data/lib/cucumber/formatter/errors.rb +6 -0
  68. data/lib/cucumber/formatter/fail_fast.rb +9 -6
  69. data/lib/cucumber/formatter/fanout.rb +3 -3
  70. data/lib/cucumber/formatter/html.rb +11 -603
  71. data/lib/cucumber/formatter/http_io.rb +93 -0
  72. data/lib/cucumber/formatter/ignore_missing_messages.rb +2 -4
  73. data/lib/cucumber/formatter/interceptor.rb +10 -12
  74. data/lib/cucumber/formatter/io.rb +19 -12
  75. data/lib/cucumber/formatter/json.rb +106 -112
  76. data/lib/cucumber/formatter/junit.rb +81 -76
  77. data/lib/cucumber/formatter/message.rb +22 -0
  78. data/lib/cucumber/formatter/message_builder.rb +241 -0
  79. data/lib/cucumber/formatter/pretty.rb +353 -153
  80. data/lib/cucumber/formatter/progress.rb +30 -33
  81. data/lib/cucumber/formatter/query/hook_by_test_step.rb +31 -0
  82. data/lib/cucumber/formatter/query/pickle_by_test.rb +26 -0
  83. data/lib/cucumber/formatter/query/pickle_step_by_test_step.rb +26 -0
  84. data/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +40 -0
  85. data/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +40 -0
  86. data/lib/cucumber/formatter/rerun.rb +24 -5
  87. data/lib/cucumber/formatter/stepdefs.rb +2 -2
  88. data/lib/cucumber/formatter/steps.rb +4 -5
  89. data/lib/cucumber/formatter/summary.rb +18 -11
  90. data/lib/cucumber/formatter/unicode.rb +16 -18
  91. data/lib/cucumber/formatter/usage.rb +30 -26
  92. data/lib/cucumber/gherkin/data_table_parser.rb +18 -6
  93. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +83 -86
  94. data/lib/cucumber/gherkin/formatter/escaping.rb +13 -12
  95. data/lib/cucumber/gherkin/i18n.rb +1 -0
  96. data/lib/cucumber/gherkin/steps_parser.rb +18 -8
  97. data/lib/cucumber/glue/dsl.rb +13 -26
  98. data/lib/cucumber/glue/hook.rb +35 -11
  99. data/lib/cucumber/glue/invoke_in_world.rb +15 -20
  100. data/lib/cucumber/glue/proto_world.rb +48 -42
  101. data/lib/cucumber/glue/registry_and_more.rb +58 -23
  102. data/lib/cucumber/glue/snippet.rb +23 -26
  103. data/lib/cucumber/glue/step_definition.rb +51 -28
  104. data/lib/cucumber/glue/world_factory.rb +2 -4
  105. data/lib/cucumber/hooks.rb +27 -17
  106. data/lib/cucumber/load_path.rb +1 -0
  107. data/lib/cucumber/multiline_argument.rb +7 -17
  108. data/lib/cucumber/multiline_argument/data_table.rb +113 -82
  109. data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +8 -12
  110. data/lib/cucumber/multiline_argument/doc_string.rb +2 -1
  111. data/lib/cucumber/platform.rb +4 -3
  112. data/lib/cucumber/project_initializer.rb +2 -2
  113. data/lib/cucumber/rake/task.rb +28 -21
  114. data/lib/cucumber/rspec/disable_option_parser.rb +10 -8
  115. data/lib/cucumber/rspec/doubles.rb +1 -0
  116. data/lib/cucumber/running_test_case.rb +4 -54
  117. data/lib/cucumber/runtime.rb +32 -63
  118. data/lib/cucumber/runtime/after_hooks.rb +9 -4
  119. data/lib/cucumber/runtime/before_hooks.rb +9 -4
  120. data/lib/cucumber/runtime/for_programming_languages.rb +12 -9
  121. data/lib/cucumber/runtime/step_hooks.rb +5 -2
  122. data/lib/cucumber/runtime/support_code.rb +16 -22
  123. data/lib/cucumber/runtime/user_interface.rb +12 -23
  124. data/lib/cucumber/step_definition_light.rb +6 -4
  125. data/lib/cucumber/step_definitions.rb +3 -2
  126. data/lib/cucumber/step_match.rb +29 -14
  127. data/lib/cucumber/step_match_search.rb +10 -10
  128. data/lib/cucumber/term/ansicolor.rb +39 -39
  129. data/lib/cucumber/unit.rb +1 -0
  130. data/lib/cucumber/version +1 -1
  131. data/lib/simplecov_setup.rb +1 -0
  132. metadata +206 -678
  133. data/.coveralls.yml +0 -1
  134. data/.cucumberproignore +0 -6
  135. data/.github/ISSUE_TEMPLATE.md +0 -48
  136. data/.github/PULL_REQUEST_TEMPLATE.md +0 -39
  137. data/.rspec +0 -1
  138. data/.rubocop.yml +0 -13
  139. data/.rubocop_todo.yml +0 -1075
  140. data/.ruby-gemset +0 -1
  141. data/.travis.yml +0 -69
  142. data/.yardopts +0 -1
  143. data/Gemfile +0 -28
  144. data/Rakefile +0 -32
  145. data/appveyor.yml +0 -26
  146. data/cucumber.gemspec +0 -52
  147. data/cucumber.yml +0 -19
  148. data/examples/i18n/README.textile +0 -3
  149. data/examples/i18n/Rakefile +0 -33
  150. data/examples/i18n/ar/Rakefile +0 -6
  151. data/examples/i18n/ar/features/addition.feature +0 -17
  152. data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +0 -24
  153. data/examples/i18n/ar/lib/calculator.rb +0 -11
  154. data/examples/i18n/bg/Rakefile +0 -6
  155. data/examples/i18n/bg/features/addition.feature +0 -12
  156. data/examples/i18n/bg/features/consecutive_calculations.feature +0 -19
  157. data/examples/i18n/bg/features/division.feature +0 -17
  158. data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +0 -24
  159. data/examples/i18n/bg/features/support/env.rb +0 -5
  160. data/examples/i18n/bg/features/support/world.rb +0 -8
  161. data/examples/i18n/bg/lib/calculator.rb +0 -24
  162. data/examples/i18n/ca/Rakefile +0 -6
  163. data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +0 -21
  164. data/examples/i18n/ca/features/suma.feature +0 -17
  165. data/examples/i18n/ca/lib/calculadora.rb +0 -16
  166. data/examples/i18n/cs/Rakefile +0 -6
  167. data/examples/i18n/cs/features/addition.feature +0 -17
  168. data/examples/i18n/cs/features/division.feature +0 -11
  169. data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +0 -24
  170. data/examples/i18n/cs/lib/calculator.rb +0 -14
  171. data/examples/i18n/da/Rakefile +0 -6
  172. data/examples/i18n/da/features/sammenlaegning.feature +0 -18
  173. data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +0 -24
  174. data/examples/i18n/da/lib/lommeregner.rb +0 -11
  175. data/examples/i18n/de/Rakefile +0 -6
  176. data/examples/i18n/de/features/addition.feature +0 -17
  177. data/examples/i18n/de/features/division.feature +0 -10
  178. data/examples/i18n/de/features/step_definitions/calculator_steps.rb +0 -24
  179. data/examples/i18n/de/lib/calculator.rb +0 -14
  180. data/examples/i18n/el/Rakefile +0 -6
  181. data/examples/i18n/el/features/addition.feature +0 -17
  182. data/examples/i18n/el/features/division.feature +0 -10
  183. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +0 -24
  184. data/examples/i18n/el/lib/calculator.rb +0 -14
  185. data/examples/i18n/en-lol/Rakefile +0 -4
  186. data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +0 -16
  187. data/examples/i18n/en-lol/features/stuffing.feature +0 -8
  188. data/examples/i18n/en-lol/features/support/env.rb +0 -7
  189. data/examples/i18n/en-lol/lib/basket.rb +0 -12
  190. data/examples/i18n/en-lol/lib/belly.rb +0 -11
  191. data/examples/i18n/en/Rakefile +0 -6
  192. data/examples/i18n/en/features/addition.feature +0 -17
  193. data/examples/i18n/en/features/division.feature +0 -10
  194. data/examples/i18n/en/features/step_definitions/calculator_steps.rb +0 -24
  195. data/examples/i18n/en/lib/calculator.rb +0 -14
  196. data/examples/i18n/eo/Rakefile +0 -6
  197. data/examples/i18n/eo/features/adicio.feature +0 -17
  198. data/examples/i18n/eo/features/divido.feature +0 -10
  199. data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +0 -24
  200. data/examples/i18n/eo/lib/calculator.rb +0 -14
  201. data/examples/i18n/es/Rakefile +0 -6
  202. data/examples/i18n/es/features/adicion.feature +0 -17
  203. data/examples/i18n/es/features/step_definitions/calculador_steps.rb +0 -21
  204. data/examples/i18n/es/lib/calculador.rb +0 -14
  205. data/examples/i18n/et/Rakefile +0 -6
  206. data/examples/i18n/et/features/jagamine.feature +0 -10
  207. data/examples/i18n/et/features/liitmine.feature +0 -17
  208. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +0 -24
  209. data/examples/i18n/et/lib/kalkulaator.rb +0 -14
  210. data/examples/i18n/fi/Rakefile +0 -6
  211. data/examples/i18n/fi/features/jakolasku.feature +0 -10
  212. data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +0 -24
  213. data/examples/i18n/fi/features/yhteenlasku.feature +0 -17
  214. data/examples/i18n/fi/lib/laskin.rb +0 -14
  215. data/examples/i18n/fr/Rakefile +0 -8
  216. data/examples/i18n/fr/features/addition.feature +0 -18
  217. data/examples/i18n/fr/features/addition2.feature +0 -17
  218. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -32
  219. data/examples/i18n/fr/features/support/env.rb +0 -5
  220. data/examples/i18n/fr/lib/calculatrice.rb +0 -10
  221. data/examples/i18n/he/Rakefile +0 -6
  222. data/examples/i18n/he/features/addition.feature +0 -17
  223. data/examples/i18n/he/features/division.feature +0 -10
  224. data/examples/i18n/he/features/step_definitions/calculator_steps.rb +0 -24
  225. data/examples/i18n/he/lib/calculator.rb +0 -15
  226. data/examples/i18n/hi/Rakefile +0 -6
  227. data/examples/i18n/hi/features/addition.feature +0 -16
  228. data/examples/i18n/hi/features/division.feature +0 -10
  229. data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +0 -24
  230. data/examples/i18n/hi/lib/calculator.rb +0 -15
  231. data/examples/i18n/ht/Rakefile +0 -6
  232. data/examples/i18n/ht/features/adisyon.feature +0 -17
  233. data/examples/i18n/ht/features/divizyon.feature +0 -10
  234. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +0 -25
  235. data/examples/i18n/ht/lib/kalkilatris.rb +0 -14
  236. data/examples/i18n/hu/Rakefile +0 -6
  237. data/examples/i18n/hu/features/osszeadas.feature +0 -17
  238. data/examples/i18n/hu/features/osztas.feature +0 -10
  239. data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +0 -25
  240. data/examples/i18n/hu/lib/calculator.rb +0 -14
  241. data/examples/i18n/id/Rakefile +0 -6
  242. data/examples/i18n/id/features/addition.feature +0 -17
  243. data/examples/i18n/id/features/division.feature +0 -10
  244. data/examples/i18n/id/features/step_definitions/calculator_steps.rb +0 -24
  245. data/examples/i18n/id/lib/calculator.rb +0 -14
  246. data/examples/i18n/it/Rakefile +0 -6
  247. data/examples/i18n/it/features/somma.feature +0 -11
  248. data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +0 -24
  249. data/examples/i18n/it/lib/calcolatrice.rb +0 -11
  250. data/examples/i18n/ja/Rakefile +0 -6
  251. data/examples/i18n/ja/features/addition.feature +0 -17
  252. data/examples/i18n/ja/features/division.feature +0 -10
  253. data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +0 -19
  254. data/examples/i18n/ja/features/support/env.rb +0 -5
  255. data/examples/i18n/ja/lib/calculator.rb +0 -14
  256. data/examples/i18n/ko/Rakefile +0 -6
  257. data/examples/i18n/ko/features/addition.feature +0 -17
  258. data/examples/i18n/ko/features/division.feature +0 -11
  259. data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +0 -24
  260. data/examples/i18n/ko/lib/calculator.rb +0 -14
  261. data/examples/i18n/lt/Rakefile +0 -6
  262. data/examples/i18n/lt/features/addition.feature +0 -17
  263. data/examples/i18n/lt/features/division.feature +0 -10
  264. data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +0 -24
  265. data/examples/i18n/lt/lib/calculator.rb +0 -14
  266. data/examples/i18n/lv/Rakefile +0 -6
  267. data/examples/i18n/lv/features/addition.feature +0 -17
  268. data/examples/i18n/lv/features/division.feature +0 -10
  269. data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +0 -24
  270. data/examples/i18n/lv/lib/calculator.rb +0 -14
  271. data/examples/i18n/no/Rakefile +0 -6
  272. data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +0 -17
  273. data/examples/i18n/no/features/summering.feature +0 -19
  274. data/examples/i18n/no/features/support/env.rb +0 -6
  275. data/examples/i18n/no/lib/kalkulator.rb +0 -11
  276. data/examples/i18n/pl/Rakefile +0 -6
  277. data/examples/i18n/pl/features/addition.feature +0 -17
  278. data/examples/i18n/pl/features/division.feature +0 -10
  279. data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +0 -24
  280. data/examples/i18n/pl/features/support/env.rb +0 -5
  281. data/examples/i18n/pl/lib/calculator.rb +0 -14
  282. data/examples/i18n/pt/Rakefile +0 -6
  283. data/examples/i18n/pt/features/adicao.feature +0 -11
  284. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +0 -20
  285. data/examples/i18n/pt/features/support/env.rb +0 -5
  286. data/examples/i18n/pt/lib/calculadora.rb +0 -10
  287. data/examples/i18n/ro/Rakefile +0 -6
  288. data/examples/i18n/ro/features/adunare.feature +0 -12
  289. data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +0 -21
  290. data/examples/i18n/ro/lib/calculator.rb +0 -11
  291. data/examples/i18n/ru/Rakefile +0 -6
  292. data/examples/i18n/ru/features/addition.feature +0 -11
  293. data/examples/i18n/ru/features/consecutive_calculations.feature +0 -17
  294. data/examples/i18n/ru/features/division.feature +0 -16
  295. data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +0 -19
  296. data/examples/i18n/ru/features/support/env.rb +0 -5
  297. data/examples/i18n/ru/features/support/world.rb +0 -8
  298. data/examples/i18n/ru/lib/calculator.rb +0 -24
  299. data/examples/i18n/sk/Rakefile +0 -6
  300. data/examples/i18n/sk/features/addition.feature +0 -17
  301. data/examples/i18n/sk/features/division.feature +0 -10
  302. data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +0 -24
  303. data/examples/i18n/sk/lib/calculator.rb +0 -14
  304. data/examples/i18n/sr-Cyrl/Rakefile +0 -6
  305. data/examples/i18n/sr-Cyrl/features/sabiranje.feature +0 -18
  306. data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +0 -20
  307. data/examples/i18n/sr-Cyrl/features/support/env.rb +0 -5
  308. data/examples/i18n/sr-Cyrl/lib/calculator.rb +0 -12
  309. data/examples/i18n/sr-Latn/Rakefile +0 -6
  310. data/examples/i18n/sr-Latn/features/sabiranje.feature +0 -18
  311. data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +0 -24
  312. data/examples/i18n/sr-Latn/lib/calculator.rb +0 -12
  313. data/examples/i18n/sv/Rakefile +0 -6
  314. data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +0 -24
  315. data/examples/i18n/sv/features/summering.feature +0 -18
  316. data/examples/i18n/sv/lib/kalkulator.rb +0 -11
  317. data/examples/i18n/tr/Rakefile +0 -6
  318. data/examples/i18n/tr/features/bolme.feature +0 -10
  319. data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +0 -24
  320. data/examples/i18n/tr/features/toplama.feature +0 -18
  321. data/examples/i18n/tr/lib/hesap_makinesi.rb +0 -15
  322. data/examples/i18n/uk/Rakefile +0 -6
  323. data/examples/i18n/uk/features/addition.feature +0 -11
  324. data/examples/i18n/uk/features/consecutive_calculations.feature +0 -17
  325. data/examples/i18n/uk/features/division.feature +0 -16
  326. data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +0 -19
  327. data/examples/i18n/uk/features/support/env.rb +0 -5
  328. data/examples/i18n/uk/features/support/world.rb +0 -8
  329. data/examples/i18n/uk/lib/calculator.rb +0 -24
  330. data/examples/i18n/uz/Rakefile +0 -6
  331. data/examples/i18n/uz/features/addition.feature +0 -10
  332. data/examples/i18n/uz/features/consecutive_calculations.feature +0 -17
  333. data/examples/i18n/uz/features/division.feature +0 -17
  334. data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +0 -19
  335. data/examples/i18n/uz/features/support/env.rb +0 -5
  336. data/examples/i18n/uz/features/support/world.rb +0 -8
  337. data/examples/i18n/uz/lib/calculator.rb +0 -24
  338. data/examples/i18n/zh-CN/Rakefile +0 -4
  339. data/examples/i18n/zh-CN/features/addition.feature +0 -18
  340. data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +0 -26
  341. data/examples/i18n/zh-CN/lib/calculator.rb +0 -10
  342. data/examples/i18n/zh-TW/Rakefile +0 -4
  343. data/examples/i18n/zh-TW/features/addition.feature +0 -17
  344. data/examples/i18n/zh-TW/features/division.feature +0 -11
  345. data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +0 -24
  346. data/examples/i18n/zh-TW/lib/calculator.rb +0 -14
  347. data/examples/rspec_doubles/Rakefile +0 -4
  348. data/examples/rspec_doubles/features/mocking.feature +0 -9
  349. data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +0 -19
  350. data/examples/rspec_doubles/features/support/env.rb +0 -12
  351. data/examples/sinatra/README.textile +0 -13
  352. data/examples/sinatra/Rakefile +0 -6
  353. data/examples/sinatra/app.rb +0 -14
  354. data/examples/sinatra/features/add.feature +0 -11
  355. data/examples/sinatra/features/step_definitions/add_steps.rb +0 -15
  356. data/examples/sinatra/features/support/env.rb +0 -10
  357. data/examples/sinatra/views/add.erb +0 -7
  358. data/examples/sinatra/views/layout.erb +0 -8
  359. data/examples/tcl/README.textile +0 -11
  360. data/examples/tcl/Rakefile +0 -6
  361. data/examples/tcl/features/fibonnacci.feature +0 -17
  362. data/examples/tcl/features/step_definitions/fib_steps.rb +0 -7
  363. data/examples/tcl/features/support/env.rb +0 -6
  364. data/examples/tcl/src/fib.tcl +0 -3
  365. data/examples/test_unit/Gemfile +0 -4
  366. data/examples/test_unit/Rakefile +0 -6
  367. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +0 -20
  368. data/examples/test_unit/features/test_unit.feature +0 -9
  369. data/examples/watir/README.textile +0 -16
  370. data/examples/watir/Rakefile +0 -12
  371. data/examples/watir/cucumber.yml +0 -1
  372. data/examples/watir/features/search.feature +0 -12
  373. data/examples/watir/features/step_definitions/search_steps.rb +0 -26
  374. data/examples/watir/features/support/env.rb +0 -35
  375. data/examples/watir/features/support/screenshots.rb +0 -47
  376. data/features/docs/api/list_step_defs_as_json.feature +0 -64
  377. data/features/docs/api/listen_for_events.feature +0 -59
  378. data/features/docs/api/run_cli_main_with_existing_runtime.feature +0 -27
  379. data/features/docs/cli/backtraces.feature +0 -36
  380. data/features/docs/cli/dry_run.feature +0 -73
  381. data/features/docs/cli/exclude_files.feature +0 -18
  382. data/features/docs/cli/execute_with_tag_filter.feature +0 -117
  383. data/features/docs/cli/fail_fast.feature +0 -48
  384. data/features/docs/cli/finding_steps.feature +0 -28
  385. data/features/docs/cli/help.feature +0 -8
  386. data/features/docs/cli/i18n.feature +0 -42
  387. data/features/docs/cli/randomize.feature +0 -140
  388. data/features/docs/cli/require.feature +0 -27
  389. data/features/docs/cli/retry_failing_tests.feature +0 -92
  390. data/features/docs/cli/run_scenarios_matching_name.feature +0 -105
  391. data/features/docs/cli/run_specific_scenarios.feature +0 -77
  392. data/features/docs/cli/showing_differences.feature +0 -43
  393. data/features/docs/cli/specifying_multiple_formatters.feature +0 -68
  394. data/features/docs/cli/strict_mode.feature +0 -70
  395. data/features/docs/defining_steps/nested_steps.feature +0 -181
  396. data/features/docs/defining_steps/nested_steps_i18n.feature +0 -37
  397. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +0 -56
  398. data/features/docs/defining_steps/one_line_step_definitions.feature +0 -65
  399. data/features/docs/defining_steps/printing_messages.feature +0 -147
  400. data/features/docs/defining_steps/skip_scenario.feature +0 -31
  401. data/features/docs/defining_steps/snippets.feature +0 -56
  402. data/features/docs/defining_steps/table_diffing.feature +0 -50
  403. data/features/docs/events/gherkin_source_read_event.feature +0 -43
  404. data/features/docs/events/step_activated_event.feature +0 -36
  405. data/features/docs/events/step_definition_registered_event.feature +0 -29
  406. data/features/docs/events/test_case_finished_event.feature +0 -35
  407. data/features/docs/events/test_case_starting_event.feature +0 -54
  408. data/features/docs/events/test_run_finished_event.feature +0 -40
  409. data/features/docs/events/test_run_starting_event.feature +0 -41
  410. data/features/docs/events/test_step_finished_event.feature +0 -47
  411. data/features/docs/events/test_step_starting_event.feature +0 -43
  412. data/features/docs/exception_in_after_hook.feature +0 -127
  413. data/features/docs/exception_in_after_step_hook.feature +0 -104
  414. data/features/docs/exception_in_around_hook.feature +0 -80
  415. data/features/docs/exception_in_before_hook.feature +0 -98
  416. data/features/docs/extending_cucumber/custom_filter.feature +0 -29
  417. data/features/docs/extending_cucumber/custom_formatter.feature +0 -122
  418. data/features/docs/formatters/api_methods.feature +0 -37
  419. data/features/docs/formatters/formatter_step_file_colon_line.feature +0 -44
  420. data/features/docs/formatters/html_formatter.feature +0 -91
  421. data/features/docs/formatters/json_formatter.feature +0 -767
  422. data/features/docs/formatters/junit_formatter.feature +0 -455
  423. data/features/docs/formatters/pretty_formatter.feature +0 -74
  424. data/features/docs/formatters/progress_formatter.feature +0 -32
  425. data/features/docs/formatters/rerun_formatter.feature +0 -190
  426. data/features/docs/formatters/summary_formatter.feature +0 -35
  427. data/features/docs/formatters/usage_formatter.feature +0 -101
  428. data/features/docs/getting_started.feature +0 -28
  429. data/features/docs/gherkin/background.feature +0 -548
  430. data/features/docs/gherkin/doc_strings.feature +0 -76
  431. data/features/docs/gherkin/expand_option_for_outlines.feature +0 -47
  432. data/features/docs/gherkin/language_from_header.feature +0 -32
  433. data/features/docs/gherkin/outlines.feature +0 -160
  434. data/features/docs/gherkin/unicode_table.feature +0 -33
  435. data/features/docs/gherkin/using_descriptions.feature +0 -83
  436. data/features/docs/gherkin/using_star_notation.feature +0 -37
  437. data/features/docs/iso-8859-1.feature +0 -6
  438. data/features/docs/post_configuration_hook.feature +0 -33
  439. data/features/docs/profiles.feature +0 -120
  440. data/features/docs/rake_task.feature +0 -146
  441. data/features/docs/raketask.feature +0 -46
  442. data/features/docs/work_in_progress.feature +0 -157
  443. data/features/docs/writing_support_code/after_hooks.feature +0 -102
  444. data/features/docs/writing_support_code/after_step_hooks.feature +0 -55
  445. data/features/docs/writing_support_code/around_hooks.feature +0 -266
  446. data/features/docs/writing_support_code/before_hook.feature +0 -66
  447. data/features/docs/writing_support_code/hook_order.feature +0 -63
  448. data/features/docs/writing_support_code/load_path.feature +0 -17
  449. data/features/docs/writing_support_code/parameter_types.feature +0 -75
  450. data/features/docs/writing_support_code/state.feature +0 -32
  451. data/features/docs/writing_support_code/tagged_hooks.feature +0 -95
  452. data/features/docs/writing_support_code/world.feature +0 -129
  453. data/features/lib/step_definitions/aruba_steps.rb +0 -21
  454. data/features/lib/step_definitions/cli_steps.rb +0 -4
  455. data/features/lib/step_definitions/cucumber_steps.rb +0 -75
  456. data/features/lib/step_definitions/iso-8859-1_steps.rb +0 -13
  457. data/features/lib/step_definitions/json_steps.rb +0 -8
  458. data/features/lib/step_definitions/junit_steps.rb +0 -14
  459. data/features/lib/step_definitions/language_steps.rb +0 -9
  460. data/features/lib/step_definitions/profile_steps.rb +0 -16
  461. data/features/lib/step_definitions/retry_steps.rb +0 -55
  462. data/features/lib/step_definitions/ruby_steps.rb +0 -4
  463. data/features/lib/support/env.rb +0 -22
  464. data/features/lib/support/fake_wire_server.rb +0 -86
  465. data/features/lib/support/feature_factory.rb +0 -68
  466. data/features/lib/support/normalise_output.rb +0 -52
  467. data/features/lib/support/parameter_types.rb +0 -8
  468. data/gem_tasks/contributors.rake +0 -19
  469. data/gem_tasks/cov.rake +0 -6
  470. data/gem_tasks/downloads.rb +0 -8
  471. data/gem_tasks/environment.rake +0 -4
  472. data/gem_tasks/examples.rake +0 -12
  473. data/gem_tasks/fix_cr_lf.rake +0 -11
  474. data/gem_tasks/flog.rake +0 -5
  475. data/gem_tasks/rspec.rake +0 -7
  476. data/gem_tasks/sass.rake +0 -5
  477. data/gem_tasks/stats +0 -16
  478. data/gem_tasks/versions.txt +0 -74
  479. data/lib/cucumber/formatter/cucumber.css +0 -286
  480. data/lib/cucumber/formatter/cucumber.sass +0 -247
  481. data/lib/cucumber/formatter/hook_query_visitor.rb +0 -41
  482. data/lib/cucumber/formatter/html_builder.rb +0 -110
  483. data/lib/cucumber/formatter/inline-js.js +0 -30
  484. data/lib/cucumber/formatter/jquery-min.js +0 -154
  485. data/lib/cucumber/formatter/json_pretty.rb +0 -11
  486. data/lib/cucumber/formatter/legacy_api/adapter.rb +0 -1012
  487. data/lib/cucumber/formatter/legacy_api/ast.rb +0 -386
  488. data/lib/cucumber/formatter/legacy_api/results.rb +0 -50
  489. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +0 -32
  490. data/lib/cucumber/step_argument.rb +0 -24
  491. data/scripts/invite-collaborator +0 -40
  492. data/scripts/update-history +0 -83
  493. data/spec/cucumber/cli/configuration_spec.rb +0 -434
  494. data/spec/cucumber/cli/main_spec.rb +0 -84
  495. data/spec/cucumber/cli/options_spec.rb +0 -445
  496. data/spec/cucumber/cli/profile_loader_spec.rb +0 -66
  497. data/spec/cucumber/cli/rerun_spec.rb +0 -86
  498. data/spec/cucumber/configuration_spec.rb +0 -148
  499. data/spec/cucumber/constantize_spec.rb +0 -20
  500. data/spec/cucumber/events_spec.rb +0 -9
  501. data/spec/cucumber/file_specs_spec.rb +0 -61
  502. data/spec/cucumber/filters/activate_steps_spec.rb +0 -152
  503. data/spec/cucumber/filters/gated_receiver_spec.rb +0 -48
  504. data/spec/cucumber/filters/retry_spec.rb +0 -98
  505. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +0 -39
  506. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +0 -58
  507. data/spec/cucumber/filters/tag_limits_spec.rb +0 -60
  508. data/spec/cucumber/formatter/ansicolor_spec.rb +0 -33
  509. data/spec/cucumber/formatter/backtrace_filter_spec.rb +0 -32
  510. data/spec/cucumber/formatter/console_counts_spec.rb +0 -14
  511. data/spec/cucumber/formatter/duration_spec.rb +0 -23
  512. data/spec/cucumber/formatter/fail_fast_spec.rb +0 -88
  513. data/spec/cucumber/formatter/html_spec.rb +0 -543
  514. data/spec/cucumber/formatter/interceptor_spec.rb +0 -137
  515. data/spec/cucumber/formatter/json_spec.rb +0 -840
  516. data/spec/cucumber/formatter/junit_spec.rb +0 -251
  517. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +0 -2187
  518. data/spec/cucumber/formatter/pretty_spec.rb +0 -920
  519. data/spec/cucumber/formatter/progress_spec.rb +0 -170
  520. data/spec/cucumber/formatter/rerun_spec.rb +0 -97
  521. data/spec/cucumber/formatter/spec_helper.rb +0 -84
  522. data/spec/cucumber/glue/proto_world_spec.rb +0 -63
  523. data/spec/cucumber/glue/registry_and_more_spec.rb +0 -213
  524. data/spec/cucumber/glue/snippet_spec.rb +0 -174
  525. data/spec/cucumber/glue/step_definition_spec.rb +0 -207
  526. data/spec/cucumber/hooks_spec.rb +0 -31
  527. data/spec/cucumber/multiline_argument/data_table_spec.rb +0 -648
  528. data/spec/cucumber/project_initializer_spec.rb +0 -88
  529. data/spec/cucumber/rake/forked_spec.rb +0 -54
  530. data/spec/cucumber/rake/task_spec.rb +0 -86
  531. data/spec/cucumber/running_test_case_spec.rb +0 -140
  532. data/spec/cucumber/runtime/for_programming_languages_spec.rb +0 -8
  533. data/spec/cucumber/runtime/support_code_spec.rb +0 -17
  534. data/spec/cucumber/runtime_spec.rb +0 -21
  535. data/spec/cucumber/sell_cucumbers.feature +0 -19
  536. data/spec/cucumber/step_argument_spec.rb +0 -19
  537. data/spec/cucumber/step_match_search_spec.rb +0 -113
  538. data/spec/cucumber/step_match_spec.rb +0 -86
  539. data/spec/cucumber/world/pending_spec.rb +0 -48
  540. data/spec/spec_helper.rb +0 -30
  541. data/spec/support/standard_step_actions.rb +0 -19
@@ -1,251 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'cucumber/formatter/spec_helper'
4
-
5
- require 'cucumber/formatter/junit'
6
- require 'nokogiri'
7
-
8
- module Cucumber
9
- module Formatter
10
- describe Junit do
11
- extend SpecHelperDsl
12
- include SpecHelper
13
-
14
- class TestDoubleJunitFormatter < Junit
15
- attr_reader :written_files
16
-
17
- def write_file(feature_filename, data)
18
- @written_files ||= {}
19
- @written_files[feature_filename] = data
20
- end
21
- end
22
-
23
- context 'With no options' do
24
- before(:each) do
25
- allow(File).to receive(:directory?) { true }
26
- @formatter = TestDoubleJunitFormatter.new(actual_runtime.configuration.with_options(out_stream: ''))
27
- end
28
-
29
- after(:each) do
30
- $stdout = STDOUT
31
- end
32
-
33
- describe 'is able to strip control chars from cdata' do
34
- before(:each) do
35
- run_defined_feature
36
- @doc = Nokogiri.XML(@formatter.written_files.values.first)
37
- end
38
- define_feature "
39
- Feature: One passing scenario, one failing scenario
40
-
41
- Scenario: Passing
42
- Given a passing ctrl scenario
43
- "
44
- class Junit
45
- def before_step(step)
46
- return unless step.name.match('a passing ctrl scenario')
47
- Interceptor::Pipe.unwrap! :stdout
48
- @fake_io = $stdout = StringIO.new
49
- $stdout.sync = true
50
- @interceptedout = Interceptor::Pipe.wrap(:stdout)
51
- end
52
-
53
- def after_step(step)
54
- return unless step.name.match('a passing ctrl scenario')
55
- @interceptedout.write("boo\b\cx\e\a\f boo ")
56
- $stdout = STDOUT
57
- @fake_io.close
58
- end
59
- end
60
-
61
- it { expect(@doc.xpath('//testsuite/testcase/system-out').first.content).to match(/\s+boo boo\s+/) }
62
- end
63
-
64
- describe 'a feature with no name' do
65
- define_feature <<-FEATURE
66
- Feature:
67
- Scenario: Passing
68
- Given a passing scenario
69
- FEATURE
70
-
71
- it 'raises an exception' do
72
- expect(-> {
73
- run_defined_feature
74
- }).to raise_error(Junit::UnNamedFeatureError)
75
- end
76
- end
77
-
78
- describe 'given a single feature' do
79
- before(:each) do
80
- run_defined_feature
81
- @doc = Nokogiri.XML(@formatter.written_files.values.first)
82
- end
83
-
84
- describe 'with a single scenario' do
85
- define_feature <<-FEATURE
86
- Feature: One passing scenario, one failing scenario
87
-
88
- Scenario: Passing
89
- Given a passing scenario
90
- FEATURE
91
-
92
- it { expect(@doc.to_s).to match(/One passing scenario, one failing scenario/) }
93
-
94
- it 'has not a root system-out node' do
95
- expect(@doc.xpath('//testsuite/system-out').size).to eq 0
96
- end
97
-
98
- it 'has not a root system-err node' do
99
- expect(@doc.xpath('//testsuite/system-err').size).to eq 0
100
- end
101
-
102
- it 'has a system-out node under <testcase/>' do
103
- expect(@doc.xpath('//testcase/system-out').size).to eq 1
104
- end
105
-
106
- it 'has a system-err node under <testcase/>' do
107
- expect(@doc.xpath('//testcase/system-err').size).to eq 1
108
- end
109
- end
110
-
111
- describe 'with a scenario in a subdirectory' do
112
- define_feature %{
113
- Feature: One passing scenario, one failing scenario
114
-
115
- Scenario: Passing
116
- Given a passing scenario
117
- }, File.join('features', 'some', 'path', 'spec.feature')
118
-
119
- it 'writes the filename including the subdirectory' do
120
- expect(@formatter.written_files.keys.first).to eq File.join('', 'TEST-features-some-path-spec.xml')
121
- end
122
- end
123
-
124
- describe 'with a scenario outline table' do
125
- define_steps do
126
- Given(/.*/) { }
127
- end
128
-
129
- define_feature <<-FEATURE
130
- Feature: Eat things when hungry
131
-
132
- Scenario Outline: Eat things
133
- Given <Things>
134
- And stuff:
135
- | foo |
136
- | bar |
137
-
138
- Examples: Good
139
- | Things |
140
- | Cucumber |
141
- | Whisky |
142
- Examples: Evil
143
- | Things |
144
- | Big Mac |
145
- FEATURE
146
-
147
- it { expect(@doc.to_s).to match(/Eat things when hungry/) }
148
- it { expect(@doc.to_s).to match(/Cucumber/) }
149
- it { expect(@doc.to_s).to match(/Whisky/) }
150
- it { expect(@doc.to_s).to match(/Big Mac/) }
151
- it { expect(@doc.to_s).not_to match(/Things/) }
152
- it { expect(@doc.to_s).not_to match(/Good|Evil/) }
153
- it { expect(@doc.to_s).not_to match(/type="skipped"/)}
154
- end
155
-
156
- describe 'scenario with skipped test in junit report' do
157
- define_feature <<-FEATURE
158
- Feature: junit report with skipped test
159
-
160
- Scenario Outline: skip a test and junit report of the same
161
- Given a <skip> scenario
162
-
163
- Examples:
164
- | skip |
165
- | undefined |
166
- | still undefined |
167
- FEATURE
168
-
169
- it { expect(@doc.to_s).to match(/skipped="2"/)}
170
- end
171
-
172
- describe 'with a regular data table scenario' do
173
- define_steps do
174
- Given(/the following items on a shortlist/) { |table| }
175
- When(/I go.*/) { }
176
- Then(/I should have visited at least/) { |table| }
177
- end
178
-
179
- define_feature <<-FEATURE
180
- Feature: Shortlist
181
-
182
- Scenario: Procure items
183
- Given the following items on a shortlist:
184
- | item |
185
- | milk |
186
- | cookies |
187
- When I get some..
188
- Then I'll eat 'em
189
-
190
- FEATURE
191
- # these type of tables shouldn't crash (or generate test cases)
192
- it { expect(@doc.to_s).not_to match(/milk/) }
193
- it { expect(@doc.to_s).not_to match(/cookies/) }
194
- end
195
- end
196
- end
197
-
198
- context 'In --expand mode' do
199
- let(:runtime) { Runtime.new({:expand => true}) }
200
- before(:each) do
201
- allow(File).to receive(:directory?) { true }
202
- @formatter = TestDoubleJunitFormatter.new(actual_runtime.configuration.with_options(out_stream: '', :expand => true))
203
- end
204
-
205
- after(:each) do
206
- $stdout = STDOUT
207
- end
208
-
209
- describe 'given a single feature' do
210
- before(:each) do
211
- run_defined_feature
212
- @doc = Nokogiri.XML(@formatter.written_files.values.first)
213
- end
214
-
215
- describe 'with a scenario outline table' do
216
- define_steps do
217
- Given(/.*/) { }
218
- end
219
-
220
- define_feature <<-FEATURE
221
- Feature: Eat things when hungry
222
-
223
- Scenario Outline: Eat things
224
- Given <Things>
225
- And stuff:
226
- | foo |
227
- | bar |
228
-
229
- Examples: Good
230
- | Things |
231
- | Cucumber |
232
- | Whisky |
233
- Examples: Evil
234
- | Things |
235
- | Big Mac |
236
- FEATURE
237
-
238
- it { expect(@doc.to_s).to match(/Eat things when hungry/) }
239
- it { expect(@doc.to_s).to match(/Cucumber/) }
240
- it { expect(@doc.to_s).to match(/Whisky/) }
241
- it { expect(@doc.to_s).to match(/Big Mac/) }
242
- it { expect(@doc.to_s).not_to match(/Things/) }
243
- it { expect(@doc.to_s).not_to match(/Good|Evil/) }
244
- it { expect(@doc.to_s).not_to match(/type="skipped"/)}
245
- end
246
- end
247
-
248
- end
249
- end
250
- end
251
- end
@@ -1,2187 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/formatter/legacy_api/adapter'
3
- require 'cucumber/core'
4
- require 'cucumber/core/gherkin/writer'
5
- require 'cucumber/runtime/step_hooks'
6
- require 'cucumber/runtime/before_hooks'
7
- require 'cucumber/runtime/after_hooks'
8
- require 'cucumber/filters'
9
- require 'spec_helper'
10
-
11
- module Cucumber
12
- module Formatter::LegacyApi
13
- describe Adapter do
14
- include Core::Gherkin::Writer
15
- include Core
16
-
17
- let!(:report) { Adapter.new(formatter, runtime.results, runtime.configuration) }
18
- let(:formatter) { double('formatter').as_null_object }
19
- let(:runtime) { Runtime.new }
20
- let(:events) { runtime.configuration.event_bus }
21
- let(:step_match_search) { SimpleStepDefinitionSearch.new }
22
-
23
- Failure = Class.new(StandardError)
24
-
25
- class SimpleStepMatch
26
- def initialize(&block)
27
- @block = block
28
- end
29
-
30
- def activate(test_step)
31
- test_step.with_action &@block
32
- end
33
- end
34
-
35
- class SimpleStepDefinitionSearch
36
- def call(name)
37
- if name =~ /pass/
38
- return [SimpleStepMatch.new {}]
39
- end
40
-
41
- if name =~ /fail/
42
- return [SimpleStepMatch.new { raise Failure }]
43
- end
44
-
45
- []
46
- end
47
- end
48
-
49
- class HookWrapper
50
- def initialize(proc)
51
- @proc = proc
52
- end
53
-
54
- def source_location
55
- @proc.source_location
56
- end
57
-
58
- def location
59
- source_location
60
- end
61
-
62
- def invoke(_pseudo_method, _arguments, &_block)
63
- @proc.call
64
- end
65
- end
66
-
67
- class AddBeforeAndAfterHooks < Core::Filter.new
68
- def test_case(test_case)
69
- steps = before_hooks(test_case.source) +
70
- test_case.test_steps +
71
- after_hooks(test_case.source)
72
- test_case.with_steps(steps).describe_to receiver
73
- end
74
-
75
- private
76
-
77
- def before_hooks(source)
78
- # The adapter is built on the assumption that each test case will have at least one step. This is annoying
79
- # for tests, but a safe assumption for production use as we always add one hook to initialize the world.
80
- hook = proc {}
81
- [ Hooks.before_hook(source, hook.source_location, &hook) ]
82
- end
83
-
84
- def after_hooks(source)
85
- # We add an after hook to make sure the adapter can cope with it
86
- hook = proc {}
87
- [ Hooks.after_hook(source, hook.source_location, &hook) ]
88
- end
89
- end
90
-
91
- context 'message order' do
92
- let(:formatter) { MessageSpy.new }
93
-
94
- it 'two features' do
95
- gherkin_docs = [
96
- gherkin do
97
- feature do
98
- scenario do
99
- step 'passing'
100
- end
101
- end
102
- end,
103
- gherkin do
104
- feature do
105
- scenario do
106
- step 'passing'
107
- end
108
- end
109
- end
110
- ]
111
- runner = Core::Test::Runner.new(events)
112
- compile gherkin_docs, runner, default_filters
113
- events.test_run_finished
114
- expect( formatter.legacy_messages ).to eq [
115
- :before_features,
116
- :before_feature,
117
- :before_tags,
118
- :after_tags,
119
- :feature_name,
120
- :before_feature_element,
121
- :before_tags,
122
- :after_tags,
123
- :scenario_name,
124
- :before_steps,
125
- :before_step,
126
- :before_step_result,
127
- :step_name,
128
- :after_step_result,
129
- :after_step,
130
- :after_steps,
131
- :after_feature_element,
132
- :after_feature,
133
- :before_feature,
134
- :before_tags,
135
- :after_tags,
136
- :feature_name,
137
- :before_feature_element,
138
- :before_tags,
139
- :after_tags,
140
- :scenario_name,
141
- :before_steps,
142
- :before_step,
143
- :before_step_result,
144
- :step_name,
145
- :after_step_result,
146
- :after_step,
147
- :after_steps,
148
- :after_feature_element,
149
- :after_feature,
150
- :after_features
151
- ]
152
- end
153
-
154
- it 'a scenario with no steps' do
155
- execute_gherkin do
156
- feature do
157
- scenario
158
- end
159
- end
160
-
161
- expect( formatter.legacy_messages ).to eq [
162
- :before_features,
163
- :before_feature,
164
- :before_tags,
165
- :after_tags,
166
- :feature_name,
167
- :before_feature_element,
168
- :before_tags,
169
- :after_tags,
170
- :scenario_name,
171
- :after_feature_element,
172
- :after_feature,
173
- :after_features
174
- ]
175
- end
176
-
177
- it 'a scenario with no steps coming after another scenario' do
178
- execute_gherkin do
179
- feature do
180
- scenario do
181
- step 'passing'
182
- end
183
- scenario
184
- end
185
- end
186
- expect( formatter.legacy_messages ).to eq [
187
- :before_features,
188
- :before_feature,
189
- :before_tags,
190
- :after_tags,
191
- :feature_name,
192
- :before_feature_element,
193
- :before_tags,
194
- :after_tags,
195
- :scenario_name,
196
- :before_steps,
197
- :before_step,
198
- :before_step_result,
199
- :step_name,
200
- :after_step_result,
201
- :after_step,
202
- :after_steps,
203
- :after_feature_element,
204
- :before_feature_element,
205
- :before_tags,
206
- :after_tags,
207
- :scenario_name,
208
- :after_feature_element,
209
- :after_feature,
210
- :after_features
211
- ]
212
- end
213
-
214
- it 'a scenario with one step' do
215
- execute_gherkin do
216
- feature do
217
- scenario do
218
- step 'passing'
219
- end
220
- end
221
- end
222
- expect( formatter.legacy_messages ).to eq [
223
- :before_features,
224
- :before_feature,
225
- :before_tags,
226
- :after_tags,
227
- :feature_name,
228
- :before_feature_element,
229
- :before_tags,
230
- :after_tags,
231
- :scenario_name,
232
- :before_steps,
233
- :before_step,
234
- :before_step_result,
235
- :step_name,
236
- :after_step_result,
237
- :after_step,
238
- :after_steps,
239
- :after_feature_element,
240
- :after_feature,
241
- :after_features
242
- ]
243
- end
244
-
245
- it 'a scenario with two steps, one of them failing' do
246
- execute_gherkin do
247
- feature do
248
- scenario do
249
- step 'passing'
250
- step 'failing'
251
- end
252
- end
253
- end
254
- expect( formatter.legacy_messages ).to eq [
255
- :before_features,
256
- :before_feature,
257
- :before_tags,
258
- :after_tags,
259
- :feature_name,
260
- :before_feature_element,
261
- :before_tags,
262
- :after_tags,
263
- :scenario_name,
264
- :before_steps,
265
- :before_step,
266
- :before_step_result,
267
- :step_name,
268
- :after_step_result,
269
- :after_step,
270
- :before_step,
271
- :before_step_result,
272
- :step_name,
273
- :exception,
274
- :after_step_result,
275
- :after_step,
276
- :after_steps,
277
- :after_feature_element,
278
- :after_feature,
279
- :after_features
280
- ]
281
- end
282
-
283
- it 'a feature with two scenarios' do
284
- execute_gherkin do
285
- feature do
286
- scenario do
287
- step 'passing'
288
- end
289
- scenario do
290
- step 'passing'
291
- end
292
- end
293
- end
294
- expect( formatter.legacy_messages ).to eq [
295
- :before_features,
296
- :before_feature,
297
- :before_tags,
298
- :after_tags,
299
- :feature_name,
300
- :before_feature_element,
301
- :before_tags,
302
- :after_tags,
303
- :scenario_name,
304
- :before_steps,
305
- :before_step,
306
- :before_step_result,
307
- :step_name,
308
- :after_step_result,
309
- :after_step,
310
- :after_steps,
311
- :after_feature_element,
312
- :before_feature_element,
313
- :before_tags,
314
- :after_tags,
315
- :scenario_name,
316
- :before_steps,
317
- :before_step,
318
- :before_step_result,
319
- :step_name,
320
- :after_step_result,
321
- :after_step,
322
- :after_steps,
323
- :after_feature_element,
324
- :after_feature,
325
- :after_features
326
- ]
327
- end
328
-
329
- it 'a feature with a background and an empty scenario' do
330
- execute_gherkin do
331
- feature do
332
- background do
333
- step 'passing'
334
- end
335
- scenario
336
- end
337
- end
338
- expect( formatter.legacy_messages ).to eq [
339
- :before_features,
340
- :before_feature,
341
- :before_tags,
342
- :after_tags,
343
- :feature_name,
344
- :before_background,
345
- :background_name,
346
- :before_steps,
347
- :before_step,
348
- :before_step_result,
349
- :step_name,
350
- :after_step_result,
351
- :after_step,
352
- :after_steps,
353
- :after_background,
354
- :before_feature_element,
355
- :before_tags,
356
- :after_tags,
357
- :scenario_name,
358
- :after_feature_element,
359
- :after_feature,
360
- :after_features
361
- ]
362
- end
363
-
364
- it 'a feature with a background and two scenarios' do
365
- execute_gherkin do
366
- feature do
367
- background do
368
- step 'passing'
369
- end
370
- scenario do
371
- step 'passing'
372
- end
373
- scenario do
374
- step 'passing'
375
- end
376
- end
377
- end
378
- expect( formatter.legacy_messages ).to eq [
379
- :before_features,
380
- :before_feature,
381
- :before_tags,
382
- :after_tags,
383
- :feature_name,
384
- :before_background,
385
- :background_name,
386
- :before_steps,
387
- :before_step,
388
- :before_step_result,
389
- :step_name,
390
- :after_step_result,
391
- :after_step,
392
- :after_steps,
393
- :after_background,
394
- :before_feature_element,
395
- :before_tags,
396
- :after_tags,
397
- :scenario_name,
398
- :before_steps,
399
- :before_step,
400
- :before_step_result,
401
- :step_name,
402
- :after_step_result,
403
- :after_step,
404
- :after_steps,
405
- :after_feature_element,
406
- :before_feature_element,
407
- :before_tags,
408
- :after_tags,
409
- :scenario_name,
410
- :before_steps,
411
- :before_step,
412
- :before_step_result,
413
- :step_name,
414
- :after_step_result,
415
- :after_step,
416
- :after_steps,
417
- :after_feature_element,
418
- :after_feature,
419
- :after_features
420
- ]
421
- end
422
-
423
- it 'a feature with a background and one scenario and one scenario outline' do
424
- execute_gherkin do
425
- feature do
426
- background do
427
- step 'passing'
428
- end
429
- scenario do
430
- step 'passing'
431
- end
432
- scenario_outline do
433
- step '<result>ing'
434
- examples do
435
- row 'result'
436
- row 'pass'
437
- end
438
- end
439
- end
440
- end
441
- expect( formatter.legacy_messages ).to eq [
442
- :before_features,
443
- :before_feature,
444
- :before_tags,
445
- :after_tags,
446
- :feature_name,
447
- :before_background,
448
- :background_name,
449
- :before_steps,
450
- :before_step,
451
- :before_step_result,
452
- :step_name,
453
- :after_step_result,
454
- :after_step,
455
- :after_steps,
456
- :after_background,
457
- :before_feature_element,
458
- :before_tags,
459
- :after_tags,
460
- :scenario_name,
461
- :before_steps,
462
- :before_step,
463
- :before_step_result,
464
- :step_name,
465
- :after_step_result,
466
- :after_step,
467
- :after_steps,
468
- :after_feature_element,
469
- :before_feature_element,
470
- :before_tags,
471
- :after_tags,
472
- :scenario_name,
473
- :before_steps,
474
- :before_step,
475
- :before_step_result,
476
- :step_name,
477
- :after_step_result,
478
- :after_step,
479
- :after_steps,
480
- :before_examples_array,
481
- :before_examples,
482
- :before_tags,
483
- :after_tags,
484
- :examples_name,
485
- :before_outline_table,
486
- :before_table_row,
487
- :before_table_cell,
488
- :table_cell_value,
489
- :after_table_cell,
490
- :after_table_row,
491
- :before_table_row,
492
- :before_table_cell,
493
- :table_cell_value,
494
- :after_table_cell,
495
- :after_table_row,
496
- :after_outline_table,
497
- :after_examples,
498
- :after_examples_array,
499
- :after_feature_element,
500
- :after_feature,
501
- :after_features
502
- ]
503
- end
504
-
505
- it 'a feature with a background and one scenario outline and one scenario' do
506
- execute_gherkin do
507
- feature do
508
- background do
509
- step 'passing'
510
- end
511
- scenario_outline do
512
- step '<result>ing'
513
- examples do
514
- row 'result'
515
- row 'pass'
516
- end
517
- end
518
- scenario do
519
- step 'passing'
520
- end
521
- end
522
- end
523
- expect( formatter.legacy_messages ).to eq [
524
- :before_features,
525
- :before_feature,
526
- :before_tags,
527
- :after_tags,
528
- :feature_name,
529
- :before_background,
530
- :background_name,
531
- :before_steps,
532
- :before_step,
533
- :before_step_result,
534
- :step_name,
535
- :after_step_result,
536
- :after_step,
537
- :after_steps,
538
- :after_background,
539
- :before_feature_element,
540
- :before_tags,
541
- :after_tags,
542
- :scenario_name,
543
- :before_steps,
544
- :before_step,
545
- :before_step_result,
546
- :step_name,
547
- :after_step_result,
548
- :after_step,
549
- :after_steps,
550
- :before_examples_array,
551
- :before_examples,
552
- :before_tags,
553
- :after_tags,
554
- :examples_name,
555
- :before_outline_table,
556
- :before_table_row,
557
- :before_table_cell,
558
- :table_cell_value,
559
- :after_table_cell,
560
- :after_table_row,
561
- :before_table_row,
562
- :before_table_cell,
563
- :table_cell_value,
564
- :after_table_cell,
565
- :after_table_row,
566
- :after_outline_table,
567
- :after_examples,
568
- :after_examples_array,
569
- :after_feature_element,
570
- :before_feature_element,
571
- :before_tags,
572
- :after_tags,
573
- :scenario_name,
574
- :before_steps,
575
- :before_step,
576
- :before_step_result,
577
- :step_name,
578
- :after_step_result,
579
- :after_step,
580
- :after_steps,
581
- :after_feature_element,
582
- :after_feature,
583
- :after_features
584
- ]
585
- end
586
-
587
- it 'a feature with a background and two scenario outlines' do
588
- execute_gherkin do
589
- feature do
590
- background do
591
- step 'passing'
592
- end
593
- scenario_outline do
594
- step '<result>ing'
595
- examples do
596
- row 'result'
597
- row 'pass'
598
- end
599
- end
600
- scenario_outline do
601
- step '<result>ing'
602
- examples do
603
- row 'result'
604
- row 'pass'
605
- end
606
- end
607
- end
608
- end
609
- expect( formatter.legacy_messages ).to eq [
610
- :before_features,
611
- :before_feature,
612
- :before_tags,
613
- :after_tags,
614
- :feature_name,
615
- :before_background,
616
- :background_name,
617
- :before_steps,
618
- :before_step,
619
- :before_step_result,
620
- :step_name,
621
- :after_step_result,
622
- :after_step,
623
- :after_steps,
624
- :after_background,
625
- :before_feature_element,
626
- :before_tags,
627
- :after_tags,
628
- :scenario_name,
629
- :before_steps,
630
- :before_step,
631
- :before_step_result,
632
- :step_name,
633
- :after_step_result,
634
- :after_step,
635
- :after_steps,
636
- :before_examples_array,
637
- :before_examples,
638
- :before_tags,
639
- :after_tags,
640
- :examples_name,
641
- :before_outline_table,
642
- :before_table_row,
643
- :before_table_cell,
644
- :table_cell_value,
645
- :after_table_cell,
646
- :after_table_row,
647
- :before_table_row,
648
- :before_table_cell,
649
- :table_cell_value,
650
- :after_table_cell,
651
- :after_table_row,
652
- :after_outline_table,
653
- :after_examples,
654
- :after_examples_array,
655
- :after_feature_element,
656
- :before_feature_element,
657
- :before_tags,
658
- :after_tags,
659
- :scenario_name,
660
- :before_steps,
661
- :before_step,
662
- :before_step_result,
663
- :step_name,
664
- :after_step_result,
665
- :after_step,
666
- :after_steps,
667
- :before_examples_array,
668
- :before_examples,
669
- :before_tags,
670
- :after_tags,
671
- :examples_name,
672
- :before_outline_table,
673
- :before_table_row,
674
- :before_table_cell,
675
- :table_cell_value,
676
- :after_table_cell,
677
- :after_table_row,
678
- :before_table_row,
679
- :before_table_cell,
680
- :table_cell_value,
681
- :after_table_cell,
682
- :after_table_row,
683
- :after_outline_table,
684
- :after_examples,
685
- :after_examples_array,
686
- :after_feature_element,
687
- :after_feature,
688
- :after_features
689
- ]
690
- end
691
-
692
- it 'a feature with a background and one scenario outline with two rows' do
693
- execute_gherkin do
694
- feature do
695
- background do
696
- step 'passing'
697
- end
698
- scenario_outline do
699
- step '<result>ing'
700
- examples do
701
- row 'result'
702
- row 'pass'
703
- row 'pass'
704
- end
705
- end
706
- end
707
- end
708
- expect( formatter.legacy_messages ).to eq [
709
- :before_features,
710
- :before_feature,
711
- :before_tags,
712
- :after_tags,
713
- :feature_name,
714
- :before_background,
715
- :background_name,
716
- :before_steps,
717
- :before_step,
718
- :before_step_result,
719
- :step_name,
720
- :after_step_result,
721
- :after_step,
722
- :after_steps,
723
- :after_background,
724
- :before_feature_element,
725
- :before_tags,
726
- :after_tags,
727
- :scenario_name,
728
- :before_steps,
729
- :before_step,
730
- :before_step_result,
731
- :step_name,
732
- :after_step_result,
733
- :after_step,
734
- :after_steps,
735
- :before_examples_array,
736
- :before_examples,
737
- :before_tags,
738
- :after_tags,
739
- :examples_name,
740
- :before_outline_table,
741
- :before_table_row,
742
- :before_table_cell,
743
- :table_cell_value,
744
- :after_table_cell,
745
- :after_table_row,
746
- :before_table_row,
747
- :before_table_cell,
748
- :table_cell_value,
749
- :after_table_cell,
750
- :after_table_row,
751
- :before_table_row,
752
- :before_table_cell,
753
- :table_cell_value,
754
- :after_table_cell,
755
- :after_table_row,
756
- :after_outline_table,
757
- :after_examples,
758
- :after_examples_array,
759
- :after_feature_element,
760
- :after_feature,
761
- :after_features
762
- ]
763
- end
764
-
765
- it 'a feature with a background and one scenario outline with two examples tables' do
766
- execute_gherkin do
767
- feature do
768
- background do
769
- step 'passing'
770
- end
771
- scenario_outline do
772
- step '<result>ing'
773
- examples do
774
- row 'result'
775
- row 'pass'
776
- end
777
- examples do
778
- row 'result'
779
- row 'pass'
780
- end
781
- end
782
- end
783
- end
784
- expect( formatter.legacy_messages ).to eq [
785
- :before_features,
786
- :before_feature,
787
- :before_tags,
788
- :after_tags,
789
- :feature_name,
790
- :before_background,
791
- :background_name,
792
- :before_steps,
793
- :before_step,
794
- :before_step_result,
795
- :step_name,
796
- :after_step_result,
797
- :after_step,
798
- :after_steps,
799
- :after_background,
800
- :before_feature_element,
801
- :before_tags,
802
- :after_tags,
803
- :scenario_name,
804
- :before_steps,
805
- :before_step,
806
- :before_step_result,
807
- :step_name,
808
- :after_step_result,
809
- :after_step,
810
- :after_steps,
811
- :before_examples_array,
812
- :before_examples,
813
- :before_tags,
814
- :after_tags,
815
- :examples_name,
816
- :before_outline_table,
817
- :before_table_row,
818
- :before_table_cell,
819
- :table_cell_value,
820
- :after_table_cell,
821
- :after_table_row,
822
- :before_table_row,
823
- :before_table_cell,
824
- :table_cell_value,
825
- :after_table_cell,
826
- :after_table_row,
827
- :after_outline_table,
828
- :after_examples,
829
- :before_examples,
830
- :before_tags,
831
- :after_tags,
832
- :examples_name,
833
- :before_outline_table,
834
- :before_table_row,
835
- :before_table_cell,
836
- :table_cell_value,
837
- :after_table_cell,
838
- :after_table_row,
839
- :before_table_row,
840
- :before_table_cell,
841
- :table_cell_value,
842
- :after_table_cell,
843
- :after_table_row,
844
- :after_outline_table,
845
- :after_examples,
846
- :after_examples_array,
847
- :after_feature_element,
848
- :after_feature,
849
- :after_features
850
- ]
851
- end
852
-
853
- it 'a feature with a background with two steps' do
854
- execute_gherkin do
855
- feature do
856
- background do
857
- step 'passing'
858
- step 'passing'
859
- end
860
- scenario do
861
- step 'passing'
862
- end
863
- end
864
- end
865
- expect( formatter.legacy_messages ).to eq [
866
- :before_features,
867
- :before_feature,
868
- :before_tags,
869
- :after_tags,
870
- :feature_name,
871
- :before_background,
872
- :background_name,
873
- :before_steps,
874
- :before_step,
875
- :before_step_result,
876
- :step_name,
877
- :after_step_result,
878
- :after_step,
879
- :before_step,
880
- :before_step_result,
881
- :step_name,
882
- :after_step_result,
883
- :after_step,
884
- :after_steps,
885
- :after_background,
886
- :before_feature_element,
887
- :before_tags,
888
- :after_tags,
889
- :scenario_name,
890
- :before_steps,
891
- :before_step,
892
- :before_step_result,
893
- :step_name,
894
- :after_step_result,
895
- :after_step,
896
- :after_steps,
897
- :after_feature_element,
898
- :after_feature,
899
- :after_features
900
- ]
901
- end
902
-
903
- it 'a feature with a background' do
904
- execute_gherkin do
905
- feature do
906
- background do
907
- step 'passing'
908
- end
909
- scenario do
910
- step 'passing'
911
- end
912
- end
913
- end
914
- expect( formatter.legacy_messages ).to eq [
915
- :before_features,
916
- :before_feature,
917
- :before_tags,
918
- :after_tags,
919
- :feature_name,
920
- :before_background,
921
- :background_name,
922
- :before_steps,
923
- :before_step,
924
- :before_step_result,
925
- :step_name,
926
- :after_step_result,
927
- :after_step,
928
- :after_steps,
929
- :after_background,
930
- :before_feature_element,
931
- :before_tags,
932
- :after_tags,
933
- :scenario_name,
934
- :before_steps,
935
- :before_step,
936
- :before_step_result,
937
- :step_name,
938
- :after_step_result,
939
- :after_step,
940
- :after_steps,
941
- :after_feature_element,
942
- :after_feature,
943
- :after_features
944
- ]
945
- end
946
-
947
- it 'scenario outline' do
948
- execute_gherkin do
949
- feature do
950
- scenario_outline do
951
- step '<result>ing'
952
- examples do
953
- row 'result'
954
- row 'pass'
955
- end
956
- end
957
- end
958
- end
959
- expect( formatter.legacy_messages ).to eq [
960
- :before_features,
961
- :before_feature,
962
- :before_tags,
963
- :after_tags,
964
- :feature_name,
965
- :before_feature_element,
966
- :before_tags,
967
- :after_tags,
968
- :scenario_name,
969
- :before_steps,
970
- :before_step,
971
- :before_step_result,
972
- :step_name,
973
- :after_step_result,
974
- :after_step,
975
- :after_steps,
976
- :before_examples_array,
977
- :before_examples,
978
- :before_tags,
979
- :after_tags,
980
- :examples_name,
981
- :before_outline_table,
982
- :before_table_row,
983
- :before_table_cell,
984
- :table_cell_value,
985
- :after_table_cell,
986
- :after_table_row,
987
- :before_table_row,
988
- :before_table_cell,
989
- :table_cell_value,
990
- :after_table_cell,
991
- :after_table_row,
992
- :after_outline_table,
993
- :after_examples,
994
- :after_examples_array,
995
- :after_feature_element,
996
- :after_feature,
997
- :after_features
998
- ]
999
- end
1000
-
1001
- it 'scenario outline after scenario' do
1002
- execute_gherkin do
1003
- feature do
1004
- scenario do
1005
- step 'passing'
1006
- end
1007
- scenario_outline do
1008
- step '<result>ing'
1009
- examples do
1010
- row 'result'
1011
- row 'pass'
1012
- end
1013
- end
1014
- end
1015
- end
1016
- expect( formatter.legacy_messages ).to eq [
1017
- :before_features,
1018
- :before_feature,
1019
- :before_tags,
1020
- :after_tags,
1021
- :feature_name,
1022
- :before_feature_element,
1023
- :before_tags,
1024
- :after_tags,
1025
- :scenario_name,
1026
- :before_steps,
1027
- :before_step,
1028
- :before_step_result,
1029
- :step_name,
1030
- :after_step_result,
1031
- :after_step,
1032
- :after_steps,
1033
- :after_feature_element,
1034
- :before_feature_element,
1035
- :before_tags,
1036
- :after_tags,
1037
- :scenario_name,
1038
- :before_steps,
1039
- :before_step,
1040
- :before_step_result,
1041
- :step_name,
1042
- :after_step_result,
1043
- :after_step,
1044
- :after_steps,
1045
- :before_examples_array,
1046
- :before_examples,
1047
- :before_tags,
1048
- :after_tags,
1049
- :examples_name,
1050
- :before_outline_table,
1051
- :before_table_row,
1052
- :before_table_cell,
1053
- :table_cell_value,
1054
- :after_table_cell,
1055
- :after_table_row,
1056
- :before_table_row,
1057
- :before_table_cell,
1058
- :table_cell_value,
1059
- :after_table_cell,
1060
- :after_table_row,
1061
- :after_outline_table,
1062
- :after_examples,
1063
- :after_examples_array,
1064
- :after_feature_element,
1065
- :after_feature,
1066
- :after_features
1067
- ]
1068
- end
1069
-
1070
- it 'scenario outline before scenario' do
1071
- execute_gherkin do
1072
- feature do
1073
- scenario_outline do
1074
- step '<result>ing'
1075
- examples do
1076
- row 'result'
1077
- row 'pass'
1078
- end
1079
- end
1080
- scenario do
1081
- step 'passing'
1082
- end
1083
- end
1084
- end
1085
- expect( formatter.legacy_messages ).to eq [
1086
- :before_features,
1087
- :before_feature,
1088
- :before_tags,
1089
- :after_tags,
1090
- :feature_name,
1091
- :before_feature_element,
1092
- :before_tags,
1093
- :after_tags,
1094
- :scenario_name,
1095
- :before_steps,
1096
- :before_step,
1097
- :before_step_result,
1098
- :step_name,
1099
- :after_step_result,
1100
- :after_step,
1101
- :after_steps,
1102
- :before_examples_array,
1103
- :before_examples,
1104
- :before_tags,
1105
- :after_tags,
1106
- :examples_name,
1107
- :before_outline_table,
1108
- :before_table_row,
1109
- :before_table_cell,
1110
- :table_cell_value,
1111
- :after_table_cell,
1112
- :after_table_row,
1113
- :before_table_row,
1114
- :before_table_cell,
1115
- :table_cell_value,
1116
- :after_table_cell,
1117
- :after_table_row,
1118
- :after_outline_table,
1119
- :after_examples,
1120
- :after_examples_array,
1121
- :after_feature_element,
1122
- :before_feature_element,
1123
- :before_tags,
1124
- :after_tags,
1125
- :scenario_name,
1126
- :before_steps,
1127
- :before_step,
1128
- :before_step_result,
1129
- :step_name,
1130
- :after_step_result,
1131
- :after_step,
1132
- :after_steps,
1133
- :after_feature_element,
1134
- :after_feature,
1135
- :after_features
1136
- ]
1137
- end
1138
-
1139
- it 'scenario outline two rows' do
1140
- execute_gherkin do
1141
- feature do
1142
- scenario_outline do
1143
- step '<result>ing'
1144
- examples do
1145
- row 'result'
1146
- row 'pass'
1147
- row 'pass'
1148
- end
1149
- end
1150
- end
1151
- end
1152
- expect( formatter.legacy_messages ).to eq [
1153
- :before_features,
1154
- :before_feature,
1155
- :before_tags,
1156
- :after_tags,
1157
- :feature_name,
1158
- :before_feature_element,
1159
- :before_tags,
1160
- :after_tags,
1161
- :scenario_name,
1162
- :before_steps,
1163
- :before_step,
1164
- :before_step_result,
1165
- :step_name,
1166
- :after_step_result,
1167
- :after_step,
1168
- :after_steps,
1169
- :before_examples_array,
1170
- :before_examples,
1171
- :before_tags,
1172
- :after_tags,
1173
- :examples_name,
1174
- :before_outline_table,
1175
- :before_table_row,
1176
- :before_table_cell,
1177
- :table_cell_value,
1178
- :after_table_cell,
1179
- :after_table_row,
1180
- :before_table_row,
1181
- :before_table_cell,
1182
- :table_cell_value,
1183
- :after_table_cell,
1184
- :after_table_row,
1185
- :before_table_row,
1186
- :before_table_cell,
1187
- :table_cell_value,
1188
- :after_table_cell,
1189
- :after_table_row,
1190
- :after_outline_table,
1191
- :after_examples,
1192
- :after_examples_array,
1193
- :after_feature_element,
1194
- :after_feature,
1195
- :after_features
1196
- ]
1197
- end
1198
-
1199
- it 'scenario outline two examples tables' do
1200
- execute_gherkin do
1201
- feature do
1202
- scenario_outline do
1203
- step '<result>ing'
1204
- examples do
1205
- row 'result'
1206
- row 'pass'
1207
- end
1208
- examples do
1209
- row 'result'
1210
- row 'pass'
1211
- end
1212
- end
1213
- end
1214
- end
1215
- expect( formatter.legacy_messages ).to eq [
1216
- :before_features,
1217
- :before_feature,
1218
- :before_tags,
1219
- :after_tags,
1220
- :feature_name,
1221
- :before_feature_element,
1222
- :before_tags,
1223
- :after_tags,
1224
- :scenario_name,
1225
- :before_steps,
1226
- :before_step,
1227
- :before_step_result,
1228
- :step_name,
1229
- :after_step_result,
1230
- :after_step,
1231
- :after_steps,
1232
- :before_examples_array,
1233
- :before_examples,
1234
- :before_tags,
1235
- :after_tags,
1236
- :examples_name,
1237
- :before_outline_table,
1238
- :before_table_row,
1239
- :before_table_cell,
1240
- :table_cell_value,
1241
- :after_table_cell,
1242
- :after_table_row,
1243
- :before_table_row,
1244
- :before_table_cell,
1245
- :table_cell_value,
1246
- :after_table_cell,
1247
- :after_table_row,
1248
- :after_outline_table,
1249
- :after_examples,
1250
- :before_examples,
1251
- :before_tags,
1252
- :after_tags,
1253
- :examples_name,
1254
- :before_outline_table,
1255
- :before_table_row,
1256
- :before_table_cell,
1257
- :table_cell_value,
1258
- :after_table_cell,
1259
- :after_table_row,
1260
- :before_table_row,
1261
- :before_table_cell,
1262
- :table_cell_value,
1263
- :after_table_cell,
1264
- :after_table_row,
1265
- :after_outline_table,
1266
- :after_examples,
1267
- :after_examples_array,
1268
- :after_feature_element,
1269
- :after_feature,
1270
- :after_features
1271
- ]
1272
- end
1273
-
1274
- it 'two scenario outline' do
1275
- execute_gherkin do
1276
- feature do
1277
- scenario_outline do
1278
- step '<result>ing'
1279
- examples do
1280
- row 'result'
1281
- row 'pass'
1282
- end
1283
- end
1284
- scenario_outline do
1285
- step '<result>ing'
1286
- examples do
1287
- row 'result'
1288
- row 'pass'
1289
- end
1290
- end
1291
- end
1292
- end
1293
- expect( formatter.legacy_messages ).to eq [
1294
- :before_features,
1295
- :before_feature,
1296
- :before_tags,
1297
- :after_tags,
1298
- :feature_name,
1299
- :before_feature_element,
1300
- :before_tags,
1301
- :after_tags,
1302
- :scenario_name,
1303
- :before_steps,
1304
- :before_step,
1305
- :before_step_result,
1306
- :step_name,
1307
- :after_step_result,
1308
- :after_step,
1309
- :after_steps,
1310
- :before_examples_array,
1311
- :before_examples,
1312
- :before_tags,
1313
- :after_tags,
1314
- :examples_name,
1315
- :before_outline_table,
1316
- :before_table_row,
1317
- :before_table_cell,
1318
- :table_cell_value,
1319
- :after_table_cell,
1320
- :after_table_row,
1321
- :before_table_row,
1322
- :before_table_cell,
1323
- :table_cell_value,
1324
- :after_table_cell,
1325
- :after_table_row,
1326
- :after_outline_table,
1327
- :after_examples,
1328
- :after_examples_array,
1329
- :after_feature_element,
1330
- :before_feature_element,
1331
- :before_tags,
1332
- :after_tags,
1333
- :scenario_name,
1334
- :before_steps,
1335
- :before_step,
1336
- :before_step_result,
1337
- :step_name,
1338
- :after_step_result,
1339
- :after_step,
1340
- :after_steps,
1341
- :before_examples_array,
1342
- :before_examples,
1343
- :before_tags,
1344
- :after_tags,
1345
- :examples_name,
1346
- :before_outline_table,
1347
- :before_table_row,
1348
- :before_table_cell,
1349
- :table_cell_value,
1350
- :after_table_cell,
1351
- :after_table_row,
1352
- :before_table_row,
1353
- :before_table_cell,
1354
- :table_cell_value,
1355
- :after_table_cell,
1356
- :after_table_row,
1357
- :after_outline_table,
1358
- :after_examples,
1359
- :after_examples_array,
1360
- :after_feature_element,
1361
- :after_feature,
1362
- :after_features
1363
- ]
1364
- end
1365
-
1366
- it 'failing scenario outline' do
1367
- execute_gherkin do
1368
- feature do
1369
- scenario_outline do
1370
- step '<result>ing'
1371
- examples do
1372
- row 'result'
1373
- row 'fail'
1374
- end
1375
- end
1376
- end
1377
- end
1378
- expect( formatter.legacy_messages ).to eq [
1379
- :before_features,
1380
- :before_feature,
1381
- :before_tags,
1382
- :after_tags,
1383
- :feature_name,
1384
- :before_feature_element,
1385
- :before_tags,
1386
- :after_tags,
1387
- :scenario_name,
1388
- :before_steps,
1389
- :before_step,
1390
- :before_step_result,
1391
- :step_name,
1392
- :after_step_result,
1393
- :after_step,
1394
- :after_steps,
1395
- :before_examples_array,
1396
- :before_examples,
1397
- :before_tags,
1398
- :after_tags,
1399
- :examples_name,
1400
- :before_outline_table,
1401
- :before_table_row,
1402
- :before_table_cell,
1403
- :table_cell_value,
1404
- :after_table_cell,
1405
- :after_table_row,
1406
- :before_table_row,
1407
- :before_table_cell,
1408
- :table_cell_value,
1409
- :after_table_cell,
1410
- :after_table_row,
1411
- :after_outline_table,
1412
- :after_examples,
1413
- :after_examples_array,
1414
- :after_feature_element,
1415
- :after_feature,
1416
- :after_features
1417
- ]
1418
- end
1419
-
1420
- it 'a feature with a failing background and two scenarios' do
1421
- execute_gherkin do
1422
- feature do
1423
- background do
1424
- step 'failing'
1425
- end
1426
- scenario do
1427
- step 'passing'
1428
- end
1429
- scenario do
1430
- step 'passing'
1431
- end
1432
- end
1433
- end
1434
- expect( formatter.legacy_messages ).to eq [
1435
- :before_features,
1436
- :before_feature,
1437
- :before_tags,
1438
- :after_tags,
1439
- :feature_name,
1440
- :before_background,
1441
- :background_name,
1442
- :before_steps,
1443
- :before_step,
1444
- :before_step_result,
1445
- :step_name,
1446
- :exception,
1447
- :after_step_result,
1448
- :after_step,
1449
- :after_steps,
1450
- :after_background,
1451
- :before_feature_element,
1452
- :before_tags,
1453
- :after_tags,
1454
- :scenario_name,
1455
- :before_steps,
1456
- :before_step,
1457
- :before_step_result,
1458
- :step_name,
1459
- :after_step_result,
1460
- :after_step,
1461
- :after_steps,
1462
- :after_feature_element,
1463
- :before_feature_element,
1464
- :before_tags,
1465
- :after_tags,
1466
- :scenario_name,
1467
- :before_steps,
1468
- :before_step,
1469
- :before_step_result,
1470
- :step_name,
1471
- :after_step_result,
1472
- :after_step,
1473
- :after_steps,
1474
- :after_feature_element,
1475
- :after_feature,
1476
- :after_features
1477
- ]
1478
- end
1479
-
1480
- context 'in expand mode' do
1481
- let(:runtime) { Runtime.new expand: true }
1482
- let(:formatter) { MessageSpy.new }
1483
-
1484
- it 'scenario outline two rows' do
1485
- execute_gherkin do
1486
- feature do
1487
- scenario_outline do
1488
- step '<result>ing'
1489
- examples do
1490
- row 'result'
1491
- row 'pass'
1492
- row 'pass'
1493
- end
1494
- end
1495
- end
1496
- end
1497
- expect( formatter.legacy_messages ).to eq [
1498
- :before_features,
1499
- :before_feature,
1500
- :before_tags,
1501
- :after_tags,
1502
- :feature_name,
1503
- :before_feature_element,
1504
- :before_tags,
1505
- :after_tags,
1506
- :scenario_name,
1507
- :before_steps,
1508
- :before_step,
1509
- :before_step_result,
1510
- :step_name,
1511
- :after_step_result,
1512
- :after_step,
1513
- :after_steps,
1514
- :before_examples_array,
1515
- :before_examples,
1516
- :before_tags,
1517
- :after_tags,
1518
- :examples_name,
1519
- :before_outline_table,
1520
- :scenario_name,
1521
- :before_step,
1522
- :before_step_result,
1523
- :step_name,
1524
- :after_step_result,
1525
- :after_step,
1526
- :scenario_name,
1527
- :before_step,
1528
- :before_step_result,
1529
- :step_name,
1530
- :after_step_result,
1531
- :after_step,
1532
- :after_outline_table,
1533
- :after_examples,
1534
- :after_examples_array,
1535
- :after_feature_element,
1536
- :after_feature,
1537
- :after_features
1538
- ]
1539
- end
1540
- end
1541
-
1542
- context 'with exception in after step hook' do
1543
-
1544
- class FailingAfterStepHook
1545
- def find_after_step_hooks(_test_case)
1546
- failing_hook = HookWrapper.new(proc { raise Failure })
1547
- Runtime::StepHooks.new [failing_hook]
1548
- end
1549
- end
1550
-
1551
- it 'prints the exception within the step' do
1552
- filters = [
1553
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1554
- Filters::ApplyAfterStepHooks.new(FailingAfterStepHook.new),
1555
- AddBeforeAndAfterHooks.new
1556
- ]
1557
- execute_gherkin(filters) do
1558
- feature do
1559
- scenario do
1560
- step 'passing'
1561
- end
1562
- end
1563
- end
1564
- expect( formatter.legacy_messages ).to eq([
1565
- :before_features,
1566
- :before_feature,
1567
- :before_tags,
1568
- :after_tags,
1569
- :feature_name,
1570
- :before_feature_element,
1571
- :before_tags,
1572
- :after_tags,
1573
- :scenario_name,
1574
- :before_steps,
1575
- :before_step,
1576
- :before_step_result,
1577
- :step_name,
1578
- :after_step_result,
1579
- :after_step,
1580
- :exception,
1581
- :after_steps,
1582
- :after_feature_element,
1583
- :after_feature,
1584
- :after_features
1585
- ])
1586
- end
1587
- end
1588
-
1589
- context 'with exception in a single before hook' do
1590
- class FailingBeforeHook
1591
- def apply_before_hooks(test_case)
1592
- failing_hook = HookWrapper.new(proc { raise Failure })
1593
- Runtime::BeforeHooks.new([failing_hook], RunningTestCase.new(test_case)).apply_to(test_case)
1594
- end
1595
- end
1596
-
1597
- it 'prints the exception after the scenario name' do
1598
- filters = [
1599
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1600
- Filters::ApplyBeforeHooks.new(FailingBeforeHook.new),
1601
- AddBeforeAndAfterHooks.new
1602
- ]
1603
- execute_gherkin(filters) do
1604
- feature do
1605
- scenario do
1606
- step 'passing'
1607
- end
1608
- end
1609
- end
1610
-
1611
- expect( formatter.legacy_messages ).to eq([
1612
- :before_features,
1613
- :before_feature,
1614
- :before_tags,
1615
- :after_tags,
1616
- :feature_name,
1617
- :before_feature_element,
1618
- :before_tags,
1619
- :after_tags,
1620
- :scenario_name,
1621
- :exception,
1622
- :before_steps,
1623
- :before_step,
1624
- :before_step_result,
1625
- :step_name,
1626
- :after_step_result,
1627
- :after_step,
1628
- :after_steps,
1629
- :after_feature_element,
1630
- :after_feature,
1631
- :after_features
1632
- ])
1633
- end
1634
-
1635
- it 'prints the exception after the background name' do
1636
- filters = [
1637
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1638
- Filters::ApplyBeforeHooks.new(FailingBeforeHook.new),
1639
- AddBeforeAndAfterHooks.new
1640
- ]
1641
- execute_gherkin(filters) do
1642
- feature do
1643
- background do
1644
- step 'passing'
1645
- end
1646
- scenario do
1647
- step 'passing'
1648
- end
1649
- end
1650
- end
1651
-
1652
- expect( formatter.legacy_messages ).to eq([
1653
- :before_features,
1654
- :before_feature,
1655
- :before_tags,
1656
- :after_tags,
1657
- :feature_name,
1658
- :before_background,
1659
- :background_name,
1660
- :exception,
1661
- :before_steps,
1662
- :before_step,
1663
- :before_step_result,
1664
- :step_name,
1665
- :after_step_result,
1666
- :after_step,
1667
- :after_steps,
1668
- :after_background,
1669
- :before_feature_element,
1670
- :before_tags,
1671
- :after_tags,
1672
- :scenario_name,
1673
- :before_steps,
1674
- :before_step,
1675
- :before_step_result,
1676
- :step_name,
1677
- :after_step_result,
1678
- :after_step,
1679
- :after_steps,
1680
- :after_feature_element,
1681
- :after_feature,
1682
- :after_features
1683
- ])
1684
- end
1685
-
1686
-
1687
- it 'prints the exception before the examples table row' do
1688
- filters = [
1689
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1690
- Filters::ApplyBeforeHooks.new(FailingBeforeHook.new),
1691
- AddBeforeAndAfterHooks.new
1692
- ]
1693
- execute_gherkin(filters) do
1694
- feature do
1695
- scenario_outline do
1696
- step '<status>ing'
1697
- examples do
1698
- row 'status'
1699
- row 'pass'
1700
- end
1701
- end
1702
- end
1703
- end
1704
-
1705
- expect( formatter.legacy_messages ).to eq([
1706
- :before_features,
1707
- :before_feature,
1708
- :before_tags,
1709
- :after_tags,
1710
- :feature_name,
1711
- :before_feature_element,
1712
- :before_tags,
1713
- :after_tags,
1714
- :scenario_name,
1715
- :before_steps,
1716
- :before_step,
1717
- :before_step_result,
1718
- :step_name,
1719
- :after_step_result,
1720
- :after_step,
1721
- :after_steps,
1722
- :before_examples_array,
1723
- :before_examples,
1724
- :before_tags,
1725
- :after_tags,
1726
- :examples_name,
1727
- :before_outline_table,
1728
- :before_table_row,
1729
- :before_table_cell,
1730
- :table_cell_value,
1731
- :after_table_cell,
1732
- :after_table_row,
1733
- :exception,
1734
- :before_table_row,
1735
- :before_table_cell,
1736
- :table_cell_value,
1737
- :after_table_cell,
1738
- :after_table_row,
1739
- :after_outline_table,
1740
- :after_examples,
1741
- :after_examples_array,
1742
- :after_feature_element,
1743
- :after_feature,
1744
- :after_features
1745
- ])
1746
- end
1747
- end
1748
-
1749
- context 'with exception in the first of several before hooks' do
1750
- # This proves that the second before hook's result doesn't overwrite
1751
- # the result of the first one.
1752
- class FailingAndPassingBeforeHooks
1753
- def apply_before_hooks(test_case)
1754
- failing_hook = HookWrapper.new(proc { raise Failure })
1755
- passing_hook = HookWrapper.new(proc {})
1756
- Runtime::BeforeHooks.new([failing_hook, passing_hook], RunningTestCase.new(test_case)).apply_to(test_case)
1757
- end
1758
- end
1759
-
1760
- it 'prints the exception after the scenario name' do
1761
- filters = [
1762
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1763
- Filters::ApplyBeforeHooks.new(FailingAndPassingBeforeHooks.new),
1764
- AddBeforeAndAfterHooks.new
1765
- ]
1766
- execute_gherkin(filters) do
1767
- feature do
1768
- scenario do
1769
- step 'passing'
1770
- end
1771
- end
1772
- end
1773
-
1774
- expect( formatter.legacy_messages ).to eq([
1775
- :before_features,
1776
- :before_feature,
1777
- :before_tags,
1778
- :after_tags,
1779
- :feature_name,
1780
- :before_feature_element,
1781
- :before_tags,
1782
- :after_tags,
1783
- :scenario_name,
1784
- :exception,
1785
- :before_steps,
1786
- :before_step,
1787
- :before_step_result,
1788
- :step_name,
1789
- :after_step_result,
1790
- :after_step,
1791
- :after_steps,
1792
- :after_feature_element,
1793
- :after_feature,
1794
- :after_features
1795
- ])
1796
- end
1797
- end
1798
-
1799
- context 'with exception in after hooks' do
1800
-
1801
- class FailingAfterHook
1802
- def apply_after_hooks(test_case)
1803
- failing_hook = HookWrapper.new(proc { raise Failure })
1804
- Runtime::AfterHooks.new([failing_hook], RunningTestCase.new(test_case)).apply_to(test_case)
1805
- end
1806
- end
1807
-
1808
- it 'prints the exception after the steps' do
1809
- filters = [
1810
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1811
- Filters::ApplyAfterHooks.new(FailingAfterHook.new),
1812
- AddBeforeAndAfterHooks.new
1813
- ]
1814
- execute_gherkin(filters) do
1815
- feature do
1816
- scenario do
1817
- step 'passing'
1818
- end
1819
- end
1820
- end
1821
-
1822
- expect( formatter.legacy_messages ).to eq([
1823
- :before_features,
1824
- :before_feature,
1825
- :before_tags,
1826
- :after_tags,
1827
- :feature_name,
1828
- :before_feature_element,
1829
- :before_tags,
1830
- :after_tags,
1831
- :scenario_name,
1832
- :before_steps,
1833
- :before_step,
1834
- :before_step_result,
1835
- :step_name,
1836
- :after_step_result,
1837
- :after_step,
1838
- :after_steps,
1839
- :exception,
1840
- :after_feature_element,
1841
- :after_feature,
1842
- :after_features
1843
- ])
1844
- end
1845
-
1846
- it 'prints the exception after the examples table row' do
1847
- filters = [
1848
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1849
- Filters::ApplyAfterHooks.new(FailingAfterHook.new),
1850
- AddBeforeAndAfterHooks.new
1851
- ]
1852
- execute_gherkin(filters) do
1853
- feature do
1854
- scenario_outline do
1855
- step '<status>ing'
1856
- examples do
1857
- row 'status'
1858
- row 'pass'
1859
- end
1860
- end
1861
- end
1862
- end
1863
-
1864
- expect( formatter.legacy_messages ).to eq([
1865
- :before_features,
1866
- :before_feature,
1867
- :before_tags,
1868
- :after_tags,
1869
- :feature_name,
1870
- :before_feature_element,
1871
- :before_tags,
1872
- :after_tags,
1873
- :scenario_name,
1874
- :before_steps,
1875
- :before_step,
1876
- :before_step_result,
1877
- :step_name,
1878
- :after_step_result,
1879
- :after_step,
1880
- :after_steps,
1881
- :before_examples_array,
1882
- :before_examples,
1883
- :before_tags,
1884
- :after_tags,
1885
- :examples_name,
1886
- :before_outline_table,
1887
- :before_table_row,
1888
- :before_table_cell,
1889
- :table_cell_value,
1890
- :after_table_cell,
1891
- :after_table_row,
1892
- :before_table_row,
1893
- :before_table_cell,
1894
- :table_cell_value,
1895
- :after_table_cell,
1896
- :after_table_row,
1897
- :exception,
1898
- :after_outline_table,
1899
- :after_examples,
1900
- :after_examples_array,
1901
- :after_feature_element,
1902
- :after_feature,
1903
- :after_features
1904
- ])
1905
- end
1906
- end
1907
-
1908
- context 'with exception in the first of several after hooks' do
1909
- class FailingThenPassingAfterHooks
1910
- def apply_after_hooks(test_case)
1911
- failing_hook = HookWrapper.new(proc { raise Failure })
1912
- passing_hook = HookWrapper.new(proc {})
1913
- Runtime::AfterHooks.new([failing_hook, passing_hook], RunningTestCase.new(test_case)).apply_to(test_case)
1914
- end
1915
- end
1916
-
1917
- it 'prints the exception after the steps' do
1918
- filters = [
1919
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1920
- Filters::ApplyAfterHooks.new(FailingThenPassingAfterHooks.new),
1921
- AddBeforeAndAfterHooks.new
1922
- ]
1923
- execute_gherkin(filters) do
1924
- feature do
1925
- scenario do
1926
- step 'passing'
1927
- end
1928
- end
1929
- end
1930
-
1931
- expect( formatter.legacy_messages ).to eq([
1932
- :before_features,
1933
- :before_feature,
1934
- :before_tags,
1935
- :after_tags,
1936
- :feature_name,
1937
- :before_feature_element,
1938
- :before_tags,
1939
- :after_tags,
1940
- :scenario_name,
1941
- :before_steps,
1942
- :before_step,
1943
- :before_step_result,
1944
- :step_name,
1945
- :after_step_result,
1946
- :after_step,
1947
- :after_steps,
1948
- :exception,
1949
- :after_feature_element,
1950
- :after_feature,
1951
- :after_features
1952
- ])
1953
- end
1954
- end
1955
-
1956
- context 'with an exception in an after hook but no steps' do
1957
- it 'prints the exception after the scenario name' do
1958
- filters = [
1959
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
1960
- Filters::ApplyAfterHooks.new(FailingAfterHook.new),
1961
- AddBeforeAndAfterHooks.new
1962
- ]
1963
- execute_gherkin(filters) do
1964
- feature do
1965
- scenario do
1966
- end
1967
- end
1968
- end
1969
-
1970
- expect( formatter.legacy_messages ).to eq([
1971
- :before_features,
1972
- :before_feature,
1973
- :before_tags,
1974
- :after_tags,
1975
- :feature_name,
1976
- :before_feature_element,
1977
- :before_tags,
1978
- :after_tags,
1979
- :scenario_name,
1980
- :exception,
1981
- :after_feature_element,
1982
- :after_feature,
1983
- :after_features
1984
- ])
1985
- end
1986
- end
1987
-
1988
- context 'with an exception in an around hook before the test case is run' do
1989
- class FailingAroundHookBeforeRunningTestCase
1990
- def find_around_hooks(test_case)
1991
- [
1992
- Hooks.around_hook(test_case.source) { raise Failure }
1993
- ]
1994
- end
1995
- end
1996
-
1997
- it 'prints the exception after the scenario name' do
1998
- filters = [
1999
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
2000
- Filters::ApplyAroundHooks.new(FailingAroundHookBeforeRunningTestCase.new),
2001
- AddBeforeAndAfterHooks.new
2002
- ]
2003
- execute_gherkin(filters) do
2004
- feature do
2005
- scenario do
2006
- end
2007
- end
2008
- end
2009
-
2010
- expect( formatter.legacy_messages ).to eq([
2011
- :before_features,
2012
- :before_feature,
2013
- :before_tags,
2014
- :after_tags,
2015
- :feature_name,
2016
- :before_feature_element,
2017
- :before_tags,
2018
- :after_tags,
2019
- :scenario_name,
2020
- :exception,
2021
- :after_feature_element,
2022
- :after_feature,
2023
- :after_features
2024
- ])
2025
- end
2026
- end
2027
-
2028
- context 'with an exception in an around hook after the test case is run' do
2029
- class FailingAroundHookAfterRunningTestCase
2030
- def find_around_hooks(test_case)
2031
- [
2032
- Hooks.around_hook(test_case.source) { |run_test_case| run_test_case.call; raise Failure }
2033
- ]
2034
- end
2035
- end
2036
-
2037
- it 'prints the exception after the scenario name' do
2038
- filters = [
2039
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
2040
- Filters::ApplyAroundHooks.new(FailingAroundHookAfterRunningTestCase.new),
2041
- AddBeforeAndAfterHooks.new
2042
- ]
2043
- execute_gherkin(filters) do
2044
- feature do
2045
- scenario do
2046
- step
2047
- end
2048
- end
2049
- end
2050
-
2051
- expect( formatter.legacy_messages ).to eq([
2052
- :before_features,
2053
- :before_feature,
2054
- :before_tags,
2055
- :after_tags,
2056
- :feature_name,
2057
- :before_feature_element,
2058
- :before_tags,
2059
- :after_tags,
2060
- :scenario_name,
2061
- :before_steps,
2062
- :before_step,
2063
- :before_step_result,
2064
- :step_name,
2065
- :after_step_result,
2066
- :after_step,
2067
- :exception,
2068
- :after_steps,
2069
- :after_feature_element,
2070
- :after_feature,
2071
- :after_features
2072
- ])
2073
- end
2074
- end
2075
- end
2076
-
2077
- describe 'before_step_result message' do
2078
- context 'when the step matches' do
2079
- it 'sends the step match to the formatter' do
2080
- expect(formatter).to receive(:before_step_result) do |_, step_match, *|
2081
- expect(step_match).to be_a SimpleStepMatch
2082
- end
2083
- execute_gherkin do
2084
- feature do
2085
- scenario do
2086
- step 'passing'
2087
- end
2088
- end
2089
- end
2090
- end
2091
- end
2092
-
2093
- context "when the step doesn't match" do
2094
- it 'sends a null object to the formatter' do
2095
- end
2096
- end
2097
- end
2098
-
2099
- it 'passes nil as the multiline arg when there is none' do
2100
- expect(formatter).to receive(:after_step_result) do |keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line|
2101
- expect(multiline_arg).to be_nil
2102
- end
2103
- execute_gherkin do
2104
- feature do
2105
- scenario do
2106
- step 'passing'
2107
- end
2108
- end
2109
- end
2110
- end
2111
-
2112
- context 'after_feature_element callback' do
2113
- it 'passes an object reflecting the status of the scenario' do
2114
- expect( formatter ).to receive(:after_feature_element).once do |scenario|
2115
- expect( scenario ).to be_failed
2116
- end
2117
- execute_gherkin do
2118
- feature do
2119
- scenario do
2120
- step 'failing'
2121
- step 'this will be skipped'
2122
- end
2123
- end
2124
- end
2125
- end
2126
- end
2127
-
2128
- context 'in strict mode' do
2129
- let(:runtime) { Runtime.new strict: true }
2130
-
2131
- it 'passes an exception to the formatter for undefined steps' do
2132
- expect( formatter ).to receive(:exception) do |exception|
2133
- expect( exception.message ).to eq %{Undefined step: "this step is undefined"}
2134
- end
2135
- execute_gherkin do
2136
- feature do
2137
- scenario do
2138
- step 'this step is undefined'
2139
- end
2140
- end
2141
- end
2142
- end
2143
- end
2144
-
2145
- class MessageSpy
2146
- attr_reader :messages
2147
-
2148
- def initialize
2149
- @messages = []
2150
- end
2151
-
2152
- def legacy_messages
2153
- @messages - [
2154
- :before_test_step,
2155
- :before_test_case,
2156
- :after_test_step,
2157
- :after_test_case,
2158
- :done
2159
- ]
2160
- end
2161
-
2162
- def method_missing(message, *_args)
2163
- @messages << message
2164
- end
2165
-
2166
- def respond_to_missing?(_name, _include_private = false)
2167
- true
2168
- end
2169
- end
2170
-
2171
- def execute_gherkin(filters = default_filters, &gherkin)
2172
- runner = Core::Test::Runner.new(events)
2173
- compile [gherkin(&gherkin)], runner, filters
2174
- events.test_run_finished
2175
- self
2176
- end
2177
-
2178
- def default_filters
2179
- [
2180
- Filters::ActivateSteps.new(step_match_search, runtime.configuration),
2181
- AddBeforeAndAfterHooks.new
2182
- ]
2183
- end
2184
-
2185
- end
2186
- end
2187
- end