• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1from importlib import machinery
2import sys
3import types
4import unittest
5
6from .. import util
7
8
9class 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
21class 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
35class 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
45class 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
74if __name__ == '__main__':
75    unittest.main()
76