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,6 +1,6 @@
1
1
  #Based on patch from Wilson Bilkovich
2
2
 
3
- require File.dirname(__FILE__) + '/../../spec_helper.rb'
3
+ require 'spec_helper'
4
4
  class SomethingExpected
5
5
  attr_accessor :some_value
6
6
  end
@@ -12,13 +12,17 @@ describe "should change(actual, message)" do
12
12
  end
13
13
 
14
14
  it "should pass when actual is modified by the block" do
15
- lambda {@instance.some_value = 6}.should change(@instance, :some_value)
15
+ expect {@instance.some_value = 6}.to change(@instance, :some_value)
16
16
  end
17
17
 
18
18
  it "should fail when actual is not modified by the block" do
19
- lambda do
20
- lambda {}.should change(@instance, :some_value)
21
- end.should fail_with("some_value should have changed, but is still 5")
19
+ expect do
20
+ expect {}.to change(@instance, :some_value)
21
+ end.to fail_with("some_value should have changed, but is still 5")
22
+ end
23
+
24
+ it "provides a #description" do
25
+ change(@instance, :some_value).description.should == "change #some_value"
22
26
  end
23
27
  end
24
28
 
@@ -29,13 +33,13 @@ describe "should_not change(actual, message)" do
29
33
  end
30
34
 
31
35
  it "should pass when actual is not modified by the block" do
32
- lambda { }.should_not change(@instance, :some_value)
36
+ expect { }.to_not change(@instance, :some_value)
33
37
  end
34
38
 
35
39
  it "should fail when actual is not modified by the block" do
36
- lambda do
37
- lambda {@instance.some_value = 6}.should_not change(@instance, :some_value)
38
- end.should fail_with("some_value should not have changed, but did change from 5 to 6")
40
+ expect do
41
+ expect {@instance.some_value = 6}.to_not change(@instance, :some_value)
42
+ end.to fail_with("some_value should not have changed, but did change from 5 to 6")
39
43
  end
40
44
  end
41
45
 
@@ -46,20 +50,23 @@ describe "should change { block }" do
46
50
  end
47
51
 
48
52
  it "should pass when actual is modified by the block" do
49
- lambda {@instance.some_value = 6}.should change { @instance.some_value }
53
+ expect {@instance.some_value = 6}.to change { @instance.some_value }
50
54
  end
51
55
 
52
56
  it "should fail when actual is not modified by the block" do
53
- lambda do
54
- lambda {}.should change{ @instance.some_value }
55
- end.should fail_with("result should have changed, but is still 5")
57
+ expect do
58
+ expect {}.to change{ @instance.some_value }
59
+ end.to fail_with("result should have changed, but is still 5")
60
+ end
61
+
62
+ it "should warn if passed a block using do/end instead of {}" do
63
+ expect do
64
+ expect {}.to change do; end
65
+ end.to raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
56
66
  end
57
67
 
58
- it "should warn if passed a block using do/end" do
59
- lambda do
60
- lambda {}.should change do
61
- end
62
- end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
68
+ it "provides a #description" do
69
+ change { @instance.some_value }.description.should == "change #result"
63
70
  end
64
71
  end
65
72
 
@@ -70,20 +77,19 @@ describe "should_not change { block }" do
70
77
  end
71
78
 
72
79
  it "should pass when actual is modified by the block" do
73
- lambda {}.should_not change{ @instance.some_value }
80
+ expect {}.to_not change{ @instance.some_value }
74
81
  end
75
82
 
76
83
  it "should fail when actual is not modified by the block" do
77
- lambda do
78
- lambda {@instance.some_value = 6}.should_not change { @instance.some_value }
79
- end.should fail_with("result should not have changed, but did change from 5 to 6")
84
+ expect do
85
+ expect {@instance.some_value = 6}.to_not change { @instance.some_value }
86
+ end.to fail_with("result should not have changed, but did change from 5 to 6")
80
87
  end
81
88
 
