mocha 0.5.6 → 0.9.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 (120) hide show
  1. data/README +4 -4
  2. data/RELEASE +45 -0
  3. data/Rakefile +55 -33
  4. data/lib/mocha.rb +1 -0
  5. data/lib/mocha/any_instance_method.rb +24 -4
  6. data/lib/mocha/backtrace_filter.rb +17 -0
  7. data/lib/mocha/cardinality.rb +92 -0
  8. data/lib/mocha/central.rb +1 -9
  9. data/lib/mocha/change_state_side_effect.rb +19 -0
  10. data/lib/mocha/class_method.rb +25 -5
  11. data/lib/mocha/configuration.rb +60 -0
  12. data/lib/mocha/exception_raiser.rb +1 -1
  13. data/lib/mocha/expectation.rb +109 -48
  14. data/lib/mocha/expectation_error.rb +6 -6
  15. data/lib/mocha/expectation_list.rb +10 -14
  16. data/lib/mocha/in_state_ordering_constraint.rb +19 -0
  17. data/lib/mocha/instance_method.rb +9 -0
  18. data/lib/mocha/logger.rb +15 -0
  19. data/lib/mocha/mock.rb +19 -14
  20. data/lib/mocha/mockery.rb +166 -0
  21. data/lib/mocha/module_method.rb +17 -0
  22. data/lib/mocha/names.rb +53 -0
  23. data/lib/mocha/object.rb +26 -9
  24. data/lib/mocha/parameter_matchers.rb +2 -1
  25. data/lib/mocha/parameter_matchers/all_of.rb +3 -3
  26. data/lib/mocha/parameter_matchers/any_of.rb +3 -3
  27. data/lib/mocha/parameter_matchers/anything.rb +1 -1
  28. data/lib/mocha/parameter_matchers/has_entries.rb +4 -1
  29. data/lib/mocha/parameter_matchers/has_entry.rb +3 -2
  30. data/lib/mocha/parameter_matchers/has_key.rb +1 -1
  31. data/lib/mocha/parameter_matchers/has_value.rb +1 -1
  32. data/lib/mocha/parameter_matchers/not.rb +2 -2
  33. data/lib/mocha/parameter_matchers/object.rb +1 -1
  34. data/lib/mocha/parameter_matchers/optionally.rb +22 -0
  35. data/lib/mocha/parameter_matchers/regexp_matches.rb +2 -2
  36. data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
  37. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
  38. data/lib/mocha/single_return_value.rb +2 -9
  39. data/lib/mocha/standalone.rb +151 -17
  40. data/lib/mocha/state_machine.rb +91 -0
  41. data/lib/mocha/stubbing_error.rb +16 -0
  42. data/lib/mocha/test_case_adapter.rb +76 -22
  43. data/lib/stubba.rb +2 -1
  44. data/test/acceptance/acceptance_test_helper.rb +38 -0
  45. data/test/acceptance/bug_18914_test.rb +43 -0
  46. data/test/acceptance/{expected_invocation_count_acceptance_test.rb → expected_invocation_count_test.rb} +29 -20
  47. data/test/acceptance/failure_messages_test.rb +64 -0
  48. data/test/acceptance/{mocha_acceptance_test.rb → mocha_example_test.rb} +5 -5
  49. data/test/{integration/mocha_test_result_integration_test.rb → acceptance/mocha_test_result_test.rb} +19 -40
  50. data/test/acceptance/mock_test.rb +100 -0
  51. data/test/acceptance/{mock_with_initializer_block_acceptance_test.rb → mock_with_initializer_block_test.rb} +12 -5
  52. data/test/acceptance/{mocked_methods_dispatch_acceptance_test.rb → mocked_methods_dispatch_test.rb} +12 -5
  53. data/test/acceptance/{optional_parameters_acceptance_test.rb → optional_parameters_test.rb} +11 -4
  54. data/test/acceptance/{parameter_matcher_acceptance_test.rb → parameter_matcher_test.rb} +67 -5
  55. data/test/acceptance/{partial_mocks_acceptance_test.rb → partial_mocks_test.rb} +12 -5
  56. data/test/acceptance/return_value_test.rb +52 -0
  57. data/test/acceptance/{sequence_acceptance_test.rb → sequence_test.rb} +13 -6
  58. data/test/acceptance/{standalone_acceptance_test.rb → standalone_test.rb} +19 -11
  59. data/test/acceptance/states_test.rb +70 -0
  60. data/test/acceptance/stub_any_instance_method_test.rb +195 -0
  61. data/test/acceptance/stub_class_method_test.rb +203 -0
  62. data/test/acceptance/stub_everything_test.rb +56 -0
  63. data/test/acceptance/stub_instance_method_test.rb +165 -0
  64. data/test/acceptance/stub_module_method_test.rb +163 -0
  65. data/test/acceptance/stub_test.rb +52 -0
  66. data/test/acceptance/{stubba_acceptance_test.rb → stubba_example_test.rb} +1 -1
  67. data/test/{integration/stubba_test_result_integration_test.rb → acceptance/stubba_test_result_test.rb} +17 -36
  68. data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
  69. data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
  70. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
  71. data/test/acceptance/stubbing_non_existent_class_method_test.rb +155 -0
  72. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +145 -0
  73. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
  74. data/test/acceptance/stubbing_non_public_class_method_test.rb +161 -0
  75. data/test/acceptance/stubbing_non_public_instance_method_test.rb +141 -0
  76. data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
  77. data/test/execution_point.rb +3 -1
  78. data/test/simple_counter.rb +13 -0
  79. data/test/test_helper.rb +0 -1
  80. data/test/test_runner.rb +6 -4
  81. data/test/unit/any_instance_method_test.rb +1 -1
  82. data/test/unit/array_inspect_test.rb +1 -1
  83. data/test/unit/backtrace_filter_test.rb +19 -0
  84. data/test/unit/cardinality_test.rb +56 -0
  85. data/test/unit/central_test.rb +4 -63
  86. data/test/unit/change_state_side_effect_test.rb +41 -0
  87. data/test/unit/class_method_test.rb +38 -1
  88. data/test/unit/date_time_inspect_test.rb +1 -1
  89. data/test/unit/{expectation_raiser_test.rb → exception_raiser_test.rb} +14 -0
  90. data/test/unit/expectation_list_test.rb +4 -22
  91. data/test/unit/expectation_test.rb +70 -94
  92. data/test/unit/in_state_ordering_constraint_test.rb +43 -0
  93. data/test/unit/mock_test.rb +16 -37
  94. data/test/unit/mockery_test.rb +149 -0
  95. data/test/unit/{no_yield_test.rb → no_yields_test.rb} +0 -0
  96. data/test/unit/object_test.rb +6 -89
  97. data/test/unit/parameter_matchers/equals_test.rb +25 -0
  98. data/test/unit/parameter_matchers/has_entries_test.rb +22 -1
  99. data/test/unit/parameter_matchers/has_entry_test.rb +24 -2
  100. data/test/unit/parameter_matchers/has_key_test.rb +11 -0
  101. data/test/unit/parameter_matchers/has_value_test.rb +12 -0
  102. data/test/unit/parameter_matchers/regexp_matches_test.rb +1 -1
  103. data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
  104. data/test/unit/parameter_matchers/stub_matcher.rb +4 -0
  105. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
  106. data/test/unit/single_return_value_test.rb +0 -19
  107. data/test/unit/state_machine_test.rb +98 -0
  108. metadata +108 -69
  109. data/lib/mocha/auto_verify.rb +0 -118
  110. data/lib/mocha/infinite_range.rb +0 -25
  111. data/lib/mocha/missing_expectation.rb +0 -17
  112. data/lib/mocha/setup_and_teardown.rb +0 -23
  113. data/lib/mocha/stub.rb +0 -18
  114. data/test/integration/stubba_integration_test.rb +0 -89
  115. data/test/unit/auto_verify_test.rb +0 -129
  116. data/test/unit/expectation_error_test.rb +0 -24
  117. data/test/unit/infinite_range_test.rb +0 -53
  118. data/test/unit/missing_expectation_test.rb +0 -42
  119. data/test/unit/setup_and_teardown_test.rb +0 -76
  120. data/test/unit/stub_test.rb +0 -24
