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
@@ -1,151 +1,210 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper.rb'
1
+ require 'spec_helper'
2
+
3
+ describe "have matcher" do
2
4
 
3
- module HaveSpecHelper
4
5
  def create_collection_owner_with(n)
5
6
  owner = Spec::Expectations::Helper::CollectionOwner.new
6
- (1..n).each do |n|
7
- owner.add_to_collection_with_length_method(n)
8
- owner.add_to_collection_with_size_method(n)
7
+ (1..n).each do |number|
8
+ owner.add_to_collection_with_length_method(number)
9
+ owner.add_to_collection_with_size_method(number)
9
10
  end
10
11
  owner
11
12
  end
12
- end
13
-
14
- describe "should have(n).items" do
15
- include HaveSpecHelper
16
-
17
- it "should pass if target has a collection of items with n members" do
18
- owner = create_collection_owner_with(3)
19
- owner.should have(3).items_in_collection_with_length_method
20
- owner.should have(3).items_in_collection_with_size_method
21
- end
22
13
 
23
- it "should convert :no to 0" do
24
- owner = create_collection_owner_with(0)
25
- owner.should have(:no).items_in_collection_with_length_method
26
- owner.should have(:no).items_in_collection_with_size_method
14
+ before(:each) do
15
+ if defined?(::ActiveSupport::Inflector)
16
+ @active_support_was_defined = true
17
+ else
18
+ @active_support_was_defined = false
19
+ module ::ActiveSupport
20
+ class Inflector
21
+ def self.pluralize(string)
22
+ string.to_s + 's'
23
+ end
24
+ end
25
+ end
26
+ end
27
27
  end
28
28
 
29
- it "should fail if target has a collection of items with < n members" do
30
- owner = create_collection_owner_with(3)
31
- lambda {
32
- owner.should have(4).items_in_collection_with_length_method
33
- }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
34
- lambda {
35
- owner.should have(4).items_in_collection_with_size_method
36
- }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
37
- end
38
-
39
- it "should fail if target has a collection of items with > n members" do
40
- owner = create_collection_owner_with(3)
41
- lambda {
42
- owner.should have(2).items_in_collection_with_length_method
43
- }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
44
- lambda {
45
- owner.should have(2).items_in_collection_with_size_method
46
- }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
47
- end
48
- end
29
+ describe "should have(n).items" do
30
+ it "should pass if target has a collection of items with n members" do
31
+ owner = create_collection_owner_with(3)
32
+ owner.should have(3).items_in_collection_with_length_method
33
+ owner.should have(3).items_in_collection_with_size_method
34
+ end
49
35
 
50
- describe "should_not have(n).items" do
51
- include HaveSpecHelper
36
+ it "should convert :no to 0" do
37
+ owner = create_collection_owner_with(0)
38
+ owner.should have(:no).items_in_collection_with_length_method
39
+ owner.should have(:no).items_in_collection_with_size_method
40
+ end
52
41
 
53
- it "should pass if target has a collection of items with < n members" do
54
- owner = create_collection_owner_with(3)
55
- owner.should_not have(4).items_in_collection_with_length_method
56
- owner.should_not have(4).items_in_collection_with_size_method
57
- end
58
-
59
- it "should pass if target has a collection of items with > n members" do
60
- owner = create_collection_owner_with(3)
61
- owner.should_not have(2).items_in_collection_with_length_method
62
- owner.should_not have(2).items_in_collection_with_size_method
42
+ it "should fail if target has a collection of items with < n members" do
43
+ owner = create_collection_owner_with(3)
44
+ lambda {
45
+ owner.should have(4).items_in_collection_with_length_method
46
+ }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
47
+ lambda {
48
+ owner.should have(4).items_in_collection_with_size_method
49
+ }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
50
+ end
51
+
52
+ it "should fail if target has a collection of items with > n members" do
53
+ owner = create_collection_owner_with(3)
54
+ lambda {
55
+ owner.should have(2).items_in_collection_with_length_method
56
+ }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
57
+ lambda {
58
+ owner.should have(2).items_in_collection_with_size_method
59
+ }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
60
+ end
63
61
  end
64
62
 