82
- it "should warn if passed a block using do/end" do
83
- lambda do
84
- lambda {}.should_not change do
85
- end
86
- end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
89
+ it "should warn if passed a block using do/end instead of {}" do
90
+ expect do
91
+ expect {}.to_not change do; end
92
+ end.to raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
87
93
  end
88
94
  end
89
95
 
@@ -94,19 +100,19 @@ describe "should change(actual, message).by(expected)" do
94
100
  end
95
101
 
96
102
  it "should pass when attribute is changed by expected amount" do
97
- lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by(1)
103
+ expect { @instance.some_value += 1 }.to change(@instance, :some_value).by(1)
98
104
  end
99
105
 
100
106
  it "should fail when the attribute is changed by unexpected amount" do
101
- lambda do
102
- lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by(1)
103
- end.should fail_with("some_value should have been changed by 1, but was changed by 2")
107
+ expect do
108
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by(1)
109
+ end.to fail_with("some_value should have been changed by 1, but was changed by 2")
104
110
  end
105
111
 
106
112
  it "should fail when the attribute is changed by unexpected amount in the opposite direction" do
107
- lambda do
108
- lambda { @instance.some_value -= 1 }.should change(@instance, :some_value).by(1)
109
- end.should fail_with("some_value should have been changed by 1, but was changed by -1")
113
+ expect do
114
+ expect { @instance.some_value -= 1 }.to change(@instance, :some_value).by(1)
115
+ end.to fail_with("some_value should have been changed by 1, but was changed by -1")
110
116
  end
111
117
  end
112
118
 
@@ -117,19 +123,106 @@ describe "should change{ block }.by(expected)" do
117
123
  end
118
124
 
119
125
  it "should pass when attribute is changed by expected amount" do
120
- lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by(1)
126
+ expect { @instance.some_value += 1 }.to change{@instance.some_value}.by(1)
121
127
  end
122
128
 
123
129
  it "should fail when the attribute is changed by unexpected amount" do
124
- lambda do
125
- lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by(1)
126
- end.should fail_with("result should have been changed by 1, but was changed by 2")
130
+ expect do
131
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by(1)
132
+ end.to fail_with("result should have been changed by 1, but was changed by 2")
127
133
  end
128
134
 
129
135
  it "should fail when the attribute is changed by unexpected amount in the opposite direction" do
130
- lambda do
131
- lambda { @instance.some_value -= 1 }.should change{@instance.some_value}.by(1)
132
- end.should fail_with("result should have been changed by 1, but was changed by -1")
136
+ expect do
137
+ expect { @instance.some_value -= 1 }.to change{@instance.some_value}.by(1)
138
+ end.to fail_with("result should have been changed by 1, but was changed by -1")
139
+ end
140
+ end
141
+
142
+ describe "should change(actual, message).by_at_least(expected)" do
143
+ before(:each) do
144
+ @instance = SomethingExpected.new
145
+ @instance.some_value = 5
146
+ end
147
+
148
+ it "should pass when attribute is changed by greater than the expected amount" do
149
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_least(1)
150
+ end
151
+
152
+ it "should pass when attribute is changed by the expected amount" do
153
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_least(2)
154
+ end
155
+
156
+ it "should fail when the attribute is changed by less than the expected amount" do
157
+ expect do
158
+ expect { @instance.some_value += 1 }.to change(@instance, :some_value).by_at_least(2)
159
+ end.to fail_with("some_value should have been changed by at least 2, but was changed by 1")
160
+ end
161
+
162
+ end
163
+
164
+ describe "should change{ block }.by_at_least(expected)" do
165
+ before(:each) do
166
+ @instance = SomethingExpected.new
167
+ @instance.some_value = 5
168
+ end
169
+
170
+ it "should pass when attribute is changed by greater than expected amount" do
171
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_least(1)
172
+ end
173
+
174
+ it "should pass when attribute is changed by the expected amount" do
175
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_least(2)
176
+ end
177
+
178
+ it "should fail when the attribute is changed by less than the unexpected amount" do
179
+ expect do
180
+ expect { @instance.some_value += 1 }.to change{@instance.some_value}.by_at_least(2)
181
+ end.to fail_with("result should have been changed by at least 2, but was changed by 1")
182
+ end
183
+ end
184
+
185
+
186
+ describe "should change(actual, message).by_at_most(expected)" do
187
+ before(:each) do
188
+ @instance = SomethingExpected.new
189
+ @instance.some_value = 5
190
+ end
191
+
192
+ it "should pass when attribute is changed by less than the expected amount" do
193
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_most(3)
194
+ end
195
+
196
+ it "should pass when attribute is changed by the expected amount" do
197
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_most(2)
198
+ end
199
+
200
+ it "should fail when the attribute is changed by greater than the expected amount" do
201
+ expect do
202
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_most(1)
203
+ end.to fail_with("some_value should have been changed by at most 1, but was changed by 2")
204
+ end
205
+
206
+ end
207
+
208
+ describe "should change{ block }.by_at_most(expected)" do
209
+ before(:each) do
210
+ @instance = SomethingExpected.new
211
+ @instance.some_value = 5
212
+ end
213
+
214
+ it "should pass when attribute is changed by less than expected amount" do
215
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_most(3)
216
+ end
217
+
218
+ it "should pass when attribute is changed by the expected amount" do
219
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_most(2)
220
+ end
221
+
222
+ it "should fail when the attribute is changed by greater than the unexpected amount" do
223
+ expect do
224
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_most(1)
225
+ end.to fail_with("result should have been changed by at most 1, but was changed by 2")
133
226
  end
