rspec 1.0.0 → 1.3.1

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 (456) hide show
  1. data/.document +7 -0
  2. data/History.rdoc +1546 -0
  3. data/{MIT-LICENSE → License.txt} +3 -1
  4. data/Manifest.txt +384 -0
  5. data/README.rdoc +41 -0
  6. data/Rakefile +94 -229
  7. data/Ruby1.9.rdoc +31 -0
  8. data/TODO.txt +17 -0
  9. data/Upgrade.rdoc +260 -0
  10. data/bin/autospec +4 -0
  11. data/bin/spec +5 -3
  12. data/cucumber.yml +5 -0
  13. data/examples/failing/README.txt +11 -0
  14. data/examples/failing/diffing_spec.rb +36 -0
  15. data/examples/failing/failing_implicit_docstrings_example.rb +17 -0
  16. data/examples/failing/failure_in_after.rb +10 -0
  17. data/examples/failing/failure_in_before.rb +10 -0
  18. data/examples/failing/mocking_example.rb +38 -0
  19. data/examples/failing/mocking_with_flexmock.rb +26 -0
  20. data/examples/failing/mocking_with_mocha.rb +25 -0
  21. data/examples/failing/mocking_with_rr.rb +27 -0
  22. data/examples/failing/partial_mock_example.rb +18 -0
  23. data/examples/failing/pending_example.rb +7 -0
  24. data/examples/failing/predicate_example.rb +32 -0
  25. data/examples/failing/raising_example.rb +47 -0
  26. data/examples/failing/syntax_error_example.rb +7 -0
  27. data/examples/failing/team_spec.rb +41 -0
  28. data/examples/failing/timeout_behaviour.rb +5 -0
  29. data/examples/{custom_formatter.rb → passing/custom_formatter.rb} +1 -1
  30. data/examples/passing/dynamic_spec.rb +7 -0
  31. data/examples/{file_accessor.rb → passing/file_accessor.rb} +18 -18
  32. data/examples/{file_accessor_spec.rb → passing/file_accessor_spec.rb} +37 -38
  33. data/examples/passing/filtered_formatter.rb +17 -0
  34. data/examples/passing/filtered_formatter_example.rb +31 -0
  35. data/examples/{greeter_spec.rb → passing/greeter_spec.rb} +1 -1
  36. data/examples/passing/helper_method_example.rb +12 -0
  37. data/examples/passing/implicit_docstrings_example.rb +16 -0
  38. data/examples/{io_processor.rb → passing/io_processor.rb} +8 -8
  39. data/examples/{io_processor_spec.rb → passing/io_processor_spec.rb} +2 -3
  40. data/examples/{mocking_example.rb → passing/mocking_example.rb} +0 -2
  41. data/examples/{multi_threaded_behaviour_runner.rb → passing/multi_threaded_example_group_runner.rb} +10 -9
  42. data/examples/passing/nested_classes_example.rb +35 -0
  43. data/examples/passing/options_example.rb +29 -0
  44. data/examples/passing/options_formatter.rb +20 -0
  45. data/examples/{partial_mock_example.rb → passing/partial_mock_example.rb} +2 -3
  46. data/examples/passing/pending_example.rb +18 -0
  47. data/examples/{predicate_example.rb → passing/predicate_example.rb} +1 -3
  48. data/examples/{shared_behaviours_example.rb → passing/shared_example_group_example.rb} +15 -11
  49. data/examples/passing/shared_stack_examples.rb +36 -0
  50. data/examples/passing/simple_matcher_example.rb +29 -0
  51. data/examples/{stack.rb → passing/stack.rb} +1 -1
  52. data/examples/{stack_spec.rb → passing/stack_spec.rb} +6 -40
  53. data/examples/passing/stack_spec_with_nested_example_groups.rb +66 -0
  54. data/examples/{stubbing_example.rb → passing/stubbing_example.rb} +1 -3
  55. data/examples/passing/yielding_example.rb +31 -0
  56. data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +85 -0
  57. data/features/before_and_after_blocks/before_and_after_blocks.feature +167 -0
  58. data/features/command_line/line_number_option.feature +56 -0
  59. data/features/command_line/line_number_option_with_example_with_no_name.feature +22 -0
  60. data/features/example_groups/define_example_attribute.feature +41 -0
  61. data/features/example_groups/example_group_with_should_methods.feature +29 -0
  62. data/features/example_groups/implicit_docstrings.feature +59 -0
  63. data/features/example_groups/nested_groups.feature +32 -0
  64. data/features/expectations/customized_message.feature +54 -0
  65. data/features/expectations/expect_change.feature +65 -0
  66. data/features/expectations/expect_error.feature +44 -0
  67. data/features/extensions/custom_example_group.feature +19 -0
  68. data/features/formatters/custom_formatter.feature +30 -0
  69. data/features/formatters/nested_formatter.feature +32 -0
  70. data/features/interop/cucumber_stubs_dont_leak.feature +11 -0
  71. data/features/interop/examples_and_tests_together.feature +84 -0
  72. data/features/interop/rspec_output.feature +25 -0
  73. data/features/interop/test_but_not_test_unit.feature +26 -0
  74. data/features/interop/test_case_with_should_methods.feature +46 -0
  75. data/features/load_paths/add_lib_to_load_path.feature +20 -0
  76. data/features/load_paths/add_spec_to_load_path.feature +20 -0
  77. data/features/matchers/define_diffable_matcher.feature +26 -0
  78. data/features/matchers/define_matcher.feature +179 -0
  79. data/features/matchers/define_matcher_outside_rspec.feature +38 -0
  80. data/features/matchers/define_matcher_with_fluent_interface.feature +48 -0
  81. data/features/matchers/define_wrapped_matcher.feature +56 -0
  82. data/features/matchers/match_unless_raises.feature +60 -0
  83. data/features/matchers/match_unless_raises_unexpected_error.feature +39 -0
  84. data/features/mock_framework_integration/use_flexmock.feature +27 -0
  85. data/features/mock_framework_integration/use_mocha.feature +27 -0
  86. data/features/mock_framework_integration/use_rr.feature +27 -0
  87. data/features/mocks/block_local_expectations.feature +62 -0
  88. data/features/mocks/mix_stubs_and_mocks.feature +22 -0
  89. data/features/mocks/stub_implementation.feature +26 -0
  90. data/features/pending/pending_examples.feature +81 -0
  91. data/features/runner/specify_line_number.feature +32 -0
  92. data/features/spec_helper/spec_helper.feature +25 -0
  93. data/features/step_definitions/running_rspec_steps.rb +52 -0
  94. data/features/step_definitions/stubbing_steps.rb +16 -0
  95. data/features/subject/explicit_subject.feature +31 -0
  96. data/features/subject/implicit_subject.feature +43 -0
  97. data/features/support/env.rb +83 -0
  98. data/features/support/matchers/smart_match.rb +31 -0
  99. data/geminstaller.yml +29 -0
  100. data/init.rb +9 -0
  101. data/lib/autotest/discover.rb +3 -0
  102. data/lib/autotest/rspec.rb +54 -0
  103. data/lib/spec/adapters/mock_frameworks/flexmock.rb +24 -0
  104. data/{plugins → lib/spec/adapters}/mock_frameworks/mocha.rb +8 -4
  105. data/lib/spec/adapters/mock_frameworks/rr.rb +22 -0
  106. data/lib/spec/adapters/mock_frameworks/rspec.rb +21 -0
  107. data/lib/spec/autorun.rb +3 -0
  108. data/lib/spec/deprecation.rb +41 -0
  109. data/lib/spec/dsl/main.rb +93 -0
  110. data/lib/spec/dsl.rb +1 -10
  111. data/lib/spec/example/args_and_options.rb +27 -0
  112. data/lib/spec/example/before_and_after_hooks.rb +93 -0
  113. data/lib/spec/example/errors.rb +25 -0
  114. data/lib/spec/example/example_group.rb +10 -0
  115. data/lib/spec/example/example_group_factory.rb +82 -0
  116. data/lib/spec/example/example_group_hierarchy.rb +53 -0
  117. data/lib/spec/example/example_group_methods.rb +287 -0
  118. data/lib/spec/example/example_group_proxy.rb +61 -0
  119. data/lib/spec/example/example_matcher.rb +43 -0
  120. data/lib/spec/example/example_methods.rb +152 -0
  121. data/lib/spec/example/example_proxy.rb +41 -0
  122. data/lib/spec/example/module_reopening_fix.rb +43 -0
  123. data/lib/spec/example/pending.rb +18 -0
  124. data/lib/spec/example/predicate_matchers.rb +46 -0
  125. data/lib/spec/example/shared_example_group.rb +59 -0
  126. data/lib/spec/example/subject.rb +114 -0
  127. data/lib/spec/example.rb +164 -0
  128. data/lib/spec/expectations/errors.rb +7 -1
  129. data/lib/spec/expectations/extensions/kernel.rb +52 -0
  130. data/lib/spec/expectations/extensions.rb +1 -2
  131. data/lib/spec/expectations/fail_with.rb +45 -0
  132. data/lib/spec/expectations/handler.rb +37 -30
  133. data/lib/spec/expectations.rb +2 -23
  134. data/lib/spec/extensions/instance_exec.rb +31 -0
  135. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  136. data/lib/spec/interop/test/unit/testcase.rb +56 -0
  137. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  138. data/lib/spec/interop/test/unit/testsuite_adapter.rb +36 -0
  139. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  140. data/lib/spec/interop/test.rb +44 -0
  141. data/lib/spec/matchers/be.rb +183 -140
  142. data/lib/spec/matchers/be_close.rb +18 -23
  143. data/lib/spec/matchers/be_instance_of.rb +26 -0
  144. data/lib/spec/matchers/be_kind_of.rb +26 -0
  145. data/lib/spec/matchers/change.rb +72 -41
  146. data/lib/spec/matchers/compatibility.rb +14 -0
  147. data/lib/spec/matchers/dsl.rb +20 -0
  148. data/lib/spec/matchers/eql.rb +25 -26
  149. data/lib/spec/matchers/equal.rb +35 -25
  150. data/lib/spec/matchers/errors.rb +5 -0
  151. data/lib/spec/matchers/exist.rb +16 -0
  152. data/lib/spec/matchers/generated_descriptions.rb +36 -0
  153. data/lib/spec/matchers/has.rb +17 -26
  154. data/lib/spec/matchers/have.rb +36 -24
  155. data/lib/spec/matchers/include.rb +22 -48
  156. data/lib/spec/matchers/match.rb +11 -31
  157. data/lib/spec/matchers/match_array.rb +71 -0
  158. data/lib/spec/matchers/matcher.rb +132 -0
  159. data/lib/spec/matchers/method_missing.rb +9 -0
  160. data/lib/spec/matchers/operator_matcher.rb +55 -44
  161. data/lib/spec/matchers/pretty.rb +37 -0
  162. data/lib/spec/matchers/raise_exception.rb +131 -0
  163. data/lib/spec/matchers/respond_to.rb +35 -9
  164. data/lib/spec/matchers/satisfy.rb +2 -2
  165. data/lib/spec/matchers/simple_matcher.rb +134 -0
  166. data/lib/spec/matchers/throw_symbol.rb +56 -31
  167. data/lib/spec/matchers/wrap_expectation.rb +55 -0
  168. data/lib/spec/matchers.rb +104 -48
  169. data/lib/spec/mocks/argument_expectation.rb +28 -112
  170. data/lib/spec/mocks/argument_matchers.rb +237 -0
  171. data/lib/spec/mocks/error_generator.rb +20 -13
  172. data/lib/spec/mocks/errors.rb +1 -1
  173. data/lib/spec/mocks/example_methods.rb +69 -0
  174. data/lib/spec/mocks/extensions.rb +1 -0
  175. data/lib/spec/mocks/framework.rb +15 -0
  176. data/lib/spec/mocks/message_expectation.rb +206 -93
  177. data/lib/spec/mocks/methods.rb +66 -7
  178. data/lib/spec/mocks/mock.rb +53 -11
  179. data/lib/spec/mocks/proxy.rb +160 -55
  180. data/lib/spec/mocks/space.rb +2 -2
  181. data/lib/spec/mocks.rb +14 -23
  182. data/lib/spec/rake/spectask.rb +108 -53
  183. data/lib/spec/rake/verify_rcov.rb +4 -4
  184. data/lib/spec/ruby.rb +9 -0
  185. data/lib/spec/runner/backtrace_tweaker.rb +45 -23
  186. data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
  187. data/lib/spec/runner/command_line.rb +7 -14
  188. data/lib/spec/runner/configuration.rb +202 -0
  189. data/lib/spec/runner/differs/default.rb +93 -0
  190. data/lib/spec/runner/differs/load-diff-lcs.rb +12 -0
  191. data/lib/spec/runner/drb_command_line.rb +18 -7
  192. data/lib/spec/runner/example_group_runner.rb +58 -0
  193. data/lib/spec/runner/extensions/kernel.rb +5 -46
  194. data/lib/spec/runner/formatter/base_formatter.rb +97 -26
  195. data/lib/spec/runner/formatter/base_text_formatter.rb +79 -39
  196. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +25 -0
  197. data/lib/spec/runner/formatter/failing_examples_formatter.rb +6 -8
  198. data/lib/spec/runner/formatter/html_formatter.rb +101 -75
  199. data/lib/spec/runner/formatter/nested_text_formatter.rb +50 -0
  200. data/lib/spec/runner/formatter/no_op_method_missing.rb +21 -0
  201. data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
  202. data/lib/spec/runner/formatter/progress_bar_formatter.rb +11 -8
  203. data/lib/spec/runner/formatter/silent_formatter.rb +10 -0
  204. data/lib/spec/runner/formatter/snippet_extractor.rb +2 -2
  205. data/lib/spec/runner/formatter/specdoc_formatter.rb +20 -15
  206. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  207. data/lib/spec/runner/heckle_runner.rb +56 -56
  208. data/lib/spec/runner/{heckle_runner_win.rb → heckle_runner_unsupported.rb} +10 -10
  209. data/lib/spec/runner/line_number_query.rb +78 -0
  210. data/lib/spec/runner/option_parser.rb +147 -148
  211. data/lib/spec/runner/options.rb +343 -95
  212. data/lib/spec/runner/reporter.rb +117 -60
  213. data/lib/spec/runner.rb +39 -138
  214. data/lib/spec/stubs/cucumber.rb +5 -0
  215. data/lib/spec/test/unit.rb +10 -0
  216. data/lib/spec/version.rb +14 -22
  217. data/lib/spec.rb +5 -10
  218. data/resources/helpers/cmdline.rb +8 -0
  219. data/resources/rake/examples.rake +7 -0
  220. data/resources/rake/examples_with_rcov.rake +9 -0
  221. data/resources/rake/failing_examples_with_html.rake +9 -0
  222. data/resources/rake/verify_rcov.rake +7 -0
  223. data/spec/README.jruby +15 -0
  224. data/spec/autotest/autotest_helper.rb +8 -0
  225. data/spec/autotest/autotest_matchers.rb +38 -0
  226. data/spec/autotest/discover_spec.rb +8 -0
  227. data/spec/autotest/failed_results_re_spec.rb +31 -0
  228. data/spec/autotest/rspec_spec.rb +126 -0
  229. data/spec/ruby_forker.rb +13 -0
  230. data/spec/spec/dsl/main_spec.rb +103 -0
  231. data/spec/spec/example/example_group_class_definition_spec.rb +51 -0
  232. data/spec/spec/example/example_group_factory_spec.rb +180 -0
  233. data/spec/spec/example/example_group_methods_spec.rb +778 -0
  234. data/spec/spec/example/example_group_proxy_spec.rb +107 -0
  235. data/spec/spec/example/example_group_spec.rb +632 -0
  236. data/spec/spec/example/example_matcher_spec.rb +85 -0
  237. data/spec/spec/example/example_methods_spec.rb +162 -0
  238. data/spec/spec/example/example_proxy_spec.rb +57 -0
  239. data/spec/spec/example/helper_method_spec.rb +24 -0
  240. data/spec/spec/{dsl/behaviour_eval_spec.rb → example/nested_example_group_spec.rb} +25 -3
  241. data/spec/spec/example/pending_module_spec.rb +58 -0
  242. data/spec/spec/example/predicate_matcher_spec.rb +41 -0
  243. data/spec/spec/example/shared_example_group_spec.rb +257 -0
  244. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  245. data/spec/spec/example/subject_spec.rb +110 -0
  246. data/spec/spec/expectations/differs/default_spec.rb +100 -13
  247. data/spec/spec/expectations/extensions/{object_spec.rb → kernel_spec.rb} +13 -14
  248. data/spec/spec/expectations/fail_with_spec.rb +42 -17
  249. data/spec/spec/expectations/handler_spec.rb +206 -0
  250. data/spec/spec/expectations/wrap_expectation_spec.rb +31 -0
  251. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  252. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  253. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  254. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  255. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  256. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  257. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  258. data/spec/spec/interop/test/unit/resources/test_case_with_various_names.rb +22 -0
  259. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  260. data/spec/spec/interop/test/unit/spec_spec.rb +48 -0
  261. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +18 -0
  262. data/spec/spec/interop/test/unit/testcase_spec.rb +50 -0
  263. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  264. data/spec/spec/matchers/be_close_spec.rb +32 -21
  265. data/spec/spec/matchers/be_instance_of_spec.rb +36 -0
  266. data/spec/spec/matchers/be_kind_of_spec.rb +33 -0
  267. data/spec/spec/matchers/be_spec.rb +261 -10
  268. data/spec/spec/matchers/change_spec.rb +178 -61
  269. data/spec/spec/matchers/compatibility_spec.rb +28 -0
  270. data/spec/spec/matchers/description_generation_spec.rb +47 -46
  271. data/spec/spec/matchers/dsl_spec.rb +34 -0
  272. data/spec/spec/matchers/eql_spec.rb +14 -9
  273. data/spec/spec/matchers/equal_spec.rb +43 -14
  274. data/spec/spec/matchers/exist_spec.rb +41 -24
  275. data/spec/spec/matchers/has_spec.rb +154 -1
  276. data/spec/spec/matchers/have_spec.rb +311 -189
  277. data/spec/spec/matchers/include_spec.rb +45 -2
  278. data/spec/spec/matchers/match_array_spec.rb +115 -0
  279. data/spec/spec/matchers/match_spec.rb +25 -5
  280. data/spec/spec/matchers/matcher_spec.rb +289 -0
  281. data/spec/spec/matchers/matchers_spec.rb +2 -0
  282. data/spec/spec/matchers/operator_matcher_spec.rb +48 -15
  283. data/spec/spec/matchers/raise_exception_spec.rb +345 -0
  284. data/spec/spec/matchers/respond_to_spec.rb +78 -16
  285. data/spec/spec/matchers/satisfy_spec.rb +1 -1
  286. data/spec/spec/matchers/simple_matcher_spec.rb +100 -0
  287. data/spec/spec/matchers/throw_symbol_spec.rb +111 -41
  288. data/spec/spec/mocks/and_yield_spec.rb +117 -0
  289. data/spec/spec/mocks/any_number_of_times_spec.rb +9 -2
  290. data/spec/spec/mocks/argument_expectation_spec.rb +19 -15
  291. data/spec/spec/mocks/argument_matchers_spec.rb +19 -0
  292. data/spec/spec/mocks/at_least_spec.rb +2 -2
  293. data/spec/spec/mocks/at_most_spec.rb +3 -3
  294. data/spec/spec/mocks/bug_report_10260_spec.rb +1 -1
  295. data/spec/spec/mocks/bug_report_10263_spec.rb +27 -0
  296. data/spec/spec/mocks/bug_report_11545_spec.rb +32 -0
  297. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  298. data/spec/spec/mocks/bug_report_496_spec.rb +17 -0
  299. data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
  300. data/spec/spec/mocks/bug_report_7611_spec.rb +2 -2
  301. data/spec/spec/mocks/bug_report_7805_spec.rb +2 -2
  302. data/spec/spec/mocks/bug_report_8165_spec.rb +4 -4
  303. data/spec/spec/mocks/bug_report_8302_spec.rb +2 -2
  304. data/spec/spec/mocks/bug_report_830_spec.rb +21 -0
  305. data/spec/spec/mocks/double_spec.rb +12 -0
  306. data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
  307. data/spec/spec/mocks/hash_including_matcher_spec.rb +90 -0
  308. data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
  309. data/spec/spec/mocks/mock_ordering_spec.rb +15 -5
  310. data/spec/spec/mocks/mock_space_spec.rb +1 -1
  311. data/spec/spec/mocks/mock_spec.rb +346 -129
  312. data/spec/spec/mocks/multiple_return_value_spec.rb +9 -9
  313. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  314. data/spec/spec/mocks/null_object_mock_spec.rb +15 -1
  315. data/spec/spec/mocks/once_counts_spec.rb +2 -2
  316. data/spec/spec/mocks/options_hash_spec.rb +19 -17
  317. data/spec/spec/mocks/partial_mock_spec.rb +124 -12
  318. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +2 -2
  319. data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
  320. data/spec/spec/mocks/precise_counts_spec.rb +2 -2
  321. data/spec/spec/mocks/record_messages_spec.rb +2 -2
  322. data/spec/spec/mocks/stub_chain_spec.rb +42 -0
  323. data/spec/spec/mocks/stub_implementation_spec.rb +31 -0
  324. data/spec/spec/mocks/stub_spec.rb +147 -103
  325. data/spec/spec/mocks/stubbed_message_expectations_spec.rb +26 -0
  326. data/spec/spec/mocks/twice_counts_spec.rb +2 -2
  327. data/spec/spec/mocks/unstub_spec.rb +127 -0
  328. data/spec/spec/package/bin_spec_spec.rb +11 -7
  329. data/spec/spec/rake/spectask_spec.rb +150 -0
  330. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  331. data/spec/spec/runner/command_line_spec.rb +158 -29
  332. data/spec/spec/runner/configuration_spec.rb +320 -0
  333. data/spec/spec/runner/drb_command_line_spec.rb +137 -72
  334. data/spec/spec/runner/empty_file.txt +0 -0
  335. data/spec/spec/runner/example_group_runner_spec.rb +26 -0
  336. data/spec/spec/runner/examples.txt +2 -0
  337. data/spec/spec/runner/failed.txt +3 -0
  338. data/spec/spec/runner/formatter/base_formatter_spec.rb +30 -0
  339. data/spec/spec/runner/formatter/base_text_formatter_spec.rb +113 -0
  340. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  341. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +17 -12
  342. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +377 -0
  343. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +377 -0
  344. data/spec/spec/runner/formatter/html_formatted-1.8.7.html +377 -0
  345. data/spec/spec/runner/formatter/html_formatted-1.9.1.html +377 -0
  346. data/spec/spec/runner/formatter/html_formatter_spec.rb +112 -52
  347. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +329 -0
  348. data/spec/spec/runner/formatter/profile_formatter_spec.rb +70 -0
  349. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +87 -16
  350. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
  351. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +153 -50
  352. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6-jruby.html +371 -0
  353. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +371 -0
  354. data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +371 -0
  355. data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +371 -0
  356. data/spec/spec/runner/formatter/text_mate_formatter_spec.rb +106 -0
  357. data/spec/spec/runner/heckle_runner_spec.rb +32 -17
  358. data/spec/spec/runner/heckler_spec.rb +17 -11
  359. data/spec/spec/runner/line_number_query/line_number_query_fixture.rb +70 -0
  360. data/spec/spec/runner/line_number_query_spec.rb +129 -0
  361. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +27 -21
  362. data/spec/spec/runner/option_parser_spec.rb +367 -164
  363. data/spec/spec/runner/options_spec.rb +506 -94
  364. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  365. data/spec/spec/runner/output_one_time_fixture_runner.rb +7 -0
  366. data/spec/spec/runner/output_one_time_spec.rb +15 -0
  367. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +94 -27
  368. data/spec/spec/runner/reporter_spec.rb +212 -121
  369. data/spec/spec/runner/resources/a_bar.rb +0 -0
  370. data/spec/spec/runner/resources/a_foo.rb +0 -0
  371. data/spec/spec/runner/resources/a_spec.rb +1 -0
  372. data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
  373. data/spec/spec/runner/resources/utf8_encoded.rb +8 -0
  374. data/spec/spec/runner/spec.opts +2 -0
  375. data/spec/spec/runner/spec_drb.opts +2 -0
  376. data/spec/spec/runner/spec_spaced.opts +2 -0
  377. data/spec/spec/runner_spec.rb +13 -0
  378. data/spec/spec.opts +6 -0
  379. data/spec/spec_helper.rb +87 -45
  380. data/spec/support/macros.rb +29 -0
  381. data/spec/{spec → support}/spec_classes.rb +26 -4
  382. metadata +461 -141
  383. data/CHANGES +0 -748
  384. data/EXAMPLES.rd +0 -108
  385. data/README +0 -70
  386. data/UPGRADE +0 -31
  387. data/bin/spec_translator +0 -8
  388. data/examples/auto_spec_description_example.rb +0 -19
  389. data/examples/before_and_after_example.rb +0 -39
  390. data/examples/behave_as_example.rb +0 -45
  391. data/examples/dynamic_spec.rb +0 -9
  392. data/examples/helper_method_example.rb +0 -11
  393. data/examples/legacy_spec.rb +0 -10
  394. data/examples/not_yet_implemented_spec.rb +0 -12
  395. data/examples/priority.txt +0 -1
  396. data/examples/spec_helper.rb +0 -1
  397. data/examples/test_case_adapter_example.rb +0 -26
  398. data/examples/test_case_spec.rb +0 -65
  399. data/lib/spec/dsl/behaviour.rb +0 -204
  400. data/lib/spec/dsl/behaviour_callbacks.rb +0 -77
  401. data/lib/spec/dsl/behaviour_eval.rb +0 -177
  402. data/lib/spec/dsl/behaviour_factory.rb +0 -42
  403. data/lib/spec/dsl/composite_proc_builder.rb +0 -28
  404. data/lib/spec/dsl/configuration.rb +0 -119
  405. data/lib/spec/dsl/description.rb +0 -46
  406. data/lib/spec/dsl/example.rb +0 -127
  407. data/lib/spec/dsl/example_matcher.rb +0 -28
  408. data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
  409. data/lib/spec/expectations/differs/default.rb +0 -61
  410. data/lib/spec/expectations/extensions/object.rb +0 -66
  411. data/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
  412. data/lib/spec/extensions/object.rb +0 -6
  413. data/lib/spec/extensions.rb +0 -1
  414. data/lib/spec/matchers/raise_error.rb +0 -100
  415. data/lib/spec/mocks/argument_constraint_matchers.rb +0 -12
  416. data/lib/spec/mocks/spec_methods.rb +0 -30
  417. data/lib/spec/runner/behaviour_runner.rb +0 -102
  418. data/lib/spec/runner/extensions/object.rb +0 -32
  419. data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -25
  420. data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
  421. data/lib/spec/runner/formatter.rb +0 -9
  422. data/lib/spec/runner/spec_parser.rb +0 -50
  423. data/lib/spec/test_case_adapter.rb +0 -10
  424. data/lib/spec/translator.rb +0 -106
  425. data/plugins/mock_frameworks/flexmock.rb +0 -27
  426. data/plugins/mock_frameworks/rspec.rb +0 -18
  427. data/spec/spec/dsl/behaviour_factory_spec.rb +0 -30
  428. data/spec/spec/dsl/behaviour_spec.rb +0 -604
  429. data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -57
  430. data/spec/spec/dsl/configuration_spec.rb +0 -50
  431. data/spec/spec/dsl/description_spec.rb +0 -81
  432. data/spec/spec/dsl/example_class_spec.rb +0 -24
  433. data/spec/spec/dsl/example_instance_spec.rb +0 -162
  434. data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
  435. data/spec/spec/dsl/predicate_matcher_spec.rb +0 -21
  436. data/spec/spec/dsl/shared_behaviour_spec.rb +0 -208
  437. data/spec/spec/matchers/handler_spec.rb +0 -88
  438. data/spec/spec/matchers/matcher_methods_spec.rb +0 -78
  439. data/spec/spec/matchers/raise_error_spec.rb +0 -147
  440. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +0 -73
  441. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +0 -92
  442. data/spec/spec/runner/behaviour_runner_spec.rb +0 -118
  443. data/spec/spec/runner/context_matching_spec.rb +0 -27
  444. data/spec/spec/runner/execution_context_spec.rb +0 -31
  445. data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
  446. data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -27
  447. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -21
  448. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
  449. data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
  450. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
  451. data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
  452. data/spec/spec/runner/object_ext_spec.rb +0 -11
  453. data/spec/spec/runner/spec_matcher_spec.rb +0 -102
  454. data/spec/spec/runner/spec_parser_spec.rb +0 -93
  455. data/spec/spec/translator_spec.rb +0 -216
  456. /data/examples/{custom_expectation_matchers.rb → passing/custom_matchers.rb} +0 -0