65
- it "should fail if target has a collection of items with n members" do
66
- owner = create_collection_owner_with(3)
67
- lambda {
68
- owner.should_not have(3).items_in_collection_with_length_method
69
- }.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3")
70
- lambda {
71
- owner.should_not have(3).items_in_collection_with_size_method
72
- }.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3")
63
+ describe 'should have(1).item when ActiveSupport::Inflector is defined' do
64
+ it 'should pluralize the collection name' do
65
+ owner = create_collection_owner_with(1)
66
+ owner.should have(1).item
67
+ end
68
+
69
+ after(:each) do
70
+ unless @active_support_was_defined
71
+ Object.__send__ :remove_const, :ActiveSupport
72
+ end
73
+ end
73
74
  end
74
- end
75
75
 
76
- describe "should have_exactly(n).items" do
77
- include HaveSpecHelper
76
+ describe 'should have(1).item when Inflector is defined' do
77
+ before(:each) do
78
+ if defined?(Inflector)
79
+ @inflector_was_defined = true
80
+ else
81
+ @inflector_was_defined = false
82
+ class ::Inflector
83
+ def self.pluralize(string)
84
+ string.to_s + 's'
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ it 'should pluralize the collection name' do
91
+ owner = create_collection_owner_with(1)
92
+ owner.should have(1).item
93
+ end
78
94
 
79
- it "should pass if target has a collection of items with n members" do
80
- owner = create_collection_owner_with(3)
81
- owner.should have_exactly(3).items_in_collection_with_length_method
82
- owner.should have_exactly(3).items_in_collection_with_size_method
95
+ after(:each) do
96
+ unless @inflector_was_defined
97
+ Object.__send__ :remove_const, :Inflector
98
+ end
99
+ end
83
100
  end
84
101
 
85
- it "should convert :no to 0" do
86
- owner = create_collection_owner_with(0)
87
- owner.should have_exactly(:no).items_in_collection_with_length_method
88
- owner.should have_exactly(:no).items_in_collection_with_size_method
102
+ describe "should have(n).items where result responds to items but returns something other than a collection" do
103
+ it "should provide a meaningful error" do
104
+ owner = Class.new do
105
+ def items
106
+ Object.new
107
+ end
108
+ end.new
109
+ lambda do
110
+ owner.should have(3).items
111
+ end.should raise_error("expected items to be a collection but it does not respond to #length or #size")
112
+ end
89
113
  end
90
114
 
91
- it "should fail if target has a collection of items with < n members" do
92
- owner = create_collection_owner_with(3)
93
- lambda {
94
- owner.should have_exactly(4).items_in_collection_with_length_method
95
- }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
96
- lambda {
97
- owner.should have_exactly(4).items_in_collection_with_size_method
98
- }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
99
- end
100
-
101
- it "should fail if target has a collection of items with > n members" do
102
- owner = create_collection_owner_with(3)
103
- lambda {
104
- owner.should have_exactly(2).items_in_collection_with_length_method
105
- }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
106
- lambda {
107
- owner.should have_exactly(2).items_in_collection_with_size_method
108
- }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
115
+ describe "should_not have(n).items" do
116
+ it "should pass if target has a collection of items with < n members" do
117
+ owner = create_collection_owner_with(3)
118
+ owner.should_not have(4).items_in_collection_with_length_method
119
+ owner.should_not have(4).items_in_collection_with_size_method
120
+ end
121
+
122
+ it "should pass if target has a collection of items with > n members" do
123
+ owner = create_collection_owner_with(3)
124
+ owner.should_not have(2).items_in_collection_with_length_method
125
+ owner.should_not have(2).items_in_collection_with_size_method
126
+ end
127
+
128
+ it "should fail if target has a collection of items with n members" do
129
+ owner = create_collection_owner_with(3)
130
+ lambda {
131
+ owner.should_not have(3).items_in_collection_with_length_method
132
+ }.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3")
133
+ lambda {
134
+ owner.should_not have(3).items_in_collection_with_size_method
135
+ }.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3")
136
+ end
109
137
  end
110
- end
111
138
 
