summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmiddlek <smiddlek@b1010a0a-674b-0410-b734-77272b80c875>2011-06-06 19:13:18 +0000
committersmiddlek <smiddlek@b1010a0a-674b-0410-b734-77272b80c875>2011-06-06 19:13:18 +0000
commiteb3a1a971937497f6980495e7f4ff65403b78d13 (patch)
tree0322c9266a8cab5f2e1d6f396b6ee0fe8ef34d0b
parent61f1f11648e177602162680fc1bf0f203b4bd522 (diff)
downloadmox-eb3a1a971937497f6980495e7f4ff65403b78d13.tar.gz
Patch for adding a Comparator that can remember values from liulk@google.com.
http://codereview.appspot.com/4527043/ git-svn-id: http://pymox.googlecode.com/svn/trunk@65 b1010a0a-674b-0410-b734-77272b80c875
-rwxr-xr-xmox.py55
-rwxr-xr-xmox_test.py31
2 files changed, 86 insertions, 0 deletions
diff --git a/mox.py b/mox.py
index 91ab88b..5739ab1 100755
--- a/mox.py
+++ b/mox.py
@@ -1763,6 +1763,61 @@ class IgnoreArg(Comparator):
return '<IgnoreArg>'
+class Value(Comparator):
+ """Compares argument against a remembered value.
+
+ To be used in conjunction with Remember comparator. See Remember()
+ for example.
+ """
+
+ def __init__(self):
+ self._value = None
+ self._has_value = False
+
+ def store_value(self, rhs):
+ self._value = rhs
+ self._has_value = True
+
+ def equals(self, rhs):
+ if not self._has_value:
+ return False
+ else:
+ return rhs == self._value
+
+ def __repr__(self):
+ if self._has_value:
+ return "<Value %r>" % self._value
+ else:
+ return "<Value>"
+
+
+class Remember(Comparator):
+ """Remembers the argument to a value store.
+
+ To be used in conjunction with Value comparator.
+
+ Example:
+ # Remember the argument for one method call.
+ users_list = Value()
+ mock_dao.ProcessUsers(Remember(users_list))
+
+ # Check argument against remembered value.
+ mock_dao.ReportUsers(users_list)
+ """
+
+ def __init__(self, value_store):
+ if not isinstance(value_store, Value):
+ raise TypeError("value_store is not an instance of the Value class")
+ self._value_store = value_store
+
+ def equals(self, rhs):
+ self._value_store.store_value(rhs)
+ return True
+
+ def __repr__(self):
+ return "<Remember %d>" % id(self._value_store)
+
+
class MethodGroup(object):
"""Base class containing common behaviour for MethodGroups."""
diff --git a/mox_test.py b/mox_test.py
index 7b23397..f6d5026 100755
--- a/mox_test.py
+++ b/mox_test.py
@@ -422,6 +422,37 @@ class IsAlmostTest(unittest.TestCase):
self.assertNotEquals(mox.IsAlmost('1.8999999999'), '1.9')
+class ValueRememberTest(unittest.TestCase):
+ """Verify comparing argument against remembered value."""
+
+ def testValueEquals(self):
+ """Verify that value will compare to stored value."""
+ value = mox.Value()
+ value.store_value('hello world')
+ self.assertEquals(value, 'hello world')
+
+ def testNoValue(self):
+ """Verify that uninitialized value does not compare to "empty" values."""
+ value = mox.Value()
+ self.assertNotEquals(value, None)
+ self.assertNotEquals(value, False)
+ self.assertNotEquals(value, 0)
+ self.assertNotEquals(value, '')
+ self.assertNotEquals(value, ())
+ self.assertNotEquals(value, [])
+ self.assertNotEquals(value, {})
+ self.assertNotEquals(value, object())
+ self.assertNotEquals(value, set())
+
+ def testRememberValue(self):
+ """Verify that comparing against remember will store argument."""
+ value = mox.Value()
+ remember = mox.Remember(value)
+ self.assertNotEquals(value, 'hello world') # value not yet stored.
+ self.assertEquals(remember, 'hello world') # store value here.
+ self.assertEquals(value, 'hello world') # compare against stored value.
+
+
class MockMethodTest(unittest.TestCase):
"""Test class to verify that the MockMethod class is working correctly."""