134
227
  end
135
228
 
@@ -140,13 +233,13 @@ describe "should change(actual, message).from(old)" do
140
233
  end
141
234
 
142
235
  it "should pass when attribute is == to expected value before executing block" do
143
- lambda { @instance.some_value = "astring" }.should change(@instance, :some_value).from("string")
236
+ expect { @instance.some_value = "astring" }.to change(@instance, :some_value).from("string")
144
237
  end
145
238
 
146
239
  it "should fail when attribute is not == to expected value before executing block" do
147
- lambda do
148
- lambda { @instance.some_value = "knot" }.should change(@instance, :some_value).from("cat")
149
- end.should fail_with("some_value should have initially been \"cat\", but was \"string\"")
240
+ expect do
241
+ expect { @instance.some_value = "knot" }.to change(@instance, :some_value).from("cat")
242
+ end.to fail_with("some_value should have initially been \"cat\", but was \"string\"")
150
243
  end
151
244
  end
152
245
 
@@ -157,13 +250,13 @@ describe "should change{ block }.from(old)" do
157
250
  end
158
251
 
159
252
  it "should pass when attribute is == to expected value before executing block" do
160
- lambda { @instance.some_value = "astring" }.should change{@instance.some_value}.from("string")
253
+ expect { @instance.some_value = "astring" }.to change{@instance.some_value}.from("string")
161
254
  end
162
255
 
163
256
  it "should fail when attribute is not == to expected value before executing block" do
164
- lambda do
165
- lambda { @instance.some_value = "knot" }.should change{@instance.some_value}.from("cat")
166
- end.should fail_with("result should have initially been \"cat\", but was \"string\"")
257
+ expect do
258
+ expect { @instance.some_value = "knot" }.to change{@instance.some_value}.from("cat")
259
+ end.to fail_with("result should have initially been \"cat\", but was \"string\"")
167
260
  end
168
261
  end
169
262
 
@@ -174,13 +267,13 @@ describe "should change(actual, message).to(new)" do
174
267
  end
175
268
 
176
269
  it "should pass when attribute is == to expected value after executing block" do
177
- lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat")
270
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).to("cat")
178
271
  end
179
272
 
180
273
  it "should fail when attribute is not == to expected value after executing block" do
181
- lambda do
182
- lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("dog")
183
- end.should fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
274
+ expect do
275
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("string").to("dog")
276
+ end.to fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
184
277
  end
185
278
  end
186
279
 
@@ -191,13 +284,13 @@ describe "should change{ block }.to(new)" do
191
284
  end
192
285
 
193
286
  it "should pass when attribute is == to expected value after executing block" do
