Commit 8a968fe5 authored by Stefan Behnel's avatar Stefan Behnel

Disable some CPython exception unit tests in older Python versions.

parent f10d8cba
...@@ -145,6 +145,7 @@ EXT_DEP_MODULES = { ...@@ -145,6 +145,7 @@ EXT_DEP_MODULES = {
'Coverage': 'Cython.Coverage', 'Coverage': 'Cython.Coverage',
'tag:ipython': 'IPython.testing.globalipapp', 'tag:ipython': 'IPython.testing.globalipapp',
'tag:jedi': 'jedi_BROKEN_AND_DISABLED', 'tag:jedi': 'jedi_BROKEN_AND_DISABLED',
'tag:test.support': 'test.support', # support module for CPython unit tests
} }
def patch_inspect_isfunction(): def patch_inspect_isfunction():
...@@ -433,6 +434,7 @@ VER_DEP_MODULES = { ...@@ -433,6 +434,7 @@ VER_DEP_MODULES = {
'run.py35_asyncio_async_def', 'run.py35_asyncio_async_def',
'run.mod__spec__', 'run.mod__spec__',
'run.pep526_variable_annotations', # typing module 'run.pep526_variable_annotations', # typing module
'run.test_exceptions', # copied from Py3.7+
]), ]),
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# cython: language_level=3 # cython: language_level=3
# mode: run # mode: run
# tag: generator, exception, tryfinally, tryexcept # tag: generator, exception, tryfinally, tryexcept, test.support
import copy import copy
import os import os
...@@ -14,8 +14,9 @@ import weakref ...@@ -14,8 +14,9 @@ import weakref
import errno import errno
from test.support import (TESTFN, captured_stderr, check_impl_detail, from test.support import (TESTFN, captured_stderr, check_impl_detail,
check_warnings, cpython_only, gc_collect, run_unittest, check_warnings, gc_collect,
no_tracing, unlink, import_module, script_helper, # no_tracing, cpython_only,
unlink, import_module, script_helper,
SuppressCrashReport) SuppressCrashReport)
no_tracing = unittest.skip("For nested functions, Cython generates a C call without recursion checks.") no_tracing = unittest.skip("For nested functions, Cython generates a C call without recursion checks.")
...@@ -163,7 +164,7 @@ class ExceptionTests(unittest.TestCase): ...@@ -163,7 +164,7 @@ class ExceptionTests(unittest.TestCase):
try: try:
compile(src, '<fragment>', 'exec') compile(src, '<fragment>', 'exec')
except exception as e: except exception as e:
if e.msg != msg: if e.msg != msg and sys.version_info >= (3, 6):
self.fail("expected %s, got %s" % (msg, e.msg)) self.fail("expected %s, got %s" % (msg, e.msg))
else: else:
self.fail("failed to get expected SyntaxError") self.fail("failed to get expected SyntaxError")
...@@ -1174,10 +1175,12 @@ class ExceptionTests(unittest.TestCase): ...@@ -1174,10 +1175,12 @@ class ExceptionTests(unittest.TestCase):
self.assertIn("raise exc", report) self.assertIn("raise exc", report)
if test_class is BrokenExceptionDel: if test_class is BrokenExceptionDel:
self.assertIn("BrokenStrException", report) self.assertIn("BrokenStrException", report)
if sys.version_info >= (3, 6):
self.assertIn("<exception str() failed>", report) self.assertIn("<exception str() failed>", report)
else: else:
self.assertIn("ValueError", report) self.assertIn("ValueError", report)
self.assertIn("del is broken", report) self.assertIn("del is broken", report)
if sys.version_info >= (3, 6):
self.assertTrue(report.endswith("\n")) self.assertTrue(report.endswith("\n"))
def test_unhandled(self): def test_unhandled(self):
...@@ -1196,9 +1199,11 @@ class ExceptionTests(unittest.TestCase): ...@@ -1196,9 +1199,11 @@ class ExceptionTests(unittest.TestCase):
self.assertIn("raise exc", report) self.assertIn("raise exc", report)
self.assertIn(exc_type.__name__, report) self.assertIn(exc_type.__name__, report)
if exc_type is BrokenStrException: if exc_type is BrokenStrException:
if sys.version_info >= (3, 6):
self.assertIn("<exception str() failed>", report) self.assertIn("<exception str() failed>", report)
else: else:
self.assertIn("test message", report) self.assertIn("test message", report)
if sys.version_info >= (3, 6):
self.assertTrue(report.endswith("\n")) self.assertTrue(report.endswith("\n"))
@cpython_only @cpython_only
...@@ -1279,6 +1284,7 @@ class ExceptionTests(unittest.TestCase): ...@@ -1279,6 +1284,7 @@ class ExceptionTests(unittest.TestCase):
class ImportErrorTests(unittest.TestCase): class ImportErrorTests(unittest.TestCase):
@unittest.skipIf(sys.version_info < (3, 6), "Requires Py3.6+")
def test_attributes(self): def test_attributes(self):
# Setting 'name' and 'path' should not be a problem. # Setting 'name' and 'path' should not be a problem.
exc = ImportError('test') exc = ImportError('test')
...@@ -1297,7 +1303,8 @@ class ImportErrorTests(unittest.TestCase): ...@@ -1297,7 +1303,8 @@ class ImportErrorTests(unittest.TestCase):
self.assertEqual(exc.name, 'somename') self.assertEqual(exc.name, 'somename')
self.assertEqual(exc.path, 'somepath') self.assertEqual(exc.path, 'somepath')
msg = "'invalid' is an invalid keyword argument for ImportError" msg = ("'invalid' is an invalid keyword argument for ImportError"
if sys.version_info >= (3, 7) else ".*keyword argument.*")
with self.assertRaisesRegex(TypeError, msg): with self.assertRaisesRegex(TypeError, msg):
ImportError('test', invalid='keyword') ImportError('test', invalid='keyword')
...@@ -1313,6 +1320,7 @@ class ImportErrorTests(unittest.TestCase): ...@@ -1313,6 +1320,7 @@ class ImportErrorTests(unittest.TestCase):
with self.assertRaisesRegex(TypeError, msg): with self.assertRaisesRegex(TypeError, msg):
ImportError('test', invalid='keyword', another=True) ImportError('test', invalid='keyword', another=True)
@unittest.skipIf(sys.version_info < (3, 7), "requires Py3.7+")
def test_reset_attributes(self): def test_reset_attributes(self):
exc = ImportError('test', name='name', path='path') exc = ImportError('test', name='name', path='path')
self.assertEqual(exc.args, ('test',)) self.assertEqual(exc.args, ('test',))
...@@ -1334,6 +1342,7 @@ class ImportErrorTests(unittest.TestCase): ...@@ -1334,6 +1342,7 @@ class ImportErrorTests(unittest.TestCase):
exc = ImportError(arg) exc = ImportError(arg)
self.assertEqual(str(arg), str(exc)) self.assertEqual(str(arg), str(exc))
@unittest.skipIf(sys.version_info < (3, 6), "Requires Py3.6+")
def test_copy_pickle(self): def test_copy_pickle(self):
for kwargs in (dict(), for kwargs in (dict(),
dict(name='somename'), dict(name='somename'),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment