rr 1.1.1 → 1.1.2.rc1

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 (181) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +46 -0
  3. data/CHANGES.md +21 -1
  4. data/Gemfile +19 -0
  5. data/README.md +91 -106
  6. data/Rakefile +55 -0
  7. data/gemfiles/ruby_18_rspec_1.gemfile +14 -0
  8. data/gemfiles/ruby_18_rspec_1.gemfile.lock +38 -0
  9. data/gemfiles/ruby_18_rspec_1_rails_2.gemfile +18 -0
  10. data/gemfiles/ruby_18_rspec_1_rails_2.gemfile.lock +64 -0
  11. data/gemfiles/ruby_19_rspec_2.gemfile +14 -0
  12. data/gemfiles/ruby_19_rspec_2.gemfile.lock +49 -0
  13. data/gemfiles/ruby_19_rspec_2_rails_3.gemfile +15 -0
  14. data/gemfiles/ruby_19_rspec_2_rails_3.gemfile.lock +123 -0
  15. data/gemfiles/ruby_19_rspec_2_rails_4.gemfile +15 -0
  16. data/gemfiles/ruby_19_rspec_2_rails_4.gemfile.lock +119 -0
  17. data/lib/rr/adapters.rb +4 -14
  18. data/lib/rr/integrations.rb +13 -12
  19. data/lib/rr/integrations/decorator.rb +4 -1
  20. data/lib/rr/integrations/rspec_2.rb +6 -1
  21. data/lib/rr/integrations/test_unit_1.rb +2 -2
  22. data/lib/rr/integrations/test_unit_2.rb +3 -1
  23. data/lib/rr/version.rb +1 -2
  24. data/lib/rr/without_autohook.rb +1 -1
  25. data/rr.gemspec +6 -2
  26. data/spec/custom_formatter_for_rspec.rb +18 -0
  27. data/spec/custom_formatter_for_rspec_2.rb +40 -0
  28. data/spec/defines_spec_suite_tasks.rb +45 -0
  29. data/spec/fixtures/rubygems_patch_for_187.rb +598 -0
  30. data/spec/global_helper.rb +33 -0
  31. data/spec/spec.opts +3 -0
  32. data/spec/spec_suite_configuration.rb +132 -0
  33. data/spec/spec_suite_runner.rb +47 -0
  34. data/spec/suites.yml +24 -0
  35. data/spec/suites/rspec_1/helper.rb +24 -0
  36. data/spec/suites/rspec_1/integration/rspec_1_spec.rb +93 -0
  37. data/spec/suites/rspec_1/integration/test_unit_1_spec.rb +102 -0
  38. data/spec/suites/rspec_1/integration/test_unit_2_spec.rb +109 -0
  39. data/spec/suites/rspec_1/spec_helper.rb +3 -0
  40. data/spec/suites/rspec_1_rails_2/integration/astc_rails_2_spec.rb +141 -0
  41. data/spec/suites/rspec_1_rails_2/integration/rspec_1_rails_2_spec.rb +132 -0
  42. data/spec/suites/rspec_1_rails_2/integration/test_unit_1_rails_2_spec.rb +141 -0
  43. data/spec/suites/rspec_1_rails_2/integration/test_unit_2_rails_2_spec.rb +148 -0
  44. data/spec/suites/rspec_1_rails_2/spec_helper.rb +3 -0
  45. data/spec/suites/rspec_2/functional/any_instance_of_spec.rb +47 -0
  46. data/spec/suites/rspec_2/functional/dont_allow_spec.rb +12 -0
  47. data/spec/suites/rspec_2/functional/dsl_spec.rb +13 -0
  48. data/spec/suites/rspec_2/functional/instance_of_spec.rb +14 -0
  49. data/spec/suites/rspec_2/functional/mock_spec.rb +241 -0
  50. data/spec/suites/rspec_2/functional/proxy_spec.rb +136 -0
  51. data/spec/suites/rspec_2/functional/spy_spec.rb +41 -0
  52. data/spec/suites/rspec_2/functional/strong_spec.rb +79 -0
  53. data/spec/suites/rspec_2/functional/stub_spec.rb +190 -0
  54. data/spec/suites/rspec_2/functional/wildcard_matchers_spec.rb +128 -0
  55. data/spec/suites/rspec_2/helper.rb +28 -0
  56. data/spec/suites/rspec_2/integration/minitest_4_spec.rb +109 -0
  57. data/spec/suites/rspec_2/integration/minitest_spec.rb +109 -0
  58. data/spec/suites/rspec_2/integration/rspec_2_spec.rb +133 -0
  59. data/spec/suites/rspec_2/integration/test_unit_200_spec.rb +102 -0
  60. data/spec/suites/rspec_2/integration/test_unit_2_spec.rb +109 -0
  61. data/spec/suites/rspec_2/spec_helper.rb +3 -0
  62. data/spec/suites/rspec_2/support/matchers/wildcard_matcher_matchers.rb +32 -0
  63. data/spec/suites/rspec_2/support/shared_examples/space.rb +13 -0
  64. data/spec/suites/rspec_2/support/shared_examples/times_called_expectation.rb +9 -0
  65. data/spec/suites/rspec_2/unit/adapters/rr_methods/double_creators_spec.rb +135 -0
  66. data/spec/suites/rspec_2/unit/adapters/rr_methods/space_spec.rb +101 -0
  67. data/spec/suites/rspec_2/unit/adapters/rr_methods/wildcard_matchers_spec.rb +69 -0
  68. data/spec/suites/rspec_2/unit/core_ext/array_spec.rb +39 -0
  69. data/spec/suites/rspec_2/unit/core_ext/enumerable_spec.rb +81 -0
  70. data/spec/suites/rspec_2/unit/core_ext/hash_spec.rb +55 -0
  71. data/spec/suites/rspec_2/unit/core_ext/range_spec.rb +41 -0
  72. data/spec/suites/rspec_2/unit/core_ext/regexp_spec.rb +41 -0
  73. data/spec/suites/rspec_2/unit/double_definitions/child_double_definition_create_spec.rb +114 -0
  74. data/spec/suites/rspec_2/unit/double_definitions/double_definition_create_blank_slate_spec.rb +93 -0
  75. data/spec/suites/rspec_2/unit/double_definitions/double_definition_create_spec.rb +446 -0
  76. data/spec/suites/rspec_2/unit/errors/rr_error_spec.rb +67 -0
  77. data/spec/suites/rspec_2/unit/expectations/any_argument_expectation_spec.rb +48 -0
  78. data/spec/suites/rspec_2/unit/expectations/anything_argument_equality_expectation_spec.rb +14 -0
  79. data/spec/suites/rspec_2/unit/expectations/argument_equality_expectation_spec.rb +135 -0
  80. data/spec/suites/rspec_2/unit/expectations/boolean_argument_equality_expectation_spec.rb +30 -0
  81. data/spec/suites/rspec_2/unit/expectations/hash_including_argument_equality_expectation_spec.rb +82 -0
  82. data/spec/suites/rspec_2/unit/expectations/satisfy_argument_equality_expectation_spec.rb +61 -0
  83. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/any_times_matcher_spec.rb +22 -0
  84. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/at_least_matcher_spec.rb +37 -0
  85. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/at_most_matcher_spec.rb +43 -0
  86. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/integer_matcher_spec.rb +58 -0
  87. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/proc_matcher_spec.rb +35 -0
  88. data/spec/suites/rspec_2/unit/expectations/times_called_expectation/range_matcher_spec.rb +39 -0
  89. data/spec/suites/rspec_2/unit/hash_with_object_id_key_spec.rb +88 -0
  90. data/spec/suites/rspec_2/unit/injections/double_injection/double_injection_spec.rb +545 -0
  91. data/spec/suites/rspec_2/unit/injections/double_injection/double_injection_verify_spec.rb +32 -0
  92. data/spec/suites/rspec_2/unit/integrations/rspec/invocation_matcher_spec.rb +297 -0
  93. data/spec/suites/rspec_2/unit/integrations/rspec_spec.rb +85 -0
  94. data/spec/suites/rspec_2/unit/proc_from_block_spec.rb +14 -0
  95. data/spec/suites/rspec_2/unit/rr_spec.rb +28 -0
  96. data/spec/suites/rspec_2/unit/space_spec.rb +595 -0
  97. data/spec/suites/rspec_2/unit/spy_verification_spec.rb +133 -0
  98. data/spec/suites/rspec_2/unit/times_called_matchers/any_times_matcher_spec.rb +46 -0
  99. data/spec/suites/rspec_2/unit/times_called_matchers/at_least_matcher_spec.rb +54 -0
  100. data/spec/suites/rspec_2/unit/times_called_matchers/at_most_matcher_spec.rb +69 -0
  101. data/spec/suites/rspec_2/unit/times_called_matchers/integer_matcher_spec.rb +69 -0
  102. data/spec/suites/rspec_2/unit/times_called_matchers/proc_matcher_spec.rb +54 -0
  103. data/spec/suites/rspec_2/unit/times_called_matchers/range_matcher_spec.rb +75 -0
  104. data/spec/suites/rspec_2/unit/times_called_matchers/times_called_matcher_spec.rb +117 -0
  105. data/spec/suites/rspec_2/unit/wildcard_matchers/anything_spec.rb +33 -0
  106. data/spec/suites/rspec_2/unit/wildcard_matchers/boolean_spec.rb +45 -0
  107. data/spec/suites/rspec_2/unit/wildcard_matchers/duck_type_spec.rb +64 -0
  108. data/spec/suites/rspec_2/unit/wildcard_matchers/hash_including_spec.rb +64 -0
  109. data/spec/suites/rspec_2/unit/wildcard_matchers/is_a_spec.rb +55 -0
  110. data/spec/suites/rspec_2/unit/wildcard_matchers/numeric_spec.rb +46 -0
  111. data/spec/suites/rspec_2/unit/wildcard_matchers/satisfy_spec.rb +57 -0
  112. data/spec/suites/rspec_2_rails_3/integration/astc_rails_3_spec.rb +141 -0
  113. data/spec/suites/rspec_2_rails_3/integration/minitest_4_rails_3_spec.rb +148 -0
  114. data/spec/suites/rspec_2_rails_3/integration/rspec_2_rails_3_spec.rb +172 -0
  115. data/spec/suites/rspec_2_rails_3/integration/test_unit_200_rails_3_spec.rb +141 -0
  116. data/spec/suites/rspec_2_rails_3/integration/test_unit_2_rails_3_spec.rb +148 -0
  117. data/spec/suites/rspec_2_rails_3/spec_helper.rb +3 -0
  118. data/spec/suites/rspec_2_rails_4/integration/astc_rails_4_spec.rb +142 -0
  119. data/spec/suites/rspec_2_rails_4/integration/minitest_4_rails_4_spec.rb +149 -0
  120. data/spec/suites/rspec_2_rails_4/integration/rspec_2_rails_4_spec.rb +173 -0
  121. data/spec/suites/rspec_2_rails_4/integration/test_unit_200_rails_4_spec.rb +142 -0
  122. data/spec/suites/rspec_2_rails_4/integration/test_unit_2_rails_4_spec.rb +149 -0
  123. data/spec/suites/rspec_2_rails_4/spec_helper.rb +3 -0
  124. data/spec/support/adapter.rb +22 -0
  125. data/spec/support/adapter_tests/base.rb +45 -0
  126. data/spec/support/adapter_tests/minitest.rb +7 -0
  127. data/spec/support/adapter_tests/rspec.rb +66 -0
  128. data/spec/support/adapter_tests/test_unit.rb +47 -0
  129. data/spec/support/command_runner.rb +105 -0
  130. data/spec/support/generator.rb +56 -0
  131. data/spec/support/integration_tests/base.rb +64 -0
  132. data/spec/support/integration_tests/rails.rb +60 -0
  133. data/spec/support/integration_tests/rails_minitest.rb +13 -0
  134. data/spec/support/integration_tests/rails_rspec.rb +13 -0
  135. data/spec/support/integration_tests/rails_test_unit.rb +13 -0
  136. data/spec/support/integration_tests/rails_test_unit_like.rb +13 -0
  137. data/spec/support/integration_tests/ruby.rb +7 -0
  138. data/spec/support/integration_tests/ruby_minitest.rb +13 -0
  139. data/spec/support/integration_tests/ruby_rspec.rb +13 -0
  140. data/spec/support/integration_tests/ruby_test_unit.rb +13 -0
  141. data/spec/support/matchers/be_a_subset_of_matcher.rb +24 -0
  142. data/spec/support/project/cucumber.rb +50 -0
  143. data/spec/support/project/generator.rb +352 -0
  144. data/spec/support/project/minitest.rb +39 -0
  145. data/spec/support/project/rails.rb +199 -0
  146. data/spec/support/project/rails_minitest.rb +17 -0
  147. data/spec/support/project/rails_rspec.rb +50 -0
  148. data/spec/support/project/rails_test_unit.rb +17 -0
  149. data/spec/support/project/rails_test_unit_like.rb +17 -0
  150. data/spec/support/project/rspec.rb +69 -0
  151. data/spec/support/project/ruby.rb +34 -0
  152. data/spec/support/project/ruby_minitest.rb +11 -0
  153. data/spec/support/project/ruby_rspec.rb +29 -0
  154. data/spec/support/project/ruby_test_unit.rb +11 -0
  155. data/spec/support/project/ruby_test_unit_like.rb +21 -0
  156. data/spec/support/project/test_unit.rb +29 -0
  157. data/spec/support/project/test_unit_like.rb +7 -0
  158. data/spec/support/project/tests_runner.rb +22 -0
  159. data/spec/support/test.sqlite3 +0 -0
  160. data/spec/support/test_case/generator.rb +53 -0
  161. data/spec/support/test_case/minitest.rb +13 -0
  162. data/spec/support/test_case/rspec.rb +19 -0
  163. data/spec/support/test_case/test_unit.rb +21 -0
  164. data/spec/support/test_file/generator.rb +120 -0
  165. data/spec/support/test_file/minitest.rb +19 -0
  166. data/spec/support/test_file/rails_minitest.rb +7 -0
  167. data/spec/support/test_file/rails_rspec.rb +12 -0
  168. data/spec/support/test_file/rails_test_unit.rb +25 -0
  169. data/spec/support/test_file/rspec.rb +33 -0
  170. data/spec/support/test_file/test_unit.rb +36 -0
  171. data/spec/support/test_helper/generator.rb +27 -0
  172. data/spec/support/test_helper/minitest.rb +7 -0
  173. data/spec/support/test_helper/rails.rb +31 -0
  174. data/spec/support/test_helper/rails_minitest.rb +7 -0
  175. data/spec/support/test_helper/rails_rspec.rb +25 -0
  176. data/spec/support/test_helper/rails_test_unit.rb +23 -0
  177. data/spec/support/test_helper/rspec.rb +7 -0
  178. data/spec/support/test_helper/ruby.rb +31 -0
  179. data/spec/support/test_helper/test_unit.rb +7 -0
  180. metadata +172 -6
  181. data/VERSION +0 -1
