Implement TestCase.assertIsNotNone for python < 2.7.
[obnox/samba/samba-obnox.git] / python / samba / tests / __init__.py
index 65a727aaf6c606e69ad9b475070b8efb08aeb009..3e7094fe067f1cef5f138685b3b64e7b9e0e0880 100644 (file)
@@ -25,6 +25,7 @@ from samba import param
 from samba.samdb import SamDB
 from samba import credentials
 import subprocess
+import sys
 import tempfile
 import unittest
 
@@ -54,30 +55,91 @@ class TestCase(unittest.TestCase):
         return cmdline_credentials
 
     # These functions didn't exist before Python2.7:
-    if not getattr(unittest.TestCase, "skipTest", None):
+    if sys.version_info < (2, 7):
+        import warnings
+
         def skipTest(self, reason):
             raise SkipTest(reason)
 
-    if not getattr(unittest.TestCase, "assertIs", None):
-        def assertIs(self, a, b):
-            self.assertTrue(a is b)
+        def assertIn(self, member, container, msg=None):
+            self.assertTrue(member in container, msg)
+
+        def assertIs(self, a, b, msg=None):
+            self.assertTrue(a is b, msg)
+
+        def assertIsNot(self, a, b, msg=None):
+            self.assertTrue(a is not b, msg)
+
+        def assertIsNotNone(self, a, msg=None):
+            self.assertTrue(a is not None)
 
-    if not getattr(unittest.TestCase, "assertIsNot", None):
-        def assertIsNot(self, a, b):
-            self.assertTrue(a is not b)
+        def assertIsInstance(self, a, b, msg=None):
+            self.assertTrue(isinstance(a, b), msg)
+
+        def assertIsNone(self, a, msg=None):
+            self.assertTrue(a is None, msg)
 
-    if not getattr(unittest.TestCase, "addCleanup", None):
         def addCleanup(self, fn, *args, **kwargs):
             self._cleanups = getattr(self, "_cleanups", []) + [
                 (fn, args, kwargs)]
 
-        def tearDown(self):
-            super(TestCase, self).tearDown()
-            for (fn, args, kwargs) in reversed(getattr(self, "_cleanups", [])):
-                fn(*args, **kwargs)
-
-
-class LdbTestCase(unittest.TestCase):
+        def _addSkip(self, result, reason):
+            addSkip = getattr(result, 'addSkip', None)
+            if addSkip is not None:
+                addSkip(self, reason)
+            else:
+                warnings.warn("TestResult has no addSkip method, skips not reported",
+                              RuntimeWarning, 2)
+                result.addSuccess(self)
+
+        def run(self, result=None):
+            if result is None: result = self.defaultTestResult()
+            result.startTest(self)
+            testMethod = getattr(self, self._testMethodName)
+            try:
+                try:
+                    self.setUp()
+                except SkipTest, e:
+                    self._addSkip(result, str(e))
+                    return
+                except KeyboardInterrupt:
+                    raise
+                except:
+                    result.addError(self, self._exc_info())
+                    return
+
+                ok = False
+                try:
+                    testMethod()
+                    ok = True
+                except SkipTest, e:
+                    self._addSkip(result, str(e))
+                    return
+                except self.failureException:
+                    result.addFailure(self, self._exc_info())
+                except KeyboardInterrupt:
+                    raise
+                except:
+                    result.addError(self, self._exc_info())
+
+                try:
+                    self.tearDown()
+                except SkipTest, e:
+                    self._addSkip(result, str(e))
+                except KeyboardInterrupt:
+                    raise
+                except:
+                    result.addError(self, self._exc_info())
+                    ok = False
+
+                for (fn, args, kwargs) in reversed(getattr(self, "_cleanups", [])):
+                    fn(*args, **kwargs)
+                if ok: result.addSuccess(self)
+            finally:
+                result.stopTest(self)
+
+
+class LdbTestCase(TestCase):
     """Trivial test case for running tests against a LDB."""
 
     def setUp(self):