diff options
author | smiddlek <smiddlek@b1010a0a-674b-0410-b734-77272b80c875> | 2011-06-06 19:13:18 +0000 |
---|---|---|
committer | smiddlek <smiddlek@b1010a0a-674b-0410-b734-77272b80c875> | 2011-06-06 19:13:18 +0000 |
commit | eb3a1a971937497f6980495e7f4ff65403b78d13 (patch) | |
tree | 0322c9266a8cab5f2e1d6f396b6ee0fe8ef34d0b | |
parent | 61f1f11648e177602162680fc1bf0f203b4bd522 (diff) | |
download | mox-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-x | mox.py | 55 | ||||
-rwxr-xr-x | mox_test.py | 31 |
2 files changed, 86 insertions, 0 deletions
@@ -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.""" |