newbamboo-rspec 1.1.12

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 (324) hide show
  1. data/.autotest +4 -0
  2. data/History.txt +1263 -0
  3. data/License.txt +22 -0
  4. data/Manifest.txt +327 -0
  5. data/README.txt +57 -0
  6. data/Rakefile +104 -0
  7. data/TODO.txt +18 -0
  8. data/bin/autospec +4 -0
  9. data/bin/spec +4 -0
  10. data/examples/failing/README.txt +7 -0
  11. data/examples/failing/diffing_spec.rb +36 -0
  12. data/examples/failing/failing_autogenerated_docstrings_example.rb +19 -0
  13. data/examples/failing/failure_in_after.rb +10 -0
  14. data/examples/failing/failure_in_before.rb +10 -0
  15. data/examples/failing/mocking_example.rb +40 -0
  16. data/examples/failing/mocking_with_flexmock.rb +26 -0
  17. data/examples/failing/mocking_with_mocha.rb +25 -0
  18. data/examples/failing/mocking_with_rr.rb +27 -0
  19. data/examples/failing/partial_mock_example.rb +20 -0
  20. data/examples/failing/predicate_example.rb +34 -0
  21. data/examples/failing/raising_example.rb +47 -0
  22. data/examples/failing/spec_helper.rb +3 -0
  23. data/examples/failing/syntax_error_example.rb +7 -0
  24. data/examples/failing/team_spec.rb +44 -0
  25. data/examples/failing/timeout_behaviour.rb +7 -0
  26. data/examples/passing/autogenerated_docstrings_example.rb +25 -0
  27. data/examples/passing/before_and_after_example.rb +40 -0
  28. data/examples/passing/behave_as_example.rb +45 -0
  29. data/examples/passing/custom_expectation_matchers.rb +54 -0
  30. data/examples/passing/custom_formatter.rb +12 -0
  31. data/examples/passing/dynamic_spec.rb +9 -0
  32. data/examples/passing/file_accessor.rb +19 -0
  33. data/examples/passing/file_accessor_spec.rb +38 -0
  34. data/examples/passing/greeter_spec.rb +31 -0
  35. data/examples/passing/helper_method_example.rb +14 -0
  36. data/examples/passing/io_processor.rb +8 -0
  37. data/examples/passing/io_processor_spec.rb +21 -0
  38. data/examples/passing/legacy_spec.rb +11 -0
  39. data/examples/passing/mocking_example.rb +27 -0
  40. data/examples/passing/multi_threaded_example_group_runner.rb +26 -0
  41. data/examples/passing/nested_classes_example.rb +36 -0
  42. data/examples/passing/partial_mock_example.rb +29 -0
  43. data/examples/passing/pending_example.rb +20 -0
  44. data/examples/passing/predicate_example.rb +27 -0
  45. data/examples/passing/priority.txt +1 -0
  46. data/examples/passing/shared_example_group_example.rb +81 -0
  47. data/examples/passing/shared_stack_examples.rb +36 -0
  48. data/examples/passing/simple_matcher_example.rb +31 -0
  49. data/examples/passing/spec_helper.rb +3 -0
  50. data/examples/passing/stack.rb +36 -0
  51. data/examples/passing/stack_spec.rb +64 -0
  52. data/examples/passing/stack_spec_with_nested_example_groups.rb +67 -0
  53. data/examples/passing/stubbing_example.rb +69 -0
  54. data/examples/passing/yielding_example.rb +33 -0
  55. data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +86 -0
  56. data/features/before_and_after_blocks/before_and_after_blocks.feature +168 -0
  57. data/features/example_groups/autogenerated_docstrings.feature +45 -0
  58. data/features/example_groups/example_group_with_should_methods.feature +17 -0
  59. data/features/example_groups/nested_groups.feature +17 -0
  60. data/features/example_groups/output.feature +20 -0
  61. data/features/interop/examples_and_tests_together.feature +31 -0
  62. data/features/interop/test_but_not_test_unit.feature +14 -0
  63. data/features/interop/test_case_with_should_methods.feature +17 -0
  64. data/features/mock_framework_integration/use_flexmock.feature +27 -0
  65. data/features/step_definitions/running_rspec.rb +54 -0
  66. data/features/support/env.rb +26 -0
  67. data/features/support/helpers/cmdline.rb +9 -0
  68. data/features/support/matchers/smart_match.rb +37 -0
  69. data/init.rb +9 -0
  70. data/lib/adapters/mock_frameworks/flexmock.rb +24 -0
  71. data/lib/adapters/mock_frameworks/mocha.rb +20 -0
  72. data/lib/adapters/mock_frameworks/rr.rb +22 -0
  73. data/lib/adapters/mock_frameworks/rspec.rb +20 -0
  74. data/lib/autotest/discover.rb +3 -0
  75. data/lib/autotest/rspec.rb +47 -0
  76. data/lib/spec/dsl/main.rb +87 -0
  77. data/lib/spec/dsl.rb +1 -0
  78. data/lib/spec/example/before_and_after_hooks.rb +99 -0
  79. data/lib/spec/example/errors.rb +30 -0
  80. data/lib/spec/example/example_group.rb +26 -0
  81. data/lib/spec/example/example_group_factory.rb +98 -0
  82. data/lib/spec/example/example_group_methods.rb +376 -0
  83. data/lib/spec/example/example_matcher.rb +44 -0
  84. data/lib/spec/example/example_methods.rb +137 -0
  85. data/lib/spec/example/module_reopening_fix.rb +21 -0
  86. data/lib/spec/example/pending.rb +18 -0
  87. data/lib/spec/example/shared_example_group.rb +59 -0
  88. data/lib/spec/example.rb +187 -0
  89. data/lib/spec/expectations/differs/default.rb +66 -0
  90. data/lib/spec/expectations/errors.rb +12 -0
  91. data/lib/spec/expectations/extensions/object.rb +63 -0
  92. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  93. data/lib/spec/expectations/extensions.rb +2 -0
  94. data/lib/spec/expectations/handler.rb +32 -0
  95. data/lib/spec/expectations.rb +60 -0
  96. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  97. data/lib/spec/interop/test/unit/testcase.rb +73 -0
  98. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  99. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  100. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
  101. data/lib/spec/interop/test.rb +12 -0
  102. data/lib/spec/matchers/be.rb +208 -0
  103. data/lib/spec/matchers/be_close.rb +21 -0
  104. data/lib/spec/matchers/change.rb +148 -0
  105. data/lib/spec/matchers/eql.rb +25 -0
  106. data/lib/spec/matchers/equal.rb +25 -0
  107. data/lib/spec/matchers/errors.rb +5 -0
  108. data/lib/spec/matchers/exist.rb +16 -0
  109. data/lib/spec/matchers/generated_descriptions.rb +48 -0
  110. data/lib/spec/matchers/has.rb +15 -0
  111. data/lib/spec/matchers/have.rb +150 -0
  112. data/lib/spec/matchers/include.rb +80 -0
  113. data/lib/spec/matchers/match.rb +22 -0
  114. data/lib/spec/matchers/match_array.rb +79 -0
  115. data/lib/spec/matchers/method_missing.rb +9 -0
  116. data/lib/spec/matchers/operator_matcher.rb +70 -0
  117. data/lib/spec/matchers/raise_error.rb +128 -0
  118. data/lib/spec/matchers/respond_to.rb +71 -0
  119. data/lib/spec/matchers/satisfy.rb +47 -0
  120. data/lib/spec/matchers/simple_matcher.rb +132 -0
  121. data/lib/spec/matchers/throw_symbol.rb +106 -0
  122. data/lib/spec/matchers/wrap_expectation.rb +55 -0
  123. data/lib/spec/matchers.rb +141 -0
  124. data/lib/spec/mocks/argument_expectation.rb +49 -0
  125. data/lib/spec/mocks/argument_matchers.rb +237 -0
  126. data/lib/spec/mocks/error_generator.rb +82 -0
  127. data/lib/spec/mocks/errors.rb +10 -0
  128. data/lib/spec/mocks/extensions/object.rb +3 -0
  129. data/lib/spec/mocks/extensions.rb +1 -0
  130. data/lib/spec/mocks/framework.rb +15 -0
  131. data/lib/spec/mocks/message_expectation.rb +331 -0
  132. data/lib/spec/mocks/methods.rb +51 -0
  133. data/lib/spec/mocks/mock.rb +55 -0
  134. data/lib/spec/mocks/order_group.rb +29 -0
  135. data/lib/spec/mocks/proxy.rb +230 -0
  136. data/lib/spec/mocks/space.rb +28 -0
  137. data/lib/spec/mocks/spec_methods.rb +55 -0
  138. data/lib/spec/mocks.rb +200 -0
  139. data/lib/spec/rake/spectask.rb +225 -0
  140. data/lib/spec/rake/verify_rcov.rb +52 -0
  141. data/lib/spec/ruby.rb +9 -0
  142. data/lib/spec/runner/backtrace_tweaker.rb +58 -0
  143. data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
  144. data/lib/spec/runner/command_line.rb +35 -0
  145. data/lib/spec/runner/configuration.rb +166 -0
  146. data/lib/spec/runner/drb_command_line.rb +20 -0
  147. data/lib/spec/runner/example_group_runner.rb +70 -0
  148. data/lib/spec/runner/formatter/base_formatter.rb +79 -0
  149. data/lib/spec/runner/formatter/base_text_formatter.rb +127 -0
  150. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
  151. data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
  152. data/lib/spec/runner/formatter/html_formatter.rb +340 -0
  153. data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
  154. data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
  155. data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
  156. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  157. data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
  158. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  159. data/lib/spec/runner/heckle_runner.rb +74 -0
  160. data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
  161. data/lib/spec/runner/option_parser.rb +204 -0
  162. data/lib/spec/runner/options.rb +320 -0
  163. data/lib/spec/runner/reporter.rb +167 -0
  164. data/lib/spec/runner/spec_parser.rb +73 -0
  165. data/lib/spec/runner.rb +88 -0
  166. data/lib/spec/version.rb +15 -0
  167. data/lib/spec.rb +7 -0
  168. data/resources/rake/examples.rake +7 -0
  169. data/resources/rake/examples_with_rcov.rake +9 -0
  170. data/resources/rake/failing_examples_with_html.rake +9 -0
  171. data/resources/rake/verify_rcov.rake +7 -0
  172. data/resources/spec/example_group_with_should_methods.rb +12 -0
  173. data/resources/spec/simple_spec.rb +8 -0
  174. data/resources/test/spec_and_test_together.rb +57 -0
  175. data/resources/test/spec_including_test_but_not_unit.rb +11 -0
  176. data/resources/test/test_case_with_should_methods.rb +30 -0
  177. data/rspec.gemspec +32 -0
  178. data/spec/README.jruby +15 -0
  179. data/spec/autotest/autotest_helper.rb +6 -0
  180. data/spec/autotest/autotest_matchers.rb +47 -0
  181. data/spec/autotest/discover_spec.rb +8 -0
  182. data/spec/autotest/failed_results_re_spec.rb +24 -0
  183. data/spec/autotest/rspec_spec.rb +114 -0
  184. data/spec/rspec_suite.rb +6 -0
  185. data/spec/ruby_forker.rb +13 -0
  186. data/spec/spec/dsl/main_spec.rb +88 -0
  187. data/spec/spec/example/example_group_class_definition_spec.rb +49 -0
  188. data/spec/spec/example/example_group_factory_spec.rb +224 -0
  189. data/spec/spec/example/example_group_methods_spec.rb +653 -0
  190. data/spec/spec/example/example_group_spec.rb +661 -0
  191. data/spec/spec/example/example_matcher_spec.rb +79 -0
  192. data/spec/spec/example/example_methods_spec.rb +204 -0
  193. data/spec/spec/example/helper_method_spec.rb +24 -0
  194. data/spec/spec/example/nested_example_group_spec.rb +71 -0
  195. data/spec/spec/example/pending_module_spec.rb +139 -0
  196. data/spec/spec/example/predicate_matcher_spec.rb +21 -0
  197. data/spec/spec/example/shared_example_group_spec.rb +257 -0
  198. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  199. data/spec/spec/expectations/differs/default_spec.rb +127 -0
  200. data/spec/spec/expectations/extensions/object_spec.rb +45 -0
  201. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  202. data/spec/spec/expectations/wrap_expectation_spec.rb +30 -0
  203. data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
  204. data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
  205. data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
  206. data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
  207. data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
  208. data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
  209. data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
  210. data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
  211. data/spec/spec/interop/test/unit/spec_spec.rb +48 -0
  212. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +18 -0
  213. data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
  214. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  215. data/spec/spec/matchers/be_close_spec.rb +41 -0
  216. data/spec/spec/matchers/be_spec.rb +303 -0
  217. data/spec/spec/matchers/change_spec.rb +329 -0
  218. data/spec/spec/matchers/description_generation_spec.rb +172 -0
  219. data/spec/spec/matchers/eql_spec.rb +29 -0
  220. data/spec/spec/matchers/equal_spec.rb +29 -0
  221. data/spec/spec/matchers/exist_spec.rb +57 -0
  222. data/spec/spec/matchers/handler_spec.rb +111 -0
  223. data/spec/spec/matchers/has_spec.rb +63 -0
  224. data/spec/spec/matchers/have_spec.rb +399 -0
  225. data/spec/spec/matchers/include_spec.rb +88 -0
  226. data/spec/spec/matchers/match_array_spec.rb +83 -0
  227. data/spec/spec/matchers/match_spec.rb +37 -0
  228. data/spec/spec/matchers/matcher_methods_spec.rb +66 -0
  229. data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
  230. data/spec/spec/matchers/raise_error_spec.rb +333 -0
  231. data/spec/spec/matchers/respond_to_spec.rb +116 -0
  232. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  233. data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
  234. data/spec/spec/matchers/throw_symbol_spec.rb +96 -0
  235. data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
  236. data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
  237. data/spec/spec/mocks/at_least_spec.rb +97 -0
  238. data/spec/spec/mocks/at_most_spec.rb +93 -0
  239. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  240. data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
  241. data/spec/spec/mocks/bug_report_11545_spec.rb +32 -0
  242. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  243. data/spec/spec/mocks/bug_report_496.rb +19 -0
  244. data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
  245. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  246. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  247. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  248. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  249. data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
  250. data/spec/spec/mocks/hash_including_matcher_spec.rb +90 -0
  251. data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
  252. data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
  253. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  254. data/spec/spec/mocks/mock_spec.rb +579 -0
  255. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  256. data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
  257. data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
  258. data/spec/spec/mocks/once_counts_spec.rb +53 -0
  259. data/spec/spec/mocks/options_hash_spec.rb +35 -0
  260. data/spec/spec/mocks/partial_mock_spec.rb +149 -0
  261. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
  262. data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
  263. data/spec/spec/mocks/precise_counts_spec.rb +52 -0
  264. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  265. data/spec/spec/mocks/stub_spec.rb +194 -0
  266. data/spec/spec/mocks/stubbed_message_expectations_spec.rb +14 -0
  267. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  268. data/spec/spec/package/bin_spec_spec.rb +22 -0
  269. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  270. data/spec/spec/runner/command_line_spec.rb +141 -0
  271. data/spec/spec/runner/configuration_spec.rb +301 -0
  272. data/spec/spec/runner/drb_command_line_spec.rb +97 -0
  273. data/spec/spec/runner/empty_file.txt +0 -0
  274. data/spec/spec/runner/example_group_runner_spec.rb +33 -0
  275. data/spec/spec/runner/examples.txt +2 -0
  276. data/spec/spec/runner/failed.txt +3 -0
  277. data/spec/spec/runner/formatter/base_formatter_spec.rb +23 -0
  278. data/spec/spec/runner/formatter/base_text_formatter_spec.rb +23 -0
  279. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
  280. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
  281. data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
  282. data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
  283. data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
  284. data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
  285. data/spec/spec/runner/formatter/html_formatted-1.8.6.html +379 -0
  286. data/spec/spec/runner/formatter/html_formatted-1.8.7.html +379 -0
  287. data/spec/spec/runner/formatter/html_formatted-1.9.1.html +379 -0
  288. data/spec/spec/runner/formatter/html_formatter_spec.rb +62 -0
  289. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
  290. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  291. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +145 -0
  292. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
  293. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +104 -0
  294. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
  295. data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
  296. data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +373 -0
  297. data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +373 -0
  298. data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +373 -0
  299. data/spec/spec/runner/heckle_runner_spec.rb +78 -0
  300. data/spec/spec/runner/heckler_spec.rb +20 -0
  301. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  302. data/spec/spec/runner/option_parser_spec.rb +396 -0
  303. data/spec/spec/runner/options_spec.rb +469 -0
  304. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  305. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  306. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  307. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +62 -0
  308. data/spec/spec/runner/reporter_spec.rb +238 -0
  309. data/spec/spec/runner/resources/a_bar.rb +0 -0
  310. data/spec/spec/runner/resources/a_foo.rb +0 -0
  311. data/spec/spec/runner/resources/a_spec.rb +1 -0
  312. data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
  313. data/spec/spec/runner/resources/utf8_encoded.rb +7 -0
  314. data/spec/spec/runner/spec.opts +2 -0
  315. data/spec/spec/runner/spec_drb.opts +1 -0
  316. data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
  317. data/spec/spec/runner/spec_parser_spec.rb +91 -0
  318. data/spec/spec/runner/spec_spaced.opts +2 -0
  319. data/spec/spec/runner_spec.rb +11 -0
  320. data/spec/spec/spec_classes.rb +133 -0
  321. data/spec/spec/spec_spec.rb +21 -0
  322. data/spec/spec.opts +6 -0
  323. data/spec/spec_helper.rb +107 -0
  324. metadata +388 -0