112
- describe "should have_at_least(n).items" do
113
- include HaveSpecHelper
139
+ describe "should have_exactly(n).items" do
140
+ it "should pass if target has a collection of items with n members" do
141
+ owner = create_collection_owner_with(3)
142
+ owner.should have_exactly(3).items_in_collection_with_length_method
143
+ owner.should have_exactly(3).items_in_collection_with_size_method
144
+ end
114
145
 
115
- it "should pass if target has a collection of items with n members" do
116
- owner = create_collection_owner_with(3)
117
- owner.should have_at_least(3).items_in_collection_with_length_method
118
- owner.should have_at_least(3).items_in_collection_with_size_method
119
- end
120
-
121
- it "should pass if target has a collection of items with > n members" do
122
- owner = create_collection_owner_with(3)
123
- owner.should have_at_least(2).items_in_collection_with_length_method
124
- owner.should have_at_least(2).items_in_collection_with_size_method
125
- end
146
+ it "should convert :no to 0" do
147
+ owner = create_collection_owner_with(0)
148
+ owner.should have_exactly(:no).items_in_collection_with_length_method
149
+ owner.should have_exactly(:no).items_in_collection_with_size_method
150
+ end
126
151
 
127
- it "should fail if target has a collection of items with < n members" do
128
- owner = create_collection_owner_with(3)
129
- lambda {
130
- owner.should have_at_least(4).items_in_collection_with_length_method
131
- }.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3")
132
- lambda {
133
- owner.should have_at_least(4).items_in_collection_with_size_method
134
- }.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
152
+ it "should fail if target has a collection of items with < n members" do
153
+ owner = create_collection_owner_with(3)
154
+ lambda {
155
+ owner.should have_exactly(4).items_in_collection_with_length_method
156
+ }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
157
+ lambda {
158
+ owner.should have_exactly(4).items_in_collection_with_size_method
159
+ }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
160
+ end
161
+
162
+ it "should fail if target has a collection of items with > n members" do
163
+ owner = create_collection_owner_with(3)
164
+ lambda {
165
+ owner.should have_exactly(2).items_in_collection_with_length_method
166
+ }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
167
+ lambda {
168
+ owner.should have_exactly(2).items_in_collection_with_size_method
169
+ }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
170
+ end
135
171
  end
136
-
137
- it "should provide educational negative failure messages" do
138
- #given
139
- owner = create_collection_owner_with(3)
140
- length_matcher = have_at_least(3).items_in_collection_with_length_method
141
- size_matcher = have_at_least(3).items_in_collection_with_size_method
172
+
173
+ describe "should have_at_least(n).items" do
174
+ it "should pass if target has a collection of items with n members" do
175
+ owner = create_collection_owner_with(3)
176
+ owner.should have_at_least(3).items_in_collection_with_length_method
177
+ owner.should have_at_least(3).items_in_collection_with_size_method
178
+ end
142
179
 
143
- #when
144
- length_matcher.matches?(owner)
145
- size_matcher.matches?(owner)
180
+ it "should pass if target has a collection of items with > n members" do
181
+ owner = create_collection_owner_with(3)
182
+ owner.should have_at_least(2).items_in_collection_with_length_method
183
+ owner.should have_at_least(2).items_in_collection_with_size_method
184
+ end
185
+
186
+ it "should fail if target has a collection of items with < n members" do
187
+ owner = create_collection_owner_with(3)
188
+ lambda {
189
+ owner.should have_at_least(4).items_in_collection_with_length_method
190
+ }.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3")
191
+ lambda {
192
+ owner.should have_at_least(4).items_in_collection_with_size_method
193
+ }.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
194
+ end
146
195
 
147
- #then
148
- length_matcher.negative_failure_message.should == <<-EOF
196
+ it "should provide educational negative failure messages" do
197
+ #given
198
+ owner = create_collection_owner_with(3)
199
+ length_matcher = have_at_least(3).items_in_collection_with_length_method
200
+ size_matcher = have_at_least(3).items_in_collection_with_size_method
201
+
202
+ #when
203
+ length_matcher.matches?(owner)
204
+ size_matcher.matches?(owner)
205
+
206
+ #then
207
+ length_matcher.failure_message_for_should_not.should == <<-EOF
149
208
  Isn't life confusing enough?
150
209
  Instead of having to figure out the meaning of this:
