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,174 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'cucumber/cucumber_expressions/parameter_type_registry'
4
- require 'cucumber/cucumber_expressions/parameter_type'
5
- require 'cucumber/cucumber_expressions/cucumber_expression_generator'
6
- require 'cucumber/glue/snippet'
7
-
8
- module Cucumber
9
- module Glue
10
- describe Snippet do
11
- let(:code_keyword) { 'Given' }
12
-
13
- before do
14
- @step_text = 'we have a missing step'
15
- @multiline_argument = Core::Ast::EmptyMultilineArgument.new
16
- @registry = CucumberExpressions::ParameterTypeRegistry.new
17
- @cucumber_expression_generator = CucumberExpressions::CucumberExpressionGenerator.new(@registry)
18
- end
19
-
20
- let(:snippet) do
21
- snippet_class.new(@cucumber_expression_generator, code_keyword, @step_text, @multiline_argument)
22
- end
23
-
24
- def unindented(s)
25
- s.split("\n")[1..-2].join("\n").indent(-10)
26
- end
27
-
28
- describe Snippet::Regexp do
29
- let(:snippet_class) { Snippet::Regexp }
30
- let(:snippet_text) { snippet.to_s }
31
-
32
- it 'wraps snippet patterns in parentheses' do
33
- @step_text = 'A "string" with 4 spaces'
34
-
35
- expect(snippet_text).to eq unindented(%{
36
- Given(/^A "([^"]*)" with (\\d+) spaces$/) do |arg1, arg2|
37
- pending # Write code here that turns the phrase above into concrete actions
38
- end
39
- })
40
- end
41
-
42
- it 'recognises numbers in name and make according regexp' do
43
- @step_text = 'Cloud 9 yeah'
44
-
45
- expect(snippet_text).to eq unindented(%{
46
- Given(/^Cloud (\\d+) yeah$/) do |arg1|
47
- pending # Write code here that turns the phrase above into concrete actions
48
- end
49
- })
50
- end
51
-
52
- it 'recognises a mix of ints, strings and why not a table too' do
53
- @step_text = 'I have 9 "awesome" cukes in 37 "boxes"'
54
- @multiline_argument = Core::Ast::DataTable.new([[]], Core::Ast::Location.new(''))
55
-
56
- expect(snippet_text).to eq unindented(%{
57
- Given(/^I have (\\d+) "([^"]*)" cukes in (\\d+) "([^"]*)"$/) do |arg1, arg2, arg3, arg4, table|
58
- # table is a Cucumber::MultilineArgument::DataTable
59
- pending # Write code here that turns the phrase above into concrete actions
60
- end
61
- })
62
- end
63
-
64
- it 'recognises quotes in name and make according regexp' do
65
- @step_text = 'A "first" arg'
66
-
67
- expect(snippet_text).to eq unindented(%{
68
- Given(/^A "([^"]*)" arg$/) do |arg1|
69
- pending # Write code here that turns the phrase above into concrete actions
70
- end
71
- })
72
- end
73
-
74
- it 'recognises several quoted words in name and make according regexp and args' do
75
- @step_text = 'A "first" and "second" arg'
76
-
77
- expect(snippet_text).to eq unindented(%{
78
- Given(/^A "([^"]*)" and "([^"]*)" arg$/) do |arg1, arg2|
79
- pending # Write code here that turns the phrase above into concrete actions
80
- end
81
- })
82
- end
83
-
84
- it 'does not use quote group when there are no quotes' do
85
- @step_text = 'A first arg'
86
-
87
- expect(snippet_text).to eq unindented(%{
88
- Given(/^A first arg$/) do
89
- pending # Write code here that turns the phrase above into concrete actions
90
- end
91
- })
92
- end
93
-
94
- it 'is helpful with tables' do
95
- @step_text = 'A "first" arg'
96
- @multiline_argument = Core::Ast::DataTable.new([[]], Core::Ast::Location.new(''))
97
-
98
- expect(snippet_text).to eq unindented(%{
99
- Given(/^A "([^"]*)" arg$/) do |arg1, table|
100
- # table is a Cucumber::MultilineArgument::DataTable
101
- pending # Write code here that turns the phrase above into concrete actions
102
- end
103
- })
104
- end
105
-
106
- it 'is helpful with doc string' do
107
- @step_text = 'A "first" arg'
108
- @multiline_argument = MultilineArgument.from('', Core::Ast::Location.new(''))
109
-
110
- expect(snippet_text).to eq unindented(%{
111
- Given(/^A "([^"]*)" arg$/) do |arg1, string|
112
- pending # Write code here that turns the phrase above into concrete actions
113
- end
114
- })
115
- end
116
- end
117
-
118
- describe Snippet::Classic do
119
- let(:snippet_class) { Snippet::Classic }
120
-
121
- it 'renders snippet as unwrapped regular expression' do
122
- expect(snippet.to_s).to eq unindented(%{
123
- Given /^we have a missing step$/ do
124
- pending # Write code here that turns the phrase above into concrete actions
125
- end
126
- })
127
- end
128
- end
129
-
130
- describe Snippet::Percent do
131
- let(:snippet_class) { Snippet::Percent }
132
-
133
- it 'renders snippet as percent-style regular expression' do
134
- expect(snippet.to_s).to eq unindented(%{
135
- Given %r{^we have a missing step$} do
136
- pending # Write code here that turns the phrase above into concrete actions
137
- end
138
- })
139
- end
140
- end
141
-
142
- describe Snippet::CucumberExpression do
143
- let(:snippet_class) { Snippet::CucumberExpression }
144
-
145
- it 'renders snippet as cucumber expression' do
146
- @step_text = 'I have 2.3 cukes in my belly'
147
- @registry.define_parameter_type(CucumberExpressions::ParameterType.new(
148
- 'veg',
149
- /(cuke|banana)s?/,
150
- Object,
151
- ->(s) { s},
152
- true,
153
- false
154
- ))
155
- @registry.define_parameter_type(CucumberExpressions::ParameterType.new(
156
- 'cucumis',
157
- /(bella|cuke)s?/,
158
- Object,
159
- ->(s) { s},
160
- true,
161
- false
162
- ))
163
-
164
- expect(snippet.to_s).to eq unindented(%{
165
- Given("I have {float} {cucumis} in my belly") do |float, cucumis|
166
- # Given("I have {float} {veg} in my belly") do |float, veg|
167
- pending # Write code here that turns the phrase above into concrete actions
168
- end
169
- })
170
- end
171
- end
172
- end
173
- end
174
- end
@@ -1,207 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
- require 'cucumber/glue/registry_and_more'
4
-
5
- module Cucumber
6
- module Glue
7
- describe StepDefinition do
8
- let(:user_interface) { double('user interface') }
9
- let(:support_code) { Cucumber::Runtime::SupportCode.new(user_interface) }
10
- let(:registry) { support_code.registry }
11
- let(:scenario) { double('scenario', iso_code: 'en').as_null_object }
12
- let(:dsl) do
13
- registry
14
- Object.new.extend(Cucumber::Glue::Dsl)
15
- end
16
-
17
- before do
18
- registry.begin_scenario(scenario)
19
- $inside = nil
20
- end
21
-
22
- def run_step(text)
23
- step_match(text).invoke(MultilineArgument::None.new)
24
- end
25
-
26
- def step_match(text)
27
- StepMatchSearch.new(registry.method(:step_matches), Configuration.default).call(text).first
28
- end
29
-
30
- it 'allows calling of other steps' do
31
- dsl.Given(/Outside/) do
32
- step 'Inside'
33
- end
34
- dsl.Given(/Inside/) do
35
- $inside = true
36
- end
37
-
38
- run_step 'Outside'
39
-
40
- expect($inside).to be true
41
- end
42
-
43
- it 'allows calling of other steps with inline arg' do
44
- dsl.Given(/Outside/) do
45
- step 'Inside', table([['inside']])
46
- end
47
- dsl.Given(/Inside/) do |t|
48
- $inside = t.raw[0][0]
49
- end
50
-
51
- run_step 'Outside'
52
-
53
- expect($inside).to eq 'inside'
54
- end
55
-
56
- context 'mapping to world methods' do
57
- it 'calls a method on the world when specified with a symbol' do
58
- expect(registry.current_world).to receive(:with_symbol)
59
-
60
- dsl.Given(/With symbol/, :with_symbol)
61
-
62
- run_step 'With symbol'
63
- end
64
-
65
- it 'calls a method on a specified object' do
66
- target = double('target')
67
-
68
- allow(registry.current_world).to receive(:target) { target }
69
-
70
- dsl.Given(/With symbol on block/, :with_symbol, :on => lambda { target })
71
-
72
- expect(target).to receive(:with_symbol)
73
-
74
- run_step 'With symbol on block'
75
- end
76
-
77
- it 'calls a method on a specified world attribute' do
78
- target = double('target')
79
-
80
- allow(registry.current_world).to receive(:target) { target }
81
-
82
- dsl.Given(/With symbol on symbol/, :with_symbol, :on => :target)
83
-
84
- expect(target).to receive(:with_symbol)
85
-
86
- run_step 'With symbol on symbol'
87
- end
88
-
89
- it 'has the correct location' do
90
- dsl.Given(/With symbol/, :with_symbol)
91
- expect(step_match('With symbol').file_colon_line).to eq "spec/cucumber/glue/step_definition_spec.rb:#{__LINE__-1}"
92
- end
93
- end
94
-
95
- it 'raises UndefinedDynamicStep when inside step is not defined' do
96
- dsl.Given(/Outside/) do
97
- step 'Inside'
98
- end
99
-
100
- expect(-> {
101
- run_step 'Outside'
102
- }).to raise_error(Cucumber::UndefinedDynamicStep)
103
- end
104
-
105
- it 'raises UndefinedDynamicStep when an undefined step is parsed dynamically' do
106
- dsl.Given(/Outside/) do
107
- steps %{
108
- Given Inside
109
- }
110
- end
111
-
112
- expect(-> {
113
- run_step 'Outside'
114
- }).to raise_error(Cucumber::UndefinedDynamicStep)
115
- end
116
-
117
- it 'raises UndefinedDynamicStep when an undefined step with doc string is parsed dynamically' do
118
- dsl.Given(/Outside/) do
119
- steps %{
120
- Given Inside
121
- """
122
- abc
123
- """
124
- }
125
- end
126
-
127
- expect(-> {
128
- run_step 'Outside'
129
- }).to raise_error(Cucumber::UndefinedDynamicStep)
130
- end
131
-
132
- it 'raises UndefinedDynamicStep when an undefined step with data table is parsed dynamically' do
133
- dsl.Given(/Outside/) do
134
- steps %{
135
- Given Inside
136
- | a |
137
- | 1 |
138
- }
139
- end
140
-
141
- expect(-> {
142
- run_step 'Outside'
143
- }).to raise_error(Cucumber::UndefinedDynamicStep)
144
- end
145
-
146
- it 'allows forced pending' do
147
- dsl.Given(/Outside/) do
148
- pending('Do me!')
149
- end
150
-
151
- expect(-> {
152
- run_step 'Outside'
153
- }).to raise_error(Cucumber::Pending, 'Do me!')
154
- end
155
-
156
- it 'raises ArityMismatchError when the number of capture groups differs from the number of step arguments' do
157
- dsl.Given(/No group: \w+/) do |arg|
158
- end
159
-
160
- expect(-> {
161
- run_step 'No group: arg'
162
- }).to raise_error(Cucumber::Glue::ArityMismatchError)
163
- end
164
-
165
- it 'does not modify the step_match arg when arg is modified in a step' do
166
- dsl.Given(/My car is (.*)/) do |colour|
167
- colour << 'xxx'
168
- end
169
-
170
- step_name = 'My car is white'
171
- step_args = step_match(step_name).args
172
-
173
- expect(-> {
174
- run_step step_name
175
- }).not_to change{ step_args.first }
176
- end
177
-
178
- it 'allows puts' do
179
- expect(user_interface).to receive(:puts).with('wasup')
180
- dsl.Given(/Loud/) do
181
- puts 'wasup'
182
- end
183
- run_step 'Loud'
184
- end
185
-
186
- it 'recognizes $arg style captures' do
187
- arg_value = 'up'
188
- dsl.Given 'capture this: {word}' do |arg|
189
- expect(arg).to eq arg_value
190
- end
191
- run_step 'capture this: up'
192
- end
193
-
194
- it 'has a JSON representation of the signature' do
195
- expect(StepDefinition.new(registry, /I CAN HAZ (\d+) CUKES/i, lambda{}, {}).to_hash).to eq({
196
- source: {
197
- type: 'regular expression',
198
- expression: 'I CAN HAZ (\\d+) CUKES'
199
- },
200
- regexp: {
201
- source: 'I CAN HAZ (\\d+) CUKES', flags: 'i'
202
- }
203
- })
204
- end
205
- end
206
- end
207
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'cucumber/hooks'
3
- module Cucumber::Hooks
4
- shared_examples_for 'a source node' do
5
- it 'responds to name' do
6
- expect( subject.name ).to be_a(String)
7
- end
8
-
9
- it 'responds to location' do
10
- expect( subject.location ).to eq(location)
11
- end
12
-
13
- it 'responds to match_locations?' do
14
- expect( subject.match_locations? [location] ).to be_truthy
15
- expect( subject.match_locations? [] ).to be_falsey
16
- end
17
- end
18
-
19
- require 'cucumber/core/ast/location'
20
- describe BeforeHook do
21
- subject { BeforeHook.new(location) }
22
- let(:location) { Cucumber::Core::Ast::Location.new('hooks.rb', 1) }
23
- it_behaves_like 'a source node'
24
- end
25
-
26
- describe AfterHook do
27
- subject { AfterHook.new(location) }
28
- let(:location) { Cucumber::Core::Ast::Location.new('hooks.rb', 1) }
29
- it_behaves_like 'a source node'
30
- end
31
- end
@@ -1,648 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
- require 'spec_helper'
4
- require 'cucumber/multiline_argument/data_table'
5
-
6
- module Cucumber
7
- module MultilineArgument
8
- describe DataTable do
9
- before do
10
- @table = DataTable.from([
11
- %w{one four seven},
12
- %w{4444 55555 666666}
13
- ])
14
- end
15
-
16
- it 'should have rows' do
17
- expect( @table.cells_rows[0].map{|cell| cell.value} ).to eq %w{one four seven}
18
- end
19
-
20
- it 'should have columns' do
21
- expect( @table.columns[1].map{|cell| cell.value} ).to eq %w{four 55555}
22
- end
23
-
24
- it 'should have same cell objects in rows and columns' do
25
- # 666666
26
- expect( @table.cells_rows[1][2] ).to equal(@table.columns[2][1])
27
- end
28
-
29
- it 'should be convertible to an array of hashes' do
30
- expect( @table.hashes ).to eq [
31
- {'one' => '4444', 'four' => '55555', 'seven' => '666666'}
32
- ]
33
- end
34
-
35
- it 'should accept symbols as keys for the hashes' do
36
- expect( @table.hashes.first[:one] ).to eq '4444'
37
- end
38
-
39
- it 'should return the row values in order' do
40
- expect( @table.rows.first ).to eq %w{4444 55555 666666}
41
- end
42
-
43
- describe '#symbolic_hashes' do
44
-
45
- it 'should covert data table to an array of hashes with symbols as keys' do
46
- ast_table = Cucumber::Core::Ast::DataTable.new([['foo', 'Bar', 'Foo Bar'], %w{1 22 333}], nil)
47
- data_table = DataTable.new(ast_table)
48
- expect(data_table.symbolic_hashes).to eq([{:foo => '1', :bar => '22', :foo_bar => '333'}])
49
- end
50
-
51
- it 'should be able to be accessed multiple times' do
52
- @table.symbolic_hashes
53
- expect{@table.symbolic_hashes}.to_not raise_error
54
- end
55
-
56
- end
57
-
58
- describe '#map_column!' do
59
- it 'should allow mapping columns' do
60
- @table.map_column!('one') { |v| v.to_i }
61
- expect( @table.hashes.first['one'] ).to eq 4444
62
- end
63
-
64
- it 'applies the block once to each value' do
65
- headers = ['header']
66
- rows = ['value']
67
- table = DataTable.from [headers, rows]
68
- count = 0
69
- table.map_column!('header') { |value| count +=1 }
70
- table.rows
71
- expect( count ).to eq rows.size
72
- end
73
-
74
- it 'should allow mapping columns and take a symbol as the column name' do
75
- @table.map_column!(:one) { |v| v.to_i }
76
- expect( @table.hashes.first['one'] ).to eq 4444
77
- end
78
-
79
- it 'should allow mapping columns and modify the rows as well' do
80
- @table.map_column!(:one) { |v| v.to_i }
81
- expect( @table.rows.first ).to include(4444)
82
- expect( @table.rows.first ).to_not include('4444')
83
- end
84
-
85
- it 'should pass silently if a mapped column does not exist in non-strict mode' do
86
- expect {
87
- @table.map_column!('two', false) { |v| v.to_i }
88
- @table.hashes
89
- }.not_to raise_error
90
- end
91
-
92
- it 'should fail if a mapped column does not exist in strict mode' do
93
- expect {
94
- @table.map_column!('two', true) { |v| v.to_i }
95
- @table.hashes
96
- }.to raise_error('The column named "two" does not exist')
97
- end
98
-
99
- it 'should return the table' do
100
- expect( (@table.map_column!(:one) { |v| v.to_i }) ).to eq @table
101
- end
102
- end
103
-
104
- describe '#map_column' do
105
- it 'should allow mapping columns' do
106
- new_table = @table.map_column('one') { |v| v.to_i }
107
- expect( new_table.hashes.first['one'] ).to eq 4444
108
- end
109
-
110
- it 'applies the block once to each value' do
111
- headers = ['header']
112
- rows = ['value']
113
- table = DataTable.from [headers, rows]
114
- count = 0
115
- new_table = table.map_column('header') { |value| count +=1 }
116
- new_table.rows
117
- expect( count ).to eq rows.size
118
- end
119
-
120
- it 'should allow mapping columns and take a symbol as the column name' do
121
- new_table = @table.map_column(:one) { |v| v.to_i }
122
- expect( new_table.hashes.first['one'] ).to eq 4444
123
- end
124
-
125
- it 'should allow mapping columns and modify the rows as well' do
126
- new_table = @table.map_column(:one) { |v| v.to_i }
127
- expect( new_table.rows.first ).to include(4444)
128
- expect( new_table.rows.first ).to_not include('4444')
129
- end
130
-
131
- it 'should pass silently if a mapped column does not exist in non-strict mode' do
132
- expect {
133
- new_table = @table.map_column('two', false) { |v| v.to_i }
134
- new_table.hashes
135
- }.not_to raise_error
136
- end
137
-
138
- it 'should fail if a mapped column does not exist in strict mode' do
139
- expect {
140
- new_table = @table.map_column('two', true) { |v| v.to_i }
141
- new_table.hashes
142
- }.to raise_error('The column named "two" does not exist')
143
- end
144
-
145
- it 'should return a new table' do
146
- expect( (@table.map_column(:one) { |v| v.to_i }) ).to_not eq @table
147
- end
148
- end
149
-
150
- describe '#match' do
151
- before(:each) do
152
- @table = DataTable.from([
153
- %w{one four seven},
154
- %w{4444 55555 666666}
155
- ])
156
- end
157
-
158
- it 'returns nil if headers do not match' do
159
- expect( @table.match('does,not,match') ).to be_nil
160
- end
161
- it 'requires a table: prefix on match' do
162
- expect( @table.match('table:one,four,seven') ).to_not be_nil
163
- end
164
- it 'does not match if no table: prefix on match' do
165
- expect( @table.match('one,four,seven') ).to be_nil
166
- end
167
- end
168
-
169
- describe '#transpose' do
170
- before(:each) do
171
- @table = DataTable.from([
172
- %w{one 1111},
173
- %w{two 22222}
174
- ])
175
- end
176
-
177
- it 'should be convertible in to an array where each row is a hash' do
178
- expect( @table.transpose.hashes[0] ).to eq('one' => '1111', 'two' => '22222')
179
- end
180
- end
181
-
182
- describe '#rows_hash' do
183
-
184
- it 'should return a hash of the rows' do
185
- table = DataTable.from([
186
- %w{one 1111},
187
- %w{two 22222}
188
- ])
189
- expect( table.rows_hash ).to eq( 'one' => '1111', 'two' => '22222' )
190
- end
191
-
192
- it "should fail if the table doesn't have two columns" do
193
- faulty_table = DataTable.from([
194
- %w{one 1111 abc},
195
- %w{two 22222 def}
196
- ])
197
- expect {
198
- faulty_table.rows_hash
199
- }.to raise_error('The table must have exactly 2 columns')
200
- end
201
-
202
- it 'should support header and column mapping' do
203
- table = DataTable.from([
204
- %w{one 1111},
205
- %w{two 22222}
206
- ])
207
- t2 = table.map_headers({ 'two' => 'Two' }) { |header| header.upcase }.
208
- map_column('two', false) { |val| val.to_i }
209
- expect( t2.rows_hash ).to eq( 'ONE' => '1111', 'Two' => 22222 )
210
- end
211
- end
212
-
213
- describe '#map_headers!' do
214
- let(:table) do
215
- DataTable.from([
216
- %w{HELLO WORLD},
217
- %w{4444 55555}
218
- ])
219
- end
220
-
221
- it 'renames the columns to the specified values in the provided hash' do
222
- @table.map_headers!('one' => :three)
223
- expect( @table.hashes.first[:three] ).to eq '4444'
224
- end
225
-
226
- it 'allows renaming columns using regexp' do
227
- @table.map_headers!(/one|uno/ => :three)
228
- expect( @table.hashes.first[:three] ).to eq '4444'
229
- end
230
-
231
- it 'copies column mappings' do
232
- @table.map_column!('one') { |v| v.to_i }
233
- @table.map_headers!('one' => 'three')
234
- expect( @table.hashes.first['three'] ).to eq 4444
235
- end
236
-
237
- it 'takes a block and operates on all the headers with it' do
238
- table.map_headers! do |header|
239
- header.downcase
240
- end
241
- expect( table.hashes.first.keys ).to match %w[hello world]
242
- end
243
-
244
- it 'treats the mappings in the provided hash as overrides when used with a block' do
245
- table.map_headers!('WORLD' => 'foo') do |header|
246
- header.downcase
247
- end
248
-
249
- expect( table.hashes.first.keys ).to match %w[hello foo]
250
- end
251
- end
252
-
253
- describe '#map_headers' do
254
- let(:table) do
255
- DataTable.from([
256
- %w{HELLO WORLD},
257
- %w{4444 55555}
258
- ])
259
- end
260
-
261
- it 'renames the columns to the specified values in the provided hash' do
262
- table2 = @table.map_headers('one' => :three)
263
- expect( table2.hashes.first[:three] ).to eq '4444'
264
- end
265
-
266
- it 'allows renaming columns using regexp' do
267
- table2 = @table.map_headers(/one|uno/ => :three)
268
- expect( table2.hashes.first[:three] ).to eq '4444'
269
- end
270
-
271
- it 'copies column mappings' do
272
- @table.map_column!('one') { |v| v.to_i }
273
- table2 = @table.map_headers('one' => 'three')
274
- expect( table2.hashes.first['three'] ).to eq 4444
275
- end
276
-
277
- it 'takes a block and operates on all the headers with it' do
278
- table2 = table.map_headers do |header|
279
- header.downcase
280
- end
281
-
282
- expect( table2.hashes.first.keys ).to match %w[hello world]
283
- end
284
-
285
- it 'treats the mappings in the provided hash as overrides when used with a block' do
286
- table2 = table.map_headers('WORLD' => 'foo') do |header|
287
- header.downcase
288
- end
289
-
290
- expect( table2.hashes.first.keys ).to match %w[hello foo]
291
- end
292
- end
293
-
294
- describe 'diff!' do
295
- it 'should detect a complex diff' do
296
- t1 = DataTable.from(%{
297
- | 1 | 22 | 333 | 4444 |
298
- | 55555 | 666666 | 7777777 | 88888888 |
299
- | 999999999 | 0000000000 | 01010101010 | 121212121212 |
300
- | 4000 | ABC | DEF | 50000 |
301
- })
302
-
303
- t2 = DataTable.from(%{
304
- | a | 4444 | 1 |
305
- | bb | 88888888 | 55555 |
306
- | ccc | xxxxxxxx | 999999999 |
307
- | dddd | 4000 | 300 |
308
- | e | 50000 | 4000 |
309
- })
310
- expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
311
- expect(error.table.to_s(indent: 14, color: false)).to eq %{
312
- | 1 | (-) 22 | (-) 333 | 4444 | (+) a |
313
- | 55555 | (-) 666666 | (-) 7777777 | 88888888 | (+) bb |
314
- | (-) 999999999 | (-) 0000000000 | (-) 01010101010 | (-) 121212121212 | (+) |
315
- | (+) 999999999 | (+) | (+) | (+) xxxxxxxx | (+) ccc |
316
- | (+) 300 | (+) | (+) | (+) 4000 | (+) dddd |
317
- | 4000 | (-) ABC | (-) DEF | 50000 | (+) e |
318
- }
319
- end
320
- end
321
-
322
- it 'should not change table when diffed with identical' do
323
- t = DataTable.from(%{
324
- |a|b|c|
325
- |d|e|f|
326
- |g|h|i|
327
- })
328
- t.diff!(t.dup)
329
- expect( t.to_s(:indent => 12, :color => false) ).to eq %{
330
- | a | b | c |
331
- | d | e | f |
332
- | g | h | i |
333
- }
334
- end
335
-
336
- context 'with empty tables' do
337
- it 'should allow diffing empty tables' do
338
- t1 = DataTable.from([[]])
339
- t2 = DataTable.from([[]])
340
- expect{ t1.diff!(t2) }.not_to raise_error
341
- end
342
-
343
- it 'should be able to diff when the right table is empty' do
344
- t1 = DataTable.from(%{
345
- |a|b|c|
346
- |d|e|f|
347
- |g|h|i|
348
- })
349
- t2 = DataTable.from([[]])
350
- expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
351
- expect(error.table.to_s(indent: 16, color: false)).to eq %{
352
- | (-) a | (-) b | (-) c |
353
- | (-) d | (-) e | (-) f |
354
- | (-) g | (-) h | (-) i |
355
- }
356
- end
357
- end
358
-
359
- it 'should be able to diff when the left table is empty' do
360
- t1 = DataTable.from([[]])
361
- t2 = DataTable.from(%{
362
- |a|b|c|
363
- |d|e|f|
364
- |g|h|i|
365
- })
366
- expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
367
- expect(error.table.to_s(indent: 16, color: false)).to eq %{
368
- | (+) a | (+) b | (+) c |
369
- | (+) d | (+) e | (+) f |
370
- | (+) g | (+) h | (+) i |
371
- }
372
- end
373
- end
374
- end
375
-
376
- context 'in case of duplicate header values' do
377
- it 'raises no error for two identical tables' do
378
- t = DataTable.from(%{
379
- |a|a|c|
380
- |d|e|f|
381
- |g|h|i|
382
- })
383
- t.diff!(t.dup)
384
- expect( t.to_s(:indent => 12, :color => false) ).to eq %{
385
- | a | a | c |
386
- | d | e | f |
387
- | g | h | i |
388
- }
389
- end
390
-
391
- it 'detects a diff in one cell' do
392
- t1 = DataTable.from(%{
393
- |a|a|c|
394
- |d|e|f|
395
- |g|h|i|
396
- })
397
- t2 = DataTable.from(%{
398
- |a|a|c|
399
- |d|oops|f|
400
- |g|h|i|
401
- })
402
- expect{ t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
403
- expect(error.table.to_s(indent: 16, color: false)).to eq %{
404
- | a | a | c |
405
- | (-) d | (-) e | (-) f |
406
- | (+) d | (+) oops | (+) f |
407
- | g | h | i |
408
- }
409
- end
410
- end
411
-
412
- it 'detects missing columns' do
413
- t1 = DataTable.from(%{
414
- |a|a|b|c|
415
- |d|d|e|f|
416
- |g|g|h|i|
417
- })
418
- t2 = DataTable.from(%{
419
- |a|b|c|
420
- |d|e|f|
421
- |g|h|i|
422
- })
423
- expect{ t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
424
- expect(error.table.to_s(indent: 16, color: false)).to eq %{
425
- | a | (-) a | b | c |
426
- | d | (-) d | e | f |
427
- | g | (-) g | h | i |
428
- }
429
- end
430
- end
431
-
432
- it 'detects surplus columns' do
433
- t1 = DataTable.from(%{
434
- |a|b|c|
435
- |d|e|f|
436
- |g|h|i|
437
- })
438
- t2 = DataTable.from(%{
439
- |a|b|a|c|
440
- |d|e|d|f|
441
- |g|h|g|i|
442
- })
443
- expect{ t1.diff!(t2, :surplus_col => true) }.to raise_error(DataTable::Different) do |error|
444
- expect(error.table.to_s(indent: 16, color: false)).to eq %{
445
- | a | b | c | (+) a |
446
- | d | e | f | (+) d |
447
- | g | h | i | (+) g |
448
- }
449
- end
450
- end
451
- end
452
-
453
- it 'should inspect missing and surplus cells' do
454
- t1 = DataTable.from([
455
- %w(name male lastname swedish),
456
- %w(aslak true hellesøy false)
457
- ])
458
- t2 = DataTable.from([
459
- %w(name male lastname swedish),
460
- ['aslak', true, 'hellesøy', false]
461
- ])
462
- expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
463
- expect(error.table.to_s(indent: 14, color: false)).to eq %{
464
- | name | male | lastname | swedish |
465
- | (-) aslak | (-) (i) "true" | (-) hellesøy | (-) (i) "false" |
466
- | (+) aslak | (+) (i) true | (+) hellesøy | (+) (i) false |
467
- }
468
- end
469
- end
470
-
471
- it 'should allow column mapping of target before diffing' do
472
- t1 = DataTable.from([
473
- %w(name male),
474
- %w(aslak true)
475
- ])
476
- t1.map_column!('male') { |m| m == 'true' }
477
- t2 = DataTable.from([
478
- %w(name male),
479
- ['aslak', true]
480
- ])
481
- t1.diff!(t2)
482
- expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
483
- | name | male |
484
- | aslak | true |
485
- }
486
- end
487
-
488
- it 'should allow column mapping of argument before diffing' do
489
- t1 = DataTable.from([
490
- %w(name male),
491
- ['aslak', true]
492
- ])
493
- t1.map_column!('male') {
494
- 'true'
495
- }
496
- t2 = DataTable.from([
497
- %w(name male),
498
- %w(aslak true)
499
- ])
500
- t2.diff!(t1)
501
- expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
502
- | name | male |
503
- | aslak | true |
504
- }
505
- end
506
-
507
- it 'should allow header mapping before diffing' do
508
- t1 = DataTable.from([
509
- %w(Name Male),
510
- %w(aslak true)
511
- ])
512
- t1.map_headers!('Name' => 'name', 'Male' => 'male')
513
- t1.map_column!('male') { |m| m == 'true' }
514
- t2 = DataTable.from([
515
- %w(name male),
516
- ['aslak', true]
517
- ])
518
- t1.diff!(t2)
519
- expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
520
- | name | male |
521
- | aslak | true |
522
- }
523
- end
524
-
525
- it 'should detect seemingly identical tables as different' do
526
- t1 = DataTable.from([
527
- %w(X Y),
528
- %w(2 1)
529
- ])
530
- t2 = DataTable.from([
531
- %w(X Y),
532
- [2, 1]
533
- ])
534
- expect { t1.diff!(t2) }.to raise_error(DataTable::Different) do |error|
535
- expect(error.table.to_s(indent: 14, color: false)).to eq %{
536
- | X | Y |
537
- | (-) (i) "2" | (-) (i) "1" |
538
- | (+) (i) 2 | (+) (i) 1 |
539
- }
540
- end
541
- end
542
-
543
- it 'should not allow mappings that match more than 1 column' do
544
- t1 = DataTable.from([
545
- %w(Cuke Duke),
546
- %w(Foo Bar)
547
- ])
548
- expect do
549
- t1.map_headers!(/uk/ => 'u')
550
- t1.hashes
551
- end.to raise_error(%{2 headers matched /uk/: ["Cuke", "Duke"]})
552
- end
553
-
554
- describe 'raising' do
555
- before do
556
- @t = DataTable.from(%{
557
- | a | b |
558
- | c | d |
559
- })
560
- expect( @t ).not_to eq nil
561
- end
562
-
563
- it 'should raise on missing rows' do
564
- t = DataTable.from(%{
565
- | a | b |
566
- })
567
- expect { @t.dup.diff!(t) }.to raise_error(DataTable::Different)
568
- expect { @t.dup.diff!(t, :missing_row => false) }.not_to raise_error
569
- end
570
-
571
- it 'should not raise on surplus rows when surplus is at the end' do
572
- t = DataTable.from(%{
573
- | a | b |
574
- | c | d |
575
- | e | f |
576
- })
577
- expect { @t.dup.diff!(t) }.to raise_error(DataTable::Different)
578
- expect { @t.dup.diff!(t, :surplus_row => false) }.not_to raise_error
579
- end
580
-
581
- it 'should not raise on surplus rows when surplus is interleaved' do
582
- t1 = DataTable.from(%{
583
- | row_1 | row_2 |
584
- | four | 4 |
585
- })
586
- t2 = DataTable.from(%{
587
- | row_1 | row_2 |
588
- | one | 1 |
589
- | two | 2 |
590
- | three | 3 |
591
- | four | 4 |
592
- | five | 5 |
593
- })
594
- expect { t1.dup.diff!(t2) }.to raise_error(DataTable::Different)
595
- expect { t1.dup.diff!(t2, :surplus_row => false) }.not_to raise_error
596
- end
597
-
598
- it 'should raise on missing columns' do
599
- t = DataTable.from(%{
600
- | a |
601
- | c |
602
- })
603
- expect { @t.dup.diff!(t) }.to raise_error(DataTable::Different)
604
- expect { @t.dup.diff!(t, :missing_col => false) }.not_to raise_error
605
- end
606
-
607
- it 'should not raise on surplus columns' do
608
- t = DataTable.from(%{
609
- | a | b | x |
610
- | c | d | y |
611
- })
612
- expect { @t.dup.diff!(t) }.not_to raise_error
613
- expect { @t.dup.diff!(t, :surplus_col => true) }.to raise_error(DataTable::Different)
614
- end
615
-
616
- it 'should not raise on misplaced columns' do
617
- t = DataTable.from(%{
618
- | b | a |
619
- | d | c |
620
- })
621
- expect { @t.dup.diff!(t) }.not_to raise_error
622
- expect { @t.dup.diff!(t, :misplaced_col => true) }.to raise_error(DataTable::Different)
623
- end
624
- end
625
-
626
- it 'can compare to an Array' do
627
- t = DataTable.from(%{
628
- | b | a |
629
- | d | c |
630
- })
631
- other = [ %w{b a}, %w{d c} ]
632
-
633
- expect { t.diff!(other) }.not_to raise_error
634
- end
635
- end
636
-
637
- describe '#from' do
638
- it 'should allow Array of Hash' do
639
- t1 = DataTable.from([{'name' => 'aslak', 'male' => 'true'}])
640
- expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
641
- | male | name |
642
- | true | aslak |
643
- }
644
- end
645
- end
646
- end
647
- end
648
- end