@@ -234,3 +234,107 @@ def test_unicode_in_filename(tmpdir) -> None:
234234 file = codebase .get_file ("test/我很喜欢冰激淋/test-file 12'3_🍦.py" )
235235 assert file is not None
236236 assert file .content == "print('Hello, world!')"
237+
238+
239+ def test_contains_dirs_and_files (tmpdir ) -> None :
240+ # language=python
241+ with get_codebase_session (
242+ tmpdir = tmpdir ,
243+ files = {
244+ "file0.py" : "" ,
245+ "main_dir/file1.py" : "" ,
246+ "main_dir/file2.py" : "" ,
247+ "main_dir/sub_dir/file3.py" : "" ,
248+ "main_dir/sub_dir/sub_sub_dir/file4.py" : "" ,
249+ "main_dir/sub_dir/sub_sub_dir/file5.py" : "" ,
250+ "main_dir/sub_dir/sub_sub_dir/sub_sub_sub_dir/file6.py" : "" ,
251+ "main_dir/sub_dir/sub_sub_dir/sub_sub_sub_dir/sub_sub_sub_sub_dir/sub_sub_sub_sub_sub_dir/file7.py" : "" ,
252+ "lonely_dir/file_lonely.py" : "" ,
253+ },
254+ ) as codebase :
255+ file0 = codebase .get_file ("file0.py" )
256+ main_dir = codebase .get_directory ("main_dir" )
257+ file1 = codebase .get_file ("main_dir/file1.py" )
258+ file2 = codebase .get_file ("main_dir/file2.py" )
259+ sub_dir = codebase .get_directory ("main_dir/sub_dir" )
260+ file3 = codebase .get_file ("main_dir/sub_dir/file3.py" )
261+ sub_sub_dir = codebase .get_directory ("main_dir/sub_dir/sub_sub_dir" )
262+ file4 = codebase .get_file ("main_dir/sub_dir/sub_sub_dir/file4.py" )
263+ file5 = codebase .get_file ("main_dir/sub_dir/sub_sub_dir/file5.py" )
264+ sub_sub_sub_dir = codebase .get_directory ("main_dir/sub_dir/sub_sub_dir/sub_sub_sub_dir" )
265+ file6 = codebase .get_file ("main_dir/sub_dir/sub_sub_dir/sub_sub_sub_dir/file6.py" )
266+ sub_sub_sub_sub_dir = codebase .get_directory ("main_dir/sub_dir/sub_sub_dir/sub_sub_sub_dir/sub_sub_sub_sub_dir" )
267+ sub_sub_sub_sub_sub_dir = codebase .get_directory ("main_dir/sub_dir/sub_sub_dir/sub_sub_sub_dir/sub_sub_sub_sub_dir/sub_sub_sub_sub_sub_dir" )
268+ file7 = codebase .get_file ("main_dir/sub_dir/sub_sub_dir/sub_sub_sub_dir/sub_sub_sub_sub_dir/sub_sub_sub_sub_sub_dir/file7.py" )
269+ directory_stack = main_dir .subdirectories
270+ directory_stack .append (main_dir )
271+ main_directory_stack_no_root = directory_stack
272+ file_stack = [file7 ]
273+ for directory in directory_stack :
274+ # ignore self
275+ if directory != sub_sub_sub_sub_sub_dir :
276+ assert sub_sub_sub_sub_sub_dir in directory
277+ else :
278+ # A dir is not in itself!
279+ assert sub_sub_sub_sub_sub_dir not in directory
280+ for file in file_stack :
281+ assert file in directory
282+
283+ directory_stack .remove (sub_sub_sub_sub_sub_dir )
284+
285+ for directory in directory_stack :
286+ if directory != sub_sub_sub_sub_dir :
287+ assert sub_sub_sub_sub_dir in directory
288+
289+ for file in file_stack :
290+ assert file in directory
291+
292+ directory_stack .remove (sub_sub_sub_sub_dir )
293+ file_stack .append (file6 )
294+
295+ for directory in directory_stack :
296+ if directory != sub_sub_sub_dir :
297+ assert sub_sub_sub_dir in directory
298+
299+ for file in file_stack :
300+ assert file in directory
301+
302+ directory_stack .remove (sub_sub_sub_dir )
303+ file_stack .append (file5 )
304+ file_stack .append (file4 )
305+
306+ for directory in directory_stack :
307+ if directory != sub_sub_dir :
308+ assert sub_sub_dir in directory
309+
310+ for file in file_stack :
311+ assert file in directory
312+
313+ directory_stack .remove (sub_sub_dir )
314+ file_stack .append (file3 )
315+
316+ for directory in directory_stack :
317+ if directory != sub_dir :
318+ assert sub_dir in directory
319+ for file in file_stack :
320+ assert file in directory
321+
322+ directory_stack .remove (sub_dir )
323+ file_stack .append (file2 )
324+ file_stack .append (file1 )
325+
326+ for directory in directory_stack :
327+ if directory != main_dir :
328+ assert main_dir in directory
329+ for file in file_stack :
330+ assert file in directory
331+
332+ lonely_dir = codebase .get_directory ("lonely_dir" )
333+ lonely_file = codebase .get_file ("lonely_dir/file_lonely.py" )
334+
335+ for directory in main_directory_stack_no_root :
336+ assert file0 not in directory
337+ assert lonely_dir not in directory
338+ assert lonely_file not in directory
339+
340+ assert lonely_file in lonely_dir
0 commit comments