1 from importlib import machinery 2 import sys 3 import types 4 import unittest 5 6 from .. import util 7 8 9 class SpecLoaderMock: 10 11 def find_spec(self, fullname, path=None, target=None): 12 return machinery.ModuleSpec(fullname, self) 13 14 def create_module(self, spec): 15 return None 16 17 def exec_module(self, module): 18 pass 19 20 21 class SpecLoaderAttributeTests: 22 23 def test___loader__(self): 24 loader = SpecLoaderMock() 25 with util.uncache('blah'), util.import_state(meta_path=[loader]): 26 module = self.__import__('blah') 27 self.assertEqual(loader, module.__loader__) 28 29 30 (Frozen_SpecTests, 31 Source_SpecTests 32 ) = util.test_both(SpecLoaderAttributeTests, __import__=util.__import__) 33 34 35 class LoaderMock: 36 37 def find_module(self, fullname, path=None): 38 return self 39 40 def load_module(self, fullname): 41 sys.modules[fullname] = self.module 42 return self.module 43 44 45 class LoaderAttributeTests: 46 47 def test___loader___missing(self): 48 module = types.ModuleType('blah') 49 try: 50 del module.__loader__ 51 except AttributeError: 52 pass 53 loader = LoaderMock() 54 loader.module = module 55 with util.uncache('blah'), util.import_state(meta_path=[loader]): 56 module = self.__import__('blah') 57 self.assertEqual(loader, module.__loader__) 58 59 def test___loader___is_None(self): 60 module = types.ModuleType('blah') 61 module.__loader__ = None 62 loader = LoaderMock() 63 loader.module = module 64 with util.uncache('blah'), util.import_state(meta_path=[loader]): 65 returned_module = self.__import__('blah') 66 self.assertEqual(loader, module.__loader__) 67 68 69 (Frozen_Tests, 70 Source_Tests 71 ) = util.test_both(LoaderAttributeTests, __import__=util.__import__) 72 73 74 if __name__ == '__main__': 75 unittest.main() 76