Home | History | Annotate | Download | only in import_
      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