mocha 0.9.2 → 0.9.3

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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Mocha is a library for mocking and stubbing using a syntax like that of JMock[http://www.jmock.org].
4
4
 
5
- It can be used with many testing frameworks e.g. Test::Unit[http://www.ruby-doc.org/core/classes/Test/Unit.html], RSpec[http://rspec.info/], test/spec[http://chneukirchen.org/repos/testspec/README], expectations[http://expectations.rubyforge.org/], Dust[http://dust.rubyforge.org/] and even JtestR[http://jtestr.codehaus.org/].
5
+ It can be used with many testing frameworks e.g. Test::Unit[http://www.ruby-doc.org/core/classes/Test/Unit.html], RSpec[http://rspec.info/], test/spec[http://chneukirchen.org/repos/testspec/README], expectations[http://expectations.rubyforge.org/], Dust[http://dust.rubyforge.org/], MiniTest[http://rubyforge.org/projects/bfts] and even JtestR[http://jtestr.codehaus.org/].
6
6
 
7
7
  Mocha provides a unified, simple and readable syntax for both traditional mocking and partial mocking.
8
8
 
@@ -26,7 +26,7 @@ Or download Mocha from here - http://rubyforge.org/projects/mocha
26
26
  * Traditional mocking - {Star Trek Example}[link:examples/mocha.html]
27
27
  * Setting expectations on real classes - {Order Example}[link:examples/stubba.html]
28
28
  * More examples on {Floehopper's Blog}[http://blog.floehopper.org]
29
- * {Mailing List Archives}[http://rubyforge.org/pipermail/mocha-developer/]
29
+ * {Mailing List Archives}[http://groups.google.com/group/mocha-developer]
30
30
 
31
31
  == License
32
32
 
data/RELEASE CHANGED
@@ -1,3 +1,9 @@
1
+ = 0.9.3 (8219bb2d2881c8529c93fc21e97a11d01203c759)
2
+ * Added support for MiniTest thanks to sprsquish.
3
+ * Fixed a possible bug with some of the non-default Configuration options relating to the argument to Object#respond_to?
4
+ * As per Jay Fields recommendations [1] and with further impetus from a talk at Ruby Manor, any methods added to core classes are now added by including a module. This means that Mocha is a better citizen of the Ruby world and it's behaviour is more easily extended. [1] http://blog.jayfields.com/2008/07/ruby-underuse-of-modules.html & http://blog.jayfields.com/2008/07/ruby-redefine-method-behavior.html
5
+ * Removed deprecated gem autorequire.
6
+
1
7
  = 0.9.2 (r355)
2
8
  * Improved documentation to address [#22530] 'Mock methods with multiple return values not possible?'
3
9
  * respond_with parameter matcher was not available in tests.
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rake/testtask'
5
5
  require 'rake/contrib/sshpublisher'
6
6
 
7
7
  module Mocha
8
- VERSION = "0.9.2"
8
+ VERSION = "0.9.3"
9
9
  end
10
10
 
11
11
  desc "Run all tests"
@@ -148,7 +148,6 @@ specification = Gem::Specification.new do |s|
148
148
  s.extra_rdoc_files = ['README', 'COPYING']
149
149
  s.rdoc_options << '--title' << 'Mocha' << '--main' << 'README' << '--line-numbers'
150
150
 
151
- s.autorequire = 'mocha'
152
151
  s.add_dependency('rake')
153
152
  s.files = FileList['{lib,test,examples}/**/*.rb', '[A-Z]*'].exclude('TODO').to_a
154
153
  end
@@ -1,20 +1,47 @@
1
1
  require 'mocha_standalone'
2
- require 'mocha/test_case_adapter'
3
2
  require 'mocha/configuration'
4
3
 
4
+ if RUBY_VERSION < '1.9'
5
+ begin
6
+ require 'rubygems'
7
+ begin
8
+ gem 'minitest', '>=1.3'
9
+ require 'minitest/unit'
10
+ rescue Gem::LoadError
11
+ # Compatible version of MiniTest gem not available
12
+ end
13
+ rescue LoadError
14
+ # RubyGems not available
15
+ end
16
+ else
17
+ begin
18
+ require 'minitest/unit'
19
+ rescue LoadError
20
+ # MiniTest not available
21
+ end
22
+ end
23
+
24
+ if defined?(MiniTest)
25
+ require 'mocha/mini_test_adapter'
26
+
27
+ module MiniTest
28
+ class Unit
29
+ class TestCase
30
+ include Mocha::Standalone
31
+ include Mocha::MiniTestCaseAdapter
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ require 'mocha/test_case_adapter'
5
38
  require 'test/unit/testcase'
6
39
 
7
40
  module Test
8
-
9
41
  module Unit
10
-
11
42
  class TestCase
12
-
13
43
  include Mocha::Standalone
14
44
  include Mocha::TestCaseAdapter
15
-
16
45
  end
17
-
18
46
  end
19
-
20
- end
47
+ end
@@ -1,39 +1,67 @@
1
1
  require 'date'
2
2
 
3
- class Object
4
- def mocha_inspect
5
- address = self.__id__ * 2
6
- address += 0x100000000 if address < 0
7
- inspect =~ /#</ ? "#<#{self.class}:0x#{'%x' % address}>" : inspect
3
+ module Mocha
4
+
5
+ module ObjectMethods
6
+ def mocha_inspect
7
+ address = self.__id__ * 2
8
+ address += 0x100000000 if address < 0
9
+ inspect =~ /#</ ? "#<#{self.class}:0x#{'%x' % address}>" : inspect
10
+ end
11
+ end
12
+
13
+ module StringMethods
14
+ def mocha_inspect
15
+ inspect.gsub(/\"/, "'")
16
+ end
17
+ end
18
+
19
+ module ArrayMethods
20
+ def mocha_inspect
21
+ "[#{collect { |member| member.mocha_inspect }.join(', ')}]"
22
+ end
23
+ end
24
+
25
+ module HashMethods
26
+ def mocha_inspect
27
+ "{#{collect { |key, value| "#{key.mocha_inspect} => #{value.mocha_inspect}" }.join(', ')}}"
28
+ end
8
29
  end
30
+
31
+ module TimeMethods
32
+ def mocha_inspect
33
+ "#{inspect} (#{to_f} secs)"
34
+ end
35
+ end
36
+
37
+ module DateMethods
38
+ def mocha_inspect
39
+ to_s
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ class Object
46
+ include Mocha::ObjectMethods
9
47
  end
10
48
 
11
49
  class String
12
- def mocha_inspect
13
- inspect.gsub(/\"/, "'")
14
- end
50
+ include Mocha::StringMethods
15
51
  end
16
52
 
17
53
  class Array
18
- def mocha_inspect
19
- "[#{collect { |member| member.mocha_inspect }.join(', ')}]"
20
- end
54
+ include Mocha::ArrayMethods
21
55
  end
22
56
 
23
57
  class Hash
24
- def mocha_inspect
25
- "{#{collect { |key, value| "#{key.mocha_inspect} => #{value.mocha_inspect}" }.join(', ')}}"
26
- end
58
+ include Mocha::HashMethods
27
59
  end
28
60
 
29
61
  class Time
30
- def mocha_inspect
31
- "#{inspect} (#{to_f} secs)"
32
- end
62
+ include Mocha::TimeMethods
33
63
  end
34
64
 
35
65
  class Date
36
- def mocha_inspect
37
- to_s
38
- end
66
+ include Mocha::DateMethods
39
67
  end
@@ -1,7 +1,13 @@
1
- class Object
1
+ module Mocha
2
2
 
3
- def __metaclass__
4
- class << self; self; end
3
+ module ObjectMethods
4
+ def __metaclass__
5
+ class << self; self; end
6
+ end
5
7
  end
8
+
9
+ end
6
10
 
11
+ class Object
12
+ include Mocha::ObjectMethods
7
13
  end
@@ -0,0 +1,50 @@
1
+ module Mocha
2
+
3
+ module MiniTestCaseAdapter
4
+
5
+ class AssertionCounter
6
+ def initialize(test_case)
7
+ @test_case = test_case
8
+ end
9
+
10
+ def increment
11
+ @test_case._assertions += 1
12
+ end
13
+ end
14
+
15
+ def self.included(base)
16
+ base.class_eval do
17
+
18
+ alias_method :run_before_mocha_mini_test_adapter, :run
19
+
20
+ def run runner
21
+ assertion_counter = AssertionCounter.new(self)
22
+ result = '.'
23
+ begin
24
+ begin
25
+ @passed = nil
26
+ self.setup
27
+ self.__send__ self.name
28
+ mocha_verify(assertion_counter)
29
+ @passed = true
30
+ rescue Exception => e
31
+ @passed = false
32
+ result = runner.puke(self.class, self.name, e)
33
+ ensure
34
+ begin
35
+ self.teardown
36
+ rescue Exception => e
37
+ result = runner.puke(self.class, self.name, e)
38
+ end
39
+ end
40
+ ensure
41
+ mocha_teardown
42
+ end
43
+ result
44
+ end
45
+
46
+ end
47
+ end
48
+
49
+ end
50
+ end
@@ -4,131 +4,147 @@ require 'mocha/class_method'
4
4
  require 'mocha/module_method'
5
5
  require 'mocha/any_instance_method'
6
6
 
7
- # Methods added all objects to allow mocking and stubbing on real objects.
8
- #
9
- # Methods return a Mocha::Expectation which can be further modified by methods on Mocha::Expectation.
10
- class Object
7
+ module Mocha
11
8
 
12
- def mocha # :nodoc:
13
- @mocha ||= Mocha::Mockery.instance.mock_impersonating(self)
14
- end
9
+ # Methods added all objects to allow mocking and stubbing on real objects.
10
+ #
11
+ # Methods return a Mocha::Expectation which can be further modified by methods on Mocha::Expectation.
12
+ module ObjectMethods
15
13
 
16
- def reset_mocha # :nodoc:
17
- @mocha = nil
18
- end
14
+ def mocha # :nodoc:
15
+ @mocha ||= Mocha::Mockery.instance.mock_impersonating(self)
16
+ end
19
17
 
20
- def stubba_method # :nodoc:
21
- Mocha::InstanceMethod
22
- end
18
+ def reset_mocha # :nodoc:
19
+ @mocha = nil
20
+ end
23
21
 
24
- def stubba_object # :nodoc:
25
- self
26
- end
22
+ def stubba_method # :nodoc:
23
+ Mocha::InstanceMethod
24
+ end
27
25
 
28
- # :call-seq: expects(symbol) -> expectation
29
- #
30
- # Adds an expectation that a method identified by +symbol+ must be called exactly once with any parameters.
31
- # Returns the new expectation which can be further modified by methods on Mocha::Expectation.
32
- # product = Product.new
33
- # product.expects(:save).returns(true)
34
- # assert_equal false, product.save
35
- #
36
- # The original implementation of <tt>Product#save</tt> is replaced temporarily.
37
- #
38
- # The original implementation of <tt>Product#save</tt> is restored at the end of the test.
39
- def expects(symbol)
40
- mockery = Mocha::Mockery.instance
41
- mockery.on_stubbing(self, symbol)
42
- method = stubba_method.new(stubba_object, symbol)
43
- mockery.stubba.stub(method)
44
- mocha.expects(symbol, caller)
45
- end
26
+ def stubba_object # :nodoc:
27
+ self
28
+ end
46
29
 
47
- # :call-seq: stubs(symbol) -> expectation
48
- #
49
- # Adds an expectation that a method identified by +symbol+ may be called any number of times with any parameters.
50
- # Returns the new expectation which can be further modified by methods on Mocha::Expectation.
51
- # product = Product.new
52
- # product.stubs(:save).returns(true)
53
- # assert_equal false, product.save
54
- #
55
- # The original implementation of <tt>Product#save</tt> is replaced temporarily.
56
- #
57
- # The original implementation of <tt>Product#save</tt> is restored at the end of the test.
58
- def stubs(symbol)
59
- mockery = Mocha::Mockery.instance
60
- mockery.on_stubbing(self, symbol)
61
- method = stubba_method.new(stubba_object, symbol)
62
- mockery.stubba.stub(method)
63
- mocha.stubs(symbol, caller)
64
- end
30
+ # :call-seq: expects(symbol) -> expectation
31
+ #
32
+ # Adds an expectation that a method identified by +symbol+ must be called exactly once with any parameters.
33
+ # Returns the new expectation which can be further modified by methods on Mocha::Expectation.
34
+ # product = Product.new
35
+ # product.expects(:save).returns(true)
36
+ # assert_equal false, product.save
37
+ #
38
+ # The original implementation of <tt>Product#save</tt> is replaced temporarily.
39
+ #
40
+ # The original implementation of <tt>Product#save</tt> is restored at the end of the test.
41
+ def expects(symbol)
42
+ mockery = Mocha::Mockery.instance
43
+ mockery.on_stubbing(self, symbol)
44
+ method = stubba_method.new(stubba_object, symbol)
45
+ mockery.stubba.stub(method)
46
+ mocha.expects(symbol, caller)
47
+ end
65
48
 
66
- def method_exists?(method, include_public_methods = true)
67
- if include_public_methods
68
- return true if public_methods(include_superclass_methods = true).include?(method)
69
- return true if respond_to?(method)
49
+ # :call-seq: stubs(symbol) -> expectation
50
+ #
51
+ # Adds an expectation that a method identified by +symbol+ may be called any number of times with any parameters.
52
+ # Returns the new expectation which can be further modified by methods on Mocha::Expectation.
53
+ # product = Product.new
54
+ # product.stubs(:save).returns(true)
55
+ # assert_equal false, product.save
56
+ #
57
+ # The original implementation of <tt>Product#save</tt> is replaced temporarily.
58
+ #
59
+ # The original implementation of <tt>Product#save</tt> is restored at the end of the test.
60
+ def stubs(symbol)
61
+ mockery = Mocha::Mockery.instance
62
+ mockery.on_stubbing(self, symbol)
63
+ method = stubba_method.new(stubba_object, symbol)
64
+ mockery.stubba.stub(method)
65
+ mocha.stubs(symbol, caller)
70
66
  end
71
- return true if protected_methods(include_superclass_methods = true).include?(method)
72
- return true if private_methods(include_superclass_methods = true).include?(method)
73
- return false
74
- end
75
67
 
76
- end
77
-
78
- class Module # :nodoc:
68
+ def method_exists?(method, include_public_methods = true) # :nodoc:
69
+ if include_public_methods
70
+ return true if public_methods(include_superclass_methods = true).include?(method)
71
+ return true if respond_to?(method.to_sym)
72
+ end
73
+ return true if protected_methods(include_superclass_methods = true).include?(method)
74
+ return true if private_methods(include_superclass_methods = true).include?(method)
75
+ return false
76
+ end
79
77
 
80
- def stubba_method
81
- Mocha::ModuleMethod
82
78
  end
83
-
84
- end
85
-
86
- class Class
87
79
 
88
- def stubba_method # :nodoc:
89
- Mocha::ClassMethod
90
- end
91
-
92
- class AnyInstance # :nodoc:
80
+ module ModuleMethods # :nodoc:
93
81
 
94
- def initialize(klass)
95
- @stubba_object = klass
82
+ def stubba_method
83
+ Mocha::ModuleMethod
96
84
  end
97
85
 
98
- def mocha
99
- @mocha ||= Mocha::Mockery.instance.mock_impersonating_any_instance_of(@stubba_object)
86
+ end
87
+
88
+ # Methods added all classes to allow mocking and stubbing on real objects.
89
+ module ClassMethods
90
+
91
+ def stubba_method # :nodoc:
92
+ Mocha::ClassMethod
100
93
  end
101
94
 
102
- def stubba_method
103
- Mocha::AnyInstanceMethod
104
- end
95
+ class AnyInstance # :nodoc:
105
96
 
106
- def stubba_object
107
- @stubba_object
108
- end
97
+ def initialize(klass)
98
+ @stubba_object = klass
99
+ end
109
100
 
110
- def method_exists?(method, include_public_methods = true)
111
- if include_public_methods
112
- return true if @stubba_object.public_instance_methods(include_superclass_methods = true).include?(method)
101
+ def mocha
102
+ @mocha ||= Mocha::Mockery.instance.mock_impersonating_any_instance_of(@stubba_object)
103
+ end
104
+
105
+ def stubba_method
106
+ Mocha::AnyInstanceMethod
113
107
  end
114
- return true if @stubba_object.protected_instance_methods(include_superclass_methods = true).include?(method)
115
- return true if @stubba_object.private_instance_methods(include_superclass_methods = true).include?(method)
116
- return false
117
- end
118
108
 
119
- end
109
+ def stubba_object
110
+ @stubba_object
111
+ end
112
+
113
+ def method_exists?(method, include_public_methods = true)
114
+ if include_public_methods
115
+ return true if @stubba_object.public_instance_methods(include_superclass_methods = true).include?(method)
116
+ end
117
+ return true if @stubba_object.protected_instance_methods(include_superclass_methods = true).include?(method)
118
+ return true if @stubba_object.private_instance_methods(include_superclass_methods = true).include?(method)
119
+ return false
120
+ end
121
+
122
+ end
123
+
124
+ # :call-seq: any_instance -> mock object
125
+ #
126
+ # Returns a mock object which will detect calls to any instance of this class.
127
+ # Product.any_instance.stubs(:save).returns(false)
128
+ # product_1 = Product.new
129
+ # assert_equal false, product_1.save
130
+ # product_2 = Product.new
131
+ # assert_equal false, product_2.save
132
+ def any_instance
133
+ @any_instance ||= AnyInstance.new(self)
134
+ end
120
135
 
121
- # :call-seq: any_instance -> mock object
122
- #
123
- # Returns a mock object which will detect calls to any instance of this class.
124
- # Product.any_instance.stubs(:save).returns(false)
125
- # product_1 = Product.new
126
- # assert_equal false, product_1.save
127
- # product_2 = Product.new
128
- # assert_equal false, product_2.save
129
- def any_instance
130
- @any_instance ||= AnyInstance.new(self)
131
136
  end
132
137
 
133
138
  end
134
139
 
140
+ class Object # :nodoc:
141
+ include Mocha::ObjectMethods
142
+ end
143
+
144
+ class Module # :nodoc:
145
+ include Mocha::ModuleMethods
146
+ end
147
+
148
+ class Class # :nodoc:
149
+ include Mocha::ClassMethods
150
+ end
@@ -1,9 +1,15 @@
1
1
  require 'mocha/parameter_matchers/equals'
2
2
 
3
- class Object
3
+ module Mocha
4
4
 
5
- def to_matcher # :nodoc:
6
- Mocha::ParameterMatchers::Equals.new(self)
5
+ module ObjectMethods
6
+ def to_matcher # :nodoc:
7
+ Mocha::ParameterMatchers::Equals.new(self)
8
+ end
7
9
  end
8
10
 
9
11
  end
12
+
13
+ class Object
14
+ include Mocha::ObjectMethods
15
+ end
@@ -1,7 +1,7 @@
1
1
  require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
2
  require 'mocha'
3
3
 
4
- class Bug21563Test < Test::Unit::TestCase
4
+ class Bug21465Test < Test::Unit::TestCase
5
5
 
6
6
  include AcceptanceTest
7
7
 
@@ -0,0 +1,130 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ if defined?(MiniTest)
5
+
6
+ class MiniTestSampleTest < MiniTest::Unit::TestCase
7
+
8
+ def test_mocha_with_fulfilled_expectation
9
+ mockee = mock()
10
+ mockee.expects(:blah)
11
+ mockee.blah
12
+ end
13
+
14
+ def test_mocha_with_unfulfilled_expectation
15
+ mockee = mock()
16
+ mockee.expects(:blah)
17
+ end
18
+
19
+ def test_mocha_with_unexpected_invocation
20
+ mockee = mock()
21
+ mockee.blah
22
+ end
23
+
24
+ def test_stubba_with_fulfilled_expectation
25
+ stubbee = Class.new { define_method(:blah) {} }.new
26
+ stubbee.expects(:blah)
27
+ stubbee.blah
28
+ end
29
+
30
+ def test_stubba_with_unfulfilled_expectation
31
+ stubbee = Class.new { define_method(:blah) {} }.new
32
+ stubbee.expects(:blah)
33
+ end
34
+
35
+ def test_mocha_with_matching_parameter
36
+ mockee = mock()
37
+ mockee.expects(:blah).with(has_key(:wibble))
38
+ mockee.blah(:wibble => 1)
39
+ end
40
+
41
+ def test_mocha_with_non_matching_parameter
42
+ mockee = mock()
43
+ mockee.expects(:blah).with(has_key(:wibble))
44
+ mockee.blah(:wobble => 2)
45
+ end
46
+
47
+ end
48
+
49
+ class MiniTestAdapterTest < Test::Unit::TestCase
50
+
51
+ def setup
52
+ @output = StringIO.new
53
+ MiniTest::Unit.output = @output
54
+ @runner = MiniTest::Unit.new
55
+ end
56
+
57
+ attr_reader :runner
58
+
59
+ def test_should_pass_mocha_test
60
+ runner.run(%w(-n test_mocha_with_fulfilled_expectation))
61
+
62
+ assert_equal 0, runner.errors
63
+ assert_equal 1, runner.assertion_count
64
+ end
65
+
66
+ def test_should_fail_mocha_test_due_to_unfulfilled_expectation
67
+ runner.run(%w(-n test_mocha_with_unfulfilled_expectation))
68
+
69
+ assert_equal 1, runner.errors
70
+ assert_equal 1, runner.assertion_count
71
+ assert_not_all_expectation_were_satisfied
72
+ end
73
+
74
+ def test_should_fail_mocha_test_due_to_unexpected_invocation
75
+ runner.run(%w(-n test_mocha_with_unexpected_invocation))
76
+
77
+ assert_equal 1, runner.errors
78
+ assert_equal 0, runner.assertion_count
79
+ assert_unexpected_invocation
80
+ end
81
+
82
+ def test_should_pass_stubba_test
83
+ runner.run(%w(-n test_stubba_with_fulfilled_expectation))
84
+
85
+ assert_equal 0, runner.errors
86
+ assert_equal 1, runner.assertion_count
87
+ end
88
+
89
+ def test_should_fail_stubba_test_due_to_unfulfilled_expectation
90
+ runner.run(%w(-n test_stubba_with_unfulfilled_expectation))
91
+
92
+ assert_equal 1, runner.errors
93
+ assert_equal 1, runner.assertion_count
94
+ assert_match Regexp.new('not all expectations were satisfied'), output
95
+ end
96
+
97
+ def test_should_pass_mocha_test_with_matching_parameter
98
+ runner.run(%w(-n test_mocha_with_matching_parameter))
99
+
100
+ assert_equal 0, runner.errors
101
+ assert_equal 1, runner.assertion_count
102
+ end
103
+
104
+ def test_should_fail_mocha_test_with_non_matching_parameter
105
+ runner.run(%w(-n test_mocha_with_non_matching_parameter))
106
+
107
+ assert_equal 1, runner.errors
108
+ assert_unexpected_invocation
109
+ end
110
+
111
+ private
112
+
113
+ def output
114
+ @output.rewind
115
+ @output.read
116
+ end
117
+
118
+ def assert_unexpected_invocation
119
+ assert_match Regexp.new('unexpected invocation'), output, "MiniTest output:\n#{output}"
120
+ end
121
+
122
+ def assert_not_all_expectation_were_satisfied
123
+ assert_match Regexp.new('not all expectations were satisfied'), output, "MiniTest output:\n#{output}"
124
+ end
125
+
126
+ end
127
+
128
+ else
129
+ warn "MiniTest is not available, so MiniTestAdapterTest has not been run."
130
+ end
@@ -70,7 +70,9 @@ class StubbingNonExistentClassMethodTest < Test::Unit::TestCase
70
70
  Mocha::Configuration.prevent(:stubbing_non_existent_method)
71
71
  klass = Class.new do
72
72
  class << self
73
- def respond_to?(method, include_private = false); true; end
73
+ def respond_to?(method, include_private = false)
74
+ (method == :method_to_which_class_responds)
75
+ end
74
76
  end
75
77
  end
76
78
  test_result = run_test do
@@ -68,7 +68,9 @@ class StubbingNonExistentInstanceMethodTest < Test::Unit::TestCase
68
68
  def test_should_allow_stubbing_method_to_which_instance_responds
69
69
  Mocha::Configuration.prevent(:stubbing_non_existent_method)
70
70
  klass = Class.new do
71
- def respond_to?(method, include_private = false); true; end
71
+ def respond_to?(method, include_private = false)
72
+ (method == :method_to_which_instance_responds)
73
+ end
72
74
  end
73
75
  instance = klass.new
74
76
  test_result = run_test do
@@ -149,7 +149,9 @@ class StubbingNonPublicClassMethodTest < Test::Unit::TestCase
149
149
  Mocha::Configuration.prevent(:stubbing_non_public_method)
150
150
  klass = Class.new do
151
151
  class << self
152
- def respond_to?(method, include_private_methods = false); true; end
152
+ def respond_to?(method, include_private_methods = false)
153
+ (method == :method_to_which_class_responds)
154
+ end
153
155
  end
154
156
  end
155
157
  test_result = run_test do
@@ -130,7 +130,9 @@ class StubbingNonPublicInstanceMethodTest < Test::Unit::TestCase
130
130
  def test_should_allow_stubbing_method_to_which_instance_responds
131
131
  Mocha::Configuration.prevent(:stubbing_non_public_method)
132
132
  instance = Class.new do
133
- def respond_to?(method, include_private_methods = false); true; end
133
+ def respond_to?(method, include_private_methods = false)
134
+ (method == :method_to_which_instance_responds)
135
+ end
134
136
  end.new
135
137
  test_result = run_test do
136
138
  instance.stubs(:method_to_which_instance_responds)
@@ -1,18 +1,24 @@
1
1
  require 'mocha/metaclass'
2
2
 
3
- class Object
3
+ module Mocha
4
4
 
5
- def define_instance_method(method_symbol, &block)
6
- __metaclass__.send(:define_method, method_symbol, block)
7
- end
5
+ module ObjectMethods
6
+ def define_instance_method(method_symbol, &block)
7
+ __metaclass__.send(:define_method, method_symbol, block)
8
+ end
8
9
 
9
- def replace_instance_method(method_symbol, &block)
10
- raise "Cannot replace #{method_symbol} as #{self} does not respond to it." unless self.respond_to?(method_symbol)
11
- define_instance_method(method_symbol, &block)
12
- end
10
+ def replace_instance_method(method_symbol, &block)
11
+ raise "Cannot replace #{method_symbol} as #{self} does not respond to it." unless self.respond_to?(method_symbol)
12
+ define_instance_method(method_symbol, &block)
13
+ end
13
14
 
14
- def define_instance_accessor(*symbols)
15
- symbols.each { |symbol| __metaclass__.send(:attr_accessor, symbol) }
15
+ def define_instance_accessor(*symbols)
16
+ symbols.each { |symbol| __metaclass__.send(:attr_accessor, symbol) }
17
+ end
16
18
  end
19
+
20
+ end
17
21
 
22
+ class Object
23
+ include Mocha::ObjectMethods
18
24
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mocha
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Mead
8
- autorequire: mocha
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-03 00:00:00 +00:00
12
+ date: 2008-11-27 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -51,6 +51,7 @@ files:
51
51
  - lib/mocha/logger.rb
52
52
  - lib/mocha/metaclass.rb
53
53
  - lib/mocha/method_matcher.rb
54
+ - lib/mocha/mini_test_adapter.rb
54
55
  - lib/mocha/mock.rb
55
56
  - lib/mocha/mockery.rb
56
57
  - lib/mocha/module_method.rb
@@ -100,6 +101,7 @@ files:
100
101
  - test/acceptance/bug_21563_test.rb
101
102
  - test/acceptance/expected_invocation_count_test.rb
102
103
  - test/acceptance/failure_messages_test.rb
104
+ - test/acceptance/minitest_test.rb
103
105
  - test/acceptance/mocha_example_test.rb
104
106
  - test/acceptance/mocha_test_result_test.rb
105
107
  - test/acceptance/mock_test.rb