from importlib import machinery import sys import types import unittest from .. import util class SpecLoaderMock: def find_spec(self, fullname, path=None, target=None): return machinery.ModuleSpec(fullname, self) def create_module(self, spec): return None 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__=util.__import__) class LoaderMock: def find_module(self, fullname, path=None): return self def load_module(self, fullname): sys.modules[fullname] = self.module return self.module class LoaderAttributeTests: def test___loader___missing(self): module = types.ModuleType('blah') try: del module.__loader__ except AttributeError: pass loader = LoaderMock() loader.module = module with util.uncache('blah'), util.import_state(meta_path=[loader]): module = self.__import__('blah') self.assertEqual(loader, module.__loader__) def test___loader___is_None(self): module = types.ModuleType('blah') module.__loader__ = None loader = LoaderMock() loader.module = module with util.uncache('blah'), util.import_state(meta_path=[loader]): returned_module = self.__import__('blah') self.assertEqual(loader, module.__loader__) (Frozen_Tests, Source_Tests ) = util.test_both(LoaderAttributeTests, __import__=util.__import__) if __name__ == '__main__': unittest.main()