Commit b9100e5d authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #18473: Fixed pickle compatibility tests for optional modules.

Added WindowsError to compatibility mappings.
parent bfe1824d
...@@ -141,6 +141,13 @@ PYTHON2_EXCEPTIONS = ( ...@@ -141,6 +141,13 @@ PYTHON2_EXCEPTIONS = (
"ZeroDivisionError", "ZeroDivisionError",
) )
try:
WindowsError
except NameError:
pass
else:
PYTHON2_EXCEPTIONS += ("WindowsError",)
for excname in PYTHON2_EXCEPTIONS: for excname in PYTHON2_EXCEPTIONS:
NAME_MAPPING[("exceptions", excname)] = ("builtins", excname) NAME_MAPPING[("exceptions", excname)] = ("builtins", excname)
......
...@@ -240,7 +240,16 @@ def getmodule(module): ...@@ -240,7 +240,16 @@ def getmodule(module):
try: try:
return sys.modules[module] return sys.modules[module]
except KeyError: except KeyError:
try:
__import__(module) __import__(module)
except AttributeError as exc:
if support.verbose:
print("Can't import module %r: %s" % (module, exc))
raise ImportError
except ImportError as exc:
if support.verbose:
print(exc)
raise
return sys.modules[module] return sys.modules[module]
def getattribute(module, name): def getattribute(module, name):
...@@ -264,18 +273,16 @@ class CompatPickleTests(unittest.TestCase): ...@@ -264,18 +273,16 @@ class CompatPickleTests(unittest.TestCase):
for module in modules: for module in modules:
try: try:
getmodule(module) getmodule(module)
except ImportError as exc: except ImportError:
if support.verbose: pass
print(exc)
def test_import_mapping(self): def test_import_mapping(self):
for module3, module2 in REVERSE_IMPORT_MAPPING.items(): for module3, module2 in REVERSE_IMPORT_MAPPING.items():
with self.subTest((module3, module2)): with self.subTest((module3, module2)):
try: try:
getmodule(module3) getmodule(module3)
except ImportError as exc: except ImportError:
if support.verbose: pass
print(exc)
if module3[:1] != '_': if module3[:1] != '_':
self.assertIn(module2, IMPORT_MAPPING) self.assertIn(module2, IMPORT_MAPPING)
self.assertEqual(IMPORT_MAPPING[module2], module3) self.assertEqual(IMPORT_MAPPING[module2], module3)
...@@ -283,13 +290,18 @@ class CompatPickleTests(unittest.TestCase): ...@@ -283,13 +290,18 @@ class CompatPickleTests(unittest.TestCase):
def test_name_mapping(self): def test_name_mapping(self):
for (module3, name3), (module2, name2) in REVERSE_NAME_MAPPING.items(): for (module3, name3), (module2, name2) in REVERSE_NAME_MAPPING.items():
with self.subTest(((module3, name3), (module2, name2))): with self.subTest(((module3, name3), (module2, name2))):
attr = getattribute(module3, name3)
if (module2, name2) == ('exceptions', 'OSError'): if (module2, name2) == ('exceptions', 'OSError'):
attr = getattribute(module3, name3)
self.assertTrue(issubclass(attr, OSError)) self.assertTrue(issubclass(attr, OSError))
else: else:
module, name = mapping(module2, name2) module, name = mapping(module2, name2)
if module3[:1] != '_': if module3[:1] != '_':
self.assertEqual((module, name), (module3, name3)) self.assertEqual((module, name), (module3, name3))
try:
attr = getattribute(module3, name3)
except ImportError:
pass
else:
self.assertEqual(getattribute(module, name), attr) self.assertEqual(getattribute(module, name), attr)
def test_reverse_import_mapping(self): def test_reverse_import_mapping(self):
...@@ -315,7 +327,10 @@ class CompatPickleTests(unittest.TestCase): ...@@ -315,7 +327,10 @@ class CompatPickleTests(unittest.TestCase):
def test_reverse_name_mapping(self): def test_reverse_name_mapping(self):
for (module2, name2), (module3, name3) in NAME_MAPPING.items(): for (module2, name2), (module3, name3) in NAME_MAPPING.items():
with self.subTest(((module2, name2), (module3, name3))): with self.subTest(((module2, name2), (module3, name3))):
try:
attr = getattribute(module3, name3) attr = getattribute(module3, name3)
except ImportError:
pass
module, name = reverse_mapping(module3, name3) module, name = reverse_mapping(module3, name3)
if (module2, name2, module3, name3) not in ALT_NAME_MAPPING: if (module2, name2, module3, name3) not in ALT_NAME_MAPPING:
self.assertEqual((module, name), (module2, name2)) self.assertEqual((module, name), (module2, name2))
......
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