194
- lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat")
287
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.to("cat")
195
288
  end
196
289
 
197
290
  it "should fail when attribute is not == to expected value after executing block" do
198
- lambda do
199
- lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("dog")
200
- end.should fail_with("result should have been changed to \"dog\", but is now \"cat\"")
291
+ expect do
292
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.from("string").to("dog")
293
+ end.to fail_with("result should have been changed to \"dog\", but is now \"cat\"")
201
294
  end
202
295
  end
203
296
 
@@ -208,11 +301,23 @@ describe "should change(actual, message).from(old).to(new)" do
208
301
  end
209
302
 
210
303
  it "should pass when #to comes before #from" do
211
- lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat").from("string")
304
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).to("cat").from("string")
212
305
  end
213
306
 
214
307
  it "should pass when #from comes before #to" do
215
- lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("cat")
308
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("string").to("cat")
309
+ end
310
+
311
+ it "should show the correct messaging when #after and #to are different" do
312
+ expect do
313
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("string").to("dog")
314
+ end.to fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
315
+ end
316
+
317
+ it "should show the correct messaging when #before and #from are different" do
318
+ expect do
319
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("not_string").to("cat")
320
+ end.to fail_with("some_value should have initially been \"not_string\", but was \"string\"")
216
321
  end
217
322
  end
218
323
 
@@ -223,10 +328,22 @@ describe "should change{ block }.from(old).to(new)" do
223
328
  end
224
329
 
225
330
  it "should pass when #to comes before #from" do
226
- lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat").from("string")
331
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.to("cat").from("string")
227
332
  end
228
333
 
229
334
  it "should pass when #from comes before #to" do
230
- lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("cat")
335
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.from("string").to("cat")
336
+ end
337
+ end
338
+
339
+ describe Spec::Matchers::Change do
340
+ it "should work when the receiver has implemented #send" do
341
+ @instance = SomethingExpected.new
342
+ @instance.some_value = "string"
343
+ def @instance.send(*args); raise "DOH! Library developers shouldn't use #send!" end
344
+
345
+ expect {
346
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value)
347
+ }.to_not raise_error
231
348
  end
232
349
  end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ Spec::Matchers.define :have_public_instance_method do |method|
4
+ match do |klass|
5
+ klass.public_instance_methods.any? {|m| [method, method.to_sym].include?(m)}
6
+ end
7
+ end
8
+
9
+ (Spec::Matchers.constants.sort).each do |c|
10
+ if (Class === (klass = Spec::Matchers.const_get(c)))
11
+ describe klass do
12
+ if klass.public_instance_methods.any? {|m| ['failure_message_for_should',:failure_message_for_should].include?(m)}
13
+ describe "called with should" do
14
+ subject { klass }
15
+ it { should have_public_instance_method('failure_message_for_should')}
16
+ it { should have_public_instance_method('failure_message')}
17
+ end
18
+ end
19
+ if klass.public_instance_methods.any? {|m| ['failure_message_for_should_not',:failure_message_for_should_not].include?(m)}
20
+ describe "called with should not" do
21
+ subject { klass }
22
+ it { should have_public_instance_method('failure_message_for_should_not')}
23
+ it { should have_public_instance_method('negative_failure_message')}
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,148 +1,139 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper.rb'
1
+ require 'spec_helper'
2
2
 
3
3
  describe "Matchers should be able to generate their own descriptions" do
4
- before(:each) do
5
- @desc = nil
6
- @callback = lambda { |desc| @desc = desc }
7
- Spec::Matchers.description_generated(@callback)
4
+ after(:each) do
5
+ Spec::Matchers.clear_generated_description
8
6
  end
9
-
7
+
10
8
  it "should == expected" do
11
9
  "this".should == "this"
12
- @desc.should == "should == \"this\""
10
+ Spec::Matchers.generated_description.should == "should == \"this\""
13
11
  end
14
12
 
15
13
  it "should not == expected" do
16
14
  "this".should_not == "that"
17
- @desc.should == "should not == \"that\""
15
+ Spec::Matchers.generated_description.should == "should not == \"that\""
18
16
  end
