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

Sign up to get free protection for your applications and to get access to all the features.
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,137 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'cucumber/formatter/interceptor'
4
-
5
- module Cucumber::Formatter
6
- describe Interceptor::Pipe do
7
- let(:pipe) do
8
- pipe = double('original pipe')
9
-
10
- allow(pipe).to receive(:instance_of?) { true }
11
-
12
- pipe
13
- end
14
-
15
- describe '#wrap!' do
16
- it 'raises an ArgumentError if its not passed :stderr/:stdout' do
17
- expect {
18
- Interceptor::Pipe.wrap(:nonsense)
19
- }.to raise_error(ArgumentError)
20
- end
21
-
22
- context 'when passed :stderr' do
23
- before :each do
24
- @stderr = $stdout
25
- end
26
-
27
- it 'wraps $stderr' do
28
- wrapped = Interceptor::Pipe.wrap(:stderr)
29
-
30
- expect($stderr).to be_instance_of Interceptor::Pipe
31
- expect($stderr).to be wrapped
32
- end
33
-
34
- after :each do
35
- $stderr = @stderr
36
- end
37
- end
38
-
39
- context 'when passed :stdout' do
40
- before :each do
41
- @stdout = $stdout
42
- end
43
-
44
- it 'wraps $stdout' do
45
- wrapped = Interceptor::Pipe.wrap(:stdout)
46
-
47
- expect($stdout).to be_instance_of Interceptor::Pipe
48
- expect($stdout).to be wrapped
49
- end
50
-
51
- after :each do
52
- $stdout = @stdout
53
- end
54
- end
55
- end
56
-
57
- describe '#unwrap!' do
58
- before :each do
59
- @stdout = $stdout
60
- @wrapped = Interceptor::Pipe.wrap(:stdout)
61
- end
62
-
63
- it 'raises an ArgumentError if it wasn\'t passed :stderr/:stdout' do
64
- expect {
65
- Interceptor::Pipe.unwrap!(:nonsense)
66
- }.to raise_error(ArgumentError)
67
- end
68
-
69
- it 'resets $stdout when #unwrap! is called' do
70
- interceptor = Interceptor::Pipe.unwrap! :stdout
71
-
72
- expect(interceptor).to be_instance_of Interceptor::Pipe
73
- expect($stdout).not_to be interceptor
74
- end
75
-
76
- it 'noops if $stdout or $stderr has been overwritten' do
77
- $stdout = StringIO.new
78
- pipe = Interceptor::Pipe.unwrap! :stdout
79
- expect(pipe).to eq $stdout
80
-
81
- $stderr = StringIO.new
82
- pipe = Interceptor::Pipe.unwrap! :stderr
83
- expect(pipe).to eq $stderr
84
- end
85
-
86
- it 'disables the pipe bypass' do
87
- buffer = '(::)'
88
- Interceptor::Pipe.unwrap! :stdout
89
-
90
- expect(@wrapped).to receive(:write).with(buffer)
91
- expect(@wrapped.buffer).not_to receive(:<<)
92
-
93
- @wrapped.write(buffer)
94
- end
95
-
96
- after :each do
97
- $stdout = @stdout
98
- end
99
- end
100
-
101
- describe '#write' do
102
- let(:buffer) { 'Some stupid buffer' }
103
- let(:pi) { Interceptor::Pipe.new(pipe) }
104
-
105
- it 'writes arguments to the original pipe' do
106
- expect(pipe).to receive(:write).with(buffer) { buffer.size }
107
- expect(pi.write(buffer)).to eq buffer.size
108
- end
109
-
110
- it 'adds the buffer to its stored output' do
111
- allow(pipe).to receive(:write)
112
-
113
- pi.write(buffer)
114
-
115
- expect(pi.buffer).not_to be_empty
116
- expect(pi.buffer.first).to eq buffer
117
- end
118
- end
119
-
120
- describe '#method_missing' do
121
- let(:pi) { Interceptor::Pipe.new(pipe) }
122
-
123
- it 'passes #tty? to the original pipe' do
124
- expect(pipe).to receive(:tty?) { true }
125
- expect(pi.tty?).to be true
126
- end
127
- end
128
-
129
- describe '#respond_to' do
130
- let(:pi) { Interceptor::Pipe.wrap(:stderr) }
131
-
132
- it 'responds to all methods $stderr has' do
133
- $stderr.methods.each { |m| expect(pi.respond_to?(m)).to be true }
134
- end
135
- end
136
- end
137
- end
@@ -1,840 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'cucumber/formatter/spec_helper'
4
- require 'cucumber/formatter/json'
5
- require 'cucumber/cli/options'
6
- require 'multi_json'
7
-
8
- module Cucumber
9
- module Formatter
10
- describe Json do
11
- extend SpecHelperDsl
12
- include SpecHelper
13
-
14
- context 'Given a single feature' do
15
- before(:each) do
16
- @out = StringIO.new
17
- @formatter = Json.new(actual_runtime.configuration.with_options(out_stream: @out))
18
- run_defined_feature
19
- end
20
-
21
- describe 'with a scenario with no steps' do
22
- define_feature <<-FEATURE
23
- Feature: Banana party
24
-
25
- Scenario: Monkey eats bananas
26
- FEATURE
27
-
28
- it 'outputs the json data' do
29
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
30
- [{"id": "banana-party",
31
- "uri": "spec.feature",
32
- "keyword": "Feature",
33
- "name": "Banana party",
34
- "line": 1,
35
- "description": "",
36
- "elements":
37
- [{"id": "banana-party;monkey-eats-bananas",
38
- "keyword": "Scenario",
39
- "name": "Monkey eats bananas",
40
- "line": 3,
41
- "description": "",
42
- "type": "scenario"}]}]})
43
- end
44
- end
45
-
46
- describe 'with a scenario with an undefined step' do
47
- define_feature <<-FEATURE
48
- Feature: Banana party
49
-
50
- Scenario: Monkey eats bananas
51
- Given there are bananas
52
- FEATURE
53
-
54
- it 'outputs the json data' do
55
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
56
- [{"id": "banana-party",
57
- "uri": "spec.feature",
58
- "keyword": "Feature",
59
- "name": "Banana party",
60
- "line": 1,
61
- "description": "",
62
- "elements":
63
- [{"id": "banana-party;monkey-eats-bananas",
64
- "keyword": "Scenario",
65
- "name": "Monkey eats bananas",
66
- "line": 3,
67
- "description": "",
68
- "type": "scenario",
69
- "steps":
70
- [{"keyword": "Given ",
71
- "name": "there are bananas",
72
- "line": 4,
73
- "match": {"location": "spec.feature:4"},
74
- "result": {"status": "undefined"}}]}]}]})
75
- end
76
- end
77
-
78
- describe 'with a scenario with a passed step' do
79
- define_feature <<-FEATURE
80
- Feature: Banana party
81
-
82
- Scenario: Monkey eats bananas
83
- Given there are bananas
84
- FEATURE
85
-
86
- define_steps do
87
- Given(/^there are bananas$/) {}
88
- end
89
-
90
- it 'outputs the json data' do
91
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
92
- [{"id": "banana-party",
93
- "uri": "spec.feature",
94
- "keyword": "Feature",
95
- "name": "Banana party",
96
- "line": 1,
97
- "description": "",
98
- "elements":
99
- [{"id": "banana-party;monkey-eats-bananas",
100
- "keyword": "Scenario",
101
- "name": "Monkey eats bananas",
102
- "line": 3,
103
- "description": "",
104
- "type": "scenario",
105
- "steps":
106
- [{"keyword": "Given ",
107
- "name": "there are bananas",
108
- "line": 4,
109
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:87"},
110
- "result": {"status": "passed",
111
- "duration": 1}}]}]}]})
112
- end
113
- end
114
-
115
- describe 'with a scenario with a failed step' do
116
- define_feature <<-FEATURE
117
- Feature: Banana party
118
-
119
- Scenario: Monkey eats bananas
120
- Given there are bananas
121
- FEATURE
122
-
123
- define_steps do
124
- Given(/^there are bananas$/) { raise 'no bananas' }
125
- end
126
-
127
- it 'outputs the json data' do
128
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
129
- [{"id": "banana-party",
130
- "uri": "spec.feature",
131
- "keyword": "Feature",
132
- "name": "Banana party",
133
- "line": 1,
134
- "description": "",
135
- "elements":
136
- [{"id": "banana-party;monkey-eats-bananas",
137
- "keyword": "Scenario",
138
- "name": "Monkey eats bananas",
139
- "line": 3,
140
- "description": "",
141
- "type": "scenario",
142
- "steps":
143
- [{"keyword": "Given ",
144
- "name": "there are bananas",
145
- "line": 4,
146
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:124"},
147
- "result": {"status": "failed",
148
- "error_message": "no bananas (RuntimeError)\\n./spec/cucumber/formatter/json_spec.rb:124:in `/^there are bananas$/'\\nspec.feature:4:in `Given there are bananas'",
149
- "duration": 1}}]}]}]})
150
- end
151
- end
152
-
153
- describe 'with a scenario with a pending step' do
154
- define_feature <<-FEATURE
155
- Feature: Banana party
156
-
157
- Scenario: Monkey eats bananas
158
- Given there are bananas
159
- FEATURE
160
-
161
- define_steps do
162
- Given(/^there are bananas$/) { pending }
163
- end
164
-
165
- it 'outputs the json data' do
166
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
167
- [{"id": "banana-party",
168
- "uri": "spec.feature",
169
- "keyword": "Feature",
170
- "name": "Banana party",
171
- "line": 1,
172
- "description": "",
173
- "elements":
174
- [{"id": "banana-party;monkey-eats-bananas",
175
- "keyword": "Scenario",
176
- "name": "Monkey eats bananas",
177
- "line": 3,
178
- "description": "",
179
- "type": "scenario",
180
- "steps":
181
- [{"keyword": "Given ",
182
- "name": "there are bananas",
183
- "line": 4,
184
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:162"},
185
- "result": {"status": "pending",
186
- "error_message": "TODO (Cucumber::Pending)\\n./spec/cucumber/formatter/json_spec.rb:162:in `/^there are bananas$/'\\nspec.feature:4:in `Given there are bananas'",
187
- "duration": 1}}]}]}]})
188
- end
189
- end
190
-
191
- describe 'with a scenario outline with one example' do
192
- define_feature <<-FEATURE
193
- Feature: Banana party
194
-
195
- Scenario Outline: Monkey eats bananas
196
- Given there are <fruit>
197
-
198
- Examples: Fruit Table
199
- | fruit |
200
- | bananas |
201
- FEATURE
202
-
203
- define_steps do
204
- Given(/^there are bananas$/) {}
205
- end
206
-
207
- it 'outputs the json data' do
208
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
209
- [{"id": "banana-party",
210
- "uri": "spec.feature",
211
- "keyword": "Feature",
212
- "name": "Banana party",
213
- "line": 1,
214
- "description": "",
215
- "elements":
216
- [{"id": "banana-party;monkey-eats-bananas;fruit-table;2",
217
- "keyword": "Scenario Outline",
218
- "name": "Monkey eats bananas",
219
- "line": 8,
220
- "description": "",
221
- "type": "scenario",
222
- "steps":
223
- [{"keyword": "Given ",
224
- "name": "there are bananas",
225
- "line": 8,
226
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:204"},
227
- "result": {"status": "passed",
228
- "duration": 1}}]}]}]})
229
- end
230
- end
231
-
232
- describe 'with tags in the feature file' do
233
- define_feature <<-FEATURE
234
- @f
235
- Feature: Banana party
236
-
237
- @s
238
- Scenario: Monkey eats bananas
239
- Given there are bananas
240
-
241
- @so
242
- Scenario Outline: Monkey eats bananas
243
- Given there are <fruit>
244
-
245
- @ex
246
- Examples: Fruit Table
247
- | fruit |
248
- | bananas |
249
- FEATURE
250
-
251
- define_steps do
252
- Given(/^there are bananas$/) {}
253
- end
254
-
255
- it 'the tags are included in the json data' do
256
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
257
- [{"id": "banana-party",
258
- "uri": "spec.feature",
259
- "keyword": "Feature",
260
- "name": "Banana party",
261
- "line": 2,
262
- "description": "",
263
- "tags": [{"name": "@f",
264
- "line": 1}],
265
- "elements":
266
- [{"id": "banana-party;monkey-eats-bananas",
267
- "keyword": "Scenario",
268
- "name": "Monkey eats bananas",
269
- "line": 5,
270
- "description": "",
271
- "tags": [{"name": "@f",
272
- "line": 1},
273
- {"name": "@s",
274
- "line": 4}],
275
- "type": "scenario",
276
- "steps":
277
- [{"keyword": "Given ",
278
- "name": "there are bananas",
279
- "line": 6,
280
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:252"},
281
- "result": {"status": "passed",
282
- "duration": 1}}]},
283
- {"id": "banana-party;monkey-eats-bananas;fruit-table;2",
284
- "keyword": "Scenario Outline",
285
- "name": "Monkey eats bananas",
286
- "line": 15,
287
- "description": "",
288
- "tags": [{"name": "@f",
289
- "line": 1},
290
- {"name": "@so",
291
- "line": 8},
292
- {"name": "@ex",
293
- "line": 12}],
294
- "type": "scenario",
295
- "steps":
296
- [{"keyword": "Given ",
297
- "name": "there are bananas",
298
- "line": 15,
299
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:252"},
300
- "result": {"status": "passed",
301
- "duration": 1}}]}]}]})
302
- end
303
- end
304
-
305
- describe 'with comments in the feature file' do
306
- define_feature <<-FEATURE
307
- #feature comment
308
- Feature: Banana party
309
-
310
- #background comment
311
- Background: There are bananas
312
- Given there are bananas
313
-
314
- #scenario comment
315
- Scenario: Monkey eats bananas
316
- #step comment1
317
- Then the monkey eats bananas
318
-
319
- #scenario outline comment
320
- Scenario Outline: Monkey eats bananas
321
- #step comment2
322
- Then the monkey eats <fruit>
323
-
324
- #examples table comment
325
- Examples: Fruit Table
326
- | fruit |
327
- #examples table row comment
328
- | bananas |
329
- FEATURE
330
-
331
- define_steps do
332
- Given(/^there are bananas$/) {}
333
- Then(/^the monkey eats bananas$/) {}
334
- end
335
-
336
- it 'the comments are included in the json data' do
337
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
338
- [{"id": "banana-party",
339
- "uri": "spec.feature",
340
- "keyword": "Feature",
341
- "name": "Banana party",
342
- "line": 2,
343
- "description": "",
344
- "comments": [{"value": "#feature comment",
345
- "line": 1}],
346
- "elements":
347
- [{"keyword": "Background",
348
- "name": "There are bananas",
349
- "line": 5,
350
- "description": "",
351
- "comments": [{"value": "#background comment",
352
- "line": 4}],
353
- "type": "background",
354
- "steps":
355
- [{"keyword": "Given ",
356
- "name": "there are bananas",
357
- "line": 6,
358
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:332"},
359
- "result": {"status": "passed",
360
- "duration": 1}}]},
361
- {"id": "banana-party;monkey-eats-bananas",
362
- "keyword": "Scenario",
363
- "name": "Monkey eats bananas",
364
- "line": 9,
365
- "description": "",
366
- "comments": [{"value": "#scenario comment",
367
- "line": 8}],
368
- "type": "scenario",
369
- "steps":
370
- [{"keyword": "Then ",
371
- "name": "the monkey eats bananas",
372
- "line": 11,
373
- "comments": [{"value": "#step comment1",
374
- "line": 10}],
375
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:333"},
376
- "result": {"status": "passed",
377
- "duration": 1}}]},
378
- {"keyword": "Background",
379
- "name": "There are bananas",
380
- "line": 5,
381
- "description": "",
382
- "comments": [{"value": "#background comment",
383
- "line": 4}],
384
- "type": "background",
385
- "steps":
386
- [{"keyword": "Given ",
387
- "name": "there are bananas",
388
- "line": 6,
389
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:332"},
390
- "result": {"status": "passed",
391
- "duration": 1}}]},
392
- {"id": "banana-party;monkey-eats-bananas;fruit-table;2",
393
- "keyword": "Scenario Outline",
394
- "name": "Monkey eats bananas",
395
- "line": 22,
396
- "description": "",
397
- "comments": [{"value": "#scenario outline comment",
398
- "line": 13},
399
- {"value": "#examples table comment",
400
- "line": 18},
401
- {"value": "#examples table row comment",
402
- "line": 21}],
403
- "type": "scenario",
404
- "steps":
405
- [{"keyword": "Then ",
406
- "name": "the monkey eats bananas",
407
- "line": 22,
408
- "comments": [{"value": "#step comment2",
409
- "line": 15}],
410
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:333"},
411
- "result": {"status": "passed",
412
- "duration": 1}}]}]}]})
413
- end
414
- end
415
-
416
- describe 'with a scenario with a step with a doc string' do
417
- define_feature <<-FEATURE
418
- Feature: Banana party
419
-
420
- Scenario: Monkey eats bananas
421
- Given there are bananas
422
- """
423
- the doc string
424
- """
425
- FEATURE
426
-
427
- define_steps do
428
- Given(/^there are bananas$/) { |s| s }
429
- end
430
-
431
- it 'includes the doc string in the json data' do
432
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
433
- [{"id": "banana-party",
434
- "uri": "spec.feature",
435
- "keyword": "Feature",
436
- "name": "Banana party",
437
- "line": 1,
438
- "description": "",
439
- "elements":
440
- [{"id": "banana-party;monkey-eats-bananas",
441
- "keyword": "Scenario",
442
- "name": "Monkey eats bananas",
443
- "line": 3,
444
- "description": "",
445
- "type": "scenario",
446
- "steps":
447
- [{"keyword": "Given ",
448
- "name": "there are bananas",
449
- "line": 4,
450
- "doc_string": {"value": "the doc string",
451
- "content_type": "",
452
- "line": 5},
453
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:428"},
454
- "result": {"status": "passed",
455
- "duration": 1}}]}]}]})
456
- end
457
- end
458
-
459
- describe 'with a scenario with a step that use puts' do
460
- define_feature <<-FEATURE
461
- Feature: Banana party
462
-
463
- Scenario: Monkey eats bananas
464
- Given there are bananas
465
- FEATURE
466
-
467
- define_steps do
468
- Given(/^there are bananas$/) { puts 'from step' }
469
- end
470
-
471
- it 'includes the output from the step in the json data' do
472
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
473
- [{"id": "banana-party",
474
- "uri": "spec.feature",
475
- "keyword": "Feature",
476
- "name": "Banana party",
477
- "line": 1,
478
- "description": "",
479
- "elements":
480
- [{"id": "banana-party;monkey-eats-bananas",
481
- "keyword": "Scenario",
482
- "name": "Monkey eats bananas",
483
- "line": 3,
484
- "description": "",
485
- "type": "scenario",
486
- "steps":
487
- [{"keyword": "Given ",
488
- "name": "there are bananas",
489
- "line": 4,
490
- "output": ["from step"],
491
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:468"},
492
- "result": {"status": "passed",
493
- "duration": 1}}]}]}]})
494
- end
495
- end
496
-
497
- describe 'with a background' do
498
- define_feature <<-FEATURE
499
- Feature: Banana party
500
-
501
- Background: There are bananas
502
- Given there are bananas
503
-
504
- Scenario: Monkey eats bananas
505
- Then the monkey eats bananas
506
-
507
- Scenario: Monkey eats more bananas
508
- Then the monkey eats more bananas
509
- FEATURE
510
-
511
- it 'includes the background in the json data each time it is executed' do
512
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
513
- [{"id": "banana-party",
514
- "uri": "spec.feature",
515
- "keyword": "Feature",
516
- "name": "Banana party",
517
- "line": 1,
518
- "description": "",
519
- "elements":
520
- [{"keyword": "Background",
521
- "name": "There are bananas",
522
- "line": 3,
523
- "description": "",
524
- "type": "background",
525
- "steps":
526
- [{"keyword": "Given ",
527
- "name": "there are bananas",
528
- "line": 4,
529
- "match": {"location": "spec.feature:4"},
530
- "result": {"status": "undefined"}}]},
531
- {"id": "banana-party;monkey-eats-bananas",
532
- "keyword": "Scenario",
533
- "name": "Monkey eats bananas",
534
- "line": 6,
535
- "description": "",
536
- "type": "scenario",
537
- "steps":
538
- [{"keyword": "Then ",
539
- "name": "the monkey eats bananas",
540
- "line": 7,
541
- "match": {"location": "spec.feature:7"},
542
- "result": {"status": "undefined"}}]},
543
- {"keyword": "Background",
544
- "name": "There are bananas",
545
- "line": 3,
546
- "description": "",
547
- "type": "background",
548
- "steps":
549
- [{"keyword": "Given ",
550
- "name": "there are bananas",
551
- "line": 4,
552
- "match": {"location": "spec.feature:4"},
553
- "result": {"status": "undefined"}}]},
554
- {"id": "banana-party;monkey-eats-more-bananas",
555
- "keyword": "Scenario",
556
- "name": "Monkey eats more bananas",
557
- "line": 9,
558
- "description": "",
559
- "type": "scenario",
560
- "steps":
561
- [{"keyword": "Then ",
562
- "name": "the monkey eats more bananas",
563
- "line": 10,
564
- "match": {"location": "spec.feature:10"},
565
- "result": {"status": "undefined"}}]}]}]})
566
- end
567
- end
568
-
569
- describe 'with a scenario with a step that embeds data directly' do
570
- define_feature <<-FEATURE
571
- Feature: Banana party
572
-
573
- Scenario: Monkey eats bananas
574
- Given there are bananas
575
- FEATURE
576
-
577
- define_steps do
578
- Given(/^there are bananas$/) { data = 'YWJj'
579
- embed data, 'mime-type;base64' }
580
- end
581
-
582
- it 'includes the data from the step in the json data' do
583
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
584
- [{"id": "banana-party",
585
- "uri": "spec.feature",
586
- "keyword": "Feature",
587
- "name": "Banana party",
588
- "line": 1,
589
- "description": "",
590
- "elements":
591
- [{"id": "banana-party;monkey-eats-bananas",
592
- "keyword": "Scenario",
593
- "name": "Monkey eats bananas",
594
- "line": 3,
595
- "description": "",
596
- "type": "scenario",
597
- "steps":
598
- [{"keyword": "Given ",
599
- "name": "there are bananas",
600
- "line": 4,
601
- "embeddings": [{"mime_type": "mime-type",
602
- "data": "YWJj"}],
603
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:578"},
604
- "result": {"status": "passed",
605
- "duration": 1}}]}]}]})
606
- end
607
- end
608
-
609
- describe 'with a scenario with a step that embeds a file' do
610
- define_feature <<-FEATURE
611
- Feature: Banana party
612
-
613
- Scenario: Monkey eats bananas
614
- Given there are bananas
615
- FEATURE
616
-
617
- define_steps do
618
- Given(/^there are bananas$/) {
619
- RSpec::Mocks.allow_message(File, :file?) { true }
620
- f1 = RSpec::Mocks::Double.new
621
- RSpec::Mocks.allow_message(File, :open) { |&block| block.call(f1) }
622
- RSpec::Mocks.allow_message(f1, :read) { 'foo' }
623
- embed('out/snapshot.jpeg', 'image/png')
624
- }
625
- end
626
-
627
- it 'includes the file content in the json data' do
628
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
629
- [{"id": "banana-party",
630
- "uri": "spec.feature",
631
- "keyword": "Feature",
632
- "name": "Banana party",
633
- "line": 1,
634
- "description": "",
635
- "elements":
636
- [{"id": "banana-party;monkey-eats-bananas",
637
- "keyword": "Scenario",
638
- "name": "Monkey eats bananas",
639
- "line": 3,
640
- "description": "",
641
- "type": "scenario",
642
- "steps":
643
- [{"keyword": "Given ",
644
- "name": "there are bananas",
645
- "line": 4,
646
- "embeddings": [{"mime_type": "image/png",
647
- "data": "Zm9v"}],
648
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:618"},
649
- "result": {"status": "passed",
650
- "duration": 1}}]}]}]})
651
- end
652
- end
653
-
654
- describe 'with a scenario with hooks' do
655
- define_feature <<-FEATURE
656
- Feature: Banana party
657
-
658
- Scenario: Monkey eats bananas
659
- Given there are bananas
660
- FEATURE
661
-
662
- define_steps do
663
- Before() {}
664
- Before() {}
665
- After() {}
666
- After() {}
667
- AfterStep() {}
668
- AfterStep() {}
669
- Around() { |scenario, block| block.call }
670
- Given(/^there are bananas$/) {}
671
- end
672
-
673
- it 'includes all hooks except the around hook in the json data' do
674
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
675
- [{"id": "banana-party",
676
- "uri": "spec.feature",
677
- "keyword": "Feature",
678
- "name": "Banana party",
679
- "line": 1,
680
- "description": "",
681
- "elements":
682
- [{"id": "banana-party;monkey-eats-bananas",
683
- "keyword": "Scenario",
684
- "name": "Monkey eats bananas",
685
- "line": 3,
686
- "description": "",
687
- "type": "scenario",
688
- "before":
689
- [{"match": {"location": "spec/cucumber/formatter/json_spec.rb:663"},
690
- "result": {"status": "passed",
691
- "duration": 1}},
692
- {"match": {"location": "spec/cucumber/formatter/json_spec.rb:664"},
693
- "result": {"status": "passed",
694
- "duration": 1}}],
695
- "steps":
696
- [{"keyword": "Given ",
697
- "name": "there are bananas",
698
- "line": 4,
699
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:670"},
700
- "result": {"status": "passed",
701
- "duration": 1},
702
- "after":
703
- [{"match": {"location": "spec/cucumber/formatter/json_spec.rb:667"},
704
- "result": {"status": "passed",
705
- "duration": 1}},
706
- {"match": {"location": "spec/cucumber/formatter/json_spec.rb:668"},
707
- "result": {"status": "passed",
708
- "duration": 1}}]}],
709
- "after":
710
- [{"match": {"location": "spec/cucumber/formatter/json_spec.rb:666"},
711
- "result": {"status": "passed",
712
- "duration": 1}},
713
- {"match": {"location": "spec/cucumber/formatter/json_spec.rb:665"},
714
- "result": {"status": "passed",
715
- "duration": 1}}]}]}]})
716
- end
717
- end
718
-
719
- describe 'with a scenario when only an around hook is failing' do
720
- define_feature <<-FEATURE
721
- Feature: Banana party
722
-
723
- Scenario: Monkey eats bananas
724
- Given there are bananas
725
- FEATURE
726
-
727
- define_steps do
728
- Around() { |scenario, block| block.call; raise RuntimeError, 'error' }
729
- Given(/^there are bananas$/) {}
730
- end
731
-
732
- it 'includes the around hook result in the json data' do
733
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
734
- [{"id": "banana-party",
735
- "uri": "spec.feature",
736
- "keyword": "Feature",
737
- "name": "Banana party",
738
- "line": 1,
739
- "description": "",
740
- "elements":
741
- [{"id": "banana-party;monkey-eats-bananas",
742
- "keyword": "Scenario",
743
- "name": "Monkey eats bananas",
744
- "line": 3,
745
- "description": "",
746
- "type": "scenario",
747
- "steps":
748
- [{"keyword": "Given ",
749
- "name": "there are bananas",
750
- "line": 4,
751
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:729"},
752
- "result": {"status": "passed",
753
- "duration": 1}}],
754
- "around":
755
- [{"match": {"location": "unknown_hook_location:1"},
756
- "result": {"status": "failed",
757
- "error_message": "error (RuntimeError)\\n./spec/cucumber/formatter/json_spec.rb:728:in `Around'",
758
- "duration": 1}}]}]}]})
759
- end
760
- end
761
-
762
- describe 'with a scenario with a step with a data table' do
763
- define_feature <<-FEATURE
764
- Feature: Banana party
765
-
766
- Scenario: Monkey eats bananas
767
- Given there are bananas
768
- | aa | bb |
769
- | cc | dd |
770
- FEATURE
771
-
772
- define_steps do
773
- Given(/^there are bananas$/) { |s| s }
774
- end
775
-
776
- it 'includes the doc string in the json data' do
777
- expect(load_normalised_json(@out)).to eq MultiJson.load(%{
778
- [{"id": "banana-party",
779
- "uri": "spec.feature",
780
- "keyword": "Feature",
781
- "name": "Banana party",
782
- "line": 1,
783
- "description": "",
784
- "elements":
785
- [{"id": "banana-party;monkey-eats-bananas",
786
- "keyword": "Scenario",
787
- "name": "Monkey eats bananas",
788
- "line": 3,
789
- "description": "",
790
- "type": "scenario",
791
- "steps":
792
- [{"keyword": "Given ",
793
- "name": "there are bananas",
794
- "line": 4,
795
- "rows":
796
- [{"cells": ["aa", "bb"]},
797
- {"cells": ["cc", "dd"]}],
798
- "match": {"location": "spec/cucumber/formatter/json_spec.rb:773"},
799
- "result": {"status": "passed",
800
- "duration": 1}}]}]}]})
801
- end
802
- end
803
- end
804
-
805
- def load_normalised_json(out)
806
- normalise_json(MultiJson.load(out.string))
807
- end
808
-
809
- def normalise_json(json)
810
- #make sure duration was captured (should be >= 0)
811
- #then set it to what is "expected" since duration is dynamic
812
- json.each do |feature|
813
- elements = feature.fetch('elements') { [] }
814
- elements.each do |scenario|
815
- %w(steps before after around).each do |type|
816
- if scenario[type]
817
- scenario[type].each do |step_or_hook|
818
- normalise_json_step_or_hook(step_or_hook)
819
- if step_or_hook['after']
820
- step_or_hook['after'].each do |hook|
821
- normalise_json_step_or_hook(hook)
822
- end
823
- end
824
- end
825
- end
826
- end
827
- end
828
- end
829
- end
830
-
831
- def normalise_json_step_or_hook(step_or_hook)
832
- return unless step_or_hook['result'] && step_or_hook['result']['duration']
833
-
834
- expect(step_or_hook['result']['duration']).to be >= 0
835
- step_or_hook['result']['duration'] = 1
836
- end
837
-
838
- end
839
- end
840
- end