summaryrefslogtreecommitdiff
path: root/tests/backunittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/backunittest.py')
-rw-r--r--tests/backunittest.py88
1 files changed, 7 insertions, 81 deletions
diff --git a/tests/backunittest.py b/tests/backunittest.py
index 0964ab1d..ca741d37 100644
--- a/tests/backunittest.py
+++ b/tests/backunittest.py
@@ -1,6 +1,11 @@
"""Implementations of unittest features from the future."""
-import difflib, re, unittest
+# 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 _need(method):
@@ -12,89 +17,10 @@ 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
- the builtin `unittest` doesn't have them.
+ `unittest` doesn't have them.
"""
- if _need('assertIn'):
- def assertIn(self, member, container, msg=None):
- """Assert that `member` is in `container`."""
- if member not in container:
- msg = msg or ('%r not found in %r' % (member, container))
- self.fail(msg)
-
- if _need('assertNotIn'):
- def assertNotIn(self, member, container, msg=None):
- """Assert that `member` is not in `container`."""
- if member in container:
- msg = msg or ('%r found in %r' % (member, container))
- self.fail(msg)
-
- if _need('assertGreater'):
- def assertGreater(self, a, b, msg=None):
- """Assert that `a` is greater than `b`."""
- if not a > b:
- msg = msg or ('%r not greater than %r' % (a, b))
- self.fail(msg)
-
- if _need('assertRaisesRegexp'):
- def assertRaisesRegexp(self, excClass, regexp, callobj, *args, **kw):
- """ Just like unittest.TestCase.assertRaises,
- but checks that the message is right too.
- """
- try:
- callobj(*args, **kw)
- except excClass as exc:
- excMsg = str(exc)
- if re.search(regexp, excMsg):
- # Message provided, and we got the right one: it passes.
- return
- else:
- # Message provided, and it didn't match: fail!
- raise self.failureException(
- "Right exception, wrong message: "
- "%r doesn't match %r" % (excMsg, regexp)
- )
- # No need to catch other exceptions: They'll fail the test all by
- # themselves!
- else:
- if hasattr(excClass, '__name__'):
- excName = excClass.__name__
- else:
- excName = str(excClass)
- raise self.failureException(
- "Expected to raise %s, didn't get an exception at all" %
- excName
- )
-
if _need('assertSameElements'):
def assertSameElements(self, s1, s2):
"""Assert that the two arguments are equal as sets."""
self.assertEqual(set(s1), set(s2))
-
- if _need('assertRegexpMatches'):
- def assertRegexpMatches(self, text, regex, msg=None):
- """Assert that `text` matches `regex`."""
- m = re.search(regex, text)
- if not m:
- msg = msg or ("%r doesn't match %r" % (text, regex))
- raise self.failureException(msg)
-
- if _need('assertMultiLineEqual'):
- def assertMultiLineEqual(self, first, second, msg=None):
- """Assert that two multi-line strings are equal.
-
- If they aren't, show a nice diff.
-
- """
- # Adapted from Py3.1 unittest.
- self.assertTrue(isinstance(first, str),
- 'First argument is not a string')
- self.assertTrue(isinstance(second, str),
- 'Second argument is not a string')
-
- if first != second:
- message = ''.join(difflib.ndiff(first.splitlines(True),
- second.splitlines(True)))
- if msg:
- message += " : " + msg
- self.fail("Multi-line strings are unequal:\n" + message)