151
210
  should_not have_at_least(3).items_in_collection_with_length_method
@@ -153,107 +212,170 @@ We recommend that you use this instead:
153
212
  should have_at_most(2).items_in_collection_with_length_method
154
213
  EOF
155
214
 
156
- size_matcher.negative_failure_message.should == <<-EOF
215
+ size_matcher.failure_message_for_should_not.should == <<-EOF
157
216
  Isn't life confusing enough?
158
217
  Instead of having to figure out the meaning of this:
159
218
  should_not have_at_least(3).items_in_collection_with_size_method
160
219
  We recommend that you use this instead:
161
220
  should have_at_most(2).items_in_collection_with_size_method
162
221
  EOF
163
- end
164
- end
165
-
166
- describe "should have_at_most(n).items" do
167
- include HaveSpecHelper
168
-
169
- it "should pass if target has a collection of items with n members" do
170
- owner = create_collection_owner_with(3)
171
- owner.should have_at_most(3).items_in_collection_with_length_method
172
- owner.should have_at_most(3).items_in_collection_with_size_method
222
+ end
173
223
  end
174
224
 
175
- it "should fail if target has a collection of items with > n members" do
176
- owner = create_collection_owner_with(3)
177
- lambda {
178
- owner.should have_at_most(2).items_in_collection_with_length_method
179
- }.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3")
180
- lambda {
181
- owner.should have_at_most(2).items_in_collection_with_size_method
182
- }.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
183
- end
184
-
185
- it "should pass if target has a collection of items with < n members" do
186
- owner = create_collection_owner_with(3)
187
- owner.should have_at_most(4).items_in_collection_with_length_method
188
- owner.should have_at_most(4).items_in_collection_with_size_method
189
- end
225
+ describe "should have_at_most(n).items" do
226
+ it "should pass if target has a collection of items with n members" do
227
+ owner = create_collection_owner_with(3)
228
+ owner.should have_at_most(3).items_in_collection_with_length_method
229
+ owner.should have_at_most(3).items_in_collection_with_size_method
230
+ end
190
231
 
191
- it "should provide educational negative failure messages" do
192
- #given
193
- owner = create_collection_owner_with(3)
194
- length_matcher = have_at_most(3).items_in_collection_with_length_method
195
- size_matcher = have_at_most(3).items_in_collection_with_size_method
196
-
197
- #when
198
- length_matcher.matches?(owner)
199
- size_matcher.matches?(owner)
232
+ it "should fail if target has a collection of items with > n members" do
233
+ owner = create_collection_owner_with(3)
234
+ lambda {
235
+ owner.should have_at_most(2).items_in_collection_with_length_method
236
+ }.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3")
237
+ lambda {
238
+ owner.should have_at_most(2).items_in_collection_with_size_method
239
+ }.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
240
+ end
200
241
 
201
- #then
202
- length_matcher.negative_failure_message.should == <<-EOF
242
+ it "should pass if target has a collection of items with < n members" do
243
+ owner = create_collection_owner_with(3)
244
+ owner.should have_at_most(4).items_in_collection_with_length_method
245
+ owner.should have_at_most(4).items_in_collection_with_size_method
246
+ end
247
+
248
+ it "should provide educational negative failure messages" do
249
+ #given
250
+ owner = create_collection_owner_with(3)
251
+ length_matcher = have_at_most(3).items_in_collection_with_length_method
252
+ size_matcher = have_at_most(3).items_in_collection_with_size_method
253
+
254
+ #when
255
+ length_matcher.matches?(owner)
256
+ size_matcher.matches?(owner)
257
+
258
+ #then
259
+ length_matcher.failure_message_for_should_not.should == <<-EOF
203
260
  Isn't life confusing enough?
204
261
  Instead of having to figure out the meaning of this:
205
262
  should_not have_at_most(3).items_in_collection_with_length_method
206
263
  We recommend that you use this instead:
207
264
  should have_at_least(4).items_in_collection_with_length_method
208
265
  EOF
209
-
210
- size_matcher.negative_failure_message.should == <<-EOF
266
+
267
+ size_matcher.failure_message_for_should_not.should == <<-EOF
211
268
  Isn't life confusing enough?