@@ -0,0 +1,257 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ describe ExampleGroup, "with :shared => true" do
6
+ with_sandboxed_options do
7
+ attr_reader :formatter, :example_group
8
+ before(:each) do
9
+ @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
10
+ options.formatters << formatter
11
+ @example_group = Class.new(ExampleGroupDouble).describe("example_group")
12
+ class << example_group
13
+ public :include
14
+ end
15
+ end
16
+
17
+ after(:each) do
18
+ @formatter.rspec_verify
19
+ @example_group = nil
20
+ Spec::Example::SharedExampleGroup.clear
21
+ end
22
+
23
+ describe "#register" do
24
+ it "creates a new shared example group with the submitted args" do
25
+ block = lambda {|a|}
26
+ group = SharedExampleGroup.new("shared group") do end
27
+ Spec::Example::SharedExampleGroup.should_receive(:new).with("share me", &block).and_return(group)
28
+ Spec::Example::SharedExampleGroup.register("share me", &block)
29
+ end
30
+
31
+ it "registers the shared example group" do
32
+ lambda do
33
+ Spec::Example::SharedExampleGroup.register "share me" do end
34
+ end.should change {Spec::Example::SharedExampleGroup.count}.by(1)
35
+ end
36
+ end
37
+
38
+ it "complains when adding a second shared example_group with the same description" do
39
+ describe "shared example_group", :shared => true do
40
+ end
41
+ lambda do
42
+ describe "shared example_group", :shared => true do
43
+ end
44
+ end.should raise_error(ArgumentError)
45
+ end
46
+
47
+ it "does NOT add the same group twice" do
48
+ lambda do
49
+ 2.times do
50
+ describe "shared example_group which gets loaded twice", :shared => true do
51
+ end
52
+ end
53
+ end.should change {Spec::Example::SharedExampleGroup.count}.by(1)
54
+ end
55
+
56
+ it "does NOT complain when adding the same shared example_group again (i.e. file gets reloaded)" do
57
+ lambda do
58
+ 2.times do
59
+ describe "shared example_group which gets loaded twice", :shared => true do
60
+ end
61
+ end
62
+ end.should_not raise_error(ArgumentError)
63
+ end
64
+
65
+ it "does NOT complain when adding the same shared example_group in same file with different absolute path" do
66
+ SharedExampleGroup.register(
67
+ "shared example_group",
68
+ :shared => true,
69
+ :location => "/my/spec/a/../shared.rb"
70
+ )
71
+ SharedExampleGroup.register(
72
+ "shared example_group",
73
+ :shared => true,
74
+ :location => "/my/spec/b/../shared.rb"
75
+ )
76
+ end
77
+
78
+ it "complains when adding a different shared example_group with the same name in a different file with the same basename" do
79
+ SharedExampleGroup.register(
80
+ "shared example_group",
81
+ :shared => true,
82
+ :location => "/my/spec/a/shared.rb"
83
+ )
84
+ lambda do
85
+ SharedExampleGroup.register(
86
+ "shared example_group",
87
+ :shared => true,
88
+ :location => "/my/spec/b/shared.rb"
89
+ )
90
+ end.should raise_error(ArgumentError, /already exists/)
91
+ end
92
+
93
+ it "adds examples to current example_group using it_should_behave_like" do
94
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
95
+ it("shared example") {}
96
+ it("shared example 2") {}
97
+ end
98
+
99
+ example_group.it("example") {}
100
+ example_group.number_of_examples.should == 1
101
+ example_group.it_should_behave_like("shared example_group")
102
+ example_group.number_of_examples.should == 3
103
+ end
104
+
105
+ it "adds examples to from two shared groups" do
106
+ shared_example_group_1 = SharedExampleGroup.register("shared example_group 1") do
107
+ it("shared example 1") {}
108
+ end
109
+
110
+ shared_example_group_1 = SharedExampleGroup.register("shared example_group 2") do
111
+ it("shared example 2") {}
112
+ end
113
+
114
+ example_group.it("example") {}
115
+ example_group.number_of_examples.should == 1
116
+ example_group.it_should_behave_like("shared example_group 1", "shared example_group 2")
117
+ example_group.number_of_examples.should == 3
118
+ end
119
+
120
+ it "adds examples to current example_group using include" do
121
+ shared_example_group = describe "all things", :shared => true do
122
+ it "should do stuff" do end
123
+ end
124
+
125
+ example_group = describe "one thing" do
126
+ include shared_example_group
127
+ end
128
+
129
+ example_group.number_of_examples.should == 1
130
+ end
131
+
132
+ it "adds examples to current example_group using it_should_behave_like with a module" do
133
+ ::AllThings = describe "all things", :shared => true do
134
+ it "should do stuff" do end
135
+ end
136
+
137
+ example_group = describe "one thing" do
138
+ it_should_behave_like ::AllThings
139
+ end
140
+
141
+ example_group.number_of_examples.should == 1
142
+ end
143
+
144
+ it "runs shared examples" do
145
+ shared_example_ran = false
146
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
147
+ it("shared example") { shared_example_ran = true }
148
+ end
149
+
150
+ example_ran = false
151
+
152
+ example_group.it_should_behave_like("shared example_group")
153
+ example_group.it("example") {example_ran = true}
154
+ example_group.run(options)
155
+ example_ran.should be_true
156
+ shared_example_ran.should be_true
157
+ end
158
+
159
+ it "runs before(:each) and after(:each) from shared example_group" do
160
+ shared_setup_ran = false
161
+ shared_teardown_ran = false
162
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
163
+ before(:each) { shared_setup_ran = true }
164
+ after(:each) { shared_teardown_ran = true }
165
+ it("shared example") { shared_example_ran = true }
166
+ end
167
+
168
+ example_ran = false
169
+
170
+ example_group.it_should_behave_like("shared example_group")
171
+ example_group.it("example") {example_ran = true}
172
+ example_group.run(options)
173
+ example_ran.should be_true
174
+ shared_setup_ran.should be_true
175
+ shared_teardown_ran.should be_true
176
+ end
177
+
178
+ it "should run before(:all) and after(:all) only once from shared example_group" do
179
+ shared_before_all_run_count = 0
180
+ shared_after_all_run_count = 0
181
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
182
+ before(:all) { shared_before_all_run_count += 1}
183
+ after(:all) { shared_after_all_run_count += 1}
184
+ it("shared example") { shared_example_ran = true }
185
+ end
186
+
187
+ example_ran = false
188
+
189
+ example_group.it_should_behave_like("shared example_group")
190
+ example_group.it("example") {example_ran = true}
191
+ example_group.run(options)
192
+ example_ran.should be_true
193
+ shared_before_all_run_count.should == 1
194
+ shared_after_all_run_count.should == 1
195
+ end
196
+
197
+ it "should include modules, included into shared example_group, into current example_group" do
198
+ @formatter.should_receive(:add_example_group).with(any_args)
199
+
200
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
201
+ it("shared example") { shared_example_ran = true }
202
+ end
203
+
204
+ mod1_method_called = false
205
+ mod1 = Module.new do
206
+ define_method :mod1_method do
207
+ mod1_method_called = true
208
+ end
209
+ end
210
+
211
+ mod2_method_called = false
212
+ mod2 = Module.new do
213
+ define_method :mod2_method do
214
+ mod2_method_called = true
215
+ end
216
+ end
217
+
218
+ shared_example_group.__send__ :include, mod2
219
+
220
+ example_group.it_should_behave_like("shared example_group")
221
+ example_group.include mod1
222
+
223
+ example_group.it("test") do
224
+ mod1_method
225
+ mod2_method
226
+ end
227
+ example_group.run(options)
228
+ mod1_method_called.should be_true
229
+ mod2_method_called.should be_true
230
+ end
231
+
232
+ it "should make methods defined in the shared example_group available in consuming example_group" do
233
+ shared_example_group = SharedExampleGroup.register("shared example_group xyz") do
234
+ def a_shared_helper_method
235
+ "this got defined in a shared example_group"
236
+ end
237
+ end
238
+ example_group.it_should_behave_like("shared example_group xyz")
239
+ success = false
240
+ example_group.it("should access a_shared_helper_method") do
241
+ a_shared_helper_method
242
+ success = true
243
+ end
244
+ example_group.run(options)
245
+ success.should be_true
246
+ end
247
+
248
+ it "should raise when named shared example_group can not be found" do
249
+ lambda {
250
+ example_group.it_should_behave_like("non-existent shared example group")
251
+ violated
252
+ }.should raise_error("Shared Example Group 'non-existent shared example group' can not be found")
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ class GrandParentExampleGroup < Spec::Example::ExampleGroup
6
+ describe "Grandparent ExampleGroup"
7
+ end
8
+
9
+ class ParentExampleGroup < GrandParentExampleGroup
10
+ describe "Parent ExampleGroup"
11
+ it "should bar" do
12
+ end
13
+ end
14
+
15
+ class ChildExampleGroup < ParentExampleGroup
16
+ describe "Child ExampleGroup"
17
+ it "should bam" do
18
+ end
19
+ end
20
+
21
+ describe ChildExampleGroup do
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ describe "implicit subject" do
6
+ describe "with a class" do
7
+ it "returns an instance of the class" do
8
+ group = Class.new(ExampleGroupDouble).describe(Array)
9
+ example = group.new(ExampleProxy.new)
10
+ example.subject.should == []
11
+ end
12
+ end
13
+
14
+ describe "with a Module" do
15
+ it "returns the Module" do
16
+ group = Class.new(ExampleGroupDouble).describe(Enumerable)
17
+ example = group.new(ExampleProxy.new)
18
+ example.subject.should == Enumerable
19
+ end
20
+ end
21
+
22
+ describe "with a string" do
23
+ it "return the string" do
24
+ group = Class.new(ExampleGroupDouble).describe('foo')
25
+ example = group.new(ExampleProxy.new)
26
+ example.subject.should == 'foo'
27
+ end
28
+ end
29
+
30
+ describe "with a number" do
31
+ it "returns the number" do
32
+ group = Class.new(ExampleGroupDouble).describe(15)
33
+ example = group.new(ExampleProxy.new)
34
+ example.subject.should == 15
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+ describe "explicit subject" do
41
+ describe "defined in a top level group" do
42
+ it "replaces the implicit subject in that group" do
43
+ group = Class.new(ExampleGroupDouble).describe(Array)
44
+ group.subject { [1,2,3] }
45
+ example = group.new(ExampleProxy.new)
46
+ example.subject.should == [1,2,3]
47
+ end
48
+ end
49
+
50
+ describe "defined in a top level group" do
51
+ before(:each) do
52
+ @group = Class.new do
53
+ extend Spec::Example::Subject::ExampleGroupMethods
54
+ include Spec::Example::Subject::ExampleMethods
55
+ class << self
56
+ def described_class
57
+ Array
58
+ end
59
+ end
60
+ def described_class
61
+ self.class.described_class
62
+ end
63
+
64
+ subject {
65
+ [1,2,3]
66
+ }
67
+ end
68
+ end
69
+
70
+ it "is available in a nested group (subclass)" do
71
+ nested_group = Class.new(@group)
72
+
73
+ example = nested_group.new
74
+ example.subject.should == [1,2,3]
75
+ end
76
+
77
+ it "is available in a doubly nested group (subclass)" do
78
+ nested_group = Class.new(@group)
79
+ doubly_nested_group = Class.new(nested_group)
80
+
81
+ example = doubly_nested_group.new
82
+ example.subject.should == [1,2,3]
83
+ end
84
+ end
85
+ end
86
+
87
+ describe ".its (to access subject's attributes)" do
88
+ with_sandboxed_options do
89
+ it "allows before(:each) blocks on subjects in outer scope" do
90
+ group = Class.new(ExampleGroupDouble).describe(Array)
91
+ group.before(:each) { subject << 1 }
92
+ child = group.its(:length) { should == 1 }
93
+ child.run(options).should == true
94
+ end
95
+
96
+ it "passes when expectation should pass" do
97
+ group = Class.new(ExampleGroupDouble).describe(Array)
98
+ child = group.its(:length) { should == 0 }
99
+ child.run(options).should == true
100
+ end
101
+
102
+ it "fails when expectation should fail" do
103
+ group = Class.new(ExampleGroupDouble).describe(Array)
104
+ child = group.its(:length) { should == 1 }
105
+ child.run(options).should == false
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -1,5 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
- require File.dirname(__FILE__) + '/../../../../lib/spec/expectations/differs/default'
1
+ require 'spec_helper'
3
2
 
