<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/mocha/argument_iterator.rb</filename>
    </added>
    <added>
      <filename>mocha.gemspec</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -6,7 +6,7 @@ It can be used with many testing frameworks e.g. Test::Unit[http://www.ruby-doc.
 
 Mocha provides a unified, simple and readable syntax for both traditional mocking and partial mocking.
 
-Mocha was harvested from projects at Reevoo[http://www.reevoo.com] by me (James[http://blog.floehopper.org]) and my colleagues Ben[http://www.techbelly.com/], Chris[http://blog.seagul.co.uk] and Paul[http://po-ru.com].
+Mocha was harvested from projects at Reevoo[http://www.reevoo.com] by me (James[http://blog.floehopper.org]) and my (then) colleagues Ben[http://www.techbelly.com/], Chris[http://chrisroos.co.uk] and Paul[http://po-ru.com].
 
 == Download and Installation
 
@@ -16,9 +16,11 @@ Install the gem with the following command...
  
 Or install the Rails[http://www.rubyonrails.org] plugin...
 
-  $ script/plugin install svn://rubyforge.org/var/svn/mocha/trunk
+  $ script/plugin install git://github.com/floehopper/mocha.git
 
-Or download Mocha from here - http://rubyforge.org/projects/mocha
+Or download Mocha...
+
+  http://rubyforge.org/frs/?group_id=1917
 
 == Examples
 </diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,20 @@
-= 0.9.3
-* Added support for MiniTest thanks to sprsquish.
+= 0.9.5 (93cad010345ce5d68f31422cfc32ed9dd6de13ec)
+* Fixed Lighthouse bug #32 - stub_everything should mean mock responds to anything.
+* Added Expectation#twice to improve readability. Thanks to pull request from Celestino Gomes.
+* In Ruby 1.9.1, requiring 'test/unit' loads a thin wrapper around MiniTest and Test::Unit::TestCase ends up inheriting from MiniTest::Unit::TestCase. So we need to avoid including the Mocha modules more than once to avoid nasty consequences. Thanks to Matthias Hennemeyer for help with this.
+* Ruby 1.9 includes rake, but not rake/contrib. For the moment I've moved the sshpublisher require into the only rake task that needs it, so that I can at least run the tests in Ruby 1.9. It looks like I will need to build a rake/contrib gem or similar to get this working properly - http://intertwingly.net/blog/2008/01/07/Rake-Contrib-for-1-9
+
+= 0.9.4 (8a59c6ff0f99f34b02bd99f19536a7893be2b340)
+* Added mocha.gemspec file generated with Chad Woolley's new rake task, so that a floehopper-mocha gem will get built on GitHub.
+* Add rake task to update mocha.gemspec with unique version, which will cause gem to be auto-built on github
+* As Tobias Crawley correctly pointed out in feature request #23055 &quot;stubs(with_hash) not working with existing object&quot; [1], following the principle of least surprise, it should be possible to call ObjectMethods#expects &amp; ObjectMethods#stubs with a Hash of method_names vs return_values like you can with Mock#expects &amp; Mock#stubs. I've also updated &amp; improved the docs to reflect the changes. [1] http://rubyforge.org/tracker/index.php?func=detail&amp;aid=23055&amp;group_id=1917&amp;atid=7480
+* Removed deprecated gem autorequire.
+
+= 0.9.3 (8219bb2d2881c8529c93fc21e97a11d01203c759)
+* Added support for MiniTest thanks to Jeff Smick.
 * Fixed a possible bug with some of the non-default Configuration options relating to the argument to Object#respond_to?
 * 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 &amp; http://blog.jayfields.com/2008/07/ruby-redefine-method-behavior.html
+* Removed deprecated gem autorequire.
 
 = 0.9.2 (r355)
 * Improved documentation to address [#22530] 'Mock methods with multiple return values not possible?'</diff>
      <filename>RELEASE</filename>
    </modified>
    <modified>
      <diff>@@ -2,10 +2,9 @@ require 'rubygems'
 require 'rake/rdoctask'
 require 'rake/gempackagetask'
 require 'rake/testtask'
-require 'rake/contrib/sshpublisher'
 
 module Mocha
-  VERSION = &quot;0.9.3&quot;
+  VERSION = &quot;0.9.5&quot;
 end
 
 desc &quot;Run all tests&quot;
@@ -84,10 +83,13 @@ Rake::RDocTask.new('rdoc') do |task|
     'lib/mocha/stubbing_error.rb'
   )
 end
-task 'rdoc' =&gt; 'examples'
+
+desc &quot;Generate all documentation&quot;
+task 'generate_docs' =&gt; ['clobber_rdoc', 'rdoc', 'examples', 'agiledox.txt']
 
 desc &quot;Upload RDoc to RubyForge&quot;
-task 'publish_rdoc' =&gt; ['rdoc', 'examples'] do
+task 'publish_docs' do
+  require 'rake/contrib/sshpublisher'
   Rake::SshDirPublisher.new(&quot;jamesmead@rubyforge.org&quot;, &quot;/var/www/gforge-projects/mocha&quot;, &quot;doc&quot;).upload
 end
 
@@ -131,32 +133,43 @@ end
 
 Gem.manage_gems if Gem::RubyGemsVersion &lt; '1.2.0'
 
-specification = Gem::Specification.new do |s|
-  s.name   = &quot;mocha&quot;
-  s.summary = &quot;Mocking and stubbing library&quot;
-  s.version = Mocha::VERSION
-  s.platform = Gem::Platform::RUBY
-  s.author = 'James Mead'
-  s.description = &lt;&lt;-EOF
-    Mocking and stubbing library with JMock/SchMock syntax, which allows mocking and stubbing of methods on real (non-mock) classes.
-  EOF
-  s.email = 'mocha-developer@rubyforge.org'
-  s.homepage = 'http://mocha.rubyforge.org'
-  s.rubyforge_project = 'mocha'
-
-  s.has_rdoc = true
-  s.extra_rdoc_files = ['README', 'COPYING']
-  s.rdoc_options &lt;&lt; '--title' &lt;&lt; 'Mocha' &lt;&lt; '--main' &lt;&lt; 'README' &lt;&lt; '--line-numbers'
-                         
-  s.add_dependency('rake')
-  s.files = FileList['{lib,test,examples}/**/*.rb', '[A-Z]*'].exclude('TODO').to_a
+def build_specification(version = Mocha::VERSION)
+  Gem::Specification.new do |s|
+    s.name   = &quot;mocha&quot;
+    s.summary = &quot;Mocking and stubbing library&quot;
+    s.version = version
+    s.platform = Gem::Platform::RUBY
+      s.author = 'James Mead'
+    s.description = &lt;&lt;-EOF
+      Mocking and stubbing library with JMock/SchMock syntax, which allows mocking and stubbing of methods on real (non-mock) classes.
+    EOF
+    s.email = 'mocha-developer@googlegroups.com'
+    s.homepage = 'http://mocha.rubyforge.org'
+    s.rubyforge_project = 'mocha'
+
+    s.has_rdoc = true
+    s.extra_rdoc_files = ['README', 'COPYING']
+    s.rdoc_options &lt;&lt; '--title' &lt;&lt; 'Mocha' &lt;&lt; '--main' &lt;&lt; 'README' &lt;&lt; '--line-numbers'
+
+    s.add_dependency('rake')
+    s.files = FileList['{lib,test,examples}/**/*.rb', '[A-Z]*'].exclude('TODO').to_a
+  end
 end
 
+specification = build_specification
+
 Rake::GemPackageTask.new(specification) do |package|
    package.need_zip = true
    package.need_tar = true
 end
 
+desc 'Generate updated gemspec with unique version, which will cause gem to be auto-built on github.'
+task :update_gemspec do
+  File.open('mocha.gemspec', 'w') do |output|
+    output &lt;&lt; build_specification(Mocha::VERSION + '.' + Time.now.strftime('%Y%m%d%H%M%S')).to_ruby
+  end
+end
+
 task 'verify_user' do
   raise &quot;RUBYFORGE_USER environment variable not set!&quot; unless ENV['RUBYFORGE_USER']
 end
@@ -166,7 +179,7 @@ task 'verify_password' do
 end
 
 desc &quot;Publish package files on RubyForge.&quot;
-task 'publish_packages' =&gt; ['verify_user', 'verify_password', 'package'] do
+task 'publish_packages' =&gt; ['verify_user', 'verify_password', 'clobber_package', 'package'] do
   $:.unshift File.expand_path(File.join(File.dirname(__FILE__), &quot;vendor&quot;, &quot;meta_project-0.4.15&quot;, &quot;lib&quot;))
   require 'meta_project'
   require 'rake/contrib/xforge'
@@ -185,3 +198,10 @@ task 'publish_packages' =&gt; ['verify_user', 'verify_password', 'package'] do
     release.release_notes = ''
   end
 end
+
+desc &quot;Do a full release.&quot;
+task 'release' =&gt; ['default', 'generate_docs', 'publish_packages', 'publish_docs', 'update_gemspec'] do
+  puts
+  puts &quot;*** Remember to commit newly generated gemspec after release ***&quot;
+  puts
+end</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,3 @@
-=&gt; the move to GitHub
-- need to add continuous integration for repos
-
 =&gt; Patch [#15235] Provide a pseudo-call syntax for simplifying set-up of expectations and stubs
 =&gt; Patch [#10412] Merge 'with' and the expected method
 =&gt; Bug [#8687] Block's return value is dropped on stubbed yielding methods</diff>
      <filename>TODO</filename>
    </modified>
    <modified>
      <diff>@@ -32,10 +32,12 @@ if defined?(MiniTest)
       end
     end
   end
-else
-  require 'mocha/test_case_adapter'
-  require 'test/unit/testcase'
+end
+
+require 'mocha/test_case_adapter'
+require 'test/unit/testcase'
 
+unless Test::Unit::TestCase.ancestors.include?(Mocha::Standalone)
   module Test
     module Unit
       class TestCase</diff>
      <filename>lib/mocha.rb</filename>
    </modified>
    <modified>
      <diff>@@ -17,7 +17,7 @@ module Mocha
     def hide_original_method
       if method_exists?(method)
         begin
-          stubbee.class_eval(&quot;alias_method :#{hidden_method}, :#{method}&quot;, __FILE__, __LINE__)
+          stubbee.send(:alias_method, hidden_method, method)
         rescue NameError
           # deal with nasties like ActiveRecord::Associations::AssociationProxy
         end
@@ -29,13 +29,14 @@ module Mocha
     end
 
     def remove_new_method
-      stubbee.class_eval(&quot;remove_method :#{method}&quot;, __FILE__, __LINE__)
+      stubbee.send(:remove_method, method)
     end
 
     def restore_original_method
       if method_exists?(hidden_method)
         begin
-          stubbee.class_eval(&quot;alias_method :#{method}, :#{hidden_method}; remove_method :#{hidden_method}&quot;, __FILE__, __LINE__)
+          stubbee.send(:alias_method, method, hidden_method)
+          stubbee.send(:remove_method, hidden_method)
         rescue NameError
           # deal with nasties like ActiveRecord::Associations::AssociationProxy
         end</diff>
      <filename>lib/mocha/any_instance_method.rb</filename>
    </modified>
    <modified>
      <diff>@@ -29,7 +29,7 @@ module Mocha
     def hide_original_method
       if method_exists?(method)
         begin
-          stubbee.__metaclass__.class_eval(&quot;alias_method :#{hidden_method}, :#{method}&quot;, __FILE__, __LINE__)
+          stubbee.__metaclass__.send(:alias_method, hidden_method, method)
         rescue NameError
           # deal with nasties like ActiveRecord::Associations::AssociationProxy
         end
@@ -41,13 +41,14 @@ module Mocha
     end
   
     def remove_new_method
-      stubbee.__metaclass__.class_eval(&quot;remove_method :#{method}&quot;, __FILE__, __LINE__)
+      stubbee.__metaclass__.send(:remove_method, method)
     end
   
     def restore_original_method
       if method_exists?(hidden_method)
         begin
-          stubbee.__metaclass__.class_eval(&quot;alias_method :#{method}, :#{hidden_method}; remove_method :#{hidden_method}&quot;, __FILE__, __LINE__)
+          stubbee.__metaclass__.send(:alias_method, method, hidden_method)
+          stubbee.__metaclass__.send(:remove_method, hidden_method)
         rescue NameError
           # deal with nasties like ActiveRecord::Associations::AssociationProxy
         end</diff>
      <filename>lib/mocha/class_method.rb</filename>
    </modified>
    <modified>
      <diff>@@ -43,6 +43,31 @@ module Mocha # :nodoc:
       self
     end
   
+    # :call-seq: twice() -&gt; expectation
+    #
+    # Modifies expectation so that the expected method must be called exactly twice.
+    #   object = mock()
+    #   object.expects(:expected_method).twice
+    #   object.expected_method
+    #   object.expected_method
+    #   # =&gt; verify succeeds
+    #
+    #   object = mock()
+    #   object.expects(:expected_method).twice
+    #   object.expected_method
+    #   object.expected_method
+    #   object.expected_method
+    #   # =&gt; verify fails
+    #
+    #   object = mock()
+    #   object.expects(:expected_method).twice
+    #   object.expected_method
+    #   # =&gt; verify fails
+    def twice
+      @cardinality = Cardinality.exactly(2)
+      self
+    end
+  
     # :call-seq: once() -&gt; expectation
     #
     # Modifies expectation so that the expected method must be called exactly once.</diff>
      <filename>lib/mocha/expectation.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,6 +6,7 @@ require 'mocha/mockery'
 require 'mocha/method_matcher'
 require 'mocha/parameters_matcher'
 require 'mocha/unexpected_invocation'
+require 'mocha/argument_iterator'
 
 module Mocha # :nodoc:
   
@@ -15,9 +16,9 @@ module Mocha # :nodoc:
   class Mock
     
     # :call-seq: expects(method_name) -&gt; expectation
-    #            expects(method_names) -&gt; last expectation
+    #            expects(method_names_vs_return_values) -&gt; last expectation
     #
-    # Adds an expectation that a method identified by +method_name+ symbol must be called exactly once with any parameters.
+    # Adds an expectation that a method identified by +method_name+ Symbol/String must be called exactly once with any parameters.
     # Returns the new expectation which can be further modified by methods on Expectation.
     #   object = mock()
     #   object.expects(:method1)
@@ -27,7 +28,7 @@ module Mocha # :nodoc:
     #   object = mock()
     #   object.expects(:method1)
     #   # error raised, because method1 not called exactly once
-    # If +method_names+ is a +Hash+, an expectation will be set up for each entry using the key as +method_name+ and value as +return_value+.
+    # If +method_names_vs_return_values+ is a +Hash+, an expectation will be set up for each entry using the key as +method_name+ and value as +return_value+.
     #   object = mock()
     #   object.expects(:method1 =&gt; :result1, :method2 =&gt; :result2)
     #
@@ -39,28 +40,27 @@ module Mocha # :nodoc:
     #
     # Aliased by &lt;tt&gt;\_\_expects\_\_&lt;/tt&gt;
     def expects(method_name_or_hash, backtrace = nil)
-      if method_name_or_hash.is_a?(Hash) then
-        method_name_or_hash.each do |method_name, return_value|
-          ensure_method_not_already_defined(method_name)
-          @expectations.add(Expectation.new(self, method_name, backtrace).returns(return_value))
-        end
-      else
-        ensure_method_not_already_defined(method_name_or_hash)
-        @expectations.add(Expectation.new(self, method_name_or_hash, backtrace))
-      end
+      iterator = ArgumentIterator.new(method_name_or_hash)
+      iterator.each { |*args|
+        method_name = args.shift
+        ensure_method_not_already_defined(method_name)
+        expectation = Expectation.new(self, method_name, backtrace)
+        expectation.returns(args.shift) if args.length &gt; 0
+        @expectations.add(expectation)
+      }
     end
     
     # :call-seq: stubs(method_name) -&gt; expectation
-    #            stubs(method_names) -&gt; last expectation
+    #            stubs(method_names_vs_return_values) -&gt; last expectation
     #
-    # Adds an expectation that a method identified by +method_name+ symbol may be called any number of times with any parameters.
+    # Adds an expectation that a method identified by +method_name+ Symbol/String may be called any number of times with any parameters.
     # Returns the new expectation which can be further modified by methods on Expectation.
     #   object = mock()
     #   object.stubs(:method1)
     #   object.method1
     #   object.method1
     #   # no error raised
-    # If +method_names+ is a +Hash+, an expectation will be set up for each entry using the key as +method_name+ and value as +return_value+.
+    # If +method_names_vs_return_values+ is a +Hash+, an expectation will be set up for each entry using the key as +method_name+ and value as +return_value+.
     #   object = mock()
     #   object.stubs(:method1 =&gt; :result1, :method2 =&gt; :result2)
     #
@@ -72,15 +72,15 @@ module Mocha # :nodoc:
     #
     # Aliased by &lt;tt&gt;\_\_stubs\_\_&lt;/tt&gt;
     def stubs(method_name_or_hash, backtrace = nil)
-      if method_name_or_hash.is_a?(Hash) then
-        method_name_or_hash.each do |method_name, return_value|
-          ensure_method_not_already_defined(method_name)
-          @expectations.add(Expectation.new(self, method_name, backtrace).at_least(0).returns(return_value))
-        end
-      else
-        ensure_method_not_already_defined(method_name_or_hash)
-        @expectations.add(Expectation.new(self, method_name_or_hash, backtrace).at_least(0))
-      end
+      iterator = ArgumentIterator.new(method_name_or_hash)
+      iterator.each { |*args|
+        method_name = args.shift
+        ensure_method_not_already_defined(method_name)
+        expectation = Expectation.new(self, method_name, backtrace)
+        expectation.at_least(0)
+        expectation.returns(args.shift) if args.length &gt; 0
+        @expectations.add(expectation)
+      }
     end
     
     # :call-seq: responds_like(responder) -&gt; mock
@@ -173,7 +173,7 @@ module Mocha # :nodoc:
           @responder.respond_to?(symbol)
         end
       else
-        @expectations.matches_method?(symbol)
+        @everything_stubbed || @expectations.matches_method?(symbol)
       end
     end
     </diff>
      <filename>lib/mocha/mock.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,7 @@ require 'mocha/instance_method'
 require 'mocha/class_method'
 require 'mocha/module_method'
 require 'mocha/any_instance_method'
+require 'mocha/argument_iterator'
 
 module Mocha
   
@@ -27,42 +28,78 @@ module Mocha
       self
     end
   
-    # :call-seq: expects(symbol) -&gt; expectation
+    # :call-seq: expects(method_name) -&gt; expectation
+    #            expects(method_names_vs_return_values) -&gt; last expectation
     #
-    # Adds an expectation that a method identified by +symbol+ must be called exactly once with any parameters.
+    # Adds an expectation that a method identified by +method_name+ Symbol must be called exactly once with any parameters.
     # Returns the new expectation which can be further modified by methods on Mocha::Expectation.
     #   product = Product.new
     #   product.expects(:save).returns(true)
-    #   assert_equal false, product.save
+    #   assert_equal true, product.save
     #
     # The original implementation of &lt;tt&gt;Product#save&lt;/tt&gt; is replaced temporarily.
     #
     # The original implementation of &lt;tt&gt;Product#save&lt;/tt&gt; is restored at the end of the test.
-    def expects(symbol)
+    #
+    # If +method_names_vs_return_values+ is a +Hash+, an expectation will be set up for each entry using the key as +method_name+ and value as +return_value+.
+    #   product = Product.new
+    #   product.expects(:valid? =&gt; true, :save =&gt; true)
+    #
+    #   # exactly equivalent to
+    #
+    #   product = Product.new
+    #   product.expects(:valid?).returns(true)
+    #   product.expects(:save).returns(true)
+    def expects(method_name_or_hash)
+      expectation = nil
       mockery = Mocha::Mockery.instance
-      mockery.on_stubbing(self, symbol)
-      method = stubba_method.new(stubba_object, symbol)
-      mockery.stubba.stub(method)
-      mocha.expects(symbol, caller)
+      iterator = ArgumentIterator.new(method_name_or_hash)
+      iterator.each { |*args|
+        method_name = args.shift
+        mockery.on_stubbing(self, method_name)
+        method = stubba_method.new(stubba_object, method_name)
+        mockery.stubba.stub(method)
+        expectation = mocha.expects(method_name, caller)
+        expectation.returns(args.shift) if args.length &gt; 0
+      }
+      expectation
     end
   
-    # :call-seq: stubs(symbol) -&gt; expectation
+    # :call-seq: stubs(method_name) -&gt; expectation
+    #            stubs(method_names_vs_return_values) -&gt; last expectation
     #
-    # Adds an expectation that a method identified by +symbol+ may be called any number of times with any parameters.
+    # Adds an expectation that a method identified by +method_name+ Symbol may be called any number of times with any parameters.
     # Returns the new expectation which can be further modified by methods on Mocha::Expectation.
     #   product = Product.new
     #   product.stubs(:save).returns(true)
-    #   assert_equal false, product.save
+    #   assert_equal true, product.save
     #
     # The original implementation of &lt;tt&gt;Product#save&lt;/tt&gt; is replaced temporarily.
     #
     # The original implementation of &lt;tt&gt;Product#save&lt;/tt&gt; is restored at the end of the test.
-    def stubs(symbol)
+    #
+    # If +method_names_vs_return_values+ is a +Hash+, an expectation will be set up for each entry using the key as +method_name+ and value as +return_value+.
+    #   product = Product.new
+    #   product.stubs(:valid? =&gt; true, :save =&gt; true)
+    #
+    #   # exactly equivalent to
+    #
+    #   product = Product.new
+    #   product.stubs(:valid?).returns(true)
+    #   product.stubs(:save).returns(true)
+    def stubs(method_name_or_hash)
+      expectation = nil
       mockery = Mocha::Mockery.instance
-      mockery.on_stubbing(self, symbol)
-      method = stubba_method.new(stubba_object, symbol)
-      mockery.stubba.stub(method)
-      mocha.stubs(symbol, caller)
+      iterator = ArgumentIterator.new(method_name_or_hash)
+      iterator.each { |*args|
+        method_name = args.shift
+        mockery.on_stubbing(self, method_name)
+        method = stubba_method.new(stubba_object, method_name)
+        mockery.stubba.stub(method)
+        expectation = mocha.stubs(method_name, caller)
+        expectation.returns(args.shift) if args.length &gt; 0
+      }
+      expectation
     end
   
     def method_exists?(method, include_public_methods = true) # :nodoc:</diff>
      <filename>lib/mocha/object.rb</filename>
    </modified>
    <modified>
      <diff>@@ -35,7 +35,7 @@ class ExpectedInvocationCountTest &lt; Test::Unit::TestCase
   def test_should_pass_if_method_is_expected_twice_and_is_called_twice
     test_result = run_test do
       mock = mock('mock')
-      mock.expects(:method).times(2)
+      mock.expects(:method).twice
       2.times { mock.method }
     end
     assert_passed(test_result)
@@ -44,7 +44,7 @@ class ExpectedInvocationCountTest &lt; Test::Unit::TestCase
   def test_should_fail_if_method_is_expected_twice_but_is_called_once
     test_result = run_test do
       mock = mock('mock')
-      mock.expects(:method).times(2)
+      mock.expects(:method).twice
       1.times { mock.method }
     end
     assert_failed(test_result)
@@ -54,7 +54,7 @@ class ExpectedInvocationCountTest &lt; Test::Unit::TestCase
   def test_should_fail_fast_if_method_is_expected_twice_but_is_called_three_times
     test_result = run_test do
       mock = mock('mock')
-      mock.expects(:method).times(2)
+      mock.expects(:method).twice
       3.times { mock.method }
     end
     assert_failed(test_result)</diff>
      <filename>test/acceptance/expected_invocation_count_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -162,4 +162,42 @@ class StubInstanceMethodTest &lt; Test::Unit::TestCase
     assert_passed(test_result)
   end
   
+  def test_should_be_able_to_specify_expectations_on_multiple_methods_in_a_single_call_to_expects
+    instance = Class.new do
+      def my_instance_method_1
+        :original_return_value_1
+      end
+      def my_instance_method_2
+        :original_return_value_2
+      end
+    end.new
+    run_test do
+      instance.expects(
+        :my_instance_method_1 =&gt; :new_return_value_1,
+        :my_instance_method_2 =&gt; :new_return_value_2
+      )
+      assert_equal :new_return_value_1, instance.my_instance_method_1
+      assert_equal :new_return_value_2, instance.my_instance_method_2
+    end
+  end
+  
+  def test_should_be_able_to_specify_expectations_on_multiple_methods_in_a_single_call_to_stubs
+    instance = Class.new do
+      def my_instance_method_1
+        :original_return_value_1
+      end
+      def my_instance_method_2
+        :original_return_value_2
+      end
+    end.new
+    run_test do
+      instance.stubs(
+        :my_instance_method_1 =&gt; :new_return_value_1,
+        :my_instance_method_2 =&gt; :new_return_value_2
+      )
+      assert_equal :new_return_value_1, instance.my_instance_method_1
+      assert_equal :new_return_value_2, instance.my_instance_method_2
+    end
+  end
+
 end
\ No newline at end of file</diff>
      <filename>test/acceptance/stub_instance_method_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -253,6 +253,27 @@ class ExpectationTest &lt; Test::Unit::TestCase
     assert expectation.verified?
   end
 
+  def test_should_not_verify_successfully_if_call_expected_twice_and_invoked_three_times
+    expectation = new_expectation.twice
+    expectation.invoke
+    expectation.invoke
+    expectation.invoke
+    assert !expectation.verified?
+  end
+
+  def test_should_not_verify_successfully_if_call_expected_twice_but_invoked_once
+    expectation = new_expectation.twice
+    expectation.invoke
+    assert !expectation.verified?
+  end
+
+  def test_should_verify_successfully_if_call_expected_twice_and_invoked_twice
+    expectation = new_expectation.twice
+    expectation.invoke
+    expectation.invoke
+    assert expectation.verified?
+  end
+
   def test_should_verify_successfully_if_expected_call_was_made_at_least_once
     expectation = new_expectation.at_least_once
     3.times {expectation.invoke}</diff>
      <filename>test/unit/expectation_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -292,4 +292,11 @@ class MockTest &lt; Test::Unit::TestCase
     assert_nothing_raised{ mock.respond_to?(:object_id, false) }
   end
   
+  def test_should_respond_to_any_method_if_stubbing_everything
+    mock = Mock.new
+    mock.stub_everything
+    assert mock.respond_to?(:abc)
+    assert mock.respond_to?(:xyz)
+  end
+  
 end
\ No newline at end of file</diff>
      <filename>test/unit/mock_test.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>test/active_record_test_case.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>fc84e85d5909072b738b27e799f223a752fd9b40</id>
    </parent>
    <parent>
      <id>52c5752b2799d8ecf500bba34574e8f12942c292</id>
    </parent>
  </parents>
  <author>
    <name>Jeremy Kemper</name>
    <email>jeremy@bitsweat.net</email>
  </author>
  <url>http://github.com/jeremy/mocha/commit/4fc36b4e1a8edc0302daffcbb7bc93082fc38356</url>
  <id>4fc36b4e1a8edc0302daffcbb7bc93082fc38356</id>
  <committed-date>2009-02-04T02:07:39-08:00</committed-date>
  <authored-date>2009-02-04T02:07:39-08:00</authored-date>
  <message>Merge commit 'origin/master'

Conflicts:
	Rakefile
	lib/mocha.rb</message>
  <tree>28be23740512affa075b0720cfe920977610bf7f</tree>
  <committer>
    <name>Jeremy Kemper</name>
    <email>jeremy@bitsweat.net</email>
  </committer>
</commit>