@@ -0,0 +1,111 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module ExampleExpectations
4
+
5
+ class ArbitraryMatcher
6
+ def initialize(*args, &block)
7
+ if args.last.is_a? Hash
8
+ @expected = args.last[:expected]
9
+ end
10
+ if block_given?
11
+ @expected = block.call
12
+ end
13
+ @block = block
14
+ end
15
+
16
+ def matches?(target)
17
+ @target = target
18
+ return @expected == target
19
+ end
20
+
21
+ def with(new_value)
22
+ @expected = new_value
23
+ self
24
+ end
25
+
26
+ def failure_message
27
+ "expected #{@expected}, got #{@target}"
28
+ end
29
+
30
+ def negative_failure_message
31
+ "expected not #{@expected}, got #{@target}"
32
+ end
33
+ end
34
+
35
+ class PositiveOnlyMatcher < ArbitraryMatcher
36
+ undef negative_failure_message rescue nil
37
+ end
38
+
39
+ def arbitrary_matcher(*args, &block)
40
+ ArbitraryMatcher.new(*args, &block)
41
+ end
42
+
43
+ def positive_only_matcher(*args, &block)
44
+ PositiveOnlyMatcher.new(*args, &block)
45
+ end
46
+
47
+ end
48
+
49
+ module Spec
50
+ module Expectations
51
+ describe ExpectationMatcherHandler do
52
+ describe "#handle_matcher" do
53
+ it "should ask the matcher if it matches" do
54
+ matcher = mock("matcher")
55
+ actual = Object.new
56
+ matcher.should_receive(:matches?).with(actual).and_return(true)
57
+ Spec::Expectations::ExpectationMatcherHandler.handle_matcher(actual, matcher)
58
+ end
59
+
60
+ it "should return the match value" do
61
+ matcher = mock("matcher")
62
+ actual = Object.new
63
+ matcher.should_receive(:matches?).with(actual).and_return(:this_value)
64
+ Spec::Expectations::ExpectationMatcherHandler.handle_matcher(actual, matcher).should == :this_value
65
+ end
66
+ end
67
+ end
68
+
69
+ describe NegativeExpectationMatcherHandler do
70
+ describe "#handle_matcher" do
71
+ it "should ask the matcher if it matches" do
72
+ matcher = mock("matcher")
73
+ actual = Object.new
74
+ matcher.stub!(:negative_failure_message)
75
+ matcher.should_receive(:matches?).with(actual).and_return(false)
76
+ Spec::Expectations::NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
77
+ end
78
+
79
+ it "should return the match value" do
80
+ matcher = mock("matcher")
81
+ actual = Object.new
82
+ matcher.should_receive(:matches?).with(actual).and_return(false)
83
+ matcher.stub!(:negative_failure_message).and_return("ignore")
84
+ Spec::Expectations::NegativeExpectationMatcherHandler.handle_matcher(actual, matcher).should be_false
85
+ end
86
+ end
87
+ end
88
+
89
+ describe ExpectationMatcherHandler do
90
+ include ExampleExpectations
91
+
92
+ it "should handle submitted args" do
93
+ 5.should arbitrary_matcher(:expected => 5)
94
+ 5.should arbitrary_matcher(:expected => "wrong").with(5)
95
+ lambda { 5.should arbitrary_matcher(:expected => 4) }.should fail_with("expected 4, got 5")
96
+ lambda { 5.should arbitrary_matcher(:expected => 5).with(4) }.should fail_with("expected 4, got 5")
97
+ 5.should_not arbitrary_matcher(:expected => 4)
98
+ 5.should_not arbitrary_matcher(:expected => 5).with(4)
99
+ lambda { 5.should_not arbitrary_matcher(:expected => 5) }.should fail_with("expected not 5, got 5")
100
+ lambda { 5.should_not arbitrary_matcher(:expected => 4).with(5) }.should fail_with("expected not 5, got 5")
101
+ end
102
+
103
+ it "should handle the submitted block" do
104
+ 5.should arbitrary_matcher { 5 }
105
+ 5.should arbitrary_matcher(:expected => 4) { 5 }
106
+ 5.should arbitrary_matcher(:expected => 4).with(5) { 3 }
107
+ end
108
+
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,63 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ describe "should have_sym(*args)" do
4
+ it "should pass if #has_sym?(*args) returns true" do
5
+ {:a => "A"}.should have_key(:a)
6
+ end
7
+
8
+ it "should fail if #has_sym?(*args) returns false" do
9
+ lambda {
10
+ {:b => "B"}.should have_key(:a)
11
+ }.should fail_with("expected #has_key?(:a) to return true, got false")
12
+ end
13
+
14
+ it "should fail if target does not respond to #has_sym?" do
15
+ lambda {
16
+ Object.new.should have_key(:a)
17
+ }.should raise_error(NoMethodError)
18
+ end
19
+
20
+ it "should reraise an exception thrown in #has_sym?(*args)" do
21
+ o = Object.new
22
+ def o.has_sym?(*args)
23
+ raise "Funky exception"
24
+ end
25
+ lambda { o.should have_sym(:foo) }.should raise_error("Funky exception")
26
+ end
27
+ end
28
+
29
+ describe "should_not have_sym(*args)" do
30
+ it "should pass if #has_sym?(*args) returns false" do
31
+ {:a => "A"}.should_not have_key(:b)
32
+ end
33
+
34
+ it "should fail if #has_sym?(*args) returns true" do
35
+ lambda {
36
+ {:a => "A"}.should_not have_key(:a)
37
+ }.should fail_with("expected #has_key?(:a) to return false, got true")
38
+ end
39
+
40
+ it "should fail if target does not respond to #has_sym?" do
41
+ lambda {
42
+ Object.new.should have_key(:a)
43
+ }.should raise_error(NoMethodError)
44
+ end
45
+
46
+ it "should reraise an exception thrown in #has_sym?(*args)" do
47
+ o = Object.new
48
+ def o.has_sym?(*args)
49
+ raise "Funky exception"
50
+ end
51
+ lambda { o.should_not have_sym(:foo) }.should raise_error("Funky exception")
52
+ end
53
+ end
54
+
55
+ describe "has" do
56
+ it "should work when the target implements #send" do
57
+ o = {:a => "A"}
58
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
59
+ lambda {
60
+ o.should have_key(:a)
61
+ }.should_not raise_error
62
+ end
63
+ end
@@ -0,0 +1,399 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ share_as :HaveSpecHelper do
4
+ def create_collection_owner_with(n)
5
+ 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)
9
+ end
10
+ owner
11
+ end
12
+ before(:each) do
13
+ unless defined?(::ActiveSupport::Inflector)
14
+ @active_support_was_not_defined
15
+ module ::ActiveSupport
16
+ class Inflector
17
+ def self.pluralize(string)
18
+ string.to_s + 's'
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+
27
+ describe "should have(n).items" do
28
+ include HaveSpecHelper
29
+
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
35
+
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
41
+
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
61
+ end
62
+
63
+ describe 'should have(1).item when ActiveSupport::Inflector is defined' do
64
+ include HaveSpecHelper
65
+
66
+ it 'should pluralize the collection name' do
67
+ owner = create_collection_owner_with(1)
68
+ owner.should have(1).item
69
+ end
70
+
71
+ after(:each) do
72
+ if @active_support_was_not_defined
73
+ Object.__send__ :remove_const, :ActiveSupport
74
+ end
75
+ end
76
+ end
77
+
78
+ describe 'should have(1).item when Inflector is defined' do
79
+ include HaveSpecHelper
80
+
81
+ before(:each) do
82
+ unless defined?(Inflector)
83
+ @inflector_was_not_defined
84
+ class Inflector
85
+ def self.pluralize(string)
86
+ string.to_s + 's'
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ it 'should pluralize the collection name' do
93
+ owner = create_collection_owner_with(1)
94
+ owner.should have(1).item
95
+ end
96
+
97
+ after(:each) do
98
+ if @inflector_was_not_defined
99
+ Object.__send__ :remove_const, :Inflector
100
+ end
101
+ end
102
+ end
103
+
104
+ describe "should have(n).items where result responds to items but returns something other than a collection" do
105
+ it "should provide a meaningful error" do
106
+ owner = Class.new do
107
+ def items
108
+ Object.new
109
+ end
110
+ end.new
111
+ lambda do
112
+ owner.should have(3).items
113
+ end.should raise_error("expected items to be a collection but it does not respond to #length or #size")
114
+ end
115
+ end
116
+
117
+ describe "should_not have(n).items" do
118
+ include HaveSpecHelper
119
+
120
+ it "should pass if target has a collection of items with < n members" do
121
+ owner = create_collection_owner_with(3)
122
+ owner.should_not have(4).items_in_collection_with_length_method
123
+ owner.should_not have(4).items_in_collection_with_size_method
124
+ end
125
+
126
+ it "should pass if target has a collection of items with > n members" do
127
+ owner = create_collection_owner_with(3)
128
+ owner.should_not have(2).items_in_collection_with_length_method
129
+ owner.should_not have(2).items_in_collection_with_size_method
130
+ end
131
+
132
+ it "should fail if target has a collection of items with n members" do
133
+ owner = create_collection_owner_with(3)
134
+ lambda {
135
+ owner.should_not have(3).items_in_collection_with_length_method
136
+ }.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3")
137
+ lambda {
138
+ owner.should_not have(3).items_in_collection_with_size_method
139
+ }.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3")
140
+ end
141
+ end
142
+
143
+ describe "should have_exactly(n).items" do
144
+ include HaveSpecHelper
145
+
146
+ it "should pass if target has a collection of items with n members" do
147
+ owner = create_collection_owner_with(3)
148
+ owner.should have_exactly(3).items_in_collection_with_length_method
149
+ owner.should have_exactly(3).items_in_collection_with_size_method
150
+ end
151
+
152
+ it "should convert :no to 0" do
153
+ owner = create_collection_owner_with(0)
154
+ owner.should have_exactly(:no).items_in_collection_with_length_method
155
+ owner.should have_exactly(:no).items_in_collection_with_size_method
156
+ end
157
+
158
+ it "should fail if target has a collection of items with < n members" do
159
+ owner = create_collection_owner_with(3)
160
+ lambda {
161
+ owner.should have_exactly(4).items_in_collection_with_length_method
162
+ }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
163
+ lambda {
164
+ owner.should have_exactly(4).items_in_collection_with_size_method
165
+ }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
166
+ end
167
+
168
+ it "should fail if target has a collection of items with > n members" do
169
+ owner = create_collection_owner_with(3)
170
+ lambda {
171
+ owner.should have_exactly(2).items_in_collection_with_length_method
172
+ }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
173
+ lambda {
174
+ owner.should have_exactly(2).items_in_collection_with_size_method
175
+ }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
176
+ end
177
+ end
178
+
179
+ describe "should have_at_least(n).items" do
180
+ include HaveSpecHelper
181
+
182
+ it "should pass if target has a collection of items with n members" do
183
+ owner = create_collection_owner_with(3)
184
+ owner.should have_at_least(3).items_in_collection_with_length_method
185
+ owner.should have_at_least(3).items_in_collection_with_size_method
186
+ end
187
+
188
+ it "should pass if target has a collection of items with > n members" do
189
+ owner = create_collection_owner_with(3)
190
+ owner.should have_at_least(2).items_in_collection_with_length_method
191
+ owner.should have_at_least(2).items_in_collection_with_size_method
192
+ end
193
+
194
+ it "should fail if target has a collection of items with < n members" do
195
+ owner = create_collection_owner_with(3)
196
+ lambda {
197
+ owner.should have_at_least(4).items_in_collection_with_length_method
198
+ }.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3")
199
+ lambda {
200
+ owner.should have_at_least(4).items_in_collection_with_size_method
201
+ }.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
202
+ end
203
+
204
+ it "should provide educational negative failure messages" do
205
+ #given
206
+ owner = create_collection_owner_with(3)
207
+ length_matcher = have_at_least(3).items_in_collection_with_length_method
208
+ size_matcher = have_at_least(3).items_in_collection_with_size_method
209
+
210
+ #when
211
+ length_matcher.matches?(owner)
212
+ size_matcher.matches?(owner)
213
+
214
+ #then
215
+ length_matcher.negative_failure_message.should == <<-EOF
216
+ Isn't life confusing enough?
217
+ Instead of having to figure out the meaning of this:
218
+ should_not have_at_least(3).items_in_collection_with_length_method
219
+ We recommend that you use this instead:
220
+ should have_at_most(2).items_in_collection_with_length_method
221
+ EOF
222
+
223
+ size_matcher.negative_failure_message.should == <<-EOF
224
+ Isn't life confusing enough?
225
+ Instead of having to figure out the meaning of this:
226
+ should_not have_at_least(3).items_in_collection_with_size_method
227
+ We recommend that you use this instead:
228
+ should have_at_most(2).items_in_collection_with_size_method
229
+ EOF
230
+ end
231
+ end
232
+
233
+ describe "should have_at_most(n).items" do
234
+ include HaveSpecHelper
235
+
236
+ it "should pass if target has a collection of items with n members" do
237
+ owner = create_collection_owner_with(3)
238
+ owner.should have_at_most(3).items_in_collection_with_length_method
239
+ owner.should have_at_most(3).items_in_collection_with_size_method
240
+ end
241
+
242
+ it "should fail if target has a collection of items with > n members" do
243
+ owner = create_collection_owner_with(3)
244
+ lambda {
245
+ owner.should have_at_most(2).items_in_collection_with_length_method
246
+ }.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3")
247
+ lambda {
248
+ owner.should have_at_most(2).items_in_collection_with_size_method
249
+ }.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
250
+ end
251
+
252
+ it "should pass if target has a collection of items with < n members" do
253
+ owner = create_collection_owner_with(3)
254
+ owner.should have_at_most(4).items_in_collection_with_length_method
255
+ owner.should have_at_most(4).items_in_collection_with_size_method
256
+ end
257
+
258
+ it "should provide educational negative failure messages" do
259
+ #given
260
+ owner = create_collection_owner_with(3)
261
+ length_matcher = have_at_most(3).items_in_collection_with_length_method
262
+ size_matcher = have_at_most(3).items_in_collection_with_size_method
263
+
264
+ #when
265
+ length_matcher.matches?(owner)
266
+ size_matcher.matches?(owner)
267
+
268
+ #then
269
+ length_matcher.negative_failure_message.should == <<-EOF
270
+ Isn't life confusing enough?
271
+ Instead of having to figure out the meaning of this:
272
+ should_not have_at_most(3).items_in_collection_with_length_method
273
+ We recommend that you use this instead:
274
+ should have_at_least(4).items_in_collection_with_length_method
275
+ EOF
276
+
277
+ size_matcher.negative_failure_message.should == <<-EOF
278
+ Isn't life confusing enough?
279
+ Instead of having to figure out the meaning of this:
280
+ should_not have_at_most(3).items_in_collection_with_size_method
281
+ We recommend that you use this instead:
282
+ should have_at_least(4).items_in_collection_with_size_method
283
+ EOF
284
+ end
285
+ end
286
+
287
+ describe "have(n).items(args, block)" do
288
+ it "should pass args to target" do
289
+ target = mock("target")
290
+ target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
291
+ target.should have(3).items("arg1","arg2")
292
+ end
293
+
294
+ it "should pass block to target" do
295
+ target = mock("target")
296
+ block = lambda { 5 }
297
+ target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
298
+ target.should have(3).items("arg1","arg2", block)
299
+ end
300
+ end
301
+
302
+ describe "have(n).items where target IS a collection" do
303
+ it "should reference the number of items IN the collection" do
304
+ [1,2,3].should have(3).items
305
+ end
306
+
307
+ it "should fail when the number of items IN the collection is not as expected" do
308
+ lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
309
+ end
310
+ end
311
+
312
+ describe "have(n).characters where target IS a String" do
313
+ it "should pass if the length is correct" do
314
+ "this string".should have(11).characters
315
+ end
316
+
317
+ it "should fail if the length is incorrect" do
318
+ lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11")
319
+ end
320
+ end
321
+
322
+ describe "have(n).things on an object which is not a collection nor contains one" do
323
+ it "should fail" do
324
+ lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
325
+ end
326
+ end
327
+
328
+ describe Spec::Matchers::Have, "for a collection owner that implements #send" do
329
+ include HaveSpecHelper
330
+
331
+ before(:each) do
332
+ @collection = Object.new
333
+ def @collection.floozles; [1,2] end
334
+ def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
335
+ end
336
+
337
+ it "should work in the straightforward case" do
338
+ lambda {
339
+ @collection.should have(2).floozles
340
+ }.should_not raise_error
341
+ end
342
+
343
+ it "should work when doing automatic pluralization" do
344
+ lambda {
345
+ @collection.should have_at_least(1).floozle
346
+ }.should_not raise_error
347
+ end
348
+
349
+ it "should blow up when the owner doesn't respond to that method" do
350
+ lambda {
351
+ @collection.should have(99).problems
352
+ }.should raise_error(NoMethodError, /problems/)
353
+ end
354
+ end
355
+
356
+ module Spec
357
+ module Matchers
358
+ describe Have do
359
+ it "should have method_missing as private" do
360
+ with_ruby '1.8' do
361
+ Have.private_instance_methods.should include("method_missing")
362
+ end
363
+ with_ruby '1.9' do
364
+ Have.private_instance_methods.should include(:method_missing)
365
+ end
366
+ end
367
+
368
+ describe "respond_to?" do
369
+ before :each do
370
+ @have = Have.new(:foo)
371
+ @a_method_which_have_defines = Have.instance_methods.first
372
+ @a_method_which_object_defines = Object.instance_methods.first
373
+ end
374
+
375
+ it "should be true for a method which Have defines" do
376
+ @have.should respond_to(@a_method_which_have_defines)
377
+ end
378
+
379
+ it "should be true for a method that it's superclass (Object) defines" do
380
+ @have.should respond_to(@a_method_which_object_defines)
381
+ end
382
+
383
+ it "should be false for a method which neither Object nor nor Have defines" do
384
+ @have.should_not respond_to(:foo_bar_baz)
385
+ end
386
+
387
+ it "should be false if the owner doesn't respond to the method" do
388
+ have = Have.new(99)
389
+ have.should_not respond_to(:problems)
390
+ end
391
+
392
+ it "should be true if the owner responds to the method" do
393
+ have = Have.new(:a_symbol)
394
+ have.should respond_to(:to_sym)
395
+ end
396
+ end
397
+ end
398
+ end
399
+ end
@@ -0,0 +1,88 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ describe "should include(expected)" do
4
+ it "should pass if target includes expected" do
5
+ [1,2,3].should include(3)
6
+ "abc".should include("a")
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
12
+
13
+ it "should fail if target does not include expected" do
14
+ lambda {
15
+ [1,2,3].should include(4)
16
+ }.should fail_with("expected [1, 2, 3] to include 4")
17
+ lambda {
18
+ "abc".should include("d")
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|)
23
+ end
24
+ end
25
+
26
+ describe "should include(with, multiple, args)" do
27
+ it "should pass if target includes all items" do
28
+ [1,2,3].should include(1,2,3)
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
34
+
35
+ it "should fail if target does not include any one of the items" do
36
+ lambda {
37
+ [1,2,3].should include(1,2,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|)
45
+ end
46
+ end
47
+
48
+ describe "should_not include(expected)" do
49
+ it "should pass if target does not include expected" do
50
+ [1,2,3].should_not include(4)
51
+ "abc".should_not include("d")
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
57
+
58
+ it "should fail if target includes expected" do
59
+ lambda {
60
+ [1,2,3].should_not include(3)
61
+ }.should fail_with("expected [1, 2, 3] not to include 3")
62
+ lambda {
63
+ "abc".should_not include("c")
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"}|)
87
+ end
88
+ end