212
269
  Instead of having to figure out the meaning of this:
213
270
  should_not have_at_most(3).items_in_collection_with_size_method
214
271
  We recommend that you use this instead:
215
272
  should have_at_least(4).items_in_collection_with_size_method
216
273
  EOF
274
+ end
217
275
  end
218
- end
219
276
 
220
- describe "have(n).items(args, block)" do
221
- it "should pass args to target" do
222
- target = mock("target")
223
- target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
224
- target.should have(3).items("arg1","arg2")
225
- end
277
+ describe "have(n).items(args, block)" do
278
+ it "should pass args to target" do
279
+ target = mock("target")
280
+ target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
281
+ target.should have(3).items("arg1","arg2")
282
+ end
226
283
 
227
- it "should pass block to target" do
228
- target = mock("target")
229
- block = lambda { 5 }
230
- target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
231
- target.should have(3).items("arg1","arg2", block)
284
+ it "should pass block to target" do
285
+ target = mock("target")
286
+ block = lambda { 5 }
287
+ target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
288
+ target.should have(3).items("arg1","arg2", block)
289
+ end
232
290
  end
233
- end
234
291
 
235
- describe "have(n).items where target IS a collection" do
236
- it "should reference the number of items IN the collection" do
237
- [1,2,3].should have(3).items
292
+ describe "have(n).items where target IS a collection" do
293
+ it "should reference the number of items IN the collection" do
294
+ [1,2,3].should have(3).items
295
+ end
296
+
297
+ it "should fail when the number of items IN the collection is not as expected" do
298
+ lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
299
+ end
238
300
  end
239
301
 
240
- it "should reference the number of items IN the collection" do
241
- lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
302
+ describe "have(n).characters where target IS a String" do
303
+ it "should pass if the length is correct" do
304
+ "this string".should have(11).characters
305
+ end
306
+
307
+ it "should fail if the length is incorrect" do
308
+ lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11")
309
+ end
242
310
  end
243
- end
244
311
 
245
- describe "have(n).characters where target IS a String" do
246
- it "should pass if the length is correct" do
247
- "this string".should have(11).characters
312
+ describe "have(n).things on an object which is not a collection nor contains one" do
313
+ it "should fail" do
314
+ lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
315
+ end
248
316
  end
249
317
 
250
- it "should fail if the length is incorrect" do
251
- lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11")
318
+ describe Spec::Matchers::Have, "for a collection owner that implements #send" do
319
+ before(:each) do
320
+ @collection = Object.new
321
+ def @collection.floozles; [1,2] end
322
+ def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
323
+ end
324
+
325
+ it "should work in the straightforward case" do
326
+ lambda {
327
+ @collection.should have(2).floozles
328
+ }.should_not raise_error
329
+ end
330
+
331
+ it "should work when doing automatic pluralization" do
332
+ lambda {
333
+ @collection.should have_at_least(1).floozle
334
+ }.should_not raise_error
335
+ end
336
+
337
+ it "should blow up when the owner doesn't respond to that method" do
338
+ lambda {
339
+ @collection.should have(99).problems
340
+ }.should raise_error(NoMethodError, /problems/)
341
+ end
252
342
  end
253
- end
254
343
 
255
- describe "have(n).things on an object which is not a collection nor contains one" do
256
- it "should fail" do
257
- lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
344
+ module Spec
345
+ module Matchers
346
+ describe Have do
347
+ treats_method_missing_as_private :noop => false
348
+
349
+ describe "respond_to?" do
350
+ before :each do
351
+ @have = Have.new(:foo)
352
+ @a_method_which_have_defines = Have.instance_methods.first
353
+ @a_method_which_object_defines = Object.instance_methods.first
354
+ end
355
+
356
+ it "should be true for a method which Have defines" do
357
+ @have.should respond_to(@a_method_which_have_defines)
358
+ end
359
+
360
+ it "should be true for a method that it's superclass (Object) defines" do
361
+ @have.should respond_to(@a_method_which_object_defines)
362
+ end
363
+
364
+ it "should be false for a method which neither Object nor nor Have defines" do
365
+ @have.should_not respond_to(:foo_bar_baz)
366
+ end
367
+
368
+ it "should be false if the owner doesn't respond to the method" do
369
+ have = Have.new(99)
370
+ have.should_not respond_to(:problems)
371
+ end
372
+
373
+ it "should be true if the owner responds to the method" do
374
+ have = Have.new(:a_symbol)
375
+ have.should respond_to(:to_sym)
376
+ end
377
+ end
378
+ end
379
+ end
258
380
  end