4
3
  module Spec
5
4
  module Fixtures
@@ -22,13 +21,32 @@ end
22
21
 
23
22
  describe "Diff" do
24
23
  before(:each) do
25
- @differ = Spec::Expectations::Differs::Default.new
24
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
25
+ @differ = Spec::Expectations::Differs::Default.new(@options)
26
26
  end
27
27
 
28
28
  it "should output unified diff of two strings" do
29
29
  expected="foo\nbar\nzap\nthis\nis\nsoo\nvery\nvery\nequal\ninsert\na\nline\n"
30
30
  actual="foo\nzap\nbar\nthis\nis\nsoo\nvery\nvery\nequal\ninsert\na\nanother\nline\n"
31
- expected_diff="\n\n@@ -1,6 +1,6 @@\n foo\n-bar\n zap\n+bar\n this\n is\n soo\n@@ -9,5 +9,6 @@\n equal\n insert\n a\n+another\n line\n"
31
+ expected_diff= <<'EOD'
32
+
33
+
34
+ @@ -1,6 +1,6 @@
35
+ foo
36
+ -zap
37
+ bar
38
+ +zap
39
+ this
40
+ is
41
+ soo
42
+ @@ -9,6 +9,5 @@
43
+ equal
44
+ insert
45
+ a
46
+ -another
47
+ line
48
+ EOD
49
+
32
50
  diff = @differ.diff_as_string(expected, actual)
