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.
- data/README +4 -4
- data/RELEASE +45 -0
- data/Rakefile +55 -33
- data/lib/mocha.rb +1 -0
- data/lib/mocha/any_instance_method.rb +24 -4
- data/lib/mocha/backtrace_filter.rb +17 -0
- data/lib/mocha/cardinality.rb +92 -0
- data/lib/mocha/central.rb +1 -9
- data/lib/mocha/change_state_side_effect.rb +19 -0
- data/lib/mocha/class_method.rb +25 -5
- data/lib/mocha/configuration.rb +60 -0
- data/lib/mocha/exception_raiser.rb +1 -1
- data/lib/mocha/expectation.rb +109 -48
- data/lib/mocha/expectation_error.rb +6 -6
- data/lib/mocha/expectation_list.rb +10 -14
- data/lib/mocha/in_state_ordering_constraint.rb +19 -0
- data/lib/mocha/instance_method.rb +9 -0
- data/lib/mocha/logger.rb +15 -0
- data/lib/mocha/mock.rb +19 -14
- data/lib/mocha/mockery.rb +166 -0
- data/lib/mocha/module_method.rb +17 -0
- data/lib/mocha/names.rb +53 -0
- data/lib/mocha/object.rb +26 -9
- data/lib/mocha/parameter_matchers.rb +2 -1
- data/lib/mocha/parameter_matchers/all_of.rb +3 -3
- data/lib/mocha/parameter_matchers/any_of.rb +3 -3
- data/lib/mocha/parameter_matchers/anything.rb +1 -1
- data/lib/mocha/parameter_matchers/has_entries.rb +4 -1
- data/lib/mocha/parameter_matchers/has_entry.rb +3 -2
- data/lib/mocha/parameter_matchers/has_key.rb +1 -1
- data/lib/mocha/parameter_matchers/has_value.rb +1 -1
- data/lib/mocha/parameter_matchers/not.rb +2 -2
- data/lib/mocha/parameter_matchers/object.rb +1 -1
- data/lib/mocha/parameter_matchers/optionally.rb +22 -0
- data/lib/mocha/parameter_matchers/regexp_matches.rb +2 -2
- data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
- data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
- data/lib/mocha/single_return_value.rb +2 -9
- data/lib/mocha/standalone.rb +151 -17
- data/lib/mocha/state_machine.rb +91 -0
- data/lib/mocha/stubbing_error.rb +16 -0
- data/lib/mocha/test_case_adapter.rb +76 -22
- data/lib/stubba.rb +2 -1
- data/test/acceptance/acceptance_test_helper.rb +38 -0
- data/test/acceptance/bug_18914_test.rb +43 -0
- data/test/acceptance/{expected_invocation_count_acceptance_test.rb → expected_invocation_count_test.rb} +29 -20
- data/test/acceptance/failure_messages_test.rb +64 -0
- data/test/acceptance/{mocha_acceptance_test.rb → mocha_example_test.rb} +5 -5
- data/test/{integration/mocha_test_result_integration_test.rb → acceptance/mocha_test_result_test.rb} +19 -40
- data/test/acceptance/mock_test.rb +100 -0
- data/test/acceptance/{mock_with_initializer_block_acceptance_test.rb → mock_with_initializer_block_test.rb} +12 -5
- data/test/acceptance/{mocked_methods_dispatch_acceptance_test.rb → mocked_methods_dispatch_test.rb} +12 -5
- data/test/acceptance/{optional_parameters_acceptance_test.rb → optional_parameters_test.rb} +11 -4
- data/test/acceptance/{parameter_matcher_acceptance_test.rb → parameter_matcher_test.rb} +67 -5
- data/test/acceptance/{partial_mocks_acceptance_test.rb → partial_mocks_test.rb} +12 -5
- data/test/acceptance/return_value_test.rb +52 -0
- data/test/acceptance/{sequence_acceptance_test.rb → sequence_test.rb} +13 -6
- data/test/acceptance/{standalone_acceptance_test.rb → standalone_test.rb} +19 -11
- data/test/acceptance/states_test.rb +70 -0
- data/test/acceptance/stub_any_instance_method_test.rb +195 -0
- data/test/acceptance/stub_class_method_test.rb +203 -0
- data/test/acceptance/stub_everything_test.rb +56 -0
- data/test/acceptance/stub_instance_method_test.rb +165 -0
- data/test/acceptance/stub_module_method_test.rb +163 -0
- data/test/acceptance/stub_test.rb +52 -0
- data/test/acceptance/{stubba_acceptance_test.rb → stubba_example_test.rb} +1 -1
- data/test/{integration/stubba_test_result_integration_test.rb → acceptance/stubba_test_result_test.rb} +17 -36
- data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +155 -0
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +145 -0
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_public_class_method_test.rb +161 -0
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +141 -0
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
- data/test/execution_point.rb +3 -1
- data/test/simple_counter.rb +13 -0
- data/test/test_helper.rb +0 -1
- data/test/test_runner.rb +6 -4
- data/test/unit/any_instance_method_test.rb +1 -1
- data/test/unit/array_inspect_test.rb +1 -1
- data/test/unit/backtrace_filter_test.rb +19 -0
- data/test/unit/cardinality_test.rb +56 -0
- data/test/unit/central_test.rb +4 -63
- data/test/unit/change_state_side_effect_test.rb +41 -0
- data/test/unit/class_method_test.rb +38 -1
- data/test/unit/date_time_inspect_test.rb +1 -1
- data/test/unit/{expectation_raiser_test.rb → exception_raiser_test.rb} +14 -0
- data/test/unit/expectation_list_test.rb +4 -22
- data/test/unit/expectation_test.rb +70 -94
- data/test/unit/in_state_ordering_constraint_test.rb +43 -0
- data/test/unit/mock_test.rb +16 -37
- data/test/unit/mockery_test.rb +149 -0
- data/test/unit/{no_yield_test.rb → no_yields_test.rb} +0 -0
- data/test/unit/object_test.rb +6 -89
- data/test/unit/parameter_matchers/equals_test.rb +25 -0
- data/test/unit/parameter_matchers/has_entries_test.rb +22 -1
- data/test/unit/parameter_matchers/has_entry_test.rb +24 -2
- data/test/unit/parameter_matchers/has_key_test.rb +11 -0
- data/test/unit/parameter_matchers/has_value_test.rb +12 -0
- data/test/unit/parameter_matchers/regexp_matches_test.rb +1 -1
- data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
- data/test/unit/parameter_matchers/stub_matcher.rb +4 -0
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
- data/test/unit/single_return_value_test.rb +0 -19
- data/test/unit/state_machine_test.rb +98 -0
- metadata +108 -69
- data/lib/mocha/auto_verify.rb +0 -118
- data/lib/mocha/infinite_range.rb +0 -25
- data/lib/mocha/missing_expectation.rb +0 -17
- data/lib/mocha/setup_and_teardown.rb +0 -23
- data/lib/mocha/stub.rb +0 -18
- data/test/integration/stubba_integration_test.rb +0 -89
- data/test/unit/auto_verify_test.rb +0 -129
- data/test/unit/expectation_error_test.rb +0 -24
- data/test/unit/infinite_range_test.rb +0 -53
- data/test/unit/missing_expectation_test.rb +0 -42
- data/test/unit/setup_and_teardown_test.rb +0 -76
- 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
|