mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 f4dc9204cc
			
		
	
	
		f4dc9204cc
		
	
	
	
	
		
			
			state of the import system. Also make importlib.invalidate_caches() work with sys.meta_path instead of sys.path_importer_cache to completely separate the path-based import system from the overall import system. Patch by Eric Snow.
		
			
				
	
	
		
			103 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
	
		
			2.8 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 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()
 |