mirror of
https://github.com/python/cpython.git
synced 2025-10-24 02:13:49 +00:00
This should make the Linux distros happy as it is now easier to leave importlib's tests out of their base Python distribution.
96 lines
2.6 KiB
Python
96 lines
2.6 KiB
Python
from importlib import abc
|
|
from importlib import machinery
|
|
import inspect
|
|
import unittest
|
|
|
|
|
|
class InheritanceTests:
|
|
|
|
"""Test that the specified class is a subclass/superclass of the expected
|
|
classes."""
|
|
|
|
subclasses = []
|
|
superclasses = []
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
assert self.subclasses or self.superclasses, self.__class__
|
|
self.__test = getattr(abc, self.__class__.__name__)
|
|
|
|
def test_subclasses(self):
|
|
# Test that the expected subclasses inherit.
|
|
for subclass in self.subclasses:
|
|
self.assertTrue(issubclass(subclass, self.__test),
|
|
"{0} is not a subclass of {1}".format(subclass, self.__test))
|
|
|
|
def test_superclasses(self):
|
|
# Test that the class inherits from the expected superclasses.
|
|
for superclass in self.superclasses:
|
|
self.assertTrue(issubclass(self.__test, superclass),
|
|
"{0} is not a superclass of {1}".format(superclass, self.__test))
|
|
|
|
|
|
class Finder(InheritanceTests, unittest.TestCase):
|
|
|
|
subclasses = [machinery.BuiltinImporter, machinery.FrozenImporter,
|
|
machinery.PathFinder]
|
|
|
|
|
|
class Loader(InheritanceTests, unittest.TestCase):
|
|
|
|
subclasses = [abc.PyLoader]
|
|
|
|
|
|
class ResourceLoader(InheritanceTests, unittest.TestCase):
|
|
|
|
superclasses = [abc.Loader]
|
|
|
|
|
|
class InspectLoader(InheritanceTests, unittest.TestCase):
|
|
|
|
superclasses = [abc.Loader]
|
|
subclasses = [abc.PyLoader, machinery.BuiltinImporter,
|
|
machinery.FrozenImporter, machinery.ExtensionFileLoader]
|
|
|
|
|
|
class ExecutionLoader(InheritanceTests, unittest.TestCase):
|
|
|
|
superclasses = [abc.InspectLoader]
|
|
subclasses = [abc.PyLoader]
|
|
|
|
|
|
class FileLoader(InheritanceTests, unittest.TestCase):
|
|
|
|
superclasses = [abc.ResourceLoader, abc.ExecutionLoader]
|
|
subclasses = [machinery.SourceFileLoader, machinery.SourcelessFileLoader]
|
|
|
|
|
|
class SourceLoader(InheritanceTests, unittest.TestCase):
|
|
|
|
superclasses = [abc.ResourceLoader, abc.ExecutionLoader]
|
|
subclasses = [machinery.SourceFileLoader]
|
|
|
|
|
|
class PyLoader(InheritanceTests, unittest.TestCase):
|
|
|
|
superclasses = [abc.Loader, abc.ResourceLoader, abc.ExecutionLoader]
|
|
|
|
|
|
class PyPycLoader(InheritanceTests, unittest.TestCase):
|
|
|
|
superclasses = [abc.PyLoader]
|
|
|
|
|
|
def test_main():
|
|
from test.support import run_unittest
|
|
classes = []
|
|
for class_ in globals().values():
|
|
if (inspect.isclass(class_) and
|
|
issubclass(class_, unittest.TestCase) and
|
|
issubclass(class_, InheritanceTests)):
|
|
classes.append(class_)
|
|
run_unittest(*classes)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
test_main()
|