google-geo 1.0 → 2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +5 -0
- data/README +12 -8
- data/lib/google/geo.rb +10 -6
- data/test/fixtures/invalid_map_key.xml +10 -0
- data/test/fixtures/missing_address.xml +10 -0
- data/test/fixtures/server_error.xml +10 -0
- data/test/fixtures/success.xml +36 -0
- data/test/fixtures/success_with_multiple_addresses.xml +62 -0
- data/test/fixtures/too_many_queries.xml +10 -0
- data/test/fixtures/unavailable_address.xml +10 -0
- data/test/fixtures/unknown_address.xml +10 -0
- data/test/geo_test.rb +19 -5
- data/vendor/mocha-0.4.0/COPYING +3 -0
- data/vendor/mocha-0.4.0/MIT-LICENSE +7 -0
- data/vendor/mocha-0.4.0/README +35 -0
- data/vendor/mocha-0.4.0/RELEASE +98 -0
- data/vendor/mocha-0.4.0/Rakefile +126 -0
- data/vendor/mocha-0.4.0/examples/misc.rb +36 -0
- data/vendor/mocha-0.4.0/examples/mocha.rb +26 -0
- data/vendor/mocha-0.4.0/examples/stubba.rb +65 -0
- data/vendor/mocha-0.4.0/lib/mocha.rb +19 -0
- data/vendor/mocha-0.4.0/lib/mocha/any_instance_method.rb +35 -0
- data/vendor/mocha-0.4.0/lib/mocha/auto_verify.rb +113 -0
- data/vendor/mocha-0.4.0/lib/mocha/central.rb +35 -0
- data/vendor/mocha-0.4.0/lib/mocha/class_method.rb +62 -0
- data/vendor/mocha-0.4.0/lib/mocha/expectation.rb +295 -0
- data/vendor/mocha-0.4.0/lib/mocha/expectation_error.rb +6 -0
- data/vendor/mocha-0.4.0/lib/mocha/infinite_range.rb +27 -0
- data/vendor/mocha-0.4.0/lib/mocha/inspect.rb +37 -0
- data/vendor/mocha-0.4.0/lib/mocha/instance_method.rb +8 -0
- data/vendor/mocha-0.4.0/lib/mocha/metaclass.rb +7 -0
- data/vendor/mocha-0.4.0/lib/mocha/mock.rb +20 -0
- data/vendor/mocha-0.4.0/lib/mocha/mock_methods.rb +122 -0
- data/vendor/mocha-0.4.0/lib/mocha/object.rb +100 -0
- data/vendor/mocha-0.4.0/lib/mocha/pretty_parameters.rb +28 -0
- data/vendor/mocha-0.4.0/lib/mocha/setup_and_teardown.rb +23 -0
- data/vendor/mocha-0.4.0/lib/mocha/standalone.rb +30 -0
- data/vendor/mocha-0.4.0/lib/mocha/test_case_adapter.rb +49 -0
- data/vendor/mocha-0.4.0/lib/mocha_standalone.rb +2 -0
- data/vendor/mocha-0.4.0/lib/stubba.rb +2 -0
- data/vendor/mocha-0.4.0/test/active_record_test_case.rb +36 -0
- data/vendor/mocha-0.4.0/test/all_tests.rb +75 -0
- data/vendor/mocha-0.4.0/test/execution_point.rb +34 -0
- data/vendor/mocha-0.4.0/test/method_definer.rb +18 -0
- data/vendor/mocha-0.4.0/test/mocha/any_instance_method_test.rb +124 -0
- data/vendor/mocha-0.4.0/test/mocha/auto_verify_test.rb +163 -0
- data/vendor/mocha-0.4.0/test/mocha/central_test.rb +124 -0
- data/vendor/mocha-0.4.0/test/mocha/class_method_test.rb +196 -0
- data/vendor/mocha-0.4.0/test/mocha/expectation_test.rb +357 -0
- data/vendor/mocha-0.4.0/test/mocha/infinite_range_test.rb +50 -0
- data/vendor/mocha-0.4.0/test/mocha/inspect_test.rb +90 -0
- data/vendor/mocha-0.4.0/test/mocha/metaclass_test.rb +22 -0
- data/vendor/mocha-0.4.0/test/mocha/mock_methods_test.rb +235 -0
- data/vendor/mocha-0.4.0/test/mocha/mock_test.rb +84 -0
- data/vendor/mocha-0.4.0/test/mocha/object_test.rb +165 -0
- data/vendor/mocha-0.4.0/test/mocha/pretty_parameters_test.rb +32 -0
- data/vendor/mocha-0.4.0/test/mocha/setup_and_teardown_test.rb +76 -0
- data/vendor/mocha-0.4.0/test/mocha_acceptance_test.rb +98 -0
- data/vendor/mocha-0.4.0/test/mocha_test_result_integration_test.rb +105 -0
- data/vendor/mocha-0.4.0/test/standalone_acceptance_test.rb +110 -0
- data/vendor/mocha-0.4.0/test/stubba_acceptance_test.rb +102 -0
- data/vendor/mocha-0.4.0/test/stubba_integration_test.rb +89 -0
- data/vendor/mocha-0.4.0/test/stubba_test_result_integration_test.rb +85 -0
- data/vendor/mocha-0.4.0/test/test_helper.rb +4 -0
- metadata +73 -3
@@ -0,0 +1,196 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'method_definer'
|
3
|
+
require 'mocha/mock'
|
4
|
+
|
5
|
+
require 'mocha/class_method'
|
6
|
+
|
7
|
+
class ClassMethodTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
include Mocha
|
10
|
+
|
11
|
+
def test_should_provide_hidden_version_of_method_name_starting_with_prefix
|
12
|
+
method = ClassMethod.new(nil, :original_method_name)
|
13
|
+
assert_match /^__stubba__/, method.hidden_method
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_provide_hidden_version_of_method_name_ending_with_suffix
|
17
|
+
method = ClassMethod.new(nil, :original_method_name)
|
18
|
+
assert_match /__stubba__$/, method.hidden_method
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_provide_hidden_version_of_method_name_including_original_method_name
|
22
|
+
method = ClassMethod.new(nil, :original_method_name)
|
23
|
+
assert_match /original_method_name/, method.hidden_method
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_provide_hidden_version_of_method_name_substituting_question_mark
|
27
|
+
method = ClassMethod.new(nil, :question_mark?)
|
28
|
+
assert_no_match /\?/, method.hidden_method
|
29
|
+
assert_match /question_mark_substituted_character_63/, method.hidden_method
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_should_provide_hidden_version_of_method_name_substituting_exclamation_mark
|
33
|
+
method = ClassMethod.new(nil, :exclamation_mark!)
|
34
|
+
assert_no_match /!/, method.hidden_method
|
35
|
+
assert_match /exclamation_mark_substituted_character_33/, method.hidden_method
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_provide_hidden_version_of_method_name_substituting_equals_sign
|
39
|
+
method = ClassMethod.new(nil, :equals_sign=)
|
40
|
+
assert_no_match /\=/, method.hidden_method
|
41
|
+
assert_match /equals_sign_substituted_character_61/, method.hidden_method
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_provide_hidden_version_of_method_name_substituting_brackets
|
45
|
+
method = ClassMethod.new(nil, :[])
|
46
|
+
assert_no_match /\[\]/, method.hidden_method
|
47
|
+
assert_match /substituted_character_91__substituted_character_93/, method.hidden_method
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_provide_hidden_version_of_method_name_substituting_plus_sign
|
51
|
+
method = ClassMethod.new(nil, :+)
|
52
|
+
assert_no_match /\+/, method.hidden_method
|
53
|
+
assert_match /substituted_character_43/, method.hidden_method
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_should_hide_original_method
|
57
|
+
klass = Class.new { def self.method_x; end }
|
58
|
+
method = ClassMethod.new(klass, :method_x)
|
59
|
+
hidden_method_x = method.hidden_method
|
60
|
+
|
61
|
+
method.hide_original_method
|
62
|
+
|
63
|
+
assert klass.respond_to?(hidden_method_x)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_should_respond_to_original_method_name_after_original_method_has_been_hidden
|
67
|
+
klass = Class.new { def self.original_method_name; end }
|
68
|
+
method = ClassMethod.new(klass, :original_method_name)
|
69
|
+
hidden_method_x = method.hidden_method
|
70
|
+
|
71
|
+
method.hide_original_method
|
72
|
+
|
73
|
+
assert klass.respond_to?(:original_method_name)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_should_not_hide_original_method_if_method_not_defined
|
77
|
+
klass = Class.new
|
78
|
+
method = ClassMethod.new(klass, :method_x)
|
79
|
+
hidden_method_x = method.hidden_method
|
80
|
+
|
81
|
+
method.hide_original_method
|
82
|
+
|
83
|
+
assert_equal false, klass.respond_to?(hidden_method_x)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_should_define_a_new_method_which_should_call_mocha_method_missing
|
87
|
+
klass = Class.new { def self.method_x; end }
|
88
|
+
mocha = Mocha::Mock.new
|
89
|
+
klass.define_instance_method(:mocha) { mocha }
|
90
|
+
mocha.expects(:method_x).with(:param1, :param2).returns(:result)
|
91
|
+
method = ClassMethod.new(klass, :method_x)
|
92
|
+
|
93
|
+
method.define_new_method
|
94
|
+
result = klass.method_x(:param1, :param2)
|
95
|
+
|
96
|
+
assert_equal :result, result
|
97
|
+
mocha.verify
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_should_remove_new_method
|
101
|
+
klass = Class.new { def self.method_x; end }
|
102
|
+
method = ClassMethod.new(klass, :method_x)
|
103
|
+
|
104
|
+
method.remove_new_method
|
105
|
+
|
106
|
+
assert_equal false, klass.respond_to?(:method_x)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_should_restore_original_method
|
110
|
+
klass = Class.new { def self.method_x; end }
|
111
|
+
method = ClassMethod.new(klass, :method_x)
|
112
|
+
hidden_method_x = method.hidden_method.to_sym
|
113
|
+
klass.define_instance_method(hidden_method_x) { :original_result }
|
114
|
+
|
115
|
+
method.restore_original_method
|
116
|
+
|
117
|
+
assert_equal :original_result, klass.method_x
|
118
|
+
assert_equal false, klass.respond_to?(hidden_method_x)
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_should_not_restore_original_method_if_hidden_method_is_not_defined
|
122
|
+
klass = Class.new { def self.method_x; :new_result; end }
|
123
|
+
method = ClassMethod.new(klass, :method_x)
|
124
|
+
|
125
|
+
method.restore_original_method
|
126
|
+
|
127
|
+
assert_equal :new_result, klass.method_x
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_should_call_hide_original_method
|
131
|
+
klass = Class.new { def self.method_x; end }
|
132
|
+
method = ClassMethod.new(klass, :method_x)
|
133
|
+
method.define_instance_accessor(:hide_called)
|
134
|
+
method.replace_instance_method(:hide_original_method) { self.hide_called = true }
|
135
|
+
|
136
|
+
method.stub
|
137
|
+
|
138
|
+
assert method.hide_called
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_should_call_define_new_method
|
142
|
+
klass = Class.new { def self.method_x; end }
|
143
|
+
method = ClassMethod.new(klass, :method_x)
|
144
|
+
method.define_instance_accessor(:define_called)
|
145
|
+
method.replace_instance_method(:define_new_method) { self.define_called = true }
|
146
|
+
|
147
|
+
method.stub
|
148
|
+
|
149
|
+
assert method.define_called
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_should_call_remove_new_method
|
153
|
+
klass = Class.new { def self.method_x; end }
|
154
|
+
klass.define_instance_method(:reset_mocha) { }
|
155
|
+
method = ClassMethod.new(klass, :method_x)
|
156
|
+
method.define_instance_accessor(:remove_called)
|
157
|
+
method.replace_instance_method(:remove_new_method) { self.remove_called = true }
|
158
|
+
|
159
|
+
method.unstub
|
160
|
+
|
161
|
+
assert method.remove_called
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_should_call_restore_original_method
|
165
|
+
klass = Class.new { def self.method_x; end }
|
166
|
+
klass.define_instance_method(:reset_mocha) { }
|
167
|
+
method = ClassMethod.new(klass, :method_x)
|
168
|
+
method.define_instance_accessor(:restore_called)
|
169
|
+
method.replace_instance_method(:restore_original_method) { self.restore_called = true }
|
170
|
+
|
171
|
+
method.unstub
|
172
|
+
|
173
|
+
assert method.restore_called
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_should_call_reset_mocha
|
177
|
+
klass = Class.new { def self.method_x; end }
|
178
|
+
klass.define_instance_accessor(:reset_called)
|
179
|
+
klass.define_instance_method(:reset_mocha) { self.reset_called = true }
|
180
|
+
method = ClassMethod.new(klass, :method_x)
|
181
|
+
method.replace_instance_method(:restore_original_method) { }
|
182
|
+
|
183
|
+
method.unstub
|
184
|
+
|
185
|
+
assert klass.reset_called
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_should_return_mock_for_stubbee
|
189
|
+
mocha = Object.new
|
190
|
+
stubbee = Object.new
|
191
|
+
stubbee.define_instance_accessor(:mocha) { mocha }
|
192
|
+
method = ClassMethod.new(stubbee, :method_name)
|
193
|
+
assert_equal stubbee.mocha, method.mock
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
@@ -0,0 +1,357 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'method_definer'
|
3
|
+
require 'mocha/expectation'
|
4
|
+
require 'execution_point'
|
5
|
+
|
6
|
+
class ExpectationTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
include Mocha
|
9
|
+
|
10
|
+
def new_expectation
|
11
|
+
Expectation.new(nil, :expected_method)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_should_match_calls_to_same_method_with_any_parameters
|
15
|
+
assert new_expectation.match?(:expected_method, 1, 2, 3)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_match_calls_to_same_method_with_exactly_zero_parameters
|
19
|
+
expectation = new_expectation.with()
|
20
|
+
assert expectation.match?(:expected_method)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_should_not_match_calls_to_same_method_with_more_than_zero_parameters
|
24
|
+
expectation = new_expectation.with()
|
25
|
+
assert !expectation.match?(:expected_method, 1, 2, 3)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_should_match_calls_to_same_method_with_expected_parameter_values
|
29
|
+
expectation = new_expectation.with(1, 2, 3)
|
30
|
+
assert expectation.match?(:expected_method, 1, 2, 3)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_match_calls_to_same_method_with_parameters_constrained_as_expected
|
34
|
+
expectation = new_expectation.with() {|x, y, z| x + y == z}
|
35
|
+
assert expectation.match?(:expected_method, 1, 2, 3)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_not_match_calls_to_different_methods_with_no_parameters
|
39
|
+
assert !new_expectation.match?(:unexpected_method)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_not_match_calls_to_same_method_with_too_few_parameters
|
43
|
+
expectation = new_expectation.with(1, 2, 3)
|
44
|
+
assert !expectation.match?(:unexpected_method, 1, 2)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_should_not_match_calls_to_same_method_with_too_many_parameters
|
48
|
+
expectation = new_expectation.with(1, 2)
|
49
|
+
assert !expectation.match?(:unexpected_method, 1, 2, 3)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_should_not_match_calls_to_same_method_with_unexpected_parameter_values
|
53
|
+
expectation = new_expectation.with(1, 2, 3)
|
54
|
+
assert !expectation.match?(:unexpected_method, 1, 0, 3)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_should_not_match_calls_to_same_method_with_parameters_not_constrained_as_expected
|
58
|
+
expectation = new_expectation.with() {|x, y, z| x + y == z}
|
59
|
+
assert !expectation.match?(:expected_method, 1, 0, 3)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_should_store_provided_backtrace
|
63
|
+
backtrace = Object.new
|
64
|
+
expectation = Expectation.new(nil, :expected_method, backtrace)
|
65
|
+
assert_equal backtrace, expectation.backtrace
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_should_default_backtrace_to_caller
|
69
|
+
execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
|
70
|
+
assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_should_not_yield
|
74
|
+
yielded = false
|
75
|
+
new_expectation.invoke() { yielded = true }
|
76
|
+
assert_equal false, yielded
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_should_yield_no_parameters
|
80
|
+
expectation = new_expectation.yields
|
81
|
+
yielded_parameters = nil
|
82
|
+
expectation.invoke() { |*parameters| yielded_parameters = parameters }
|
83
|
+
assert_equal Array.new, yielded_parameters
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_should_yield_with_specified_parameters
|
87
|
+
parameters_for_yield = [1, 2, 3]
|
88
|
+
expectation = new_expectation.yields(*parameters_for_yield)
|
89
|
+
yielded_parameters = nil
|
90
|
+
expectation.invoke() { |*parameters| yielded_parameters = parameters }
|
91
|
+
assert_equal parameters_for_yield, yielded_parameters
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_should_return_specified_value
|
95
|
+
expectation = new_expectation.returns(99)
|
96
|
+
assert_equal 99, expectation.invoke
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_should_return_same_specified_value_multiple_times
|
100
|
+
expectation = new_expectation.returns(99)
|
101
|
+
assert_equal 99, expectation.invoke
|
102
|
+
assert_equal 99, expectation.invoke
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_should_return_specified_values_on_consecutive_calls
|
106
|
+
expectation = new_expectation.returns(99, 100, 101)
|
107
|
+
assert_equal 99, expectation.invoke
|
108
|
+
assert_equal 100, expectation.invoke
|
109
|
+
assert_equal 101, expectation.invoke
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_should_return_specified_values_on_consecutive_calls_even_if_values_are_modified
|
113
|
+
values = [99, 100, 101]
|
114
|
+
expectation = new_expectation.returns(*values)
|
115
|
+
values.shift
|
116
|
+
assert_equal 99, expectation.invoke
|
117
|
+
assert_equal 100, expectation.invoke
|
118
|
+
assert_equal 101, expectation.invoke
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_should_return_nil_by_default
|
122
|
+
assert_nil new_expectation.invoke
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_should_return_nil_if_no_value_specified
|
126
|
+
expectation = new_expectation.returns()
|
127
|
+
assert_nil expectation.invoke
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_should_return_evaluated_proc
|
131
|
+
proc = lambda { 99 }
|
132
|
+
expectation = new_expectation.returns(proc)
|
133
|
+
assert_equal 99, expectation.invoke
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_should_return_evaluated_proc_without_using_is_a_method
|
137
|
+
proc = lambda { 99 }
|
138
|
+
proc.define_instance_accessor(:called)
|
139
|
+
proc.called = false
|
140
|
+
proc.replace_instance_method(:is_a?) { self.called = true; true}
|
141
|
+
expectation = new_expectation.returns(proc)
|
142
|
+
expectation.invoke
|
143
|
+
assert_equal false, proc.called
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_should_raise_runtime_exception
|
147
|
+
expectation = new_expectation.raises
|
148
|
+
assert_raise(RuntimeError) { expectation.invoke }
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_should_raise_custom_exception
|
152
|
+
exception = Class.new(Exception)
|
153
|
+
expectation = new_expectation.raises(exception)
|
154
|
+
assert_raise(exception) { expectation.invoke }
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_should_raise_same_instance_of_custom_exception
|
158
|
+
exception_klass = Class.new(StandardError)
|
159
|
+
expected_exception = exception_klass.new
|
160
|
+
expectation = new_expectation.raises(expected_exception)
|
161
|
+
actual_exception = assert_raise(exception_klass) { expectation.invoke }
|
162
|
+
assert_same expected_exception, actual_exception
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_should_use_the_default_exception_message
|
166
|
+
expectation = new_expectation.raises(Exception)
|
167
|
+
exception = assert_raise(Exception) { expectation.invoke }
|
168
|
+
assert_equal Exception.new.message, exception.message
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_should_raise_custom_exception_with_message
|
172
|
+
exception_msg = "exception message"
|
173
|
+
expectation = new_expectation.raises(Exception, exception_msg)
|
174
|
+
exception = assert_raise(Exception) { expectation.invoke }
|
175
|
+
assert_equal exception_msg, exception.message
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_should_not_raise_error_on_verify_if_expected_call_was_made
|
179
|
+
expectation = new_expectation
|
180
|
+
expectation.invoke
|
181
|
+
assert_nothing_raised(ExpectationError) {
|
182
|
+
expectation.verify
|
183
|
+
}
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_should_not_raise_error_on_verify_if_expected_call_was_made_at_least_once
|
187
|
+
expectation = new_expectation.at_least_once
|
188
|
+
3.times {expectation.invoke}
|
189
|
+
assert_nothing_raised(ExpectationError) {
|
190
|
+
expectation.verify
|
191
|
+
}
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_should_raise_error_on_verify_if_expected_call_was_not_made_at_least_once
|
195
|
+
expectation = new_expectation.with(1, 2, 3).at_least_once
|
196
|
+
e = assert_raise(ExpectationError) {
|
197
|
+
expectation.verify
|
198
|
+
}
|
199
|
+
assert_match(/expected calls: at least 1, actual calls: 0/i, e.message)
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_should_not_raise_error_on_verify_if_expected_call_was_made_expected_number_of_times
|
203
|
+
expectation = new_expectation.times(2)
|
204
|
+
2.times {expectation.invoke}
|
205
|
+
assert_nothing_raised(ExpectationError) {
|
206
|
+
expectation.verify
|
207
|
+
}
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_should_expect_call_not_to_be_made
|
211
|
+
expectation = new_expectation
|
212
|
+
expectation.define_instance_accessor(:how_many_times)
|
213
|
+
expectation.replace_instance_method(:times) { |how_many_times| self.how_many_times = how_many_times }
|
214
|
+
expectation.never
|
215
|
+
assert_equal 0, expectation.how_many_times
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_should_raise_error_on_verify_if_expected_call_was_made_too_few_times
|
219
|
+
expectation = new_expectation.times(2)
|
220
|
+
1.times {expectation.invoke}
|
221
|
+
e = assert_raise(ExpectationError) {
|
222
|
+
expectation.verify
|
223
|
+
}
|
224
|
+
assert_match(/expected calls: 2, actual calls: 1/i, e.message)
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_should_raise_error_on_verify_if_expected_call_was_made_too_many_times
|
228
|
+
expectation = new_expectation.times(2)
|
229
|
+
3.times {expectation.invoke}
|
230
|
+
assert_raise(ExpectationError) {
|
231
|
+
expectation.verify
|
232
|
+
}
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_should_yield_self_to_block
|
236
|
+
expectation = new_expectation
|
237
|
+
expectation.invoke
|
238
|
+
yielded_expectation = nil
|
239
|
+
expectation.verify { |x| yielded_expectation = x }
|
240
|
+
assert_equal expectation, yielded_expectation
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_should_yield_to_block_before_raising_exception
|
244
|
+
yielded = false
|
245
|
+
assert_raise(ExpectationError) {
|
246
|
+
new_expectation.verify { |x| yielded = true }
|
247
|
+
}
|
248
|
+
assert yielded
|
249
|
+
end
|
250
|
+
|
251
|
+
def test_should_store_backtrace_from_point_where_expectation_was_created
|
252
|
+
execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
|
253
|
+
assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
|
254
|
+
end
|
255
|
+
|
256
|
+
def test_should_set_backtrace_on_assertion_failed_error_to_point_where_expectation_was_created
|
257
|
+
execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
|
258
|
+
error = assert_raise(ExpectationError) {
|
259
|
+
expectation.verify
|
260
|
+
}
|
261
|
+
assert_equal execution_point, ExecutionPoint.new(error.backtrace)
|
262
|
+
end
|
263
|
+
|
264
|
+
def test_should_display_expectation_message_in_exception_message
|
265
|
+
options = [:a, :b, {:c => 1, :d => 2}]
|
266
|
+
expectation = new_expectation.with(*options)
|
267
|
+
exception = assert_raise(ExpectationError) {
|
268
|
+
expectation.verify
|
269
|
+
}
|
270
|
+
assert exception.message.include?(expectation.method_signature)
|
271
|
+
end
|
272
|
+
|
273
|
+
def test_should_combine_method_name_and_pretty_parameters
|
274
|
+
arguments = 1, 2, {'a' => true, :b => false}, [1, 2, 3]
|
275
|
+
expectation = new_expectation.with(*arguments)
|
276
|
+
assert_equal "expected_method(#{PrettyParameters.new(arguments).pretty})", expectation.method_signature
|
277
|
+
end
|
278
|
+
|
279
|
+
def test_should_not_include_parameters_in_message
|
280
|
+
assert_equal "expected_method", new_expectation.method_signature
|
281
|
+
end
|
282
|
+
|
283
|
+
def test_should_always_verify_successfully
|
284
|
+
stub = Stub.new(nil, :expected_method)
|
285
|
+
assert stub.verify
|
286
|
+
stub.invoke
|
287
|
+
assert stub.verify
|
288
|
+
end
|
289
|
+
|
290
|
+
def test_should_raise_error_with_message_indicating_which_method_was_expected_to_be_called_on_which_mock_object
|
291
|
+
mock = Class.new { def mocha_inspect; 'mock'; end }.new
|
292
|
+
expectation = Expectation.new(mock, :expected_method)
|
293
|
+
e = assert_raise(ExpectationError) { expectation.verify }
|
294
|
+
assert_match "mock.expected_method", e.message
|
295
|
+
end
|
296
|
+
|
297
|
+
end
|
298
|
+
|
299
|
+
class ExpectationSimilarExpectationsTest < Test::Unit::TestCase
|
300
|
+
|
301
|
+
include Mocha
|
302
|
+
|
303
|
+
def new_expectation
|
304
|
+
Expectation.new(nil, :expected_method)
|
305
|
+
end
|
306
|
+
|
307
|
+
def test_should_find_expectations_to_the_same_method
|
308
|
+
expectation = new_expectation.with(1)
|
309
|
+
mock = Object.new
|
310
|
+
mock.define_instance_method(:expectations) { [expectation] }
|
311
|
+
failed_expectation = MissingExpectation.new(mock, :expected_method).with(2)
|
312
|
+
assert_equal [expectation], failed_expectation.similar_expectations
|
313
|
+
end
|
314
|
+
|
315
|
+
def test_should_report_similar_expectations
|
316
|
+
mock = Object.new
|
317
|
+
expectation_1 = new_expectation.with(1)
|
318
|
+
expectation_2 = new_expectation.with(2)
|
319
|
+
mock = Object.new
|
320
|
+
mock.define_instance_method(:expectations) { [expectation_1, expectation_2] }
|
321
|
+
missing_expectation = MissingExpectation.new(mock, :expected_method).with(3)
|
322
|
+
exception = assert_raise(ExpectationError) { missing_expectation.verify }
|
323
|
+
assert_equal "#{mock.mocha_inspect}.expected_method(3) - expected calls: 0, actual calls: 1\nSimilar expectations:\nexpected_method(1)\nexpected_method(2)", exception.message
|
324
|
+
end
|
325
|
+
|
326
|
+
def test_should_ignore_expectations_to_different_methods
|
327
|
+
expectation = new_expectation.with(1)
|
328
|
+
mock = Object.new
|
329
|
+
mock.define_instance_method(:expectations) { [expectation] }
|
330
|
+
failed_expectation = MissingExpectation.new(mock, :other_method).with(1)
|
331
|
+
assert failed_expectation.similar_expectations.empty?
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_should_not_report_similar_expectations
|
335
|
+
expectation = new_expectation.with(1)
|
336
|
+
mock = Object.new
|
337
|
+
mock.define_instance_method(:expectations) { [expectation] }
|
338
|
+
mock.define_instance_method(:mocha_inspect) { 'mocha_inspect' }
|
339
|
+
missing_expectation = MissingExpectation.new(mock, :unexpected_method).with(1)
|
340
|
+
exception = assert_raise(ExpectationError) { missing_expectation.verify }
|
341
|
+
assert_equal "mocha_inspect.unexpected_method(1) - expected calls: 0, actual calls: 1", exception.message
|
342
|
+
end
|
343
|
+
|
344
|
+
def test_should_exclude_mocha_locations_from_backtrace
|
345
|
+
mocha_lib = "/username/workspace/mocha_wibble/lib/"
|
346
|
+
backtrace = [ mocha_lib + 'exclude/me/1', mocha_lib + 'exclude/me/2', '/keep/me', mocha_lib + 'exclude/me/3']
|
347
|
+
expectation = Expectation.new(nil, :expected_method, backtrace)
|
348
|
+
expectation.define_instance_method(:mocha_lib_directory) { mocha_lib }
|
349
|
+
assert_equal ['/keep/me'], expectation.filtered_backtrace
|
350
|
+
end
|
351
|
+
|
352
|
+
def test_should_determine_path_for_mocha_lib_directory
|
353
|
+
expectation = new_expectation()
|
354
|
+
assert_match Regexp.new("/lib/$"), expectation.mocha_lib_directory
|
355
|
+
end
|
356
|
+
|
357
|
+
end
|