Index: tests/super_mox.py |
diff --git a/tests/super_mox.py b/tests/super_mox.py |
index fdd123c92f621c742c780a8f1f8c89741edbc5d3..3da065394a2d7be2db9e9c76a3b868dc5b29753c 100644 |
--- a/tests/super_mox.py |
+++ b/tests/super_mox.py |
@@ -5,13 +5,29 @@ |
"""Simplify unit tests based on pymox.""" |
+import __builtin__ |
import os |
import random |
import string |
-from pymox import mox |
+import subprocess |
+import sys |
+from pymox import mox |
-class SuperMoxTestBase(mox.MoxTestBase): |
+class IsOneOf(mox.Comparator): |
+ def __init__(self, keys): |
+ self._keys = keys |
+ |
+ def equals(self, rhs): |
+ return rhs in self._keys |
+ |
+ def __repr__(self): |
+ return '<sequence or map containing \'%s\'>' % str(self._keys) |
+ |
+ |
+class SuperMoxBaseTestBase(mox.MoxTestBase): |
+ """Base class with some additional functionalities. People will usually want |
+ to use SuperMoxTestBase instead.""" |
# Backup the separator in case it gets mocked |
_OS_SEP = os.sep |
_RANDOM_CHOICE = random.choice |
@@ -57,3 +73,64 @@ class SuperMoxTestBase(mox.MoxTestBase): |
[i for i in expected_members if i not in actual_members]) |
print diff |
self.assertEqual(actual_members, expected_members) |
+ |
+ def UnMock(self, object, name): |
+ """Restore an object inside a test.""" |
+ for (parent, old_child, child_name) in self.mox.stubs.cache: |
+ if parent == object and child_name == name: |
+ setattr(parent, child_name, old_child) |
+ break |
+ |
+ |
+class SuperMoxTestBase(SuperMoxBaseTestBase): |
+ def setUp(self): |
+ """Patch a few functions with know side-effects.""" |
+ SuperMoxBaseTestBase.setUp(self) |
+ #self.mox.StubOutWithMock(__builtin__, 'open') |
+ self.mox.StubOutWithMock(os, 'chdir') |
+ self.mox.StubOutWithMock(os, 'chown') |
+ self.mox.StubOutWithMock(os, 'close') |
+ #self.mox.StubOutWithMock(os, 'closerange') |
+ self.mox.StubOutWithMock(os, 'dup') |
+ self.mox.StubOutWithMock(os, 'dup2') |
+ self.mox.StubOutWithMock(os, 'fchdir') |
+ #self.mox.StubOutWithMock(os, 'fchmod') |
+ #self.mox.StubOutWithMock(os, 'fchown') |
+ self.mox.StubOutWithMock(os, 'fdopen') |
+ self.mox.StubOutWithMock(os, 'getcwd') |
+ self.mox.StubOutWithMock(os, 'getpid') |
+ self.mox.StubOutWithMock(os, 'lseek') |
+ self.mox.StubOutWithMock(os, 'makedirs') |
+ self.mox.StubOutWithMock(os, 'mkdir') |
+ self.mox.StubOutWithMock(os, 'open') |
+ self.mox.StubOutWithMock(os, 'popen') |
+ self.mox.StubOutWithMock(os, 'popen2') |
+ self.mox.StubOutWithMock(os, 'popen3') |
+ self.mox.StubOutWithMock(os, 'popen4') |
+ self.mox.StubOutWithMock(os, 'read') |
+ self.mox.StubOutWithMock(os, 'remove') |
+ self.mox.StubOutWithMock(os, 'removedirs') |
+ self.mox.StubOutWithMock(os, 'rename') |
+ self.mox.StubOutWithMock(os, 'renames') |
+ self.mox.StubOutWithMock(os, 'rmdir') |
+ self.mox.StubOutWithMock(os, 'symlink') |
+ self.mox.StubOutWithMock(os, 'system') |
+ self.mox.StubOutWithMock(os, 'tmpfile') |
+ self.mox.StubOutWithMock(os, 'walk') |
+ self.mox.StubOutWithMock(os, 'write') |
+ self.mox.StubOutWithMock(os.path, 'abspath') |
+ self.mox.StubOutWithMock(os.path, 'exists') |
+ self.mox.StubOutWithMock(os.path, 'getsize') |
+ self.mox.StubOutWithMock(os.path, 'isdir') |
+ self.mox.StubOutWithMock(os.path, 'isfile') |
+ self.mox.StubOutWithMock(os.path, 'islink') |
+ self.mox.StubOutWithMock(os.path, 'ismount') |
+ self.mox.StubOutWithMock(os.path, 'lexists') |
+ self.mox.StubOutWithMock(os.path, 'realpath') |
+ self.mox.StubOutWithMock(os.path, 'samefile') |
+ self.mox.StubOutWithMock(os.path, 'walk') |
+ self.mox.StubOutWithMock(subprocess, 'call') |
+ self.mox.StubOutWithMock(subprocess, 'Popen') |
+ #self.mox.StubOutWithMock(sys, 'stderr') |
+ self.mox.StubOutWithMock(sys, 'stdin') |
+ self.mox.StubOutWithMock(sys, 'stdout') |