@@ -112,6 +112,53 @@ def test_None_on_sys_path(self):
112112 if email is not missing :
113113 sys .modules ['email' ] = email
114114
115+ def test_finder_with_find_module (self ):
116+ class TestFinder :
117+ def find_module (self , fullname ):
118+ return self .to_return
119+ failing_finder = TestFinder ()
120+ failing_finder .to_return = None
121+ path = 'testing path'
122+ with util .import_state (path_importer_cache = {path : failing_finder }):
123+ self .assertIsNone (
124+ self .machinery .PathFinder .find_spec ('whatever' , [path ]))
125+ success_finder = TestFinder ()
126+ success_finder .to_return = __loader__
127+ with util .import_state (path_importer_cache = {path : success_finder }):
128+ spec = self .machinery .PathFinder .find_spec ('whatever' , [path ])
129+ self .assertEqual (spec .loader , __loader__ )
130+
131+ def test_finder_with_find_loader (self ):
132+ class TestFinder :
133+ loader = None
134+ portions = []
135+ def find_loader (self , fullname ):
136+ return self .loader , self .portions
137+ path = 'testing path'
138+ with util .import_state (path_importer_cache = {path : TestFinder ()}):
139+ self .assertIsNone (
140+ self .machinery .PathFinder .find_spec ('whatever' , [path ]))
141+ success_finder = TestFinder ()
142+ success_finder .loader = __loader__
143+ with util .import_state (path_importer_cache = {path : success_finder }):
144+ spec = self .machinery .PathFinder .find_spec ('whatever' , [path ])
145+ self .assertEqual (spec .loader , __loader__ )
146+
147+ def test_finder_with_find_spec (self ):
148+ class TestFinder :
149+ spec = None
150+ def find_spec (self , fullname , target = None ):
151+ return self .spec
152+ path = 'testing path'
153+ with util .import_state (path_importer_cache = {path : TestFinder ()}):
154+ self .assertIsNone (
155+ self .machinery .PathFinder .find_spec ('whatever' , [path ]))
156+ success_finder = TestFinder ()
157+ success_finder .spec = self .machinery .ModuleSpec ('whatever' , __loader__ )
158+ with util .import_state (path_importer_cache = {path : success_finder }):
159+ got = self .machinery .PathFinder .find_spec ('whatever' , [path ])
160+ self .assertEqual (got , success_finder .spec )
161+
115162Frozen_FinderTests , Source_FinderTests = util .test_both (
116163 FinderTests , importlib = importlib , machinery = machinery )
117164
0 commit comments