19
17
 
20
18
  it "should be empty (arbitrary predicate)" do
21
19
  [].should be_empty
22
- @desc.should == "should be empty"
20
+ Spec::Matchers.generated_description.should == "should be empty"
23
21
  end
24
22
 
25
23
  it "should not be empty (arbitrary predicate)" do
26
24
  [1].should_not be_empty
27
- @desc.should == "should not be empty"
25
+ Spec::Matchers.generated_description.should == "should not be empty"
28
26
  end
29
27
 
30
28
  it "should be true" do
31
29
  true.should be_true
32
- @desc.should == "should be true"
30
+ Spec::Matchers.generated_description.should == "should be true"
33
31
  end
34
32
 
35
33
  it "should be false" do
36
34
  false.should be_false
37
- @desc.should == "should be false"
35
+ Spec::Matchers.generated_description.should == "should be false"
38
36
  end
39
37
 
40
38
  it "should be nil" do
41
39
  nil.should be_nil
42
- @desc.should == "should be nil"
40
+ Spec::Matchers.generated_description.should == "should be nil"
43
41
  end
44
42
 
45
43
  it "should be > n" do
46
44
  5.should be > 3
47
- @desc.should == "should be > 3"
45
+ Spec::Matchers.generated_description.should == "should be > 3"
48
46
  end
49
47
 
50
48
  it "should be predicate arg1, arg2 and arg3" do
51
49
  5.0.should be_between(0,10)
52
- @desc.should == "should be between 0 and 10"
50
+ Spec::Matchers.generated_description.should == "should be between 0 and 10"
53
51
  end
54
52
 
55
- it "should be_few_words predicate should be transformed to 'be few words'" do
56
- 5.should be_kind_of(Fixnum)
57
- @desc.should == "should be kind of Fixnum"
58
- end
59
-
60
- it "should preserve a proper prefix for be predicate" do
61
- 5.should be_a_kind_of(Fixnum)
62
- @desc.should == "should be a kind of Fixnum"
63
- 5.should be_an_instance_of(Fixnum)
64
- @desc.should == "should be an instance of Fixnum"
65
- end
66
-
67
53
  it "should equal" do
68
54
  expected = "expected"
69
55
  expected.should equal(expected)
70
- @desc.should == "should equal \"expected\""
56
+ Spec::Matchers.generated_description.should == "should equal \"expected\""
71
57
  end
72
58
 
73
59
  it "should_not equal" do
74
60
  5.should_not equal(37)
75
- @desc.should == "should not equal 37"
61
+ Spec::Matchers.generated_description.should == "should not equal 37"
76
62
  end
77
63
 
78
64
  it "should eql" do
79
65
  "string".should eql("string")
80
- @desc.should == "should eql \"string\""
66
+ Spec::Matchers.generated_description.should == "should eql \"string\""
81
67
  end
82
68
 
83
69
  it "should not eql" do
84
70
  "a".should_not eql(:a)
85
- @desc.should == "should not eql :a"
71
+ Spec::Matchers.generated_description.should == "should not eql :a"
86
72
  end
87
73
 
88
74
  it "should have_key" do
89
75
  {:a => "a"}.should have_key(:a)
90
- @desc.should == "should have key :a"
76
+ Spec::Matchers.generated_description.should == "should have key :a"
91
77
  end
92
78
 
93
79
  it "should have n items" do
94
80
  team.should have(3).players
95
- @desc.should == "should have 3 players"
81
+ Spec::Matchers.generated_description.should == "should have 3 players"
96
82
  end
97
83
 
98
84
  it "should have at least n items" do
99
85
  team.should have_at_least(2).players
100
- @desc.should == "should have at least 2 players"
86
+ Spec::Matchers.generated_description.should == "should have at least 2 players"
101
87
  end
102
88
 
103
89
  it "should have at most n items" do
104
90
  team.should have_at_most(4).players
105
- @desc.should == "should have at most 4 players"
91
+ Spec::Matchers.generated_description.should == "should have at most 4 players"
106
92
  end
107
93
 