@@ -0,0 +1,70 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class StatesTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_constrain_expectations_to_occur_within_a_given_state
17
+ test_result = run_test do
18
+ mock = mock()
19
+ readiness = states('readiness')
20
+
21
+ mock.stubs(:first).when(readiness.is('ready'))
22
+ mock.stubs(:second).then(readiness.is('ready'))
23
+
24
+ mock.first
25
+ end
26
+ assert_failed(test_result)
27
+ end
28
+
29
+ def test_should_allow_expectations_to_occur_in_correct_state
30
+ test_result = run_test do
31
+ mock = mock()
32
+ readiness = states('readiness')
33
+
34
+ mock.stubs(:first).when(readiness.is('ready'))
35
+ mock.stubs(:second).then(readiness.is('ready'))
36
+
37
+ mock.second
38
+ mock.first
39
+ end
40
+ assert_passed(test_result)
41
+ end
42
+
43
+ def test_should_be_able_to_start_in_a_specific_state
44
+ test_result = run_test do
45
+ mock = mock()
46
+ readiness = states('readiness')
47
+
48
+ mock.stubs(:first).when(readiness.is('ready'))
49
+
50
+ readiness.starts_as('ready')
51
+ mock.first
52
+ end
53
+ assert_passed(test_result)
54
+ end
55
+
56
+ def test_should_switch_state_when_method_raises_an_exception
57
+ test_result = run_test do
58
+ mock = mock()
59
+ readiness = states('readiness')
60
+
61
+ mock.expects(:first).raises().then(readiness.is('ready'))
62
+ mock.expects(:second).when(readiness.is('ready'))
63
+
64
+ mock.first rescue nil
65
+ mock.second
66
+ end
67
+ assert_passed(test_result)
68
+ end
69
+
70
+ end
@@ -0,0 +1,195 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class StubAnyInstanceMethodTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_stub_method_within_test
17
+ klass = Class.new do
18
+ def my_instance_method
19
+ :original_return_value
20
+ end
21
+ end
22
+ instance = klass.new
23
+ test_result = run_test do
24
+ klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
25
+ assert_equal :new_return_value, instance.my_instance_method
26
+ end
27
+ assert_passed(test_result)
28
+ end
29
+
30
+ def test_should_leave_stubbed_public_method_unchanged_after_test
31
+ klass = Class.new do
32
+ def my_instance_method
33
+ :original_return_value
34
+ end
35
+ end
36
+ instance = klass.new
37
+ run_test do
38
+ klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
39
+ end
40
+ assert instance.public_methods(false).any? { |m| m.to_s == 'my_instance_method' }
41
+ assert_equal :original_return_value, instance.my_instance_method
42
+ end
43
+
44
+ def test_should_leave_stubbed_protected_method_unchanged_after_test
45
+ klass = Class.new do
46
+ def my_instance_method
47
+ :original_return_value
48
+ end
49
+ protected :my_instance_method
50
+ end
51
+ instance = klass.new
52
+ run_test do
53
+ klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
54
+ end
55
+ assert instance.protected_methods(false).any? { |m| m.to_s == 'my_instance_method' }
56
+ assert_equal :original_return_value, instance.send(:my_instance_method)
57
+ end
58
+
59
+ def test_should_leave_stubbed_private_method_unchanged_after_test
60
+ klass = Class.new do
61
+ def my_instance_method
62
+ :original_return_value
63
+ end
64
+ private :my_instance_method
65
+ end
66
+ instance = klass.new
67
+ run_test do
68
+ klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
69
+ end
70
+ assert instance.private_methods(false).any? { |m| m.to_s == 'my_instance_method' }
71
+ assert_equal :original_return_value, instance.send(:my_instance_method)
72
+ end
73
+
74
+ def test_should_reset_expectations_after_test
75
+ klass = Class.new do
76
+ def my_instance_method
77
+ :original_return_value
78
+ end
79
+ end
80
+ instance = klass.new
81
+ run_test do
82
+ klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
83
+ end
84
+ assert_equal 0, klass.any_instance.mocha.expectations.length
85
+ end
86
+
87
+ def test_should_be_able_to_stub_a_superclass_method
88
+ superklass = Class.new do
89
+ def my_superclass_method
90
+ :original_return_value
91
+ end
92
+ end
93
+ klass = Class.new(superklass)
94
+ instance = klass.new
95
+ test_result = run_test do
96
+ klass.any_instance.stubs(:my_superclass_method).returns(:new_return_value)
97
+ assert_equal :new_return_value, instance.my_superclass_method
98
+ end
99
+ assert_passed(test_result)
100
+ assert instance.public_methods(true).any? { |m| m.to_s == 'my_superclass_method' }
101
+ assert !klass.public_methods(false).any? { |m| m.to_s == 'my_superclass_method' }
102
+ assert_equal :original_return_value, instance.my_superclass_method
103
+ end
104
+
105
+ def test_should_be_able_to_stub_method_if_ruby18_public_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
106
+ ruby18_klass = Class.new do
107
+ class << self
108
+ def public_instance_methods(include_superclass = true)
109
+ ['my_instance_method']
110
+ end
111
+ end
112
+ end
113
+ test_result = run_test do
114
+ ruby18_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
115
+ assert_equal :new_return_value, ruby18_klass.new.my_instance_method
116
+ end
117
+ assert_passed(test_result)
118
+ end
119
+
120
+ def test_should_be_able_to_stub_method_if_ruby19_public_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
121
+ ruby19_klass = Class.new do
122
+ class << self
123
+ def public_instance_methods(include_superclass = true)
124
+ [:my_instance_method]
125
+ end
126
+ end
127
+ end
128
+ test_result = run_test do
129
+ ruby19_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
130
+ assert_equal :new_return_value, ruby19_klass.new.my_instance_method
131
+ end
132
+ assert_passed(test_result)
133
+ end
134
+
135
+ def test_should_be_able_to_stub_method_if_ruby18_protected_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
136
+ ruby18_klass = Class.new do
137
+ class << self
138
+ def protected_instance_methods(include_superclass = true)
139
+ ['my_instance_method']
140
+ end
141
+ end
142
+ end
143
+ test_result = run_test do
144
+ ruby18_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
145
+ assert_equal :new_return_value, ruby18_klass.new.my_instance_method
146
+ end
147
+ assert_passed(test_result)
148
+ end
149
+
150
+ def test_should_be_able_to_stub_method_if_ruby19_protected_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
151
+ ruby19_klass = Class.new do
152
+ class << self
153
+ def protected_instance_methods(include_superclass = true)
154
+ [:my_instance_method]
155
+ end
156
+ end
157
+ end
158
+ test_result = run_test do
159
+ ruby19_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
160
+ assert_equal :new_return_value, ruby19_klass.new.my_instance_method
161
+ end
162
+ assert_passed(test_result)
163
+ end
164
+
165
+ def test_should_be_able_to_stub_method_if_ruby18_private_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
166
+ ruby18_klass = Class.new do
167
+ class << self
168
+ def private_instance_methods(include_superclass = true)
169
+ ['my_instance_method']
170
+ end
171
+ end
172
+ end
173
+ test_result = run_test do
174
+ ruby18_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
175
+ assert_equal :new_return_value, ruby18_klass.new.my_instance_method
176
+ end
177
+ assert_passed(test_result)
178
+ end
179
+
180
+ def test_should_be_able_to_stub_method_if_ruby19_private_instance_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
181
+ ruby19_klass = Class.new do
182
+ class << self
183
+ def private_instance_methods(include_superclass = true)
184
+ [:my_instance_method]
185
+ end
186
+ end
187
+ end
188
+ test_result = run_test do
189
+ ruby19_klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
190
+ assert_equal :new_return_value, ruby19_klass.new.my_instance_method
191
+ end
192
+ assert_passed(test_result)
193
+ end
194
+
195
+ end
@@ -0,0 +1,203 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class StubClassMethodTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_stub_method_within_test
17
+ klass = Class.new do
18
+ class << self
19
+ def my_class_method
20
+ :original_return_value
21
+ end
22
+ end
23
+ end
24
+ test_result = run_test do
25
+ klass.stubs(:my_class_method).returns(:new_return_value)
26
+ assert_equal :new_return_value, klass.my_class_method
27
+ end
28
+ assert_passed(test_result)
29
+ end
30
+
31
+ def test_should_leave_stubbed_public_method_unchanged_after_test
32
+ klass = Class.new do
33
+ class << self
34
+ def my_class_method
35
+ :original_return_value
36
+ end
37
+ end
38
+ end
39
+ run_test do
40
+ klass.stubs(:my_class_method).returns(:new_return_value)
41
+ end
42
+ assert klass.public_methods(false).any? { |m| m.to_s == 'my_class_method' }
43
+ assert_equal :original_return_value, klass.my_class_method
44
+ end
45
+
46
+ def test_should_leave_stubbed_protected_method_unchanged_after_test
47
+ klass = Class.new do
48
+ class << self
49
+ def my_class_method
50
+ :original_return_value
51
+ end
52
+ protected :my_class_method
53
+ end
54
+ end
55
+ run_test do
56
+ klass.stubs(:my_class_method).returns(:new_return_value)
57
+ end
58
+ assert klass.protected_methods(false).any? { |m| m.to_s == 'my_class_method' }
59
+ assert_equal :original_return_value, klass.send(:my_class_method)
60
+ end
61
+
62
+ def test_should_leave_stubbed_private_method_unchanged_after_test
63
+ klass = Class.new do
64
+ class << self
65
+ def my_class_method
66
+ :original_return_value
67
+ end
68
+ private :my_class_method
69
+ end
70
+ end
71
+ run_test do
72
+ klass.stubs(:my_class_method).returns(:new_return_value)
73
+ end
74
+ assert klass.private_methods(false).any? { |m| m.to_s == 'my_class_method' }
75
+ assert_equal :original_return_value, klass.send(:my_class_method)
76
+ end
77
+
78
+ def test_should_reset_class_expectations_after_test
79
+ klass = Class.new do
80
+ class << self
81
+ def my_class_method
82
+ :original_return_value
83
+ end
84
+ end
85
+ end
86
+ run_test do
87
+ klass.stubs(:my_class_method)
88
+ end
89
+ assert_equal 0, klass.mocha.expectations.length
90
+ end
91
+
92
+ def test_should_be_able_to_stub_a_superclass_method
93
+ superklass = Class.new do
94
+ class << self
95
+ def my_superclass_method
96
+ :original_return_value
97
+ end
98
+ end
99
+ end
100
+ klass = Class.new(superklass)
101
+ test_result = run_test do
102
+ klass.stubs(:my_superclass_method).returns(:new_return_value)
103
+ assert_equal :new_return_value, klass.my_superclass_method
104
+ end
105
+ assert_passed(test_result)
106
+ superklass_public_methods = superklass.public_methods - superklass.superclass.public_methods
107
+ assert superklass_public_methods.any? { |m| m.to_s == 'my_superclass_method' }
108
+ klass_public_methods = klass.public_methods - klass.superclass.public_methods
109
+ assert !klass_public_methods.any? { |m| m.to_s == 'my_superclass_method' }
110
+ assert_equal :original_return_value, superklass.my_superclass_method
111
+ end
112
+
113
+ def test_should_be_able_to_stub_method_if_ruby18_public_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
114
+ ruby18_klass = Class.new do
115
+ class << self
116
+ def public_methods(include_superclass = true)
117
+ ['my_class_method']
118
+ end
119
+ end
120
+ end
121
+ test_result = run_test do
122
+ ruby18_klass.stubs(:my_class_method).returns(:new_return_value)
123
+ assert_equal :new_return_value, ruby18_klass.my_class_method
124
+ end
125
+ assert_passed(test_result)
126
+ end
127
+
128
+ def test_should_be_able_to_stub_method_if_ruby19_public_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
129
+ ruby19_klass = Class.new do
130
+ class << self
131
+ def public_methods(include_superclass = true)
132
+ [:my_class_method]
133
+ end
134
+ end
135
+ end
136
+ test_result = run_test do
137
+ ruby19_klass.stubs(:my_class_method).returns(:new_return_value)
138
+ assert_equal :new_return_value, ruby19_klass.my_class_method
139
+ end
140
+ assert_passed(test_result)
141
+ end
142
+
143
+ def test_should_be_able_to_stub_method_if_ruby18_protected_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
144
+ ruby18_klass = Class.new do
145
+ class << self
146
+ def protected_methods(include_superclass = true)
147
+ ['my_class_method']
148
+ end
149
+ end
150
+ end
151
+ test_result = run_test do
152
+ ruby18_klass.stubs(:my_class_method).returns(:new_return_value)
153
+ assert_equal :new_return_value, ruby18_klass.my_class_method
154
+ end
155
+ assert_passed(test_result)
156
+ end
157
+
158
+ def test_should_be_able_to_stub_method_if_ruby19_protected_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
159
+ ruby19_klass = Class.new do
160
+ class << self
161
+ def protected_methods(include_superclass = true)
162
+ [:my_class_method]
163
+ end
164
+ end
165
+ end
166
+ test_result = run_test do
167
+ ruby19_klass.stubs(:my_class_method).returns(:new_return_value)
168
+ assert_equal :new_return_value, ruby19_klass.my_class_method
169
+ end
170
+ assert_passed(test_result)
171
+ end
172
+
173
+ def test_should_be_able_to_stub_method_if_ruby18_private_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
174
+ ruby18_klass = Class.new do
175
+ class << self
176
+ def private_methods(include_superclass = true)
177
+ ['my_class_method']
178
+ end
179
+ end
180
+ end
181
+ test_result = run_test do
182
+ ruby18_klass.stubs(:my_class_method).returns(:new_return_value)
183
+ assert_equal :new_return_value, ruby18_klass.my_class_method
184
+ end
185
+ assert_passed(test_result)
186
+ end
187
+
188
+ def test_should_be_able_to_stub_method_if_ruby19_private_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
189
+ ruby19_klass = Class.new do
190
+ class << self
191
+ def private_methods(include_superclass = true)
192
+ [:my_class_method]
193
+ end
194
+ end
195
+ end
196
+ test_result = run_test do
197
+ ruby19_klass.stubs(:my_class_method).returns(:new_return_value)
198
+ assert_equal :new_return_value, ruby19_klass.my_class_method
199
+ end
200
+ assert_passed(test_result)
201
+ end
202
+
203
+ end