cucumber 1.3.10 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.rspec +1 -1
  4. data/.travis.yml +4 -3
  5. data/CONTRIBUTING.md +9 -0
  6. data/Gemfile +9 -2
  7. data/History.md +212 -22
  8. data/LICENSE +2 -2
  9. data/README.md +4 -4
  10. data/Rakefile +10 -1
  11. data/bin/cucumber +1 -5
  12. data/cucumber.gemspec +10 -13
  13. data/cucumber.yml +14 -24
  14. data/examples/{ramaze → i18n/el}/Rakefile +1 -1
  15. data/examples/i18n/el/features/addition.feature +17 -0
  16. data/examples/i18n/el/features/division.feature +10 -0
  17. data/examples/i18n/el/features/step_definitions/calculator_steps.rb +24 -0
  18. data/examples/i18n/el/lib/calculator.rb +14 -0
  19. data/examples/i18n/fr/Rakefile +3 -1
  20. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +2 -2
  21. data/examples/i18n/ht/Rakefile +6 -0
  22. data/examples/i18n/ht/features/adisyon.feature +17 -0
  23. data/examples/i18n/ht/features/divizyon.feature +10 -0
  24. data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +25 -0
  25. data/examples/i18n/ht/lib/kalkilatris.rb +14 -0
  26. data/examples/i18n/zh-CN/features/{step_definitons → step_definitions}/calculator_steps.rb +4 -4
  27. data/examples/tcl/features/step_definitions/fib_steps.rb +1 -1
  28. data/{legacy_features → features/docs}/api/list_step_defs_as_json.feature +14 -14
  29. data/{legacy_features → features/docs}/api/run_cli_main_with_existing_runtime.feature +5 -10
  30. data/features/{backtraces.feature → docs/cli/backtraces.feature} +2 -2
  31. data/features/docs/cli/dry_run.feature +73 -0
  32. data/features/docs/cli/exclude_files.feature +18 -0
  33. data/features/docs/cli/execute_with_tag_filter.feature +117 -0
  34. data/features/docs/cli/randomize.feature +46 -0
  35. data/features/docs/cli/require.feature +27 -0
  36. data/features/docs/cli/run_scenarios_matching_name.feature +104 -0
  37. data/features/docs/cli/run_specific_scenarios.feature +75 -0
  38. data/features/docs/cli/showing_differences.feature +43 -0
  39. data/features/docs/cli/specifying_multiple_formatters.feature +44 -0
  40. data/features/docs/cli/strict_mode.feature +64 -0
  41. data/features/{nested_steps.feature → docs/defining_steps/nested_steps.feature} +52 -6
  42. data/features/{nested_steps_i18n.feature → docs/defining_steps/nested_steps_i18n.feature} +0 -2
  43. data/features/{step_definitions.feature → docs/defining_steps/one_line_step_definitions.feature} +3 -3
  44. data/features/docs/defining_steps/printing_messages.feature +148 -0
  45. data/features/docs/defining_steps/skip_scenario.feature +62 -0
  46. data/features/docs/defining_steps/snippets.feature +56 -0
  47. data/{legacy_features → features/docs/defining_steps}/table_diffing.feature +21 -16
  48. data/features/{transforms.feature → docs/defining_steps/transforms.feature} +2 -2
  49. data/{legacy_features/exception_in_after_block.feature → features/docs/exception_in_after_hook.feature} +25 -26
  50. data/{legacy_features/exception_in_after_step_block.feature → features/docs/exception_in_after_step_hook.feature} +22 -24
  51. data/features/docs/exception_in_around_hook.feature +80 -0
  52. data/{legacy_features/exception_in_before_block.feature → features/docs/exception_in_before_hook.feature} +18 -20
  53. data/features/docs/extending_cucumber/custom_filter.feature +29 -0
  54. data/features/docs/extending_cucumber/custom_formatter.feature +94 -0
  55. data/features/docs/formatters/debug_formatter.feature +47 -0
  56. data/features/{formatter_step_file_colon_line.feature → docs/formatters/formatter_step_file_colon_line.feature} +2 -4
  57. data/features/{html_formatter.feature → docs/formatters/html_formatter.feature} +10 -14
  58. data/features/docs/formatters/json_formatter.feature +760 -0
  59. data/features/docs/formatters/junit_formatter.feature +316 -0
  60. data/features/docs/formatters/pretty_formatter.feature +73 -0
  61. data/features/{progress_formatter.feature → docs/formatters/progress_formatter.feature} +1 -1
  62. data/features/docs/formatters/rerun_formatter.feature +136 -0
  63. data/features/docs/formatters/usage_formatter.feature +102 -0
  64. data/features/docs/getting_started.feature +27 -0
  65. data/features/{background.feature → docs/gherkin/background.feature} +149 -91
  66. data/features/{doc_strings.feature → docs/gherkin/doc_strings.feature} +1 -0
  67. data/features/docs/gherkin/expand_option_for_outlines.feature +46 -0
  68. data/features/docs/gherkin/language_from_header.feature +32 -0
  69. data/features/docs/gherkin/outlines.feature +158 -0
  70. data/features/docs/gherkin/unicode_table.feature +32 -0
  71. data/features/docs/gherkin/using_descriptions.feature +88 -0
  72. data/features/docs/gherkin/using_star_notation.feature +37 -0
  73. data/{legacy_features → features/docs}/post_configuration_hook.feature +17 -18
  74. data/{legacy_features → features/docs}/profiles.feature +30 -36
  75. data/{legacy_features → features/docs}/rake_task.feature +30 -41
  76. data/features/{raketask.feature → docs/raketask.feature} +6 -13
  77. data/{legacy_features/wire_protocol_erb.feature → features/docs/wire_protocol/erb_configuration.feature} +7 -8
  78. data/features/docs/wire_protocol/handle_unexpected_response.feature +30 -0
  79. data/features/docs/wire_protocol/invoke_message.feature +216 -0
  80. data/features/docs/wire_protocol/readme.md +26 -0
  81. data/features/docs/wire_protocol/snippets_message.feature +51 -0
  82. data/features/docs/wire_protocol/step_matches_message.feature +81 -0
  83. data/{legacy_features/wire_protocol_table_diffing.feature → features/docs/wire_protocol/table_diffing.feature} +19 -12
  84. data/{legacy_features/wire_protocol_tags.feature → features/docs/wire_protocol/tags.feature} +7 -7
  85. data/{legacy_features/wire_protocol_timeouts.feature → features/docs/wire_protocol/timeouts.feature} +7 -6
  86. data/{legacy_features → features/docs}/work_in_progress.feature +52 -54
  87. data/features/docs/writing_support_code/after_hooks.feature +80 -0
  88. data/{legacy_features → features/docs/writing_support_code}/around_hooks.feature +56 -28
  89. data/features/docs/writing_support_code/before_hook.feature +65 -0
  90. data/features/docs/writing_support_code/hook_order.feature +61 -0
  91. data/features/{load_path.feature → docs/writing_support_code/load_path.feature} +3 -0
  92. data/features/docs/writing_support_code/state.feature +32 -0
  93. data/features/docs/writing_support_code/tagged_hooks.feature +95 -0
  94. data/features/lib/step_definitions/aruba_steps.rb +22 -0
  95. data/features/lib/step_definitions/cucumber_steps.rb +50 -0
  96. data/features/{step_definitions → lib/step_definitions}/iso-8859-1_steps.rb +3 -15
  97. data/features/lib/step_definitions/json_steps.rb +7 -0
  98. data/features/lib/step_definitions/junit_steps.rb +13 -0
  99. data/features/lib/step_definitions/language_steps.rb +4 -5
  100. data/features/lib/step_definitions/profile_steps.rb +15 -0
  101. data/features/lib/step_definitions/ruby_steps.rb +3 -0
  102. data/features/lib/step_definitions/wire_steps.rb +58 -0
  103. data/features/lib/support/env.rb +21 -0
  104. data/{legacy_features → features/lib}/support/fake_wire_server.rb +10 -7
  105. data/features/{support → lib/support}/feature_factory.rb +1 -1
  106. data/features/lib/support/normalise_output.rb +33 -0
  107. data/gem_tasks/cov.rake +5 -0
  108. data/gem_tasks/cucumber.rake +3 -8
  109. data/gem_tasks/rspec.rake +0 -2
  110. data/lib/cucumber/ast.rb +8 -25
  111. data/lib/cucumber/cli/configuration.rb +33 -37
  112. data/lib/cucumber/cli/main.rb +14 -27
  113. data/lib/cucumber/cli/options.rb +22 -60
  114. data/lib/cucumber/cli/profile_loader.rb +1 -1
  115. data/lib/cucumber/configuration.rb +4 -0
  116. data/lib/cucumber/constantize.rb +7 -6
  117. data/lib/cucumber/core_ext/instance_exec.rb +7 -38
  118. data/lib/cucumber/core_ext/proc.rb +1 -1
  119. data/lib/cucumber/encoding.rb +5 -0
  120. data/lib/cucumber/errors.rb +21 -10
  121. data/lib/cucumber/file_specs.rb +37 -0
  122. data/lib/cucumber/filters/activate_steps.rb +33 -0
  123. data/lib/cucumber/filters/apply_after_hooks.rb +9 -0
  124. data/lib/cucumber/filters/apply_after_step_hooks.rb +12 -0
  125. data/lib/cucumber/filters/apply_around_hooks.rb +12 -0
  126. data/lib/cucumber/filters/apply_before_hooks.rb +9 -0
  127. data/lib/cucumber/filters/gated_receiver.rb +25 -0
  128. data/lib/cucumber/filters/prepare_world.rb +45 -0
  129. data/lib/cucumber/filters/quit.rb +28 -0
  130. data/lib/cucumber/filters/randomizer.rb +40 -0
  131. data/lib/cucumber/filters/tag_limits/test_case_index.rb +31 -0
  132. data/lib/cucumber/filters/tag_limits/verifier.rb +59 -0
  133. data/lib/cucumber/filters/tag_limits.rb +45 -0
  134. data/lib/cucumber/filters.rb +9 -0
  135. data/lib/cucumber/formatter/ansicolor.rb +0 -8
  136. data/lib/cucumber/formatter/console.rb +66 -36
  137. data/lib/cucumber/formatter/debug.rb +10 -8
  138. data/lib/cucumber/formatter/fanout.rb +27 -0
  139. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +122 -12
  140. data/lib/cucumber/formatter/html.rb +67 -18
  141. data/lib/cucumber/formatter/ignore_missing_messages.rb +20 -0
  142. data/lib/cucumber/formatter/interceptor.rb +17 -3
  143. data/lib/cucumber/formatter/json.rb +1 -1
  144. data/lib/cucumber/formatter/junit.rb +105 -5
  145. data/lib/cucumber/formatter/legacy_api/adapter.rb +1060 -0
  146. data/lib/cucumber/formatter/legacy_api/ast.rb +376 -0
  147. data/lib/cucumber/formatter/legacy_api/results.rb +51 -0
  148. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +30 -0
  149. data/lib/cucumber/formatter/pretty.rb +16 -8
  150. data/lib/cucumber/formatter/progress.rb +10 -0
  151. data/lib/cucumber/formatter/rerun.rb +14 -71
  152. data/lib/cucumber/formatter/unicode.rb +8 -21
  153. data/lib/cucumber/formatter/usage.rb +7 -1
  154. data/lib/cucumber/hooks.rb +97 -0
  155. data/lib/cucumber/language_support/language_methods.rb +0 -54
  156. data/lib/cucumber/{ast/table.rb → multiline_argument/data_table.rb} +77 -84
  157. data/lib/cucumber/multiline_argument/doc_string.rb +10 -0
  158. data/lib/cucumber/multiline_argument.rb +74 -0
  159. data/lib/cucumber/platform.rb +21 -20
  160. data/lib/cucumber/project_initializer.rb +43 -0
  161. data/lib/cucumber/rake/task.rb +3 -54
  162. data/lib/cucumber/rb_support/rb_hook.rb +2 -2
  163. data/lib/cucumber/rb_support/rb_language.rb +4 -34
  164. data/lib/cucumber/rb_support/rb_step_definition.rb +11 -2
  165. data/lib/cucumber/rb_support/rb_transform.rb +3 -1
  166. data/lib/cucumber/rb_support/rb_world.rb +13 -20
  167. data/lib/cucumber/rb_support/snippet.rb +61 -20
  168. data/lib/cucumber/rspec/doubles.rb +9 -6
  169. data/lib/cucumber/running_test_case.rb +115 -0
  170. data/lib/cucumber/runtime/after_hooks.rb +24 -0
  171. data/lib/cucumber/runtime/before_hooks.rb +23 -0
  172. data/lib/cucumber/runtime/for_programming_languages.rb +14 -10
  173. data/lib/cucumber/runtime/step_hooks.rb +22 -0
  174. data/lib/cucumber/runtime/support_code.rb +78 -21
  175. data/lib/cucumber/runtime/user_interface.rb +4 -0
  176. data/lib/cucumber/runtime.rb +153 -98
  177. data/lib/cucumber/step_match.rb +27 -3
  178. data/lib/cucumber/term/ansicolor.rb +1 -9
  179. data/lib/cucumber/wire_support/wire_language.rb +23 -9
  180. data/lib/cucumber/wire_support/wire_packet.rb +1 -1
  181. data/lib/cucumber/wire_support/wire_protocol/requests.rb +13 -5
  182. data/lib/cucumber/wire_support/wire_step_definition.rb +1 -8
  183. data/lib/cucumber.rb +8 -6
  184. data/spec/cucumber/cli/configuration_spec.rb +165 -134
  185. data/spec/cucumber/cli/main_spec.rb +36 -99
  186. data/spec/cucumber/cli/options_spec.rb +238 -272
  187. data/spec/cucumber/cli/profile_loader_spec.rb +18 -7
  188. data/spec/cucumber/configuration_spec.rb +3 -3
  189. data/spec/cucumber/constantize_spec.rb +2 -1
  190. data/spec/cucumber/core_ext/instance_exec_spec.rb +4 -0
  191. data/spec/cucumber/core_ext/proc_spec.rb +32 -43
  192. data/spec/cucumber/file_specs_spec.rb +60 -0
  193. data/spec/cucumber/filters/activate_steps_spec.rb +57 -0
  194. data/spec/cucumber/filters/gated_receiver_spec.rb +47 -0
  195. data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +38 -0
  196. data/spec/cucumber/filters/tag_limits/verifier_spec.rb +57 -0
  197. data/spec/cucumber/filters/tag_limits_spec.rb +59 -0
  198. data/spec/cucumber/formatter/ansicolor_spec.rb +11 -10
  199. data/spec/cucumber/formatter/debug_spec.rb +64 -0
  200. data/spec/cucumber/formatter/duration_spec.rb +6 -6
  201. data/spec/cucumber/formatter/html_spec.rb +233 -39
  202. data/spec/cucumber/formatter/interceptor_spec.rb +38 -31
  203. data/spec/cucumber/formatter/junit_spec.rb +213 -151
  204. data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +2090 -0
  205. data/spec/cucumber/formatter/pretty_spec.rb +481 -49
  206. data/spec/cucumber/formatter/progress_spec.rb +63 -16
  207. data/spec/cucumber/formatter/rerun_spec.rb +107 -0
  208. data/spec/cucumber/formatter/spec_helper.rb +32 -17
  209. data/spec/cucumber/hooks_spec.rb +30 -0
  210. data/spec/cucumber/{ast/table_spec.rb → multiline_argument/data_table_spec.rb} +128 -208
  211. data/spec/cucumber/project_initializer_spec.rb +87 -0
  212. data/spec/cucumber/rake/forked_spec.rb +13 -22
  213. data/spec/cucumber/rb_support/rb_language_spec.rb +78 -69
  214. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +90 -44
  215. data/spec/cucumber/rb_support/rb_transform_spec.rb +24 -3
  216. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +6 -4
  217. data/spec/cucumber/rb_support/snippet_spec.rb +47 -38
  218. data/spec/cucumber/running_test_case_spec.rb +83 -0
  219. data/spec/cucumber/runtime/for_programming_languages_spec.rb +18 -13
  220. data/spec/cucumber/runtime/support_code_spec.rb +29 -29
  221. data/spec/cucumber/runtime_spec.rb +35 -34
  222. data/spec/cucumber/step_match_spec.rb +30 -20
  223. data/spec/cucumber/wire_support/configuration_spec.rb +8 -5
  224. data/spec/cucumber/wire_support/connection_spec.rb +12 -8
  225. data/spec/cucumber/wire_support/wire_exception_spec.rb +14 -8
  226. data/spec/cucumber/wire_support/wire_language_spec.rb +8 -9
  227. data/spec/cucumber/wire_support/wire_packet_spec.rb +17 -13
  228. data/spec/cucumber/world/pending_spec.rb +36 -36
  229. data/spec/simplecov_setup.rb +18 -0
  230. data/spec/spec_helper.rb +6 -13
  231. metadata +348 -350
  232. data/.gitattributes +0 -1
  233. data/.ruby-version +0 -1
  234. data/examples/python/README.textile +0 -8
  235. data/examples/python/Rakefile +0 -4
  236. data/examples/python/features/fibonacci.feature +0 -19
  237. data/examples/python/features/step_definitions/fib_steps.py +0 -11
  238. data/examples/python/lib/fib.py +0 -7
  239. data/examples/ramaze/README.textile +0 -7
  240. data/examples/ramaze/app.rb +0 -21
  241. data/examples/ramaze/features/add.feature +0 -11
  242. data/examples/ramaze/features/step_definitions/add_steps.rb +0 -15
  243. data/examples/ramaze/features/support/env.rb +0 -32
  244. data/examples/ramaze/layout/default.html.erb +0 -8
  245. data/examples/ramaze/view/index.html.erb +0 -5
  246. data/examples/ruby2python/README.textile +0 -8
  247. data/examples/ruby2python/Rakefile +0 -4
  248. data/examples/ruby2python/features/fibonacci.feature +0 -19
  249. data/examples/ruby2python/features/step_definitions/fib_steps.rb +0 -7
  250. data/examples/ruby2python/features/support/env.rb +0 -21
  251. data/examples/ruby2python/lib/fib.py +0 -7
  252. data/examples/v8/Rakefile +0 -6
  253. data/examples/v8/features/fibonacci.feature +0 -43
  254. data/examples/v8/features/step_definitions/fib_steps.js +0 -49
  255. data/examples/v8/features/support/env.js +0 -14
  256. data/examples/v8/lib/fibonacci.js +0 -19
  257. data/features/.cucumber/stepdefs.json +0 -627
  258. data/features/assertions.feature +0 -73
  259. data/features/autoformat_profile_output.feature +0 -23
  260. data/features/before_hook.feature +0 -43
  261. data/features/bootstrap.feature +0 -27
  262. data/features/custom_formatter.feature +0 -41
  263. data/features/drb_server_integration.feature +0 -63
  264. data/features/execute_with_tag_filter.feature +0 -63
  265. data/features/formatter_callbacks.feature +0 -189
  266. data/features/json_formatter.feature +0 -338
  267. data/features/parsing.feature +0 -18
  268. data/features/pretty_formatter.feature +0 -31
  269. data/features/rerun_formatter.feature +0 -35
  270. data/features/run_specific_scenarios.feature +0 -47
  271. data/features/stats_formatters.feature +0 -73
  272. data/features/step_definitions/cucumber-features/cucumber_ruby_mappings.rb +0 -197
  273. data/features/step_definitions/cucumber_steps.rb +0 -55
  274. data/features/step_definitions/drb_steps.rb +0 -3
  275. data/features/support/env.rb +0 -57
  276. data/features/tagged_hooks.feature +0 -59
  277. data/fixtures/json/features/background.feature +0 -7
  278. data/fixtures/json/features/embed.feature +0 -4
  279. data/fixtures/json/features/one_passing_one_failing.feature +0 -11
  280. data/fixtures/json/features/step_definitions/steps.rb +0 -32
  281. data/fixtures/json/features/tables.feature +0 -13
  282. data/fixtures/junit/features/one_passing_one_failing.feature +0 -8
  283. data/fixtures/junit/features/pending.feature +0 -7
  284. data/fixtures/junit/features/scenario_outline.feature +0 -9
  285. data/fixtures/junit/features/some_subdirectory/one_passing_one_failing.feature +0 -8
  286. data/fixtures/junit/features/step_definitions/steps.rb +0 -11
  287. data/fixtures/self_test/README.textile +0 -6
  288. data/fixtures/self_test/Rakefile +0 -6
  289. data/fixtures/self_test/features/call_undefined_step_from_step_def.feature +0 -7
  290. data/fixtures/self_test/features/failing_expectation.feature +0 -4
  291. data/fixtures/self_test/features/lots_of_undefined.feature +0 -8
  292. data/fixtures/self_test/features/multiline_name.feature +0 -27
  293. data/fixtures/self_test/features/outline_sample.feature +0 -15
  294. data/fixtures/self_test/features/sample.feature +0 -21
  295. data/fixtures/self_test/features/search_sample.feature +0 -32
  296. data/fixtures/self_test/features/step_definitions/sample_steps.rb +0 -84
  297. data/fixtures/self_test/features/support/bubble_256x256.png +0 -0
  298. data/fixtures/self_test/features/support/env.rb +0 -26
  299. data/fixtures/self_test/features/tags_sample.feature +0 -17
  300. data/fixtures/self_test/features/tons_of_cukes.feature +0 -52
  301. data/fixtures/self_test/features/undefined_multiline_args.feature +0 -12
  302. data/fixtures/self_test/list-of-features.txt +0 -1
  303. data/fixtures/steps_library/features/step_definitions/steps_lib1.rb +0 -8
  304. data/fixtures/steps_library/features/step_definitions/steps_lib2.rb +0 -8
  305. data/fixtures/tickets/Rakefile +0 -20
  306. data/fixtures/tickets/features/172.feature +0 -28
  307. data/fixtures/tickets/features/177/1.feature +0 -28
  308. data/fixtures/tickets/features/177/2.feature +0 -20
  309. data/fixtures/tickets/features/177/3.feature +0 -18
  310. data/fixtures/tickets/features/180.feature +0 -7
  311. data/fixtures/tickets/features/229/tagged_hooks.feature +0 -8
  312. data/fixtures/tickets/features/229/tagged_hooks.rb +0 -14
  313. data/fixtures/tickets/features/236.feature +0 -13
  314. data/fixtures/tickets/features/241.feature +0 -12
  315. data/fixtures/tickets/features/246.feature +0 -4
  316. data/fixtures/tickets/features/248.feature +0 -11
  317. data/fixtures/tickets/features/270/back.feature +0 -14
  318. data/fixtures/tickets/features/270/back.steps.rb +0 -14
  319. data/fixtures/tickets/features/272/hooks.feature +0 -26
  320. data/fixtures/tickets/features/272/hooks_steps.rb +0 -53
  321. data/fixtures/tickets/features/279/py_string_indent.feature +0 -25
  322. data/fixtures/tickets/features/279/py_string_indent.steps.rb +0 -12
  323. data/fixtures/tickets/features/279/wrong.feature_ +0 -11
  324. data/fixtures/tickets/features/301/filter_background_tagged_hooks.feature +0 -6
  325. data/fixtures/tickets/features/301/filter_background_tagged_hooks_steps.rb +0 -12
  326. data/fixtures/tickets/features/306/only_background.feature +0 -4
  327. data/fixtures/tickets/features/around_timeout.feature +0 -6
  328. data/fixtures/tickets/features/gherkin_67.feature +0 -12
  329. data/fixtures/tickets/features/gherkin_68.feature +0 -4
  330. data/fixtures/tickets/features/half_manual.feature +0 -11
  331. data/fixtures/tickets/features/lib/eatting_machine.rb +0 -18
  332. data/fixtures/tickets/features/lib/pantry.rb +0 -20
  333. data/fixtures/tickets/features/scenario_outline.feature +0 -95
  334. data/fixtures/tickets/features/step_definitons/246_steps.rb +0 -3
  335. data/fixtures/tickets/features/step_definitons/248_steps.rb +0 -15
  336. data/fixtures/tickets/features/step_definitons/around_timeout_steps.rb +0 -9
  337. data/fixtures/tickets/features/step_definitons/half_manual_steps.rb +0 -11
  338. data/fixtures/tickets/features/step_definitons/scenario_outline_steps.rb +0 -42
  339. data/fixtures/tickets/features/step_definitons/tickets_steps.rb +0 -88
  340. data/fixtures/tickets/features/table_diffing.feature +0 -13
  341. data/fixtures/tickets/features/tickets.feature +0 -28
  342. data/fixtures/tickets/features.html +0 -138
  343. data/gem_tasks/yard/default/layout/html/bubble_32x32.png +0 -0
  344. data/gem_tasks/yard/default/layout/html/footer.erb +0 -5
  345. data/gem_tasks/yard/default/layout/html/index.erb +0 -1
  346. data/gem_tasks/yard/default/layout/html/layout.erb +0 -25
  347. data/gem_tasks/yard/default/layout/html/logo.erb +0 -1
  348. data/gem_tasks/yard/default/layout/html/setup.rb +0 -4
  349. data/gem_tasks/yard.rake +0 -40
  350. data/legacy_features/README.md +0 -14
  351. data/legacy_features/announce.feature +0 -152
  352. data/legacy_features/bug_371.feature +0 -32
  353. data/legacy_features/bug_464.feature +0 -16
  354. data/legacy_features/bug_475.feature +0 -42
  355. data/legacy_features/bug_585_tab_indentation.feature +0 -22
  356. data/legacy_features/bug_600.feature +0 -73
  357. data/legacy_features/cucumber_cli.feature +0 -584
  358. data/legacy_features/cucumber_cli_outlines.feature +0 -117
  359. data/legacy_features/default_snippets.feature +0 -43
  360. data/legacy_features/diffing.feature +0 -25
  361. data/legacy_features/drb_server_integration.feature +0 -174
  362. data/legacy_features/exclude_files.feature +0 -20
  363. data/legacy_features/expand.feature +0 -60
  364. data/legacy_features/junit_formatter.feature +0 -214
  365. data/legacy_features/language_from_header.feature +0 -30
  366. data/legacy_features/listener_debugger_formatter.feature +0 -42
  367. data/legacy_features/multiline_names.feature +0 -44
  368. data/legacy_features/report_called_undefined_steps.feature +0 -35
  369. data/legacy_features/rerun_formatter.feature +0 -52
  370. data/legacy_features/simplest.feature +0 -11
  371. data/legacy_features/snippet.feature +0 -23
  372. data/legacy_features/snippets_when_using_star_keyword.feature +0 -38
  373. data/legacy_features/step_definitions/cucumber_steps.rb +0 -179
  374. data/legacy_features/step_definitions/extra_steps.rb +0 -2
  375. data/legacy_features/step_definitions/simplest_steps.rb +0 -3
  376. data/legacy_features/step_definitions/wire_steps.rb +0 -34
  377. data/legacy_features/support/env.rb +0 -161
  378. data/legacy_features/support/env.rb.simplest +0 -7
  379. data/legacy_features/table_mapping.feature +0 -34
  380. data/legacy_features/transform.feature +0 -245
  381. data/legacy_features/unicode_table.feature +0 -35
  382. data/legacy_features/wire_protocol.feature +0 -332
  383. data/lib/README.rdoc +0 -12
  384. data/lib/cucumber/ast/background.rb +0 -116
  385. data/lib/cucumber/ast/comment.rb +0 -31
  386. data/lib/cucumber/ast/doc_string.rb +0 -61
  387. data/lib/cucumber/ast/empty_background.rb +0 -33
  388. data/lib/cucumber/ast/examples.rb +0 -49
  389. data/lib/cucumber/ast/feature.rb +0 -99
  390. data/lib/cucumber/ast/features.rb +0 -38
  391. data/lib/cucumber/ast/has_steps.rb +0 -74
  392. data/lib/cucumber/ast/location.rb +0 -41
  393. data/lib/cucumber/ast/multiline_argument.rb +0 -30
  394. data/lib/cucumber/ast/names.rb +0 -13
  395. data/lib/cucumber/ast/outline_table.rb +0 -194
  396. data/lib/cucumber/ast/scenario.rb +0 -103
  397. data/lib/cucumber/ast/scenario_outline.rb +0 -146
  398. data/lib/cucumber/ast/step.rb +0 -122
  399. data/lib/cucumber/ast/step_collection.rb +0 -92
  400. data/lib/cucumber/ast/step_invocation.rb +0 -196
  401. data/lib/cucumber/ast/tags.rb +0 -28
  402. data/lib/cucumber/ast/tree_walker.rb +0 -191
  403. data/lib/cucumber/ast/visitor.rb +0 -11
  404. data/lib/cucumber/broadcaster.rb +0 -13
  405. data/lib/cucumber/cli/drb_client.rb +0 -43
  406. data/lib/cucumber/feature_file.rb +0 -94
  407. data/lib/cucumber/formatter/ordered_xml_markup.rb +0 -24
  408. data/lib/cucumber/js_support/js_dsl.js +0 -57
  409. data/lib/cucumber/js_support/js_language.rb +0 -185
  410. data/lib/cucumber/js_support/js_snippets.rb +0 -27
  411. data/lib/cucumber/parser/gherkin_builder.rb +0 -284
  412. data/lib/cucumber/parser.rb +0 -2
  413. data/lib/cucumber/py_support/py_dsl.py +0 -10
  414. data/lib/cucumber/py_support/py_language.py +0 -10
  415. data/lib/cucumber/py_support/py_language.rb +0 -80
  416. data/lib/cucumber/runtime/features_loader.rb +0 -62
  417. data/lib/cucumber/runtime/results.rb +0 -64
  418. data/lib/cucumber/step_mother.rb +0 -10
  419. data/spec/cucumber/ast/background_spec.rb +0 -122
  420. data/spec/cucumber/ast/doc_string_spec.rb +0 -40
  421. data/spec/cucumber/ast/feature_factory.rb +0 -72
  422. data/spec/cucumber/ast/feature_spec.rb +0 -63
  423. data/spec/cucumber/ast/features_spec.rb +0 -51
  424. data/spec/cucumber/ast/outline_table_spec.rb +0 -21
  425. data/spec/cucumber/ast/scenario_outline_spec.rb +0 -74
  426. data/spec/cucumber/ast/step_spec.rb +0 -68
  427. data/spec/cucumber/ast/tree_walker_spec.rb +0 -19
  428. data/spec/cucumber/broadcaster_spec.rb +0 -15
  429. data/spec/cucumber/cli/drb_client_spec.rb +0 -76
  430. data/spec/cucumber/rake/rcov_spec.rb +0 -71
  431. data/spec/cucumber/runtime/results_spec.rb +0 -81
  432. data/spec/cucumber/wire_support/wire_step_definition_spec.rb +0 -20
  433. /data/examples/i18n/ar/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  434. /data/examples/i18n/bg/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  435. /data/examples/i18n/ca/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  436. /data/examples/i18n/cs/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  437. /data/examples/i18n/da/features/{step_definitons → step_definitions}/lommeregner_steps.rb +0 -0
  438. /data/examples/i18n/de/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  439. /data/examples/i18n/en/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  440. /data/examples/i18n/eo/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  441. /data/examples/i18n/es/features/{step_definitons → step_definitions}/calculador_steps.rb +0 -0
  442. /data/examples/i18n/fi/features/{step_definitons → step_definitions}/laskin_steps.rb +0 -0
  443. /data/examples/i18n/he/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  444. /data/examples/i18n/hi/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  445. /data/examples/i18n/hu/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  446. /data/examples/i18n/id/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  447. /data/examples/i18n/it/features/{step_definitons → step_definitions}/calcolatrice_steps.rb +0 -0
  448. /data/examples/i18n/ja/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  449. /data/examples/i18n/ko/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  450. /data/examples/i18n/lt/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  451. /data/examples/i18n/lv/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  452. /data/examples/i18n/no/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
  453. /data/examples/i18n/pl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  454. /data/examples/i18n/ro/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  455. /data/examples/i18n/ru/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  456. /data/examples/i18n/sk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  457. /data/examples/i18n/sr-Cyrl/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  458. /data/examples/i18n/sr-Latn/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  459. /data/examples/i18n/sv/features/{step_definitons → step_definitions}/kalkulator_steps.rb +0 -0
  460. /data/examples/i18n/tr/features/{step_definitons → step_definitions}/hesap_makinesi_adimlari.rb +0 -0
  461. /data/examples/i18n/uk/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  462. /data/examples/i18n/uz/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  463. /data/examples/i18n/zh-TW/features/{step_definitons → step_definitions}/calculator_steps.rb +0 -0
  464. /data/features/{nested_steps_with_second_arg.feature → docs/defining_steps/nested_steps_with_second_arg.feature} +0 -0
  465. /data/features/{iso-8859-1.feature → docs/iso-8859-1.feature} +0 -0