@@ -0,0 +1,39 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe Array do
4
+ include WildcardMatcherMatchers
5
+
6
+ describe '#wildcard_match?' do
7
+ context 'when this Array has items that respond to #wildcard_match?' do
8
+ subject { [hash_including({:foo => 'bar'})] }
9
+
10
+ it "returns true if all items in the given Array wildcard-match corresponding items in this Array" do
11
+ should wildcard_match([{:foo => 'bar', :baz => 'quux'}])
12
+ end
13
+
14
+ it "returns true if any items in the given Array do not wildcard-match corresponding items in this Array" do
15
+ should_not wildcard_match([{:foo => 'bat', :baz => 'quux'}])
16
+ end
17
+ end
18
+
19
+ context 'when this Array has items that do not respond to #wildcard_match?' do
20
+ subject { [:a_symbol] }
21
+
22
+ it "returns true if all items in the given Array equal-match corresponding items in this Array" do
23
+ should wildcard_match([:a_symbol])
24
+ end
25
+
26
+ it "returns true if any items in the given Array do not equal-match corresponding items in this Array" do
27
+ should_not wildcard_match([:another_symbol])
28
+ end
29
+ end
30
+
31
+ context 'when not given an Array' do
32
+ subject { [{:foo => 'bar'}] }
33
+
34
+ it "returns false" do
35
+ should_not wildcard_match(:something_else)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,81 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe Enumerable do
4
+ include WildcardMatcherMatchers
5
+
6
+ let(:klass) {
7
+ Class.new do
8
+ include Enumerable
9
+
10
+ def initialize(*items)
11
+ @arr = items
12
+ end
13
+
14
+ def each(&block)
15
+ @arr.each(&block)
16
+ end
17
+ end
18
+ }
19
+
20
+ describe '#wildcard_match?' do
21
+ context 'when this Enumerable has items that respond to #wildcard_match?' do
22
+ subject { klass.new(hash_including({:foo => 'bar'})) }
23
+
24
+ it "returns true if all items in the given Enumerable wildcard-match corresponding items in this Enumerable" do
25
+ should wildcard_match([{:foo => 'bar', :baz => 'quux'}])
26
+ end
27
+
28
+ it "returns true if any items in the given Enumerable do not wildcard-match corresponding items in this Enumerable" do
29
+ should_not wildcard_match([{:foo => 'bat', :baz => 'quux'}])
30
+ end
31
+ end
32
+
33
+ context 'when this Enumerable has items that do not respond to #wildcard_match?' do
34
+ subject { klass.new(:a_symbol) }
35
+
36
+ it "returns true if all items in the given Enumerable equal-match corresponding items in this Enumerable" do
37
+ should wildcard_match([:a_symbol])
38
+ end
39
+
40
+ it "returns true if any items in the given Enumerable do not equal-match corresponding items in this Enumerable" do
41
+ should_not wildcard_match([:another_symbol])
42
+ end
43
+ end
44
+
45
+ if RUBY_VERSION =~ /^1.8/
46
+ context 'when the Enumerable is a String' do
47
+ subject { 'foo' }
48
+
49
+ it "returns true if the String is exactly equal to the given String" do
50
+ should wildcard_match('foo')
51
+ end
52
+
53
+ it "returns false if the string is not exactly equal to the given String" do
54
+ should_not wildcard_match('bar')
55
+ end
56
+
57
+ context 'whose #== method has been proxied' do
58
+ before do
59
+ @r1 = 'x'
60
+ @r2 = 'y'
61
+ mock.proxy(@r1) == @r1
62
+ mock.proxy(@r1) == @r2
63
+ end
64
+
65
+ it "doesn't blow up with a recursive loop error" do
66
+ @r1 == @r1
67
+ @r1 == @r2
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ context 'when not given an Enumerable' do
74
+ subject { klass.new({:foo => 'bar'}) }
75
+
76
+ it "returns false" do
77
+ should_not wildcard_match(:something_else)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,55 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe Hash do
4
+ include WildcardMatcherMatchers
5
+
6
+ describe '#wildcard_match?' do
7
+ context 'when this Hash has keys that respond to #wildcard_match?' do
8
+ subject { {is_a(Symbol) => 'x'} }
9
+
10
+ it "returns true if all keys in the given Hash wildcard-match the corresponding keys in this Hash" do
11
+ should wildcard_match({:foo => 'x'})
12
+ end
13
+
14
+ it "returns true if any keys in the given Hash do not wildcard-match the corresponding keys in this Hash" do
15
+ should_not wildcard_match({'foo' => 'x'})
16
+ end
17
+ end
18
+
19
+ context 'when this Hash has values that respond to #wildcard_match?' do
20
+ subject { {'x' => is_a(Symbol)} }
21
+
22
+ it "returns true if all values in the given Hash wildcard-match the corresponding values in this Hash" do
23
+ should wildcard_match({'x' => :foo})
24
+ end
25
+
26
+ it "returns false if any values in the given Hash do not wildcard-match the corresponding values in this Hash" do
27
+ should_not wildcard_match({'x' => 'foo'})
28
+ end
29
+ end
30
+
31
+ context 'when this Hash does not have keys or values that respond to #wildcard_match?' do
32
+ subject { {:x => :y} }
33
+
34
+ it "returns true if all pairs in the given Hash wildcard-match the corresponding values in this Hash" do
35
+ should wildcard_match({:x => :y})
36
+ end
37
+
38
+ it "returns false if any keys do not equal-match corresponding items in the subject" do
39
+ should_not wildcard_match({:z => :y})
40
+ end
41
+
42
+ it "returns false if any values do not equal-match corresponding items in the subject" do
43
+ should_not wildcard_match({:x => :z})
44
+ end
45
+ end
46
+
47
+ context 'when not given a Hash' do
48
+ subject { {:foo => 'bar'} }
49
+
50
+ it "returns false" do
51
+ should_not wildcard_match(:something_else)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,41 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
+
3
+ describe Range do
4
+ include WildcardMatcherMatchers
5
+
6
+ describe '#wildcard_match?' do
7
+ subject { 1..5 }
8
+
9
+ it "returns true when given Range is exactly equal to this Range" do
10
+ should wildcard_match(1..5)
11
+ end
12
+
13
+ it "returns true when given number falls within the range" do
14
+ should wildcard_match(3)
15
+ end
16
+
17
+ it "returns false when given number falls outside the range" do
18
+ should_not wildcard_match(8)
19
+ end
20
+ end
21
+
22
+ describe '#==' do
23
+ subject { 1..5 }
24
+
25
+ it "returns true when given Range is exactly equal to this Range" do
26
+ should equal_match(1..5)
27
+ end
28
+
29
+ it "returns false when given Range is not exactly equal to this Range" do
30
+ should_not equal_match(3..5)
31
+ end
32
+
33
+ it "returns false even when given an object that wildcard matches this Range" do
34
+ should_not equal_match(3)
35
+ end
36
+
37
+ it "returns false when given object isn't even a Range" do
38
+ should_not equal_match(:something_else)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,41 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe Regexp do
4
+ include WildcardMatcherMatchers
5
+
6
+ describe '#wildcard_match?' do
7
+ subject { /foo/ }
8
+
9
+ it "returns true when given Regexp is exactly equal to this Regexp" do
10
+ should wildcard_match(/foo/)
11
+ end
12
+
13
+ it "returns true if given string matches the regexp" do
14
+ should wildcard_match('foobarbaz')
15
+ end
16
+
17
+ it "returns false if given string does not match the regexp" do
18
+ should_not wildcard_match('aslkj')
19
+ end
20
+ end
21
+
22
+ describe '#==' do
23
+ subject { /foo/ }
24
+
25
+ it "returns true when given Regexp is exactly equal to this Regexp" do
26
+ should equal_match(/foo/)
27
+ end
28
+
29
+ it "returns false when given Regexp is not exactly equal to this Regexp" do
30
+ should_not equal_match(/alkj/)
31
+ end
32
+
33
+ it "returns false even when given an object that wildcard matches this Regexp" do
34
+ should_not equal_match('foobarbaz')
35
+ end
36
+
37
+ it "returns false when not even given a Regexp" do
38
+ should_not equal_match(:something_else)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,114 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
+
3
+ module RR
4
+ module DoubleDefinitions
5
+ describe ChildDoubleDefinitionCreate do
6
+ attr_reader :parent_subject, :parent_double_definition_create, :parent_double_definition, :child_double_definition_create
7
+
8
+ include_examples "Swapped Space"
9
+
10
+ before(:each) do
11
+ @parent_subject = Object.new
12
+ @parent_double_definition_create = DoubleDefinitionCreate.new
13
+ @parent_double_definition = DoubleDefinition.new(parent_double_definition_create)
14
+ @child_double_definition_create = ChildDoubleDefinitionCreate.new(parent_double_definition)
15
+ end
16
+
17
+ describe "#root_subject" do
18
+ it "returns the #parent_double_definition.root_subject" do
19
+ child_subject = Object.new
20
+ parent_double_definition_create.stub(parent_subject)
21
+ child_double_definition_create.stub(child_subject)
22
+ expect(child_double_definition_create.root_subject).to eq parent_subject
23
+ end
24
+ end
25
+
26
+ describe "Strategies::Verification definitions" do
27
+ describe "methods without !" do
28
+ attr_reader :child_subject
29
+ before do
30
+ @child_subject = Object.new
31
+ end
32
+
33
+ describe "#mock" do
34
+ context "when passed a subject" do
35
+ it "sets #parent_double_definition.implementation to a Proc returning the passed-in subject" do
36
+ expect(parent_double_definition.implementation).to be_nil
37
+ child_double_definition_create.mock(child_subject)
38
+ expect(parent_double_definition.implementation.call).to eq child_subject
39
+ end
40
+ end
41
+ end
42
+
43
+ describe "#stub" do
44
+ context "when passed a subject" do
45
+ it "sets #parent_double_definition.implementation to a Proc returning the passed-in subject" do
46
+ expect(parent_double_definition.implementation).to be_nil
47
+ child_double_definition_create.stub(child_subject)
48
+ expect(parent_double_definition.implementation.call).to eq child_subject
49
+ end
50
+ end
51
+ end
52
+
53
+ describe "#dont_allow" do
54
+ context "when passed a subject" do
55
+ it "sets #parent_double_definition.implementation to a Proc returning the passed-in subject" do
56
+ expect(parent_double_definition.implementation).to be_nil
57
+ child_double_definition_create.dont_allow(child_subject)
58
+ expect(parent_double_definition.implementation.call).to eq child_subject
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ describe "methods with !" do
65
+ describe "#mock!" do
66
+ it "sets #parent_double_definition.implementation to a Proc returning the #subject" do
67
+ expect(parent_double_definition.implementation).to be_nil
68
+ child_subject = child_double_definition_create.mock!.__double_definition_create__.subject
69
+ expect(parent_double_definition.implementation.call).to eq child_subject
70
+ end
71
+ end
72
+
73
+ describe "#stub!" do
74
+ it "sets #parent_double_definition.implementation to a Proc returning the #subject" do
75
+ expect(parent_double_definition.implementation).to be_nil
76
+ child_subject = child_double_definition_create.stub!.__double_definition_create__.subject
77
+ expect(parent_double_definition.implementation.call).to eq child_subject
78
+ end
79
+ end
80
+
81
+ describe "#dont_allow!" do
82
+ it "sets #parent_double_definition.implementation to a Proc returning the #subject" do
83
+ expect(parent_double_definition.implementation).to be_nil
84
+ child_subject = child_double_definition_create.dont_allow!.__double_definition_create__.subject
85
+ expect(parent_double_definition.implementation.call).to eq child_subject
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ describe "Strategies::DoubleInjection definitions" do
92
+ describe "methods without !" do
93
+ describe "#instance_of" do
94
+ it "raises a NoMethodError" do
95
+ expect {
96
+ child_double_definition_create.instance_of
97
+ }.to raise_error(NoMethodError)
98
+ end
99
+ end
100
+ end
101
+
102
+ describe "methods with !" do
103
+ describe "#instance_of!" do
104
+ it "raises a NoMethodError" do
105
+ expect {
106
+ child_double_definition_create.instance_of!
107
+ }.to raise_error(NoMethodError)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,93 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
+
3
+ module RR
4
+ module DoubleDefinitions
5
+ describe DoubleDefinitionCreateBlankSlate do
6
+ attr_reader :double_definition_create, :blank_slate
7
+
8
+ include_examples "Swapped Space"
9
+
10
+ subject { Object.new }
11
+
12
+ before(:each) do
13
+ @double_definition_create = DoubleDefinitionCreate.new
14
+ double_definition_create.mock(subject)
15
+ end
16
+
17
+ describe ".new" do
18
+ it "does not undefine object_id" do
19
+ blank_slate = DoubleDefinitionCreateBlankSlate.new(double_definition_create)
20
+ expect(blank_slate.object_id.class).to eq Fixnum
21
+ end
22
+
23
+ context "without block" do
24
+ before do
25
+ @blank_slate = DoubleDefinitionCreateBlankSlate.new(double_definition_create)
26
+ end
27
+
28
+ it "clears out all methods from proxy" do
29
+ expect(stub(subject).i_should_be_a_double).to be_instance_of(DoubleDefinition)
30
+ end
31
+ end
32
+
33
+ context "when passed a block" do
34
+ context "when the block has an arity of 1" do
35
+ attr_reader :passed_in_argument
36
+ before do
37
+ passed_in_argument = nil
38
+ stub(subject) do |b|
39
+ passed_in_argument = b
40
+ b.foobar(1, 2) {:one_two}
41
+ b.foobar(1) {:one}
42
+ b.foobar.with_any_args {:default}
43
+ b.baz() {:baz_result}
44
+ end
45
+ @passed_in_argument = passed_in_argument
46
+ end
47
+
48
+ it "creates double_injections" do
49
+ expect(subject.foobar(1, 2)).to eq :one_two
50
+ expect(subject.foobar(1)).to eq :one
51
+ expect(subject.foobar(:something)).to eq :default
52
+ expect(subject.baz).to eq :baz_result
53
+ end
54
+
55
+ it "passes the self into the block" do
56
+ expect(passed_in_argument.__double_definition_create__).to be_instance_of(
57
+ ::RR::DoubleDefinitions::DoubleDefinitionCreate
58
+ )
59
+ end
60
+ end
61
+
62
+ context "when the block has an arity of 0" do
63
+ attr_reader :self_value
64
+ before do
65
+ self_value = nil
66
+ stub(subject) do ||
67
+ self_value = self
68
+ foobar(1, 2) {:one_two}
69
+ foobar(1) {:one}
70
+ foobar.with_any_args {:default}
71
+ baz() {:baz_result}
72
+ end
73
+ @self_value = self_value
74
+ end
75
+
76
+ it "creates double_injections" do
77
+ expect(subject.foobar(1, 2)).to eq :one_two
78
+ expect(subject.foobar(1)).to eq :one
79
+ expect(subject.foobar(:something)).to eq :default
80
+ expect(subject.baz).to eq :baz_result
81
+ end
82
+
83
+ it "evaluates the block with the context of self" do
84
+ expect(self_value.__double_definition_create__).to be_instance_of(
85
+ ::RR::DoubleDefinitions::DoubleDefinitionCreate
86
+ )
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end