108
94
  it "should include" do
109
95
  [1,2,3].should include(3)
110
- @desc.should == "should include 3"
96
+ Spec::Matchers.generated_description.should == "should include 3"
97
+ end
98
+
99
+ it "array.should =~ [1,2,3]" do
100
+ [1,2,3].should =~ [1,2,3]
101
+ Spec::Matchers.generated_description.should == "should contain exactly 1, 2 and 3"
111
102
  end
112
103
 
113
104
  it "should match" do
114
105
  "this string".should match(/this string/)
115
- @desc.should == "should match /this string/"
106
+ Spec::Matchers.generated_description.should == "should match /this string/"
116
107
  end
117
108
 
118
109
  it "should raise_error" do
119
110
  lambda { raise }.should raise_error
120
- @desc.should == "should raise Exception"
111
+ Spec::Matchers.generated_description.should == "should raise Exception"
121
112
  end
122
113
 
123
114
  it "should raise_error with type" do
124
115
  lambda { raise }.should raise_error(RuntimeError)
125
- @desc.should == "should raise RuntimeError"
116
+ Spec::Matchers.generated_description.should == "should raise RuntimeError"
126
117
  end
127
118
 
128
119
  it "should raise_error with type and message" do
129
120
  lambda { raise "there was an error" }.should raise_error(RuntimeError, "there was an error")
130
- @desc.should == "should raise RuntimeError with \"there was an error\""
121
+ Spec::Matchers.generated_description.should == "should raise RuntimeError with \"there was an error\""
131
122
  end
132
123
 
133
124
  it "should respond_to" do
134
125
  [].should respond_to(:insert)
135
- @desc.should == "should respond to #insert"
126
+ Spec::Matchers.generated_description.should == "should respond to #insert"
136
127
  end
137
128
 
138
129
  it "should throw symbol" do
139
130
  lambda { throw :what_a_mess }.should throw_symbol
140
- @desc.should == "should throw a Symbol"
131
+ Spec::Matchers.generated_description.should == "should throw a Symbol"
141
132
  end
142
133
 
143
134
  it "should throw symbol (with named symbol)" do
144
135
  lambda { throw :what_a_mess }.should throw_symbol(:what_a_mess)
145
- @desc.should == "should throw :what_a_mess"
136
+ Spec::Matchers.generated_description.should == "should throw :what_a_mess"
146
137
  end
147
138
 
148
139
  def team
@@ -152,8 +143,18 @@ describe "Matchers should be able to generate their own descriptions" do
152
143
  end
153
144
  end.new
154
145
  end
146
+ end
147
+
148
+ describe "a Matcher with no description" do
149
+ def matcher
150
+ Class.new do
151
+ def matches?(ignore); true; end
152
+ def failure_message; ""; end
153
+ end.new
154
+ end
155
155
 
156
- after(:each) do
157
- Spec::Matchers.unregister_description_generated(@callback)
156
+ it "should provide a helpful message when used in a string-less example block" do
157
+ 5.should matcher
158
+ Spec::Matchers.generated_description.should =~ /When you call.*description method/m
158
159
  end
159
- end
160
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ module Spec
4
+ module Matchers
5
+ module DSL
6
+ describe "#create" do
7
+ it "is deprecated" do
8
+ Spec.should_receive(:deprecate)
9
+ mod = Module.new
10
+ mod.extend Spec::Matchers::DSL
11
+ mod.create(:foo)
12
+ end
13
+ end
14
+
15
+ describe "#define" do
16
+ it "creates a method that initializes a new matcher with the submitted name and expected arg" do
17
+ # FIXME - this expects new to be called, but we need something
18
+ # more robust - that expects new to be called with a specific
19
+ # block (lambda, proc, whatever)
20
+ mod = Module.new
21
+ mod.extend Spec::Matchers::DSL
22
+ mod.define(:foo)
23
+
24
+ obj = Object.new
25
+ obj.extend mod
26
+
27
+ Spec::Matchers::Matcher.should_receive(:new).with(:foo, 3)
28
+
29
+ obj.foo(3)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end