33
51
  diff.should eql(expected_diff)
34
52
  end
@@ -44,17 +62,84 @@ describe "Diff" do
44
62
  :metasyntactic,
45
63
  "variable",
46
64
  :delta,
47
- - "charlie",
48
- + "tango",
65
+ - "tango",
66
+ + "charlie",
49
67
  :width,
50
- - "quite wide"]
51
- + "very wide"]
68
+ - "very wide"]
69
+ + "quite wide"]
52
70
  EOD
53
71
 
54
72
 
55
73
  diff = @differ.diff_as_object(expected,actual)
56
74
  diff.should == expected_diff
57
75
  end
76
+
77
+ it "should output a friendly message if comparing simple hashes" do
78
+ expected = { "foo" => "bar" }
79
+ actual = { "foo" => "baz" }
80
+
81
+ expected_diff = <<'EOD'
82
+
83
+ Expected the key "foo" to be "bar", but was "baz"
84
+
85
+ EOD
86
+
87
+
88
+ diff = @differ.diff_as_hash(actual, expected)
89
+ diff.should == expected_diff
90
+ end
91
+
92
+
93
+ it "should output a friendly message if comparing simple hashes that contain different keys" do
94
+ expected = { "bar" => "foo" }
95
+ actual = { "foo" => "baz" }
96
+
97
+ expected_diff = <<'EOD'
98
+
99
+ Expected hash contains keys that target hash does not: ["bar"]
100
+ Target hash contains keys that expected hash does not: ["foo"]
101
+ Expected the key "bar" to be "foo", but was nil
102
+
103
+ EOD
104
+
105
+
106
+ diff = @differ.diff_as_hash(actual, expected)
107
+ diff.should == expected_diff
108
+ end
109
+
110
+ it "should output diff message if the hash is complex (containing Array or Hash)" do
111
+ expected = { "foo" => "bar", "fizz" => [1, 2, 3] }
112
+ actual = { "foo" => "baz", "fizz" => [1, 2] }
113
+
114
+ # UGH - 1.8.7 seems to order hash keys differently than the others
115
+ if RUBY_VERSION =~ /^1.8.7/
116
+ expected_diff = <<'EOD'
117
+
118
+ Expected the key "fizz" to be [1, 2, 3], but was [1, 2]
119
+ Expected the key "foo" to be "bar", but was "baz"
120
+
121
+
122
+ @@ -1,2 +1,2 @@
123
+ -{"fizz"=>[1, 2, 3], "foo"=>"bar"}
124
+ +{"fizz"=>[1, 2], "foo"=>"baz"}
125
+ EOD
126
+ else
127
+ expected_diff = <<'EOD'
128
+
129
+ Expected the key "fizz" to be [1, 2, 3], but was [1, 2]
130
+ Expected the key "foo" to be "bar", but was "baz"
131
+
132
+
133
+ @@ -1,2 +1,2 @@
134
+ -{"foo"=>"bar", "fizz"=>[1, 2, 3]}
135
+ +{"foo"=>"baz", "fizz"=>[1, 2]}
136
+ EOD
137
+ end
138
+
139
+ diff = @differ.diff_as_hash(actual, expected)
140
+ diff.should == expected_diff
141
+ end
142
+
58
143
 
