Issue #19712: Port test.test_importlib.import_ tests to use PEP 451
that don't require changing test.test_importlib.util.mock_modules().
This commit is contained in:
parent
a951f3d1ac
commit
ed05b8a1a1
@ -1,3 +1,4 @@
|
|||||||
|
from importlib import machinery
|
||||||
import sys
|
import sys
|
||||||
import types
|
import types
|
||||||
import unittest
|
import unittest
|
||||||
@ -6,6 +7,27 @@ from .. import util
|
|||||||
from . import util as import_util
|
from . import util as import_util
|
||||||
|
|
||||||
|
|
||||||
|
class SpecLoaderMock:
|
||||||
|
|
||||||
|
def find_spec(self, fullname, path=None, target=None):
|
||||||
|
return machinery.ModuleSpec(fullname, self)
|
||||||
|
|
||||||
|
def exec_module(self, module):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class SpecLoaderAttributeTests:
|
||||||
|
|
||||||
|
def test___loader__(self):
|
||||||
|
loader = SpecLoaderMock()
|
||||||
|
with util.uncache('blah'), util.import_state(meta_path=[loader]):
|
||||||
|
module = self.__import__('blah')
|
||||||
|
self.assertEqual(loader, module.__loader__)
|
||||||
|
|
||||||
|
Frozen_SpecTests, Source_SpecTests = util.test_both(
|
||||||
|
SpecLoaderAttributeTests, __import__=import_util.__import__)
|
||||||
|
|
||||||
|
|
||||||
class LoaderMock:
|
class LoaderMock:
|
||||||
|
|
||||||
def find_module(self, fullname, path=None):
|
def find_module(self, fullname, path=None):
|
||||||
|
@ -1,19 +1,37 @@
|
|||||||
from .. import util
|
from .. import util
|
||||||
from . import util as import_util
|
from . import util as import_util
|
||||||
|
|
||||||
|
from importlib import machinery
|
||||||
import sys
|
import sys
|
||||||
import types
|
import types
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
PKG_NAME = 'fine'
|
||||||
|
SUBMOD_NAME = 'fine.bogus'
|
||||||
|
|
||||||
|
|
||||||
|
class BadSpecFinderLoader:
|
||||||
|
@classmethod
|
||||||
|
def find_spec(cls, fullname, path=None, target=None):
|
||||||
|
if fullname == SUBMOD_NAME:
|
||||||
|
spec = machinery.ModuleSpec(fullname, cls)
|
||||||
|
return spec
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def exec_module(module):
|
||||||
|
if module.__name__ == SUBMOD_NAME:
|
||||||
|
raise ImportError('I cannot be loaded!')
|
||||||
|
|
||||||
|
|
||||||
class BadLoaderFinder:
|
class BadLoaderFinder:
|
||||||
bad = 'fine.bogus'
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def find_module(cls, fullname, path):
|
def find_module(cls, fullname, path):
|
||||||
if fullname == cls.bad:
|
if fullname == SUBMOD_NAME:
|
||||||
return cls
|
return cls
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def load_module(cls, fullname):
|
def load_module(cls, fullname):
|
||||||
if fullname == cls.bad:
|
if fullname == SUBMOD_NAME:
|
||||||
raise ImportError('I cannot be loaded!')
|
raise ImportError('I cannot be loaded!')
|
||||||
|
|
||||||
|
|
||||||
@ -37,27 +55,39 @@ class APITest:
|
|||||||
def test_nonexistent_fromlist_entry(self):
|
def test_nonexistent_fromlist_entry(self):
|
||||||
# If something in fromlist doesn't exist, that's okay.
|
# If something in fromlist doesn't exist, that's okay.
|
||||||
# issue15715
|
# issue15715
|
||||||
mod = types.ModuleType('fine')
|
mod = types.ModuleType(PKG_NAME)
|
||||||
mod.__path__ = ['XXX']
|
mod.__path__ = ['XXX']
|
||||||
with util.import_state(meta_path=[BadLoaderFinder]):
|
with util.import_state(meta_path=[self.bad_finder_loader]):
|
||||||
with util.uncache('fine'):
|
with util.uncache(PKG_NAME):
|
||||||
sys.modules['fine'] = mod
|
sys.modules[PKG_NAME] = mod
|
||||||
self.__import__('fine', fromlist=['not here'])
|
self.__import__(PKG_NAME, fromlist=['not here'])
|
||||||
|
|
||||||
def test_fromlist_load_error_propagates(self):
|
def test_fromlist_load_error_propagates(self):
|
||||||
# If something in fromlist triggers an exception not related to not
|
# If something in fromlist triggers an exception not related to not
|
||||||
# existing, let that exception propagate.
|
# existing, let that exception propagate.
|
||||||
# issue15316
|
# issue15316
|
||||||
mod = types.ModuleType('fine')
|
mod = types.ModuleType(PKG_NAME)
|
||||||
mod.__path__ = ['XXX']
|
mod.__path__ = ['XXX']
|
||||||
with util.import_state(meta_path=[BadLoaderFinder]):
|
with util.import_state(meta_path=[self.bad_finder_loader]):
|
||||||
with util.uncache('fine'):
|
with util.uncache(PKG_NAME):
|
||||||
sys.modules['fine'] = mod
|
sys.modules[PKG_NAME] = mod
|
||||||
with self.assertRaises(ImportError):
|
with self.assertRaises(ImportError):
|
||||||
self.__import__('fine', fromlist=['bogus'])
|
self.__import__(PKG_NAME,
|
||||||
|
fromlist=[SUBMOD_NAME.rpartition('.')[-1]])
|
||||||
|
|
||||||
Frozen_APITests, Source_APITests = util.test_both(
|
|
||||||
APITest, __import__=import_util.__import__)
|
class OldAPITests(APITest):
|
||||||
|
bad_finder_loader = BadLoaderFinder
|
||||||
|
|
||||||
|
Frozen_OldAPITests, Source_OldAPITests = util.test_both(
|
||||||
|
OldAPITests, __import__=import_util.__import__)
|
||||||
|
|
||||||
|
|
||||||
|
class SpecAPITests(APITest):
|
||||||
|
bad_finder_loader = BadSpecFinderLoader
|
||||||
|
|
||||||
|
Frozen_SpecAPITests, Source_SpecAPITests = util.test_both(
|
||||||
|
SpecAPITests, __import__=import_util.__import__)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -17,7 +17,7 @@ class FinderTests:
|
|||||||
"""Tests for PathFinder."""
|
"""Tests for PathFinder."""
|
||||||
|
|
||||||
def test_failure(self):
|
def test_failure(self):
|
||||||
# Test None returned upon not finding a suitable finder.
|
# Test None returned upon not finding a suitable loader.
|
||||||
module = '<test module>'
|
module = '<test module>'
|
||||||
with util.import_state():
|
with util.import_state():
|
||||||
self.assertIsNone(self.machinery.PathFinder.find_module(module))
|
self.assertIsNone(self.machinery.PathFinder.find_module(module))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user