259
- end
381
+ end
@@ -1,10 +1,14 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper.rb'
1
+ require 'spec_helper'
2
2
 
3
3
  describe "should include(expected)" do
4
4
  it "should pass if target includes expected" do
5
5
  [1,2,3].should include(3)
6
6
  "abc".should include("a")
7
7
  end
8
+
9
+ it 'should pass if target is a Hash and has the expected as a key' do
10
+ {:key => 'value'}.should include(:key)
11
+ end
8
12
 
9
13
  it "should fail if target does not include expected" do
10
14
  lambda {
@@ -13,6 +17,9 @@ describe "should include(expected)" do
13
17
  lambda {
14
18
  "abc".should include("d")
15
19
  }.should fail_with("expected \"abc\" to include \"d\"")
20
+ lambda {
21
+ {:key => 'value'}.should include(:other)
22
+ }.should fail_with(%Q|expected {:key=>"value"} to include :other|)
16
23
  end
17
24
  end
18
25
 
@@ -20,11 +27,21 @@ describe "should include(with, multiple, args)" do
20
27
  it "should pass if target includes all items" do
21
28
  [1,2,3].should include(1,2,3)
22
29
  end
30
+
31
+ it 'should pass if target is a Hash including all items as keys' do
32
+ {:key => 'value', :other => 'value'}.should include(:key, :other)
33
+ end
23
34
 
24
35
  it "should fail if target does not include any one of the items" do
25
36
  lambda {
26
37
  [1,2,3].should include(1,2,4)
27
- }.should fail_with("expected [1, 2, 3] to include 1, 2 and 4")
38
+ }.should fail_with("expected [1, 2, 3] to include 1, 2, and 4")
39
+ end
40
+
41
+ it 'should pass if target is a Hash missing any item as a key' do
42
+ lambda {
43
+ {:key => 'value'}.should include(:key, :other)
44
+ }.should fail_with(%Q|expected {:key=>"value"} to include :key and :other|)
28
45
  end
29
46
  end
30
47
 
@@ -33,6 +50,10 @@ describe "should_not include(expected)" do
33
50
  [1,2,3].should_not include(4)
34
51
  "abc".should_not include("d")
35
52
  end
53
+
54
+ it 'should pass if target is a Hash and does not have the expected as a key' do
55
+ {:other => 'value'}.should_not include(:key)
56
+ end
36
57
 
37
58
  it "should fail if target includes expected" do
38
59
  lambda {
@@ -41,5 +62,27 @@ describe "should_not include(expected)" do
41
62
  lambda {
42
63
  "abc".should_not include("c")
43
64
  }.should fail_with("expected \"abc\" not to include \"c\"")
65
+ lambda {
66
+ {:key => 'value'}.should_not include(:key)
67
+ }.should fail_with(%Q|expected {:key=>"value"} not to include :key|)
68
+ end
69
+ end
70
+
71
+ describe "should include(:key => value)" do
72
+ it "should pass if target is a Hash and includes the key/value pair" do
73
+ {:key => 'value'}.should include(:key => 'value')
74
+ end
75
+ it "should pass if target is a Hash and includes the key/value pair among others" do
76
+ {:key => 'value', :other => 'different'}.should include(:key => 'value')
77
+ end
78
+ it "should fail if target is a Hash and has a different value for key" do
79
+ lambda {
80
+ {:key => 'different'}.should include(:key => 'value')
81
+ }.should fail_with(%Q|expected {:key=>"different"} to include {:key=>"value"}|)
82
+ end
83
+ it "should fail if target is a Hash and has a different key" do
84
+ lambda {
85
+ {:other => 'value'}.should include(:key => 'value')
86
+ }.should fail_with(%Q|expected {:other=>"value"} to include {:key=>"value"}|)
44
87
  end
45
88
  end