text: 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 MetaPathFinder(InheritanceTests, unittest.TestCase):
  
      superclasses = [abc.Finder]
      subclasses = [machinery.BuiltinImporter, machinery.FrozenImporter,
                      machinery.PathFinder, machinery.WindowsRegistryFinder]
  
  
  class PathEntryFinder(InheritanceTests, unittest.TestCase):
  
      superclasses = [abc.Finder]
      subclasses = [machinery.FileFinder]
  
  
  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()
  