aboutsummaryrefslogtreecommitdiffstats
path: root/lib/minitest/mock.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/minitest/mock.rb')
-rw-r--r--lib/minitest/mock.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/minitest/mock.rb b/lib/minitest/mock.rb
new file mode 100644
index 0000000000..54af28c453
--- /dev/null
+++ b/lib/minitest/mock.rb
@@ -0,0 +1,37 @@
+############################################################
+# This file is imported from a different project.
+# DO NOT make modifications in this repo.
+# File a patch instead and assign it to Ryan Davis
+############################################################
+
+class MockExpectationError < StandardError; end
+
+module MiniTest
+ class Mock
+ def initialize
+ @expected_calls = {}
+ @actual_calls = Hash.new {|h,k| h[k] = [] }
+ end
+
+ def expect(name, retval, args=[])
+ n, r, a = name, retval, args # for the closure below
+ @expected_calls[name] = { :retval => retval, :args => args }
+ self.class.__send__(:define_method, name) { |*x|
+ raise ArgumentError unless @expected_calls[n][:args].size == x.size
+ @actual_calls[n] << { :retval => r, :args => x }
+ retval
+ }
+ self
+ end
+
+ def verify
+ @expected_calls.each_key do |name|
+ expected = @expected_calls[name]
+ msg = "expected #{name}, #{expected.inspect}"
+ raise MockExpectationError, msg unless
+ @actual_calls.has_key? name and @actual_calls[name].include?(expected)
+ end
+ true
+ end
+ end
+end