summaryrefslogtreecommitdiff
path: root/coverage/backunittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'coverage/backunittest.py')
-rw-r--r--coverage/backunittest.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/coverage/backunittest.py b/coverage/backunittest.py
new file mode 100644
index 00000000..6498397f
--- /dev/null
+++ b/coverage/backunittest.py
@@ -0,0 +1,41 @@
+"""Implementations of unittest features from the future."""
+
+# Use unittest2 if it's available, otherwise unittest. This gives us
+# backported features for 2.6.
+try:
+ import unittest2 as unittest # pylint: disable=F0401
+except ImportError:
+ import unittest
+
+
+def unittest_has(method):
+ """Does `unitttest.TestCase` have `method` defined?"""
+ return hasattr(unittest.TestCase, method)
+
+
+class TestCase(unittest.TestCase):
+ """Just like unittest.TestCase, but with assert methods added.
+
+ Designed to be compatible with 3.1 unittest. Methods are only defined if
+ `unittest` doesn't have them.
+
+ """
+ # pylint: disable=missing-docstring
+
+ if not unittest_has('assertCountEqual'):
+ if unittest_has('assertSameElements'):
+ def assertCountEqual(self, *args, **kwargs):
+ # pylint: disable=no-member
+ return self.assertSameElements(*args, **kwargs)
+ else:
+ def assertCountEqual(self, s1, s2):
+ """Assert these have the same elements, regardless of order."""
+ self.assertEqual(set(s1), set(s2))
+
+ if not unittest_has('assertRaisesRegex'):
+ def assertRaisesRegex(self, *args, **kwargs):
+ return self.assertRaisesRegexp(*args, **kwargs)
+
+ if not unittest_has('assertRegex'):
+ def assertRegex(self, *args, **kwargs):
+ return self.assertRegexpMatches(*args, **kwargs)