59
144
  it "should output unified diff message of two objects" do
60
145
  expected = Spec::Fixtures::Animal.new "bob", "giraffe"
@@ -65,8 +150,8 @@ EOD
65
150
  @@ -1,5 +1,5 @@
66
151
  <Animal
67
152
  name=bob,
68
- - species=giraffe
69
- + species=tortoise
153
+ - species=tortoise
154
+ + species=giraffe
70
155
  >
71
156
  EOD
72
157
 
@@ -79,7 +164,9 @@ end
79
164
 
80
165
  describe "Diff in context format" do
81
166
  before(:each) do
82
- @differ = Spec::Expectations::Differs::Default.new(:context)
167
+ @options = Spec::Runner::Options.new(StringIO.new, StringIO.new)
168
+ @options.diff_format = :context
169
+ @differ = Spec::Expectations::Differs::Default.new(@options)
83
170
  end
84
171
 
85
172
  it "should output unified diff message of two objects" do
@@ -92,12 +179,12 @@ describe "Diff in context format" do
92
179
  *** 1,5 ****
93
180
  <Animal
94
181
  name=bob,
95
- ! species=giraffe
182
+ ! species=tortoise
96
183
  >
97
184
  --- 1,5 ----
98
185
  <Animal
99
186
  name=bob,