@@ -1,213 +1,202 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
- require 'cucumber/ast/table'
3
+ require 'cucumber/multiline_argument/data_table'
4
4
 
5
5
  module Cucumber
6
- module Ast
7
- describe Table do
6
+ module MultilineArgument
7
+ describe DataTable do
8
8
  before do
9
- @table = Table.new([
9
+ @table = DataTable.from([
10
10
  %w{one four seven},
11
11
  %w{4444 55555 666666}
12
12
  ])
13
- def @table.cells_rows; super; end
14
- def @table.columns; super; end
15
13
  end
16
14
 
17
15
  it "should have rows" do
18
- @table.cells_rows[0].map{|cell| cell.value}.should == %w{one four seven}
16
+ expect( @table.cells_rows[0].map{|cell| cell.value} ).to eq %w{one four seven}
19
17
  end
20
18
 
21
19
  it "should have columns" do
22
- @table.columns[1].map{|cell| cell.value}.should == %w{four 55555}
23
- end
24
-
25
- it "should have headers" do
26
- @table.headers.should == %w{one four seven}
20
+ expect( @table.columns[1].map{|cell| cell.value} ).to eq %w{four 55555}
27
21
  end
28
22
 
29
23
  it "should have same cell objects in rows and columns" do
30
24
  # 666666
31
- @table.cells_rows[1].__send__(:[], 2).should equal(@table.columns[2].__send__(:[], 1))
32
- end
33
-
34
- it "should know about max width of a row" do
35
- @table.columns[1].__send__(:width).should == 5
25
+ expect( @table.cells_rows[1][2] ).to equal(@table.columns[2][1])
36
26
  end
37
27
 
38
28
  it "should be convertible to an array of hashes" do
39
- @table.hashes.should == [
29
+ expect( @table.hashes ).to eq [
40
30
  {'one' => '4444', 'four' => '55555', 'seven' => '666666'}
41
31
  ]
42
32
  end
43
33
 
44
34
  it "should accept symbols as keys for the hashes" do
45
- @table.hashes.first[:one].should == '4444'
35
+ expect( @table.hashes.first[:one] ).to eq '4444'
46
36
  end
47
37
 
48
38
  it "should return the row values in order" do
49
- @table.rows.first.should == %w{4444 55555 666666}
39
+ expect( @table.rows.first ).to eq %w{4444 55555 666666}
50
40
  end
51
41
 
52
42
  describe '#map_column!' do
53
43
  it "should allow mapping columns" do
54
44
  @table.map_column!('one') { |v| v.to_i }
55
- @table.hashes.first['one'].should == 4444
45
+ expect( @table.hashes.first['one'] ).to eq 4444
56
46
  end
57
47
 
58
48
  it "applies the block once to each value" do
59
49
  headers = ['header']
60
50
  rows = ['value']
61
- table = Table.new [headers, rows]
51
+ table = DataTable.from [headers, rows]
62
52
  count = 0
63
53
  table.map_column!('header') { |value| count +=1 }
64
54
  table.rows
65
- count.should eq rows.size
55
+ expect( count ).to eq rows.size
66
56
  end
67
57
 
68
58
  it "should allow mapping columns and take a symbol as the column name" do
69
59
  @table.map_column!(:one) { |v| v.to_i }
70
- @table.hashes.first['one'].should == 4444
60
+ expect( @table.hashes.first['one'] ).to eq 4444
71
61
  end
72
62
 
73
63
  it "should allow mapping columns and modify the rows as well" do
74
64
  @table.map_column!(:one) { |v| v.to_i }
75
- @table.rows.first.should include(4444)
76
- @table.rows.first.should_not include('4444')
65
+ expect( @table.rows.first ).to include(4444)
66
+ expect( @table.rows.first ).to_not include('4444')
77
67
  end
78
68
 
79
69
  it "should pass silently if a mapped column does not exist in non-strict mode" do
80
- lambda {
70
+ expect {
81
71
  @table.map_column!('two', false) { |v| v.to_i }
82
72
  @table.hashes
83
- }.should_not raise_error
73
+ }.not_to raise_error
84
74
  end
85
75
 
86
76
  it "should fail if a mapped column does not exist in strict mode" do
87
- lambda {
77
+ expect {
88
78
  @table.map_column!('two', true) { |v| v.to_i }
89
79
  @table.hashes
90
- }.should raise_error('The column named "two" does not exist')
80
+ }.to raise_error('The column named "two" does not exist')
91
81
  end
92
82
 
93
83
  it "should return the table" do
94
- (@table.map_column!(:one) { |v| v.to_i }).should == @table
84
+ expect( (@table.map_column!(:one) { |v| v.to_i }) ).to eq @table
95
85
  end
96
86
  end
97
87
 
98
88
  describe '#map_column' do
99
89
  it "should allow mapping columns" do
100
90
  new_table = @table.map_column('one') { |v| v.to_i }
101
- new_table.hashes.first['one'].should == 4444
91
+ expect( new_table.hashes.first['one'] ).to eq 4444
102
92
  end
103
93
 
104
94
  it "applies the block once to each value" do
105
95
  headers = ['header']
106
96
  rows = ['value']
107
- table = Table.new [headers, rows]
97
+ table = DataTable.from [headers, rows]
108
98
  count = 0
109
99
  new_table = table.map_column('header') { |value| count +=1 }
110
100
  new_table.rows
111
- count.should eq rows.size
101
+ expect( count ).to eq rows.size
112
102
  end
113
103
 
114
104
  it "should allow mapping columns and take a symbol as the column name" do
115
105
  new_table = @table.map_column(:one) { |v| v.to_i }
116
- new_table.hashes.first['one'].should == 4444
106
+ expect( new_table.hashes.first['one'] ).to eq 4444
117
107
  end
118
108
 
119
109
  it "should allow mapping columns and modify the rows as well" do
120
110
  new_table = @table.map_column(:one) { |v| v.to_i }
121
- new_table.rows.first.should include(4444)
122
- new_table.rows.first.should_not include('4444')
111
+ expect( new_table.rows.first ).to include(4444)
112
+ expect( new_table.rows.first ).to_not include('4444')
123
113
  end
124
114
 
125
115
  it "should pass silently if a mapped column does not exist in non-strict mode" do
126
- lambda {
116
+ expect {
127
117
  new_table = @table.map_column('two', false) { |v| v.to_i }
128
118
  new_table.hashes
129
- }.should_not raise_error
119
+ }.not_to raise_error
130
120
  end
131
121
 
132
122
  it "should fail if a mapped column does not exist in strict mode" do
133
- lambda {
123
+ expect {
134
124
  new_table = @table.map_column('two', true) { |v| v.to_i }
135
125
  new_table.hashes
136
- }.should raise_error('The column named "two" does not exist')
126
+ }.to raise_error('The column named "two" does not exist')
137
127
  end
138
128
 
139
129
  it "should return a new table" do
140
- (@table.map_column(:one) { |v| v.to_i }).should_not == @table
130
+ expect( (@table.map_column(:one) { |v| v.to_i }) ).to_not eq @table
141
131
  end
142
132
  end
143
133
 
144
-
145
134
  describe "#match" do
146
135
  before(:each) do
147
- @table = Table.new([
136
+ @table = DataTable.from([
148
137
  %w{one four seven},
149
138
  %w{4444 55555 666666}
150
139
  ])
151
140
  end
152
141
 
153
142
  it "returns nil if headers do not match" do
154
- @table.match('does,not,match').should be_nil
143
+ expect( @table.match('does,not,match') ).to be_nil
155
144
  end
156
145
  it "requires a table: prefix on match" do
157
- @table.match('table:one,four,seven').should_not be_nil
146
+ expect( @table.match('table:one,four,seven') ).to_not be_nil
158
147
  end
159
148
  it "does not match if no table: prefix on match" do
160
- @table.match('one,four,seven').should be_nil
149
+ expect( @table.match('one,four,seven') ).to be_nil
161
150
  end
162
151
  end
163
152
 
164
153
  describe "#transpose" do
165
154
  before(:each) do
166
- @table = Table.new([
155
+ @table = DataTable.from([
167
156
  %w{one 1111},
168
157
  %w{two 22222}
169
158
  ])
170
159
  end
171
160
 
172
161
  it "should be convertible in to an array where each row is a hash" do
173
- @table.transpose.hashes[0].should == {'one' => '1111', 'two' => '22222'}
162
+ expect( @table.transpose.hashes[0] ).to eq('one' => '1111', 'two' => '22222')
174
163
  end
175
164
  end
176
165
 
177
166
  describe "#rows_hash" do
178
167
 
179
168
  it "should return a hash of the rows" do
180
- table = Table.new([
169
+ table = DataTable.from([
181
170
  %w{one 1111},
182
171
  %w{two 22222}
183
172
  ])
184
- table.rows_hash.should == {'one' => '1111', 'two' => '22222'}
173
+ expect( table.rows_hash ).to eq( 'one' => '1111', 'two' => '22222' )
185
174
  end
186
175
 
187
176
  it "should fail if the table doesn't have two columns" do
188
- faulty_table = Table.new([
177
+ faulty_table = DataTable.from([
189
178
  %w{one 1111 abc},
190
179
  %w{two 22222 def}
191
180
  ])
192
- lambda {
181
+ expect {
193
182
  faulty_table.rows_hash
194
- }.should raise_error('The table must have exactly 2 columns')
183
+ }.to raise_error('The table must have exactly 2 columns')
195
184
  end
196
185
 
197
186
  it "should support header and column mapping" do
198
- table = Table.new([
187
+ table = DataTable.from([
199
188
  %w{one 1111},
200
189
  %w{two 22222}
201
190
  ])
202
- table.map_headers!({ 'two' => 'Two' }) { |header| header.upcase }
203
- table.map_column!('two', false) { |val| val.to_i }
204
- table.rows_hash.should == { 'ONE' => '1111', 'Two' => 22222 }
191
+ t2 = table.map_headers({ 'two' => 'Two' }) { |header| header.upcase }.
192
+ map_column('two', false) { |val| val.to_i }
193
+ expect( t2.rows_hash ).to eq( 'ONE' => '1111', 'Two' => 22222 )
205
194
  end
206
195
  end
207
196
 
208
197
  describe '#map_headers!' do
209
198
  let(:table) do
210
- Table.new([
199
+ DataTable.from([
211
200
  %w{HELLO WORLD},
212
201
  %w{4444 55555}
213
202
  ])
@@ -215,25 +204,25 @@ module Cucumber
215
204
 
216
205
  it "renames the columns to the specified values in the provided hash" do
217
206
  @table.map_headers!('one' => :three)
218
- @table.hashes.first[:three].should == '4444'
207
+ expect( @table.hashes.first[:three] ).to eq '4444'
219
208
  end
220
209
 
221
210
  it "allows renaming columns using regexp" do
222
211
  @table.map_headers!(/one|uno/ => :three)
223
- @table.hashes.first[:three].should == '4444'
212
+ expect( @table.hashes.first[:three] ).to eq '4444'
224
213
  end
225
214
 
226
215
  it "copies column mappings" do
227
216
  @table.map_column!('one') { |v| v.to_i }
228
217
  @table.map_headers!('one' => 'three')
229
- @table.hashes.first['three'].should == 4444
218
+ expect( @table.hashes.first['three'] ).to eq 4444
230
219
  end
231
220
 
232
221
  it "takes a block and operates on all the headers with it" do
233
222
  table.map_headers! do |header|
234
223
  header.downcase
235
224
  end
236
- table.hashes.first.keys.should =~ %w[hello world]
225
+ expect( table.hashes.first.keys ).to match %w[hello world]
237
226
  end
238
227
 
239
228
  it "treats the mappings in the provided hash as overrides when used with a block" do
@@ -241,13 +230,13 @@ module Cucumber
241
230
  header.downcase
242
231
  end
243
232
 
244
- table.hashes.first.keys.should =~ %w[hello foo]
233
+ expect( table.hashes.first.keys ).to match %w[hello foo]
245
234
  end
246
235
  end
247
236
 
248
237
  describe '#map_headers' do
249
238
  let(:table) do
250
- Table.new([
239
+ DataTable.from([
251
240
  %w{HELLO WORLD},
252
241
  %w{4444 55555}
253
242
  ])
@@ -255,18 +244,18 @@ module Cucumber
255
244
 
256
245
  it "renames the columns to the specified values in the provided hash" do
257
246
  table2 = @table.map_headers('one' => :three)
258
- table2.hashes.first[:three].should == '4444'
247
+ expect( table2.hashes.first[:three] ).to eq '4444'
259
248
  end
260
249
 
261
250
  it "allows renaming columns using regexp" do
262
251
  table2 = @table.map_headers(/one|uno/ => :three)
263
- table2.hashes.first[:three].should == '4444'
252
+ expect( table2.hashes.first[:three] ).to eq '4444'
264
253
  end
265
254
 
266
255
  it "copies column mappings" do
267
256
  @table.map_column!('one') { |v| v.to_i }
268
257
  table2 = @table.map_headers('one' => 'three')
269
- table2.hashes.first['three'].should == 4444
258
+ expect( table2.hashes.first['three'] ).to eq 4444
270
259
  end
271
260
 
272
261
  it "takes a block and operates on all the headers with it" do
@@ -274,7 +263,7 @@ module Cucumber
274
263
  header.downcase
275
264
  end
276
265
 
277
- table2.hashes.first.keys.should =~ %w[hello world]
266
+ expect( table2.hashes.first.keys ).to match %w[hello world]
278
267
  end
279
268
 
280
269
  it "treats the mappings in the provided hash as overrides when used with a block" do
@@ -282,89 +271,28 @@ module Cucumber
282
271
  header.downcase
283
272
  end
284
273
 
285
- table2.hashes.first.keys.should =~ %w[hello foo]
286
- end
287
- end
288
-
289
- describe "replacing arguments" do
290
-
291
- before(:each) do
292
- @table = Table.new([
293
- %w{qty book},
294
- %w{<qty> <book>}
295
- ])
296
- end
297
-
298
- it "should return a new table with arguments replaced with values" do
299
- table_with_replaced_args = @table.arguments_replaced({'<book>' => 'Unbearable lightness of being', '<qty>' => '5'})
300
-
301
- table_with_replaced_args.hashes[0]['book'].should == 'Unbearable lightness of being'
302
- table_with_replaced_args.hashes[0]['qty'].should == '5'
303
- end
304
-
305
- it "should recognise when entire cell is delimited" do
306
- @table.should have_text('<book>')
307
- end
308
-
309
- it "should recognise when just a subset of a cell is delimited" do
310
- table = Table.new([
311
- %w{qty book},
312
- [nil, "This is <who>'s book"]
313
- ])
314
- table.should have_text('<who>')
315
- end
316
-
317
- it "should replace nil values with nil" do
318
- table_with_replaced_args = @table.arguments_replaced({'<book>' => nil})
319
-
320
- table_with_replaced_args.hashes[0]['book'].should == nil
321
- end
322
-
323
- it "should preserve values which don't match a placeholder when replacing with nil" do
324
- table = Table.new([
325
- %w{book},
326
- %w{cat}
327
- ])
328
- table_with_replaced_args = table.arguments_replaced({'<book>' => nil})
329
-
330
- table_with_replaced_args.hashes[0]['book'].should == 'cat'
331
- end
332
-
333
- it "should not change the original table" do
334
- @table.arguments_replaced({'<book>' => 'Unbearable lightness of being'})
335
-
336
- @table.hashes[0]['book'].should_not == 'Unbearable lightness of being'
337
- end
338
-
339
- it "should not raise an error when there are nil values in the table" do
340
- table = Table.new([
341
- ['book', 'qty'],
342
- ['<book>', nil],
343
- ])
344
- lambda{
345
- table.arguments_replaced({'<book>' => nil, '<qty>' => '5'})
346
- }.should_not raise_error
274
+ expect( table2.hashes.first.keys ).to match %w[hello foo]
347
275
  end
348
276
  end
349
277
 
350
278
  describe "diff!" do
351
279
  it "should detect a complex diff" do
352
- t1 = table(%{
280
+ t1 = DataTable.from(%{
353
281
  | 1 | 22 | 333 | 4444 |
354
282
  | 55555 | 666666 | 7777777 | 88888888 |
355
283
  | 999999999 | 0000000000 | 01010101010 | 121212121212 |
356
284
  | 4000 | ABC | DEF | 50000 |
357
- }, __FILE__, __LINE__)
285
+ })
358
286
 
359
- t2 = table(%{
287
+ t2 = DataTable.from(%{
360
288
  | a | 4444 | 1 |
361
289
  | bb | 88888888 | 55555 |
362
290
  | ccc | xxxxxxxx | 999999999 |
363
291
  | dddd | 4000 | 300 |
364
292
  | e | 50000 | 4000 |
365
- }, __FILE__, __LINE__)
366
- lambda{t1.diff!(t2)}.should raise_error
367
- t1.to_s(:indent => 12, :color => false).should == %{
293
+ })
294
+ expect { t1.diff!(t2) }.to raise_error
295
+ expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
368
296
  | 1 | (-) 22 | (-) 333 | 4444 | (+) a |
369
297
  | 55555 | (-) 666666 | (-) 7777777 | 88888888 | (+) bb |
370
298
  | (-) 999999999 | (-) 0000000000 | (-) 01010101010 | (-) 121212121212 | (+) |
@@ -375,13 +303,13 @@ module Cucumber
375
303
  end
376
304
 
377
305
  it "should not change table when diffed with identical" do
378
- t = table(%{
306
+ t = DataTable.from(%{
379
307
  |a|b|c|
380
308
  |d|e|f|
381
309
  |g|h|i|
382
- }, __FILE__, __LINE__)
310
+ })
383
311
  t.diff!(t.dup)
384
- t.to_s(:indent => 12, :color => false).should == %{
312
+ expect( t.to_s(:indent => 12, :color => false) ).to eq %{
385
313
  | a | b | c |
386
314
  | d | e | f |
387
315
  | g | h | i |
@@ -389,17 +317,17 @@ module Cucumber
389
317
  end
390
318
 
391
319
  it "should inspect missing and surplus cells" do
392
- t1 = Table.new([
320
+ t1 = DataTable.from([
393
321
  ['name', 'male', 'lastname', 'swedish'],
394
322
  ['aslak', 'true', 'hellesøy', 'false']
395
323
  ])
396
- t2 = Table.new([
324
+ t2 = DataTable.from([
397
325
  ['name', 'male', 'lastname', 'swedish'],
398
326
  ['aslak', true, 'hellesøy', false]
399
327
  ])
400
- lambda{t1.diff!(t2)}.should raise_error
328
+ expect { t1.diff!(t2) }.to raise_error
401
329
 
402
- t1.to_s(:indent => 12, :color => false).should == %{
330
+ expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
403
331
  | name | male | lastname | swedish |
404
332
  | (-) aslak | (-) (i) "true" | (-) hellesøy | (-) (i) "false" |
405
333
  | (+) aslak | (+) (i) true | (+) hellesøy | (+) (i) false |
@@ -407,70 +335,70 @@ module Cucumber
407
335
  end
408
336
 
409
337
  it "should allow column mapping of target before diffing" do
410
- t1 = Table.new([
338
+ t1 = DataTable.from([
411
339
  ['name', 'male'],
412
340
  ['aslak', 'true']
413
341
  ])
414
342
  t1.map_column!('male') { |m| m == 'true' }
415
- t2 = Table.new([
343
+ t2 = DataTable.from([
416
344
  ['name', 'male'],
417
345
  ['aslak', true]
418
346
  ])
419
347
  t1.diff!(t2)
420
- t1.to_s(:indent => 12, :color => false).should == %{
348
+ expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
421
349
  | name | male |
422
350
  | aslak | true |
423
351
  }
424
352
  end
425
353
 
426
354
  it "should allow column mapping of argument before diffing" do
427
- t1 = Table.new([
355
+ t1 = DataTable.from([
428
356
  ['name', 'male'],
429
357
  ['aslak', true]
430
358
  ])
431
359
  t1.map_column!('male') {
432
360
  'true'
433
361
  }
434
- t2 = Table.new([
362
+ t2 = DataTable.from([
435
363
  ['name', 'male'],
436
364
  ['aslak', 'true']
437
365
  ])
438
366
  t2.diff!(t1)
439
- t1.to_s(:indent => 12, :color => false).should == %{
367
+ expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
440
368
  | name | male |
441
369
  | aslak | true |
442
370
  }
443
371
  end
444
372
 
445
373
  it "should allow header mapping before diffing" do
446
- t1 = Table.new([
374
+ t1 = DataTable.from([
447
375
  ['Name', 'Male'],
448
376
  ['aslak', 'true']
449
377
  ])
450
378
  t1.map_headers!('Name' => 'name', 'Male' => 'male')
451
379
  t1.map_column!('male') { |m| m == 'true' }
452
- t2 = Table.new([
380
+ t2 = DataTable.from([
453
381
  ['name', 'male'],
454
382
  ['aslak', true]
455
383
  ])
456
384
  t1.diff!(t2)
457
- t1.to_s(:indent => 12, :color => false).should == %{
385
+ expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
458
386
  | name | male |
459
387
  | aslak | true |
460
388
  }
461
389
  end
462
390
 
463
391
  it "should detect seemingly identical tables as different" do
464
- t1 = Table.new([
392
+ t1 = DataTable.from([
465
393
  ['X', 'Y'],
466
394
  ['2', '1']
467
395
  ])
468
- t2 = Table.new([
396
+ t2 = DataTable.from([
469
397
  ['X', 'Y'],
470
398
  [2, 1]
471
399
  ])
472
- lambda{t1.diff!(t2)}.should raise_error
473
- t1.to_s(:indent => 12, :color => false).should == %{
400
+ expect { t1.diff!(t2) }.to raise_error
401
+ expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
474
402
  | X | Y |
475
403
  | (-) (i) "2" | (-) (i) "1" |
476
404
  | (+) (i) 2 | (+) (i) 1 |
@@ -478,117 +406,109 @@ module Cucumber
478
406
  end
479
407
 
480
408
  it "should not allow mappings that match more than 1 column" do
481
- t1 = Table.new([
409
+ t1 = DataTable.from([
482
410
  ['Cuke', 'Duke'],
483
411
  ['Foo', 'Bar']
484
412
  ])
485
- lambda do
413
+ expect do
486
414
  t1.map_headers!(/uk/ => 'u')
487
415
  t1.hashes
488
- end.should raise_error(%{2 headers matched /uk/: ["Cuke", "Duke"]})
416
+ end.to raise_error(%{2 headers matched /uk/: ["Cuke", "Duke"]})
489
417
  end
490
418
 
491
419
  describe "raising" do
492
420
  before do
493
- @t = table(%{
421
+ @t = DataTable.from(%{
494
422
  | a | b |
495
423
  | c | d |
496
- }, __FILE__, __LINE__)
497
- @t.should_not == nil
424
+ })
425
+ expect( @t ).not_to eq nil
498
426
  end
499
427
 
500
428
  it "should raise on missing rows" do
501
- t = table(%{
429
+ t = DataTable.from(%{
502
430
  | a | b |
503
- }, __FILE__, __LINE__)
504
- lambda { @t.dup.diff!(t) }.should raise_error
505
- lambda { @t.dup.diff!(t, :missing_row => false) }.should_not raise_error
431
+ })
432
+ expect( lambda { @t.dup.diff!(t) } ).to raise_error
433
+ expect { @t.dup.diff!(t, :missing_row => false) }.not_to raise_error
506
434
  end
507
435
 
508
436
  it "should not raise on surplus rows when surplus is at the end" do
509
- t = table(%{
437
+ t = DataTable.from(%{
510
438
  | a | b |
511
439
  | c | d |
512
440
  | e | f |
513
- }, __FILE__, __LINE__)
514
- lambda { @t.dup.diff!(t) }.should raise_error
515
- lambda { @t.dup.diff!(t, :surplus_row => false) }.should_not raise_error
441
+ })
442
+ expect { @t.dup.diff!(t) }.to raise_error
443
+ expect { @t.dup.diff!(t, :surplus_row => false) }.not_to raise_error
516
444
  end
517
445
 
518
446
  it "should not raise on surplus rows when surplus is interleaved" do
519
- t1 = table(%{
447
+ t1 = DataTable.from(%{
520
448
  | row_1 | row_2 |
521
449
  | four | 4 |
522
- }, __FILE__, __LINE__)
523
- t2 = table(%{
450
+ })
451
+ t2 = DataTable.from(%{
524
452
  | row_1 | row_2 |
525
453
  | one | 1 |
526
454
  | two | 2 |
527
455
  | three | 3 |
528
456
  | four | 4 |
529
457
  | five | 5 |
530
- }, __FILE__, __LINE__)
531
- lambda { t1.dup.diff!(t2) }.should raise_error
458
+ })
459
+ expect { t1.dup.diff!(t2) }.to raise_error
532
460
 
533
- lambda { t1.dup.diff!(t2, :surplus_row => false) }.should_not raise_error
461
+ expect { t1.dup.diff!(t2, :surplus_row => false) }.not_to raise_error
534
462
  end
535
463
 
536
464
  it "should raise on missing columns" do
537
- t = table(%{
465
+ t = DataTable.from(%{
538
466
  | a |
539
467
  | c |
540
- }, __FILE__, __LINE__)
541
- lambda { @t.dup.diff!(t) }.should raise_error
542
- lambda { @t.dup.diff!(t, :missing_col => false) }.should_not raise_error
468
+ })
469
+ expect { @t.dup.diff!(t) }.to raise_error
470
+ expect { @t.dup.diff!(t, :missing_col => false) }.not_to raise_error
543
471
  end
544
472
 
545
473
  it "should not raise on surplus columns" do
546
- t = table(%{
474
+ t = DataTable.from(%{
547
475
  | a | b | x |
548
476
  | c | d | y |
549
- }, __FILE__, __LINE__)
550
- lambda { @t.dup.diff!(t) }.should_not raise_error
551
- lambda { @t.dup.diff!(t, :surplus_col => true) }.should raise_error
477
+ })
478
+ expect { @t.dup.diff!(t) }.not_to raise_error
479
+ expect { @t.dup.diff!(t, :surplus_col => true) }.to raise_error
552
480
  end
553
481
 
554
482
  it "should not raise on misplaced columns" do
555
- t = table(%{
483
+ t = DataTable.from(%{
556
484
  | b | a |
557
485
  | d | c |
558
- }, __FILE__, __LINE__)
559
- lambda { @t.dup.diff!(t) }.should_not raise_error
560
- lambda { @t.dup.diff!(t, :misplaced_col => true) }.should raise_error
486
+ })
487
+ expect { @t.dup.diff!(t) }.not_to raise_error
488
+ expect { @t.dup.diff!(t, :misplaced_col => true) }.to raise_error
561
489
  end
562
490
  end
563
491
 
564
- def table(text, file, offset)
565
- Table.parse(text, file, offset)
492
+ it "can compare to an Array" do
493
+ t = DataTable.from(%{
494
+ | b | a |
495
+ | d | c |
496
+ })
497
+ other = [ %w{b a}, %w{d c} ]
498
+
499
+ expect { t.diff!(other) }.not_to raise_error
566
500
  end
567
501
  end
568
502
 
569
- describe "#new" do
503
+ describe "#from" do
570
504
  it "should allow Array of Hash" do
571
- t1 = Table.new([{'name' => 'aslak', 'male' => 'true'}])
572
- t1.to_s(:indent => 12, :color => false).should == %{
505
+ t1 = DataTable.from([{'name' => 'aslak', 'male' => 'true'}])
506
+ expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
573
507
  | male | name |
574
508
  | true | aslak |
575
509
  }
576
510
  end
577
511
  end
578
-
579
- it "should convert to sexp" do
580
- @table.to_sexp.should ==
581
- [:table,
582
- [:row, -1,
583
- [:cell, "one"],
584
- [:cell, "four"],
585
- [:cell, "seven"]
586
- ],
587
- [:row, -1,
588
- [:cell, "4444"],
589
- [:cell, "55555"],
590
- [:cell, "666666"]]]
591
- end
592
512
  end
593
513
  end
594
514
  end