@@ -206,6 +206,51 @@ def test_non_namespace_package_takes_precedence(self):
206206 self .assertNotIn ('namespace' , str (foo .__loader__ ).lower ())
207207
208208
209+ class DynamicPathCalculation (NamespacePackageTest ):
210+ paths = ['project1' , 'project2' ]
211+
212+ def test_project3_fails (self ):
213+ import parent .child .one
214+ self .assertEqual (len (parent .__path__ ), 2 )
215+ self .assertEqual (len (parent .child .__path__ ), 2 )
216+ import parent .child .two
217+ self .assertEqual (len (parent .__path__ ), 2 )
218+ self .assertEqual (len (parent .child .__path__ ), 2 )
219+
220+ self .assertEqual (parent .child .one .attr , 'parent child one' )
221+ self .assertEqual (parent .child .two .attr , 'parent child two' )
222+
223+ with self .assertRaises (ImportError ):
224+ import parent .child .three
225+
226+ self .assertEqual (len (parent .__path__ ), 2 )
227+ self .assertEqual (len (parent .child .__path__ ), 2 )
228+
229+ def test_project3_succeeds (self ):
230+ import parent .child .one
231+ self .assertEqual (len (parent .__path__ ), 2 )
232+ self .assertEqual (len (parent .child .__path__ ), 2 )
233+ import parent .child .two
234+ self .assertEqual (len (parent .__path__ ), 2 )
235+ self .assertEqual (len (parent .child .__path__ ), 2 )
236+
237+ self .assertEqual (parent .child .one .attr , 'parent child one' )
238+ self .assertEqual (parent .child .two .attr , 'parent child two' )
239+
240+ with self .assertRaises (ImportError ):
241+ import parent .child .three
242+
243+ # now add project3
244+ sys .path .append (os .path .join (self .root , 'project3' ))
245+ import parent .child .three
246+
247+ # the paths dynamically get longer, to include the new directories
248+ self .assertEqual (len (parent .__path__ ), 3 )
249+ self .assertEqual (len (parent .child .__path__ ), 3 )
250+
251+ self .assertEqual (parent .child .three .attr , 'parent child three' )
252+
253+
209254class ZipWithMissingDirectory (NamespacePackageTest ):
210255 paths = ['missing_directory.zip' ]
211256
0 commit comments