rr 1.1.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. checksums.yaml +5 -5
  2. data/Appraisals +6 -0
  3. data/CHANGES.md +102 -1
  4. data/CREDITS.md +5 -0
  5. data/Gemfile +3 -0
  6. data/README.md +91 -110
  7. data/Rakefile +43 -0
  8. data/doc/02_syntax_comparison.md +1 -0
  9. data/gemfiles/ruby_19_rspec_2.gemfile +14 -0
  10. data/gemfiles/ruby_19_rspec_2.gemfile.lock +49 -0
  11. data/gemfiles/ruby_19_rspec_2_rails_4.gemfile +15 -0
  12. data/gemfiles/ruby_19_rspec_2_rails_4.gemfile.lock +119 -0
  13. data/lib/rr/class_instance_method_defined.rb +1 -1
  14. data/lib/rr/core_ext/array.rb +2 -0
  15. data/lib/rr/core_ext/hash.rb +2 -0
  16. data/lib/rr/deprecations.rb +97 -0
  17. data/lib/rr/double.rb +28 -10
  18. data/lib/rr/double_definitions/double_definition.rb +39 -16
  19. data/lib/rr/double_definitions/double_definition_create.rb +5 -5
  20. data/lib/rr/double_definitions/double_definition_create_blank_slate.rb +10 -4
  21. data/lib/rr/double_definitions/double_injections/any_instance_of.rb +1 -1
  22. data/lib/rr/double_definitions/double_injections/instance.rb +2 -2
  23. data/lib/rr/double_definitions/strategies/strategy.rb +27 -8
  24. data/lib/rr/double_definitions/strategies/verification/mock.rb +8 -2
  25. data/lib/rr/double_matches.rb +4 -3
  26. data/lib/rr/dsl.rb +152 -0
  27. data/lib/rr/expectations/any_argument_expectation.rb +4 -4
  28. data/lib/rr/expectations/argument_equality_expectation.rb +43 -5
  29. data/lib/rr/injections/double_injection.rb +67 -19
  30. data/lib/rr/injections/method_missing_injection.rb +37 -6
  31. data/lib/rr/integrations.rb +13 -12
  32. data/lib/rr/integrations/decorator.rb +4 -1
  33. data/lib/rr/integrations/minitest_4.rb +1 -1
  34. data/lib/rr/integrations/minitest_4_active_support.rb +1 -1
  35. data/lib/rr/integrations/rspec/invocation_matcher.rb +0 -8
  36. data/lib/rr/integrations/rspec_2.rb +28 -3
  37. data/lib/rr/keyword_arguments.rb +15 -0
  38. data/lib/rr/method_dispatches/base_method_dispatch.rb +22 -5
  39. data/lib/rr/method_dispatches/method_dispatch.rb +21 -10
  40. data/lib/rr/method_dispatches/method_missing_dispatch.rb +14 -5
  41. data/lib/rr/recorded_call.rb +35 -0
  42. data/lib/rr/recorded_calls.rb +23 -9
  43. data/lib/rr/space.rb +15 -5
  44. data/lib/rr/spy_verification.rb +13 -5
  45. data/lib/rr/version.rb +1 -2
  46. data/lib/rr/wildcard_matchers.rb +10 -10
  47. data/lib/rr/without_autohook.rb +7 -14
  48. data/rr.gemspec +14 -5
  49. data/spec/custom_formatter_for_rspec.rb +18 -0
  50. data/spec/custom_formatter_for_rspec_2.rb +40 -0
  51. data/spec/defines_spec_suite_tasks.rb +57 -0
  52. data/spec/fixtures/rubygems_patch_for_187.rb +598 -0
  53. data/spec/global_helper.rb +38 -0
  54. data/spec/spec.opts +3 -0
  55. data/spec/spec_suite_configuration.rb +126 -0
  56. data/spec/spec_suite_runner.rb +47 -0
  57. data/spec/suites.yml +10 -0
  58. data/spec/suites/rspec_2/functional/any_instance_of_spec.rb +147 -0
  59. data/spec/suites/rspec_2/functional/dont_allow_spec.rb +17 -0
  60. data/spec/suites/rspec_2/functional/mock_bang_spec.rb +20 -0
  61. data/spec/suites/rspec_2/functional/mock_instance_of_spec.rb +14 -0
  62. data/spec/suites/rspec_2/functional/mock_instance_of_strong_spec.rb +15 -0
  63. data/spec/suites/rspec_2/functional/mock_proxy_instance_of_spec.rb +15 -0
  64. data/spec/suites/rspec_2/functional/mock_proxy_spec.rb +14 -0
  65. data/spec/suites/rspec_2/functional/mock_spec.rb +17 -0
  66. data/spec/suites/rspec_2/functional/mock_strong_spec.rb +14 -0
  67. data/spec/suites/rspec_2/functional/received_spec.rb +16 -0
  68. data/spec/suites/rspec_2/functional/spy_spec.rb +102 -0
  69. data/spec/suites/rspec_2/functional/stub_bang_spec.rb +20 -0
  70. data/spec/suites/rspec_2/functional/stub_instance_of_spec.rb +15 -0
  71. data/spec/suites/rspec_2/functional/stub_instance_of_strong_spec.rb +15 -0
  72. data/spec/suites/rspec_2/functional/stub_proxy_instance_of_spec.rb +16 -0
  73. data/spec/suites/rspec_2/functional/stub_proxy_spec.rb +45 -0
  74. data/spec/suites/rspec_2/functional/stub_spec.rb +71 -0
  75. data/spec/suites/rspec_2/functional/stub_strong_spec.rb +15 -0
  76. data/spec/suites/rspec_2/functional/wildcard_matchers_spec.rb +128 -0
  77. data/spec/suites/rspec_2/helper.rb +28 -0
  78. data/spec/suites/rspec_2/integration/minitest_4_spec.rb +109 -0
  79. data/spec/suites/rspec_2/integration/minitest_spec.rb +109 -0
  80. data/spec/suites/rspec_2/spec_helper.rb +3 -0
  81. data/spec/suites/rspec_2/support/matchers/wildcard_matcher_matchers.rb +32 -0
  82. data/spec/suites/rspec_2/support/mixins/double_definition_creator_helpers.rb +173 -0
  83. data/spec/suites/rspec_2/support/mixins/mock_definition_creator_helpers.rb +45 -0
  84. data/spec/suites/rspec_2/support/mixins/proxy_definition_creator_helpers.rb +33 -0
  85. data/spec/suites/rspec_2/support/mixins/stub_creator_helpers.rb +43 -0
  86. data/spec/suites/rspec_2/support/mixins/stub_definition_creator_helpers.rb +45 -0
  87. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_never_called_qualifier.rb +39 -0
  88. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_times_called_qualifier.rb +50 -0
  89. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_without_qualifiers.rb +131 -0
  90. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/dont_allow.rb +148 -0
  91. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of.rb +26 -0
  92. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of_strong.rb +28 -0
  93. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_proxy.rb +11 -0
  94. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_strong.rb +37 -0
  95. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mocking.rb +107 -0
  96. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of.rb +32 -0
  97. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of_strong.rb +39 -0
  98. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_proxy.rb +11 -0
  99. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_strong.rb +37 -0
  100. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stubbing.rb +57 -0
  101. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/array_flatten_bug.rb +35 -0
  102. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/block_form.rb +31 -0
  103. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/comparing_arity.rb +63 -0
  104. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/object_is_proxy.rb +43 -0
  105. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/sequential_invocations.rb +26 -0
  106. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/setting_implementation.rb +51 -0
  107. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/yields.rb +81 -0
  108. data/spec/suites/rspec_2/support/shared_examples/space.rb +13 -0
  109. data/spec/suites/rspec_2/support/shared_examples/times_called_expectation.rb +9 -0
  110. data/spec/suites/rspec_2/unit/core_ext/array_spec.rb +39 -0
  111. data/spec/suites/rspec_2/unit/core_ext/enumerable_spec.rb +53 -0
  112. data/spec/suites/rspec_2/unit/core_ext/hash_spec.rb +55 -0
  113. data/spec/suites/rspec_2/unit/core_ext/range_spec.rb +41 -0
  114. data/spec/suites/rspec_2/unit/core_ext/regexp_spec.rb +41 -0
  115. data/spec/suites/rspec_2/unit/deprecations_spec.rb +27 -0
  116. data/spec/suites/rspec_2/unit/double_definitions/child_double_definition_create_spec.rb +114 -0
  117. data/spec/suites/rspec_2/unit/double_definitions/double_definition_create_blank_slate_spec.rb +93 -0
  118. data/spec/suites/rspec_2/unit/double_definitions/double_definition_create_spec.rb +446 -0
  119. data/spec/suites/rspec_2/unit/dsl/double_creators_spec.rb +133 -0
  120. data/spec/suites/rspec_2/unit/dsl/space_spec.rb +99 -0
  121. data/spec/suites/rspec_2/unit/dsl/wildcard_matchers_spec.rb +67 -0
  122. data/spec/suites/rspec_2/unit/errors/rr_error_spec.rb +67 -0
  123. data/spec/suites/rspec_2/unit/expectations/any_argument_expectation_spec.rb +48 -0
  124. data/spec/suites/rspec_2/unit/expectations/anything_argument_equality_expectation_spec.rb +14 -0
  125. data/spec/suites/rspec_2/unit/expectations/argument_equality_expectation_spec.rb +135 -0
  126. data/spec/suites/rspec_2/unit/expectations/boolean_argument_equality_expectation_spec.rb +30 -0
  127. data/spec/suites/rspec_2/unit/expectations/hash_including_argument_equality_expectation_spec.rb +92 -0
  128. data/spec/suites/rspec_2/unit/expectations/satisfy_argument_equality_expectation_spec.rb +61 -0
  129. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/any_times_matcher_spec.rb +22 -0
  130. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/at_least_matcher_spec.rb +37 -0
  131. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/at_most_matcher_spec.rb +43 -0
  132. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/integer_matcher_spec.rb +58 -0
  133. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/proc_matcher_spec.rb +35 -0
  134. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/range_matcher_spec.rb +39 -0
  135. data/spec/suites/rspec_2/unit/hash_with_object_id_key_spec.rb +88 -0
  136. data/spec/suites/rspec_2/unit/injections/double_injection/double_injection_spec.rb +533 -0
  137. data/spec/suites/rspec_2/unit/injections/double_injection/double_injection_verify_spec.rb +32 -0
  138. data/spec/suites/rspec_2/unit/integrations/rspec/invocation_matcher_spec.rb +297 -0
  139. data/spec/suites/rspec_2/unit/integrations/rspec_spec.rb +70 -0
  140. data/spec/suites/rspec_2/unit/rr_spec.rb +28 -0
  141. data/spec/suites/rspec_2/unit/space_spec.rb +598 -0
  142. data/spec/suites/rspec_2/unit/spy_verification_spec.rb +133 -0
  143. data/spec/suites/rspec_2/unit/times_called_matchers/any_times_matcher_spec.rb +46 -0
  144. data/spec/suites/rspec_2/unit/times_called_matchers/at_least_matcher_spec.rb +54 -0
  145. data/spec/suites/rspec_2/unit/times_called_matchers/at_most_matcher_spec.rb +69 -0
  146. data/spec/suites/rspec_2/unit/times_called_matchers/integer_matcher_spec.rb +69 -0
  147. data/spec/suites/rspec_2/unit/times_called_matchers/proc_matcher_spec.rb +54 -0
  148. data/spec/suites/rspec_2/unit/times_called_matchers/range_matcher_spec.rb +75 -0
  149. data/spec/suites/rspec_2/unit/times_called_matchers/times_called_matcher_spec.rb +117 -0
  150. data/spec/suites/rspec_2/unit/wildcard_matchers/anything_spec.rb +33 -0
  151. data/spec/suites/rspec_2/unit/wildcard_matchers/boolean_spec.rb +45 -0
  152. data/spec/suites/rspec_2/unit/wildcard_matchers/duck_type_spec.rb +64 -0
  153. data/spec/suites/rspec_2/unit/wildcard_matchers/hash_including_spec.rb +64 -0
  154. data/spec/suites/rspec_2/unit/wildcard_matchers/is_a_spec.rb +55 -0
  155. data/spec/suites/rspec_2/unit/wildcard_matchers/numeric_spec.rb +46 -0
  156. data/spec/suites/rspec_2/unit/wildcard_matchers/satisfy_spec.rb +57 -0
  157. data/spec/support/adapter.rb +22 -0
  158. data/spec/support/adapter_tests/base.rb +45 -0
  159. data/spec/support/adapter_tests/minitest.rb +7 -0
  160. data/spec/support/adapter_tests/rspec.rb +70 -0
  161. data/spec/support/adapter_tests/test_unit.rb +47 -0
  162. data/spec/support/command_runner.rb +105 -0
  163. data/spec/support/generator.rb +56 -0
  164. data/spec/support/integration_tests/base.rb +64 -0
  165. data/spec/support/integration_tests/rails.rb +60 -0
  166. data/spec/support/integration_tests/rails_minitest.rb +13 -0
  167. data/spec/support/integration_tests/rails_rspec.rb +13 -0
  168. data/spec/support/integration_tests/rails_test_unit.rb +13 -0
  169. data/spec/support/integration_tests/rails_test_unit_like.rb +13 -0
  170. data/spec/support/integration_tests/ruby.rb +7 -0
  171. data/spec/support/integration_tests/ruby_minitest.rb +13 -0
  172. data/spec/support/integration_tests/ruby_rspec.rb +13 -0
  173. data/spec/support/integration_tests/ruby_test_unit.rb +13 -0
  174. data/spec/support/matchers/be_a_subset_of_matcher.rb +24 -0
  175. data/spec/support/project/cucumber.rb +50 -0
  176. data/spec/support/project/generator.rb +348 -0
  177. data/spec/support/project/minitest.rb +39 -0
  178. data/spec/support/project/rails.rb +199 -0
  179. data/spec/support/project/rails_minitest.rb +17 -0
  180. data/spec/support/project/rails_rspec.rb +50 -0
  181. data/spec/support/project/rails_test_unit.rb +17 -0
  182. data/spec/support/project/rails_test_unit_like.rb +17 -0
  183. data/spec/support/project/rspec.rb +69 -0
  184. data/spec/support/project/ruby.rb +34 -0
  185. data/spec/support/project/ruby_minitest.rb +11 -0
  186. data/spec/support/project/ruby_rspec.rb +29 -0
  187. data/spec/support/project/ruby_test_unit.rb +11 -0
  188. data/spec/support/project/ruby_test_unit_like.rb +21 -0
  189. data/spec/support/project/test_unit.rb +29 -0
  190. data/spec/support/project/test_unit_like.rb +7 -0
  191. data/spec/support/project/tests_runner.rb +22 -0
  192. data/spec/support/test.sqlite3 +0 -0
  193. data/spec/support/test_case/generator.rb +53 -0
  194. data/spec/support/test_case/minitest.rb +13 -0
  195. data/spec/support/test_case/rspec.rb +19 -0
  196. data/spec/support/test_case/test_unit.rb +21 -0
  197. data/spec/support/test_file/generator.rb +120 -0
  198. data/spec/support/test_file/minitest.rb +19 -0
  199. data/spec/support/test_file/rails_minitest.rb +7 -0
  200. data/spec/support/test_file/rails_rspec.rb +12 -0
  201. data/spec/support/test_file/rails_test_unit.rb +25 -0
  202. data/spec/support/test_file/rspec.rb +33 -0
  203. data/spec/support/test_file/test_unit.rb +36 -0
  204. data/spec/support/test_helper/generator.rb +27 -0
  205. data/spec/support/test_helper/minitest.rb +7 -0
  206. data/spec/support/test_helper/rails.rb +31 -0
  207. data/spec/support/test_helper/rails_minitest.rb +7 -0
  208. data/spec/support/test_helper/rails_rspec.rb +25 -0
  209. data/spec/support/test_helper/rails_test_unit.rb +23 -0
  210. data/spec/support/test_helper/rspec.rb +7 -0
  211. data/spec/support/test_helper/ruby.rb +31 -0
  212. data/spec/support/test_helper/test_unit.rb +7 -0
  213. metadata +240 -19
  214. data/VERSION +0 -1
  215. data/lib/rr/adapters.rb +0 -44
  216. data/lib/rr/adapters/rr_methods.rb +0 -142
  217. data/lib/rr/integrations/rspec_1.rb +0 -46
  218. data/lib/rr/integrations/test_unit_1.rb +0 -63
  219. data/lib/rr/integrations/test_unit_2.rb +0 -15
  220. data/lib/rr/integrations/test_unit_200.rb +0 -27
  221. data/lib/rr/integrations/test_unit_200_active_support.rb +0 -25
  222. data/lib/rr/integrations/test_unit_2_active_support.rb +0 -38
  223. data/lib/rr/proc_from_block.rb +0 -11