100
- ! species=tortoise
187
+ ! species=giraffe
101
188
  >
102
189
  EOD
103
190
 
@@ -1,46 +1,45 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper.rb'
1
+ require 'spec_helper'
2
2
 
3
- describe "Object#should" do
3
+ describe Object, "#should" do
4
4
  before(:each) do
5
5
  @target = "target"
6
6
  @matcher = mock("matcher")
7
7
  @matcher.stub!(:matches?).and_return(true)
8
- @matcher.stub!(:failure_message)
8
+ @matcher.stub!(:failure_message_for_should)
9
9
  end
10
10
 
11
- it "should accept and interact with a matcher" do
12
- @matcher.should_receive(:matches?).with(@target).and_return(true)
13
-
11
+ it "accepts and interacts with a matcher" do
12
+ @matcher.should_receive(:matches?).with(@target).and_return(true)
14
13
  @target.should @matcher
15
14
  end
16
15
 
17
- it "should ask for a failure_message when matches? returns false" do
16
+ it "asks for a failure_message_for_should when matches? returns false" do
18
17
  @matcher.should_receive(:matches?).with(@target).and_return(false)
19
- @matcher.should_receive(:failure_message).and_return("the failure message")
18
+ @matcher.should_receive(:failure_message_for_should).and_return("the failure message")
20
19
  lambda {
21
20
  @target.should @matcher
22
21
  }.should fail_with("the failure message")
23
22
  end
24
23
  end
25
24
 
26
- describe "Object#should_not" do
25
+ describe Object, "#should_not" do
27
26
  before(:each) do
28
27
  @target = "target"
29
28
  @matcher = mock("matcher")
30
29
  end
31
30
 
32
- it "should accept and interact with a matcher" do
31
+ it "accepts and interacts with a matcher" do
33
32
  @matcher.should_receive(:matches?).with(@target).and_return(false)
34
- @matcher.stub!(:negative_failure_message)
33
+ @matcher.stub!(:failure_message_for_should_not)
35
34
 
36
35
  @target.should_not @matcher
37
36
  end
38
37
 
39
- it "should ask for a negative_failure_message when matches? returns true" do
38
+ it "asks for a failure_message_for_should_not when matches? returns true" do
40
39
  @matcher.should_receive(:matches?).with(@target).and_return(true)
41
- @matcher.should_receive(:negative_failure_message).and_return("the negative failure message")
40
+ @matcher.should_receive(:failure_message_for_should_not).and_return("the failure message for should not")
42
41
  lambda {
43
42
  @target.should_not @matcher
44
- }.should fail_with("the negative failure message")
43
+ }.should fail_with("the failure message for should not")
45
44
  end
46
45
  end