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,126 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake/rdoctask'
|
3
|
+
require 'rake/gempackagetask'
|
4
|
+
require 'rake/contrib/sshpublisher'
|
5
|
+
|
6
|
+
module Mocha
|
7
|
+
VERSION = "0.4.0"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Default task is currently to run all tests"
|
11
|
+
task :default => :test_all
|
12
|
+
|
13
|
+
desc "Run all tests"
|
14
|
+
task :test_all do
|
15
|
+
$: << "#{File.dirname(__FILE__)}/test"
|
16
|
+
require 'test/all_tests'
|
17
|
+
end
|
18
|
+
|
19
|
+
desc 'Generate RDoc'
|
20
|
+
Rake::RDocTask.new do |task|
|
21
|
+
task.main = 'README'
|
22
|
+
task.title = 'Mocha'
|
23
|
+
task.rdoc_dir = 'doc'
|
24
|
+
task.template = "html_with_google_analytics"
|
25
|
+
task.options << "--line-numbers" << "--inline-source"
|
26
|
+
task.rdoc_files.include('README', 'RELEASE', 'COPYING', 'MIT-LICENSE', 'agiledox.txt', 'lib/mocha/auto_verify.rb', 'lib/mocha/mock_methods.rb', 'lib/mocha/expectation.rb', 'lib/mocha/object.rb')
|
27
|
+
end
|
28
|
+
task :rdoc => :examples
|
29
|
+
|
30
|
+
desc "Upload RDoc to RubyForge"
|
31
|
+
task :publish_rdoc => [:rdoc, :examples] do
|
32
|
+
Rake::SshDirPublisher.new("jamesmead@rubyforge.org", "/var/www/gforge-projects/mocha", "doc").upload
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Generate agiledox-like documentation for tests"
|
36
|
+
file 'agiledox.txt' do
|
37
|
+
File.open('agiledox.txt', 'w') do |output|
|
38
|
+
tests = FileList['test/**/*_test.rb']
|
39
|
+
tests.each do |file|
|
40
|
+
m = %r".*/([^/].*)_test.rb".match(file)
|
41
|
+
output << m[1]+" should:\n"
|
42
|
+
test_definitions = File::readlines(file).select {|line| line =~ /.*def test.*/}
|
43
|
+
test_definitions.sort.each do |definition|
|
44
|
+
m = %r"test_(should_)?(.*)".match(definition)
|
45
|
+
output << " - "+m[2].gsub(/_/," ") << "\n"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "Convert example ruby files to syntax-highlighted html"
|
52
|
+
task :examples do
|
53
|
+
require 'coderay'
|
54
|
+
mkdir_p 'doc/examples'
|
55
|
+
File.open('doc/examples/coderay.css', 'w') do |output|
|
56
|
+
output << CodeRay::Encoders[:html]::CSS.new.stylesheet
|
57
|
+
end
|
58
|
+
['mocha', 'stubba', 'misc'].each do |filename|
|
59
|
+
File.open("doc/examples/#{filename}.html", 'w') do |file|
|
60
|
+
file << "<html>"
|
61
|
+
file << "<head>"
|
62
|
+
file << %q(<link rel="stylesheet" media="screen" href="coderay.css" type="text/css">)
|
63
|
+
file << "</head>"
|
64
|
+
file << "<body>"
|
65
|
+
file << CodeRay.scan_file("examples/#{filename}.rb").html.div
|
66
|
+
file << "</body>"
|
67
|
+
file << "</html>"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
Gem::manage_gems
|
73
|
+
|
74
|
+
specification = Gem::Specification.new do |s|
|
75
|
+
s.name = "mocha"
|
76
|
+
s.summary = "Mocking and stubbing library"
|
77
|
+
s.version = Mocha::VERSION
|
78
|
+
s.author = 'James Mead'
|
79
|
+
s.description = <<-EOF
|
80
|
+
Mocking and stubbing library with JMock/SchMock syntax, which allows mocking and stubbing of methods on real (non-mock) classes.
|
81
|
+
EOF
|
82
|
+
s.email = 'mocha-developer@rubyforge.org'
|
83
|
+
s.homepage = 'http://mocha.rubyforge.org'
|
84
|
+
s.rubyforge_project = 'mocha'
|
85
|
+
|
86
|
+
s.has_rdoc = true
|
87
|
+
s.extra_rdoc_files = ['README', 'COPYING']
|
88
|
+
s.rdoc_options << '--title' << 'Mocha' << '--main' << 'README' << '--line-numbers'
|
89
|
+
|
90
|
+
s.autorequire = 'mocha'
|
91
|
+
s.files = FileList['{lib,test,examples}/**/*.rb', '[A-Z]*'].exclude('TODO').to_a
|
92
|
+
s.test_file = "test/all_tests.rb"
|
93
|
+
end
|
94
|
+
|
95
|
+
Rake::GemPackageTask.new(specification) do |package|
|
96
|
+
package.need_zip = true
|
97
|
+
package.need_tar = true
|
98
|
+
end
|
99
|
+
|
100
|
+
task :verify_user do
|
101
|
+
raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
|
102
|
+
end
|
103
|
+
|
104
|
+
task :verify_password do
|
105
|
+
raise "RUBYFORGE_PASSWORD environment variable not set!" unless ENV['RUBYFORGE_PASSWORD']
|
106
|
+
end
|
107
|
+
|
108
|
+
desc "Publish package files on RubyForge."
|
109
|
+
task :publish_packages => [:verify_user, :verify_password, :package] do
|
110
|
+
require 'meta_project'
|
111
|
+
require 'rake/contrib/xforge'
|
112
|
+
release_files = FileList[
|
113
|
+
"pkg/mocha-#{Mocha::VERSION}.gem",
|
114
|
+
"pkg/mocha-#{Mocha::VERSION}.tgz",
|
115
|
+
"pkg/mocha-#{Mocha::VERSION}.zip"
|
116
|
+
]
|
117
|
+
|
118
|
+
Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new('mocha')) do |release|
|
119
|
+
release.user_name = ENV['RUBYFORGE_USER']
|
120
|
+
release.password = ENV['RUBYFORGE_PASSWORD']
|
121
|
+
release.files = release_files.to_a
|
122
|
+
release.release_name = "Mocha #{Mocha::VERSION}"
|
123
|
+
release.release_changes = ''
|
124
|
+
release.release_notes = ''
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# Mocking a class method
|
2
|
+
|
3
|
+
product = Product.new
|
4
|
+
Product.expects(:find).with(1).returns(product)
|
5
|
+
assert_equal product, Product.find(1)
|
6
|
+
|
7
|
+
# Mocking an instance method on a real object
|
8
|
+
|
9
|
+
product = Product.new
|
10
|
+
product.expects(:save).returns(true)
|
11
|
+
assert product.save
|
12
|
+
|
13
|
+
# Stubbing instance methods on real object
|
14
|
+
|
15
|
+
prices = [stub(:pence => 1000), stub(:pence => 2000)]
|
16
|
+
product = Product.new
|
17
|
+
product.stubs(:prices).returns(prices)
|
18
|
+
assert_equal [1000, 2000], product.prices.collect {|p| p.pence}
|
19
|
+
|
20
|
+
# Stubbing an instance method on all instances of a class
|
21
|
+
|
22
|
+
Product.any_instance.stubs(:name).returns('stubbed_name')
|
23
|
+
product = Product.new
|
24
|
+
assert_equal 'stubbed_name', product.name
|
25
|
+
|
26
|
+
# Traditional mocking
|
27
|
+
|
28
|
+
object = mock()
|
29
|
+
object.expects(:expected_method).with(:p1, :p2).returns(:result)
|
30
|
+
assert_equal :result, object.expected_method(:p1, :p2)
|
31
|
+
|
32
|
+
# Shortcuts
|
33
|
+
|
34
|
+
object = stub(:method1 => :result1, :method2 => :result2)
|
35
|
+
assert_equal :result1, object.method1
|
36
|
+
assert_equal :result2, object.method2
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Enterprise
|
2
|
+
|
3
|
+
def initialize(dilithium)
|
4
|
+
@dilithium = dilithium
|
5
|
+
end
|
6
|
+
|
7
|
+
def go(warp_factor)
|
8
|
+
warp_factor.times { @dilithium.nuke(:anti_matter) }
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'test/unit'
|
14
|
+
require 'rubygems'
|
15
|
+
require 'mocha'
|
16
|
+
|
17
|
+
class EnterpriseTest < Test::Unit::TestCase
|
18
|
+
|
19
|
+
def test_should_boldly_go
|
20
|
+
dilithium = mock()
|
21
|
+
dilithium.expects(:nuke).with(:anti_matter).at_least_once # auto-verified at end of test
|
22
|
+
enterprise = Enterprise.new(dilithium)
|
23
|
+
enterprise.go(2)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
class Order
|
2
|
+
|
3
|
+
attr_accessor :shipped_on
|
4
|
+
|
5
|
+
def total_cost
|
6
|
+
line_items.inject(0) { |total, line_item| total + line_item.price } + shipping_cost
|
7
|
+
end
|
8
|
+
|
9
|
+
def total_weight
|
10
|
+
line_items.inject(0) { |total, line_item| total + line_item.weight }
|
11
|
+
end
|
12
|
+
|
13
|
+
def shipping_cost
|
14
|
+
total_weight * 5 + 10
|
15
|
+
end
|
16
|
+
|
17
|
+
class << self
|
18
|
+
|
19
|
+
def find_all
|
20
|
+
# Database.connection.execute('select * from orders...
|
21
|
+
end
|
22
|
+
|
23
|
+
def number_shipped_since(date)
|
24
|
+
find_all.select { |order| order.shipped_on > date }.size
|
25
|
+
end
|
26
|
+
|
27
|
+
def unshipped_value
|
28
|
+
find_all.inject(0) { |total, order| order.shipped_on ? total : total + order.total_cost }
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
require 'test/unit'
|
36
|
+
require 'rubygems'
|
37
|
+
require 'stubba'
|
38
|
+
|
39
|
+
class OrderTest < Test::Unit::TestCase
|
40
|
+
|
41
|
+
# illustrates stubbing instance method
|
42
|
+
def test_should_calculate_shipping_cost_based_on_total_weight
|
43
|
+
order = Order.new
|
44
|
+
order.stubs(:total_weight).returns(10)
|
45
|
+
assert_equal 60, order.shipping_cost
|
46
|
+
end
|
47
|
+
|
48
|
+
# illustrates stubbing class method
|
49
|
+
def test_should_count_number_of_orders_shipped_after_specified_date
|
50
|
+
now = Time.now; week_in_secs = 7 * 24 * 60 * 60
|
51
|
+
order_1 = Order.new; order_1.shipped_on = now - 1 * week_in_secs
|
52
|
+
order_2 = Order.new; order_2.shipped_on = now - 3 * week_in_secs
|
53
|
+
Order.stubs(:find_all).returns([order_1, order_2])
|
54
|
+
assert_equal 1, Order.number_shipped_since(now - 2 * week_in_secs)
|
55
|
+
end
|
56
|
+
|
57
|
+
# illustrates stubbing instance method for all instances of a class
|
58
|
+
def test_should_calculate_value_of_unshipped_orders
|
59
|
+
Order.stubs(:find_all).returns([Order.new, Order.new, Order.new])
|
60
|
+
Order.any_instance.stubs(:shipped_on).returns(nil)
|
61
|
+
Order.any_instance.stubs(:total_cost).returns(10)
|
62
|
+
assert_equal 30, Order.unshipped_value
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mocha_standalone'
|
2
|
+
require 'mocha/test_case_adapter'
|
3
|
+
|
4
|
+
require 'test/unit/testcase'
|
5
|
+
|
6
|
+
module Test
|
7
|
+
|
8
|
+
module Unit
|
9
|
+
|
10
|
+
class TestCase
|
11
|
+
|
12
|
+
include Mocha::Standalone
|
13
|
+
include Mocha::TestCaseAdapter
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'mocha/class_method'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
|
5
|
+
class AnyInstanceMethod < ClassMethod
|
6
|
+
|
7
|
+
def unstub
|
8
|
+
remove_new_method
|
9
|
+
restore_original_method
|
10
|
+
stubbee.any_instance.reset_mocha
|
11
|
+
end
|
12
|
+
|
13
|
+
def mock
|
14
|
+
stubbee.any_instance.mocha
|
15
|
+
end
|
16
|
+
|
17
|
+
def hide_original_method
|
18
|
+
stubbee.class_eval "alias_method :#{hidden_method}, :#{method}" if stubbee.method_defined?(method)
|
19
|
+
end
|
20
|
+
|
21
|
+
def define_new_method
|
22
|
+
stubbee.class_eval "def #{method}(*args, &block); self.class.any_instance.mocha.method_missing(:#{method}, *args, &block); end"
|
23
|
+
end
|
24
|
+
|
25
|
+
def remove_new_method
|
26
|
+
stubbee.class_eval "remove_method :#{method}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def restore_original_method
|
30
|
+
stubbee.class_eval "alias_method :#{method}, :#{hidden_method}; remove_method :#{hidden_method}" if stubbee.method_defined?(hidden_method)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'mocha/mock'
|
2
|
+
|
3
|
+
# Methods added to TestCase allowing creation of mock objects.
|
4
|
+
#
|
5
|
+
# Mocks created this way will have their expectations automatically verified at the end of the test.
|
6
|
+
#
|
7
|
+
# See Mocha::MockMethods for methods on mock objects.
|
8
|
+
module Mocha
|
9
|
+
|
10
|
+
module AutoVerify
|
11
|
+
|
12
|
+
def mocks # :nodoc:
|
13
|
+
@mocks ||= []
|
14
|
+
end
|
15
|
+
|
16
|
+
def reset_mocks # :nodoc:
|
17
|
+
@mocks = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
# :call-seq: mock(name) -> mock object
|
21
|
+
# mock(expected_methods = {}) -> mock object
|
22
|
+
# mock(name, expected_methods = {}) -> mock object
|
23
|
+
#
|
24
|
+
# Creates a mock object.
|
25
|
+
#
|
26
|
+
# +name+ is a +String+ identifier for the mock object.
|
27
|
+
#
|
28
|
+
# +expected_methods+ is a +Hash+ with expected method name symbols as keys and corresponding return values as values.
|
29
|
+
#
|
30
|
+
# Note that (contrary to expectations set up by #stub) these expectations <b>must</b> be fulfilled during the test.
|
31
|
+
# def test_product
|
32
|
+
# product = mock('ipod_product', :manufacturer => 'ipod', :price => 100)
|
33
|
+
# assert_equal 'ipod', product.manufacturer
|
34
|
+
# assert_equal 100, product.price
|
35
|
+
# # an error will be raised unless both Product#manufacturer and Product#price have been called
|
36
|
+
# end
|
37
|
+
def mock(*args)
|
38
|
+
name, expectations = name_and_expectations_from_args(args)
|
39
|
+
build_mock_with_expectations(:expects, expectations, name)
|
40
|
+
end
|
41
|
+
|
42
|
+
# :call-seq: stub(name) -> mock object
|
43
|
+
# stub(stubbed_methods = {}) -> mock object
|
44
|
+
# stub(name, stubbed_methods = {}) -> mock object
|
45
|
+
#
|
46
|
+
# Creates a mock object.
|
47
|
+
#
|
48
|
+
# +name+ is a +String+ identifier for the mock object.
|
49
|
+
#
|
50
|
+
# +stubbed_methods+ is a +Hash+ with stubbed method name symbols as keys and corresponding return values as values.
|
51
|
+
#
|
52
|
+
# Note that (contrary to expectations set up by #mock) these expectations <b>need not</b> be fulfilled during the test.
|
53
|
+
# def test_product
|
54
|
+
# product = stub('ipod_product', :manufacturer => 'ipod', :price => 100)
|
55
|
+
# assert_equal 'ipod', product.manufacturer
|
56
|
+
# assert_equal 100, product.price
|
57
|
+
# # an error will not be raised even if Product#manufacturer and Product#price have not been called
|
58
|
+
# end
|
59
|
+
def stub(*args)
|
60
|
+
name, expectations = name_and_expectations_from_args(args)
|
61
|
+
build_mock_with_expectations(:stubs, expectations, name)
|
62
|
+
end
|
63
|
+
|
64
|
+
# :call-seq: stub_everything(name) -> mock object
|
65
|
+
# stub_everything(stubbed_methods = {}) -> mock object
|
66
|
+
# stub_everything(name, stubbed_methods = {}) -> mock object
|
67
|
+
#
|
68
|
+
# Creates a mock object that accepts calls to any method.
|
69
|
+
#
|
70
|
+
# By default it will return +nil+ for any method call.
|
71
|
+
#
|
72
|
+
# +name+ and +stubbed_methods+ work in the same way as for #stub.
|
73
|
+
# def test_product
|
74
|
+
# product = stub_everything('ipod_product', :price => 100)
|
75
|
+
# assert_nil product.manufacturer
|
76
|
+
# assert_nil product.any_old_method
|
77
|
+
# assert_equal 100, product.price
|
78
|
+
# end
|
79
|
+
def stub_everything(*args)
|
80
|
+
name, expectations = name_and_expectations_from_args(args)
|
81
|
+
build_mock_with_expectations(:stub_everything, expectations, name)
|
82
|
+
end
|
83
|
+
|
84
|
+
def verify_mocks # :nodoc:
|
85
|
+
mocks.each { |mock| mock.verify { yield if block_given? } }
|
86
|
+
end
|
87
|
+
|
88
|
+
def teardown_mocks # :nodoc:
|
89
|
+
reset_mocks
|
90
|
+
end
|
91
|
+
|
92
|
+
def build_mock_with_expectations(expectation_type = :expects, expectations = {}, name = nil) # :nodoc:
|
93
|
+
stub_everything = (expectation_type == :stub_everything)
|
94
|
+
expectation_type = :stubs if expectation_type == :stub_everything
|
95
|
+
mock = Mocha::Mock.new(stub_everything, name)
|
96
|
+
expectations.each do |method, result|
|
97
|
+
mock.__send__(expectation_type, method).returns(result)
|
98
|
+
end
|
99
|
+
mocks << mock
|
100
|
+
mock
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def name_and_expectations_from_args(args) # :nodoc:
|
106
|
+
name = args.first.is_a?(String) ? args.delete_at(0) : nil
|
107
|
+
expectations = args.first || {}
|
108
|
+
[name, expectations]
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Mocha
|
2
|
+
|
3
|
+
class Central
|
4
|
+
|
5
|
+
attr_accessor :stubba_methods
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
self.stubba_methods = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def stub(method)
|
12
|
+
unless stubba_methods.include?(method)
|
13
|
+
method.stub
|
14
|
+
stubba_methods.push method
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def verify_all(&block)
|
19
|
+
unique_mocks.each { |mock| mock.verify(&block) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def unique_mocks
|
23
|
+
stubba_methods.inject({}) { |mocks, method| mocks[method.mock.__id__] = method.mock; mocks }.values
|
24
|
+
end
|
25
|
+
|
26
|
+
def unstub_all
|
27
|
+
while stubba_methods.size > 0
|
28
|
+
method = stubba_methods.pop
|
29
|
+
method.unstub
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|