@@ -0,0 +1,117 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
+
3
+ module RR
4
+ module TimesCalledMatchers
5
+ describe TimesCalledMatcher do
6
+ describe ".create" do
7
+ describe "when passed a AnyTimesMatcher" do
8
+ it "returns the passed in argument" do
9
+ matcher = AnyTimesMatcher.new
10
+ expect(TimesCalledMatcher.create(matcher)).to equal matcher
11
+ end
12
+ end
13
+
14
+ describe "when passed a AtLeastMatcher" do
15
+ it "returns the passed in argument" do
16
+ matcher = AtLeastMatcher.new(5)
17
+ expect(TimesCalledMatcher.create(matcher)).to equal matcher
18
+ end
19
+ end
20
+
21
+ describe "when passed a AtMostMatcher" do
22
+ it "returns the passed in argument" do
23
+ matcher = AtMostMatcher.new(5)
24
+ expect(TimesCalledMatcher.create(matcher)).to equal matcher
25
+ end
26
+ end
27
+
28
+ describe "when passed a IntegerMatcher" do
29
+ it "returns the passed in argument" do
30
+ matcher = IntegerMatcher.new(5)
31
+ expect(TimesCalledMatcher.create(matcher)).to equal matcher
32
+ end
33
+ end
34
+
35
+ describe "when passed a Integer" do
36
+ it "returns IntegerMatcher" do
37
+ expect(TimesCalledMatcher.create(5)).to eq IntegerMatcher.new(5)
38
+ end
39
+ end
40
+
41
+ describe "when passed a ProcMatcher" do
42
+ it "returns the passed in argument" do
43
+ matcher = ProcMatcher.new(lambda {|other| other == 5})
44
+ expect(TimesCalledMatcher.create(matcher)).to equal matcher
45
+ end
46
+ end
47
+
48
+ describe "when passed a Lambda" do
49
+ it "returns ProcMatcher" do
50
+ value = lambda {|other| other == 5}
51
+ expect(TimesCalledMatcher.create(value)).to eq ProcMatcher.new(value)
52
+ end
53
+ end
54
+
55
+ describe "when passed a IntegerMatcher" do
56
+ it "returns the passed in argument" do
57
+ matcher = RangeMatcher.new(2..4)
58
+ expect(TimesCalledMatcher.create(matcher)).to equal matcher
59
+ end
60
+ end
61
+
62
+ describe "when passed a Integer" do
63
+ it "returns RangeMatcher" do
64
+ expect(TimesCalledMatcher.create(2..4)).to eq RangeMatcher.new(2..4)
65
+ end
66
+ end
67
+
68
+ describe "when passed a TimesCalledMatcher" do
69
+ it "returns the passed in argument" do
70
+ matcher = TimesCalledMatcher.new(5)
71
+ expect(TimesCalledMatcher.create(matcher)).to equal matcher
72
+ end
73
+ end
74
+
75
+ describe "when passed an unsupported type" do
76
+ it "raises an ArgumentError" do
77
+ matcher = Object.new
78
+ expect {
79
+ TimesCalledMatcher.create(matcher)
80
+ }.to raise_error(ArgumentError, "There is no TimesCalledMatcher for #{matcher.inspect}.")
81
+ end
82
+ end
83
+ end
84
+
85
+ describe "#error_message" do
86
+ before do
87
+ @times = 3
88
+ @matcher = TimesCalledMatcher.new(@times)
89
+ end
90
+
91
+ it "has an error message" do
92
+ expect(@matcher.error_message(5)).to eq \
93
+ "Called 5 times.\nExpected 3 times."
94
+ end
95
+ end
96
+
97
+ describe "#==" do
98
+ before do
99
+ @times = 3
100
+ @matcher = TimesCalledMatcher.new(@times)
101
+ end
102
+
103
+ it "returns true when other is the same class and times are ==" do
104
+ expect(@matcher).to eq TimesCalledMatcher.new(@times)
105
+ end
106
+
107
+ it "returns false when other is a different class and times are ==" do
108
+ expect(@matcher).to_not eq IntegerMatcher.new(@times)
109
+ end
110
+
111
+ it "returns false when is the same class and times are not ==" do
112
+ expect(@matcher).to_not eq TimesCalledMatcher.new(1)
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ module RR
4
+ module WildcardMatchers
5
+ describe Anything do
6
+ include WildcardMatcherMatchers
7
+
8
+ describe '#wildcard_match?' do
9
+ it "always returns true when given any object" do
10
+ should wildcard_match(Object.new)
11
+ should wildcard_match(:symbol)
12
+ should wildcard_match([1, 2, 3])
13
+ end
14
+ end
15
+
16
+ describe '#==' do
17
+ it "returns true when given an Anything object" do
18
+ should equal_match(described_class.new)
19
+ end
20
+
21
+ it "returns false when not given an Anything object whatsoever" do
22
+ should_not equal_match(:whatever)
23
+ end
24
+ end
25
+
26
+ describe "#inspect" do
27
+ it "returns the correct string" do
28
+ expect(subject.inspect).to eq "anything"
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,45 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ module RR
4
+ module WildcardMatchers
5
+ describe Boolean do
6
+ include WildcardMatcherMatchers
7
+
8
+ describe '#wildcard_match?' do
9
+ it "returns true when given a Boolean" do
10
+ should wildcard_match(described_class.new)
11
+ end
12
+
13
+ it "returns true when given a boolean" do
14
+ should wildcard_match(true)
15
+ should wildcard_match(false)
16
+ end
17
+
18
+ it "returns false when not given a boolean" do
19
+ should_not wildcard_match(:something_else)
20
+ end
21
+ end
22
+
23
+ describe "#==" do
24
+ it "returns true when given a Boolean" do
25
+ should equal_match(described_class.new)
26
+ end
27
+
28
+ it "returns false even when given a boolean that wildcard matches this Boolean" do
29
+ should_not equal_match(true)
30
+ should_not equal_match(false)
31
+ end
32
+
33
+ it "returns false when not given a Boolean whatsoever" do
34
+ should_not equal_match(:something_else)
35
+ end
36
+ end
37
+
38
+ describe "#inspect" do
39
+ it "returns the correct string" do
40
+ expect(subject.inspect).to eq "boolean"
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+ require 'ostruct'
3
+
4
+ module RR
5
+ module WildcardMatchers
6
+ describe DuckType do
7
+ include WildcardMatcherMatchers
8
+
9
+ describe '#wildcard_match?' do
10
+ subject { described_class.new(:quack, :waddle) }
11
+
12
+ it "returns true when given DuckType is a copy of this DuckType" do
13
+ matcher2 = described_class.new(:quack, :waddle)
14
+ should wildcard_match(matcher2)
15
+ end
16
+
17
+ it "returns true when given object responds to all methods" do
18
+ object = OpenStruct.new(:quack => 'x', :waddle => 'x')
19
+ should wildcard_match(object)
20
+ end
21
+
22
+ it "returns false when given object responds to only some methods" do
23
+ object = OpenStruct.new(:quack => 'x')
24
+ should_not wildcard_match(object)
25
+ end
26
+
27
+ it "returns false when given object responds to no methods" do
28
+ object = Object.new
29
+ should_not wildcard_match(object)
30
+ end
31
+ end
32
+
33
+ describe '#==' do
34
+ subject { described_class.new(:quack, :waddle) }
35
+
36
+ it "returns true when given DuckType is a copy of this DuckType" do
37
+ matcher2 = described_class.new(:quack, :waddle)
38
+ should equal_match(matcher2)
39
+ end
40
+
41
+ it "returns false when given DuckType is not a copy of this DuckType" do
42
+ matcher2 = described_class.new(:something_else)
43
+ should_not equal_match(matcher2)
44
+ end
45
+
46
+ it "returns false even when given a DuckType that wildcard matches this DuckType" do
47
+ object = OpenStruct.new(:quack => 'x', :waddle => 'x')
48
+ should_not equal_match(object)
49
+ end
50
+
51
+ it "returns false when not given a DuckType object whatsoever" do
52
+ should_not equal_match(:something_else)
53
+ end
54
+ end
55
+
56
+ describe "#inspect" do
57
+ it "returns the correct string" do
58
+ matcher = described_class.new(:quack, :waddle)
59
+ expect(matcher.inspect).to eq "duck_type(:quack, :waddle)"
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ module RR
4
+ module WildcardMatchers
5
+ describe HashIncluding do
6
+ include WildcardMatcherMatchers
7
+
8
+ describe '#wildcard_match?' do
9
+ subject { described_class.new({:foo => 'x'}) }
10
+
11
+ it "returns true when given object is a copy of this HashIncluding" do
12
+ matcher2 = described_class.new({:foo => 'x'})
13
+ should wildcard_match(matcher2)
14
+ end
15
+
16
+ it "returns true when given hash is contained within expected hash" do
17
+ should wildcard_match({:foo => 'x', :bar => 'y'})
18
+ end
19
+
20
+ it "returns false when given object is not a Hash" do
21
+ should_not wildcard_match('whatever')
22
+ should_not wildcard_match(:whatever)
23
+ should_not wildcard_match([1, 2, 3])
24
+ end
25
+
26
+ it "returns false when given object is a hash but is not contained within expected hash" do
27
+ should_not wildcard_match({:fiz => 'buz'})
28
+ end
29
+ end
30
+
31
+ describe '#==' do
32
+ subject { described_class.new({:foo => 'x'}) }
33
+
34
+ it "returns true when given object is a copy of this HashIncluding" do
35
+ matcher2 = described_class.new({:foo => 'x'})
36
+ should equal_match(matcher2)
37
+ end
38
+
39
+ it "returns false when it is a HashIncluding but not with the same hash" do
40
+ matcher2 = described_class.new({:x => 'y'})
41
+ should_not equal_match(matcher2)
42
+ end
43
+
44
+ it "returns false even when given a hash that wildcard matches this HashIncluding" do
45
+ should_not equal_match({:foo => 'x'})
46
+ end
47
+
48
+ it "returns false when not given a HashIncluding whatsoever" do
49
+ should_not equal_match(:something_else)
50
+ end
51
+ end
52
+
53
+ describe "#inspect" do
54
+ it "returns the correct string" do
55
+ matcher = described_class.new({:foo => 'x', :bar => 'y'})
56
+ str = matcher.inspect
57
+ expect(str).to include("hash_including(")
58
+ expect(str).to include(':foo=>"x"')
59
+ expect(str).to include(':bar=>"y"')
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,55 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ module RR
4
+ module WildcardMatchers
5
+ describe IsA do
6
+ include WildcardMatcherMatchers
7
+
8
+ describe '#wildcard_match?' do
9
+ subject { described_class.new(Symbol) }
10
+
11
+ it "returns true when given IsA is a copy of this IsA" do
12
+ matcher2 = described_class.new(Symbol)
13
+ should wildcard_match(matcher2)
14
+ end
15
+
16
+ it "returns true when given an object that is is_a?(klass)" do
17
+ should wildcard_match(:a_symbol)
18
+ end
19
+
20
+ it "returns false if not given an object that is is_a?(klass)" do
21
+ should_not wildcard_match('a string')
22
+ end
23
+ end
24
+
25
+ describe '#==' do
26
+ subject { described_class.new(Symbol) }
27
+
28
+ it "returns true when given IsA is a copy of this IsA" do
29
+ matcher2 = described_class.new(Symbol)
30
+ should equal_match(matcher2)
31
+ end
32
+
33
+ it "returns false when given IsA is not a copy of this IsA" do
34
+ matcher2 = described_class.new(String)
35
+ should_not equal_match(matcher2)
36
+ end
37
+
38
+ it "returns false even when given an object that wildcard matches this IsA" do
39
+ should_not equal_match(:something_else)
40
+ end
41
+
42
+ it "returns false when not given an IsA whatsoever" do
43
+ should_not equal_match([1, 2, 3])
44
+ end
45
+ end
46
+
47
+ describe "#inspect" do
48
+ it "returns the correct string" do
49
+ matcher = described_class.new(Symbol)
50
+ expect(matcher.inspect).to eq "is_a(Symbol)"
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,46 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
+
3
+ module RR
4
+ module WildcardMatchers
5
+ describe Numeric do
6
+ include WildcardMatcherMatchers
7
+
8
+ describe '#wildcard_match?' do
9
+ it "returns true when given Numeric is a copy of this Numeric" do
10
+ matcher2 = described_class.new
11
+ should wildcard_match(matcher2)
12
+ end
13
+
14
+ it "returns true when given a Numeric" do
15
+ should wildcard_match(99)
16
+ end
17
+
18
+ it "returns false otherwise" do
19
+ should_not wildcard_match(:not_a_numeric)
20
+ end
21
+ end
22
+
23
+ describe '#==' do
24
+ it "returns true when given Numeric is a copy of this Numeric" do
25
+ matcher2 = described_class.new
26
+ should equal_match(matcher2)
27
+ end
28
+
29
+ it "returns false even when given an object that wildcard matches this Numeric" do
30
+ should_not equal_match(99)
31
+ end
32
+
33
+ it "returns false when not a Numeric whatsoever" do
34
+ should_not equal_match(:something_else)
35
+ end
36
+ end
37
+
38
+ describe "#inspect" do
39
+ it "returns the correct string" do
40
+ matcher = described_class.new
41
+ expect(matcher.inspect).to eq "numeric"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,57 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ module RR
4
+ module WildcardMatchers
5
+ describe Satisfy do
6
+ include WildcardMatcherMatchers
7
+
8
+ describe '#wildcard_match?' do
9
+ let(:expectation_proc) { lambda {|v| v == 'x' } }
10
+ subject { described_class.new(expectation_proc) }
11
+
12
+ it "returns true if given Satisfy is a copy of this Satisfy" do
13
+ matcher2 = described_class.new(expectation_proc)
14
+ should wildcard_match(matcher2)
15
+ end
16
+
17
+ it "returns true if the given object matches the block" do
18
+ should wildcard_match('x')
19
+ end
20
+
21
+ it "returns false otherwise" do
22
+ should_not wildcard_match('y')
23
+ end
24
+ end
25
+
26
+ describe '#==' do
27
+ let(:expectation_proc) { lambda {|v| v == 'x' } }
28
+ subject { described_class.new(expectation_proc) }
29
+
30
+ it "returns true if given Satisfy is a copy of this Satisfy" do
31
+ matcher2 = described_class.new(expectation_proc)
32
+ should equal_match(matcher2)
33
+ end
34
+
35
+ it "returns false if given Satisfy is not a copy of this Satisfy" do
36
+ matcher2 = described_class.new(lambda {|v| })
37
+ should_not equal_match(matcher2)
38
+ end
39
+
40
+ it "returns false even when given an object that wildcard matches this Satisfy" do
41
+ should_not equal_match('x')
42
+ end
43
+
44
+ it "returns false when given object isn't even a Satisfy" do
45
+ should_not equal_match(:something_else)
46
+ end
47
+ end
48
+
49
+ describe '#inspect' do
50
+ it "returns the correct string" do
51
+ matcher = Satisfy.new(lambda {})
52
+ expect(matcher.inspect).to eq "satisfy { ... }"
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end