diff options
Diffstat (limited to 'lib/testtools/testtools/tests/test_compat.py')
-rw-r--r-- | lib/testtools/testtools/tests/test_compat.py | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/lib/testtools/testtools/tests/test_compat.py b/lib/testtools/testtools/tests/test_compat.py index 4b2446efec..b29dc34f24 100644 --- a/lib/testtools/testtools/tests/test_compat.py +++ b/lib/testtools/testtools/tests/test_compat.py @@ -15,6 +15,7 @@ from testtools.compat import ( _detect_encoding, _get_source_encoding, _u, + reraise, str_is_unicode, text_repr, unicode_output_stream, @@ -95,7 +96,7 @@ class TestDetectEncoding(testtools.TestCase): "\xef\xbb\xbfimport sys\n", )) self._check_encoding("utf-8", ( - "\xef\xbb\xbf# File encoding: UTF-8\n", + "\xef\xbb\xbf# File encoding: utf-8\n", )) self._check_encoding("utf-8", ( '\xef\xbb\xbf"""Module docstring\n', @@ -147,7 +148,7 @@ class TestGetSourceEncoding(testtools.TestCase): self.addCleanup(os.remove, self.filename) self.addCleanup(linecache.cache.pop, self.filename, None) - def test_nonexistent_file_as_ascii(self): + def test_nonexistant_file_as_ascii(self): """When file can't be found, the encoding should default to ascii""" self.assertEquals("ascii", _get_source_encoding(self.filename)) @@ -389,6 +390,43 @@ class TestTextRepr(testtools.TestCase): self.assertEqual(eval(actual), u) + +class TestReraise(testtools.TestCase): + """Tests for trivial reraise wrapper needed for Python 2/3 changes""" + + def test_exc_info(self): + """After reraise exc_info matches plus some extra traceback""" + try: + raise ValueError("Bad value") + except ValueError: + _exc_info = sys.exc_info() + try: + reraise(*_exc_info) + except ValueError: + _new_exc_info = sys.exc_info() + self.assertIs(_exc_info[0], _new_exc_info[0]) + self.assertIs(_exc_info[1], _new_exc_info[1]) + expected_tb = traceback.extract_tb(_exc_info[2]) + self.assertEqual(expected_tb, + traceback.extract_tb(_new_exc_info[2])[-len(expected_tb):]) + + def test_custom_exception_no_args(self): + """Reraising does not require args attribute to contain params""" + + class CustomException(Exception): + """Exception that expects and sets attrs but not args""" + + def __init__(self, value): + Exception.__init__(self) + self.value = value + + try: + raise CustomException("Some value") + except CustomException: + _exc_info = sys.exc_info() + self.assertRaises(CustomException, reraise, *_exc_info) + + def test_suite(): from unittest import TestLoader return TestLoader().loadTestsFromName(__name__) |