google-geo 1.0 → 2.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/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,62 @@
|
|
1
|
+
require 'mocha/metaclass'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
|
5
|
+
class ClassMethod
|
6
|
+
|
7
|
+
attr_reader :stubbee, :method
|
8
|
+
|
9
|
+
def initialize(stubbee, method)
|
10
|
+
@stubbee, @method = stubbee, method
|
11
|
+
end
|
12
|
+
|
13
|
+
def stub
|
14
|
+
hide_original_method
|
15
|
+
define_new_method
|
16
|
+
end
|
17
|
+
|
18
|
+
def unstub
|
19
|
+
remove_new_method
|
20
|
+
restore_original_method
|
21
|
+
stubbee.reset_mocha
|
22
|
+
end
|
23
|
+
|
24
|
+
def mock
|
25
|
+
stubbee.mocha
|
26
|
+
end
|
27
|
+
|
28
|
+
def hide_original_method
|
29
|
+
stubbee.__metaclass__.class_eval "alias_method :#{hidden_method}, :#{method}" if stubbee.__metaclass__.method_defined?(method)
|
30
|
+
end
|
31
|
+
|
32
|
+
def define_new_method
|
33
|
+
stubbee.__metaclass__.class_eval "def #{method}(*args, &block); mocha.method_missing(:#{method}, *args, &block); end"
|
34
|
+
end
|
35
|
+
|
36
|
+
def remove_new_method
|
37
|
+
stubbee.__metaclass__.class_eval "remove_method :#{method}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def restore_original_method
|
41
|
+
stubbee.__metaclass__.class_eval "alias_method :#{method}, :#{hidden_method}; remove_method :#{hidden_method}" if stubbee.__metaclass__.method_defined?(hidden_method)
|
42
|
+
end
|
43
|
+
|
44
|
+
def hidden_method
|
45
|
+
method_name = method.to_s.gsub(/\W/) {|s| "_substituted_character_#{s[0]}_" }
|
46
|
+
"__stubba__#{method_name}__stubba__"
|
47
|
+
end
|
48
|
+
|
49
|
+
def eql?(other)
|
50
|
+
return false unless (other.class == self.class)
|
51
|
+
(stubbee == other.stubbee) and (method == other.method)
|
52
|
+
end
|
53
|
+
|
54
|
+
alias_method :==, :eql?
|
55
|
+
|
56
|
+
def to_s
|
57
|
+
"#{stubbee}.#{method}"
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,295 @@
|
|
1
|
+
require 'mocha/infinite_range'
|
2
|
+
require 'mocha/pretty_parameters'
|
3
|
+
require 'mocha/expectation_error'
|
4
|
+
|
5
|
+
class Object
|
6
|
+
|
7
|
+
alias_method :__is_a__, :is_a?
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
module Mocha
|
12
|
+
# Methods on expectations returned from Mocha::MockMethods#expects and Mocha::MockMethods#stubs
|
13
|
+
class Expectation
|
14
|
+
|
15
|
+
# :stopdoc:
|
16
|
+
|
17
|
+
class InvalidExpectation < Exception; end
|
18
|
+
|
19
|
+
class AlwaysEqual
|
20
|
+
def ==(other)
|
21
|
+
true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
attr_reader :method_name, :backtrace
|
26
|
+
|
27
|
+
def initialize(mock, method_name, backtrace = nil)
|
28
|
+
@mock, @method_name = mock, method_name
|
29
|
+
@count = 1
|
30
|
+
@parameters, @parameter_block = AlwaysEqual.new, nil
|
31
|
+
@invoked, @return_value = 0, nil
|
32
|
+
@backtrace = backtrace || caller
|
33
|
+
@yield = nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def yield?
|
37
|
+
@yield
|
38
|
+
end
|
39
|
+
|
40
|
+
def match?(method_name, *arguments)
|
41
|
+
if @parameter_block then
|
42
|
+
@parameter_block.call(*arguments)
|
43
|
+
else
|
44
|
+
(@method_name == method_name) and (@parameters == arguments)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# :startdoc:
|
49
|
+
|
50
|
+
# :call-seq: times(range) -> expectation
|
51
|
+
#
|
52
|
+
# Modifies expectation so that the number of calls to the expected method must be within a specific +range+.
|
53
|
+
#
|
54
|
+
# +range+ can be specified as an exact integer or as a range of integers
|
55
|
+
# object = mock()
|
56
|
+
# object.expects(:expected_method).times(3)
|
57
|
+
# 3.times { object.expected_method } # => verify succeeds
|
58
|
+
#
|
59
|
+
# object = mock()
|
60
|
+
# object.expects(:expected_method).times(3)
|
61
|
+
# 2.times { object.expected_method } # => verify fails
|
62
|
+
#
|
63
|
+
# object = mock()
|
64
|
+
# object.expects(:expected_method).times(2..4)
|
65
|
+
# 3.times { object.expected_method } # => verify succeeds
|
66
|
+
#
|
67
|
+
# object = mock()
|
68
|
+
# object.expects(:expected_method).times(2..4)
|
69
|
+
# object.expected_method # => verify fails
|
70
|
+
def times(range)
|
71
|
+
@count = range
|
72
|
+
self
|
73
|
+
end
|
74
|
+
|
75
|
+
# :call-seq: never -> expectation
|
76
|
+
#
|
77
|
+
# Modifies expectation so that the expected method must never be called.
|
78
|
+
# object = mock()
|
79
|
+
# object.expects(:expected_method).never
|
80
|
+
# object.expected_method # => verify fails
|
81
|
+
#
|
82
|
+
# object = mock()
|
83
|
+
# object.expects(:expected_method).never
|
84
|
+
# object.expected_method # => verify succeeds
|
85
|
+
def never
|
86
|
+
times(0)
|
87
|
+
self
|
88
|
+
end
|
89
|
+
|
90
|
+
# :call-seq: at_least(minimum_number_of_times) -> expectation
|
91
|
+
#
|
92
|
+
# Modifies expectation so that the expected method must be called at least a +minimum_number_of_times+.
|
93
|
+
# object = mock()
|
94
|
+
# object.expects(:expected_method).at_least(2)
|
95
|
+
# 3.times { object.expected_method } # => verify succeeds
|
96
|
+
#
|
97
|
+
# object = mock()
|
98
|
+
# object.expects(:expected_method).at_least(2)
|
99
|
+
# object.expected_method # => verify fails
|
100
|
+
def at_least(minimum_number_of_times)
|
101
|
+
times(Range.at_least(minimum_number_of_times))
|
102
|
+
self
|
103
|
+
end
|
104
|
+
|
105
|
+
# :call-seq: at_least_once() -> expectation
|
106
|
+
#
|
107
|
+
# Modifies expectation so that the expected method must be called at least once.
|
108
|
+
# object = mock()
|
109
|
+
# object.expects(:expected_method).at_least_once
|
110
|
+
# object.expected_method # => verify succeeds
|
111
|
+
#
|
112
|
+
# object = mock()
|
113
|
+
# object.expects(:expected_method).at_least_once
|
114
|
+
# # => verify fails
|
115
|
+
def at_least_once()
|
116
|
+
at_least(1)
|
117
|
+
self
|
118
|
+
end
|
119
|
+
|
120
|
+
# :call-seq: at_most(maximum_number_of_times) -> expectation
|
121
|
+
#
|
122
|
+
# Modifies expectation so that the expected method must be called at most a +maximum_number_of_times+.
|
123
|
+
# object = mock()
|
124
|
+
# object.expects(:expected_method).at_most(2)
|
125
|
+
# 2.times { object.expected_method } # => verify succeeds
|
126
|
+
#
|
127
|
+
# object = mock()
|
128
|
+
# object.expects(:expected_method).at_most(2)
|
129
|
+
# 3.times { object.expected_method } # => verify fails
|
130
|
+
def at_most(maximum_number_of_times)
|
131
|
+
times(Range.at_most(maximum_number_of_times))
|
132
|
+
self
|
133
|
+
end
|
134
|
+
|
135
|
+
# :call-seq: at_most_once() -> expectation
|
136
|
+
#
|
137
|
+
# Modifies expectation so that the expected method must be called at most once.
|
138
|
+
# object = mock()
|
139
|
+
# object.expects(:expected_method).at_most_once
|
140
|
+
# object.expected_method # => verify succeeds
|
141
|
+
#
|
142
|
+
# object = mock()
|
143
|
+
# object.expects(:expected_method).at_most_once
|
144
|
+
# 2.times { object.expected_method } # => verify fails
|
145
|
+
def at_most_once()
|
146
|
+
at_most(1)
|
147
|
+
self
|
148
|
+
end
|
149
|
+
|
150
|
+
# :call-seq: with(*arguments, ¶meter_block) -> expectation
|
151
|
+
#
|
152
|
+
# Modifies expectation so that the expected method must be called with specified +arguments+.
|
153
|
+
# object = mock()
|
154
|
+
# object.expects(:expected_method).with(:param1, :param2)
|
155
|
+
# object.expected_method(:param1, :param2) # => verify succeeds
|
156
|
+
#
|
157
|
+
# object = mock()
|
158
|
+
# object.expects(:expected_method).with(:param1, :param2)
|
159
|
+
# object.expected_method(:param3) # => verify fails
|
160
|
+
# If a +parameter_block+ is given, the block is called with the parameters passed to the expected method.
|
161
|
+
# The expectation is matched if the block evaluates to +true+.
|
162
|
+
# object = mock()
|
163
|
+
# object.expects(:expected_method).with() { |value| value % 4 == 0 }
|
164
|
+
# object.expected_method(16) # => verify succeeds
|
165
|
+
#
|
166
|
+
# object = mock()
|
167
|
+
# object.expects(:expected_method).with() { |value| value % 4 == 0 }
|
168
|
+
# object.expected_method(17) # => verify fails
|
169
|
+
def with(*arguments, ¶meter_block)
|
170
|
+
@parameters, @parameter_block = arguments, parameter_block
|
171
|
+
class << @parameters; def to_s; join(', '); end; end
|
172
|
+
self
|
173
|
+
end
|
174
|
+
|
175
|
+
# :call-seq: yields(*parameters) -> expectation
|
176
|
+
#
|
177
|
+
# Modifies expectation so that when the expected method is called, it yields with the specified +parameters+.
|
178
|
+
# object = mock()
|
179
|
+
# object.expects(:expected_method).yields('result')
|
180
|
+
# yielded_value = nil
|
181
|
+
# object.expected_method { |value| yielded_value = value }
|
182
|
+
# yielded_value # => 'result'
|
183
|
+
def yields(*parameters)
|
184
|
+
@yield = true
|
185
|
+
@parameters_to_yield = parameters
|
186
|
+
self
|
187
|
+
end
|
188
|
+
|
189
|
+
# :call-seq: returns(value) -> expectation
|
190
|
+
# :call-seq: returns(*values) -> expectation
|
191
|
+
#
|
192
|
+
# Modifies expectation so that when the expected method is called, it returns the specified +value+.
|
193
|
+
# object = mock()
|
194
|
+
# object.stubs(:stubbed_method).returns('result')
|
195
|
+
# object.stubbed_method # => 'result'
|
196
|
+
# object.stubbed_method # => 'result'
|
197
|
+
# If multiple +values+ are given, these are returned in turn on consecutive calls to the method.
|
198
|
+
# object = mock()
|
199
|
+
# object.stubs(:stubbed_method).returns(1, 2)
|
200
|
+
# object.stubbed_method # => 1
|
201
|
+
# object.stubbed_method # => 2
|
202
|
+
# If +value+ is a Proc, then expected method will return result of calling Proc.
|
203
|
+
# object = mock()
|
204
|
+
# object.stubs(:stubbed_method).returns(lambda { rand(100) })
|
205
|
+
# object.stubbed_method # => 41
|
206
|
+
# object.stubbed_method # => 77
|
207
|
+
def returns(*values)
|
208
|
+
@return_value = (values.size > 1) ? lambda { values.shift } : @return_value = values.first
|
209
|
+
self
|
210
|
+
end
|
211
|
+
|
212
|
+
# :call-seq: raises(exception = RuntimeError, message = nil) -> expectation
|
213
|
+
#
|
214
|
+
# Modifies expectation so that when the expected method is called, it raises the specified +exception+ with the specified +message+.
|
215
|
+
# object = mock()
|
216
|
+
# object.expects(:expected_method).raises(Exception, 'message')
|
217
|
+
# object.expected_method # => raises exception of class Exception and with message 'message'
|
218
|
+
def raises(exception = RuntimeError, message = nil)
|
219
|
+
@return_value = message ? lambda { raise exception, message } : lambda { raise exception }
|
220
|
+
self
|
221
|
+
end
|
222
|
+
|
223
|
+
# :stopdoc:
|
224
|
+
|
225
|
+
def invoke
|
226
|
+
@invoked += 1
|
227
|
+
yield(*@parameters_to_yield) if yield? and block_given?
|
228
|
+
@return_value.__is_a__(Proc) ? @return_value.call : @return_value
|
229
|
+
end
|
230
|
+
|
231
|
+
def verify
|
232
|
+
yield(self) if block_given?
|
233
|
+
unless (@count === @invoked) then
|
234
|
+
error = ExpectationError.new(error_message(@count, @invoked))
|
235
|
+
error.set_backtrace(filtered_backtrace)
|
236
|
+
raise error
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
def mocha_lib_directory
|
241
|
+
File.expand_path(File.join(File.dirname(__FILE__), "..")) + File::SEPARATOR
|
242
|
+
end
|
243
|
+
|
244
|
+
def filtered_backtrace
|
245
|
+
backtrace.reject { |location| Regexp.new(mocha_lib_directory).match(File.expand_path(location)) }
|
246
|
+
end
|
247
|
+
|
248
|
+
def method_signature
|
249
|
+
return "#{method_name}" if @parameters.__is_a__(AlwaysEqual)
|
250
|
+
"#{@method_name}(#{PrettyParameters.new(@parameters).pretty})"
|
251
|
+
end
|
252
|
+
|
253
|
+
def error_message(expected_count, actual_count)
|
254
|
+
"#{@mock.mocha_inspect}.#{method_signature} - expected calls: #{expected_count}, actual calls: #{actual_count}"
|
255
|
+
end
|
256
|
+
|
257
|
+
# :startdoc:
|
258
|
+
|
259
|
+
end
|
260
|
+
|
261
|
+
# :stopdoc:
|
262
|
+
|
263
|
+
class Stub < Expectation
|
264
|
+
|
265
|
+
def verify
|
266
|
+
true
|
267
|
+
end
|
268
|
+
|
269
|
+
end
|
270
|
+
|
271
|
+
class MissingExpectation < Expectation
|
272
|
+
|
273
|
+
def initialize(mock, method_name)
|
274
|
+
super
|
275
|
+
@invoked = true
|
276
|
+
end
|
277
|
+
|
278
|
+
def verify
|
279
|
+
msg = error_message(0, 1)
|
280
|
+
similar_expectations_list = similar_expectations.collect { |expectation| expectation.method_signature }.join("\n")
|
281
|
+
msg << "\nSimilar expectations:\n#{similar_expectations_list}" unless similar_expectations.empty?
|
282
|
+
error = ExpectationError.new(msg)
|
283
|
+
error.set_backtrace(filtered_backtrace)
|
284
|
+
raise error if @invoked
|
285
|
+
end
|
286
|
+
|
287
|
+
def similar_expectations
|
288
|
+
@mock.expectations.select { |expectation| expectation.method_name == self.method_name }
|
289
|
+
end
|
290
|
+
|
291
|
+
end
|
292
|
+
|
293
|
+
# :startdoc:
|
294
|
+
|
295
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Range
|
2
|
+
|
3
|
+
def self.at_least(minimum_value)
|
4
|
+
Range.new(minimum_value, infinite)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.at_most(maximum_value)
|
8
|
+
Range.new(-infinite, maximum_value, false)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.infinite
|
12
|
+
1/0.0
|
13
|
+
end
|
14
|
+
|
15
|
+
alias_method :__to_s__, :to_s
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
if first.to_f.infinite? then
|
19
|
+
return "at most #{last}"
|
20
|
+
elsif last.to_f.infinite? then
|
21
|
+
return "at least #{first}"
|
22
|
+
else
|
23
|
+
__to_s__
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
class Object
|
4
|
+
def mocha_inspect
|
5
|
+
inspect =~ /#</ ? "#<#{self.class}:0x#{self.__id__.to_s(16)}>" : inspect
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class String
|
10
|
+
def mocha_inspect
|
11
|
+
inspect.gsub(/\"/, "'")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Array
|
16
|
+
def mocha_inspect
|
17
|
+
"[#{collect { |member| member.mocha_inspect }.join(', ')}]"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Hash
|
22
|
+
def mocha_inspect
|
23
|
+
"{#{collect { |key, value| "#{key.mocha_inspect} => #{value.mocha_inspect}" }.join(', ')}}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Time
|
28
|
+
def mocha_inspect
|
29
|
+
"#{inspect} (#{to_f} secs)"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Date
|
34
|
+
def mocha_inspect
|
35
|
+
to_s
|
36
|
+
end
|
37
|
+
end
|