mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	New test for rev. 54407 which only uses directories under TESTFN.
This commit is contained in:
		
							parent
							
								
									5cb76c19ba
								
							
						
					
					
						commit
						cae9f3d916
					
				
					 4 changed files with 70 additions and 32 deletions
				
			
		|  | @ -272,65 +272,89 @@ def test_traversal(self): | |||
|         from os.path import join | ||||
| 
 | ||||
|         # Build: | ||||
|         #     TESTFN/               a file kid and two directory kids | ||||
|         #     TESTFN/                | ||||
|         #       TEST1/              a file kid and two directory kids | ||||
|         #         tmp1 | ||||
|         #         SUB1/             a file kid and a directory kid | ||||
|         #             tmp2 | ||||
|         #             SUB11/        no kids | ||||
|         #         SUB2/             just a file kid | ||||
|         #             tmp3 | ||||
|         sub1_path = join(test_support.TESTFN, "SUB1") | ||||
|         #           tmp2 | ||||
|         #           SUB11/          no kids | ||||
|         #         SUB2/             a file kid and a dirsymlink kid | ||||
|         #           tmp3 | ||||
|         #           link/           a symlink to TESTFN.2 | ||||
|         #       TEST2/ | ||||
|         #         tmp4              a lone file | ||||
|         walk_path = join(test_support.TESTFN, "TEST1") | ||||
|         sub1_path = join(walk_path, "SUB1") | ||||
|         sub11_path = join(sub1_path, "SUB11") | ||||
|         sub2_path = join(test_support.TESTFN, "SUB2") | ||||
|         tmp1_path = join(test_support.TESTFN, "tmp1") | ||||
|         sub2_path = join(walk_path, "SUB2") | ||||
|         tmp1_path = join(walk_path, "tmp1") | ||||
|         tmp2_path = join(sub1_path, "tmp2") | ||||
|         tmp3_path = join(sub2_path, "tmp3") | ||||
|         link_path = join(sub2_path, "link") | ||||
|         t2_path = join(test_support.TESTFN, "TEST2") | ||||
|         tmp4_path = join(test_support.TESTFN, "TEST2", "tmp4") | ||||
| 
 | ||||
|         # Create stuff. | ||||
|         os.makedirs(sub11_path) | ||||
|         os.makedirs(sub2_path) | ||||
|         for path in tmp1_path, tmp2_path, tmp3_path: | ||||
|         os.makedirs(t2_path) | ||||
|         for path in tmp1_path, tmp2_path, tmp3_path, tmp4_path: | ||||
|             f = file(path, "w") | ||||
|             f.write("I'm " + path + " and proud of it.  Blame test_os.\n") | ||||
|             f.close() | ||||
|         if hasattr(os, "symlink"): | ||||
|             os.symlink(os.path.abspath(t2_path), link_path) | ||||
|         else: | ||||
|             # it must be a directory because the test expects that | ||||
|             os.mkdir(link_path) | ||||
| 
 | ||||
|         # Walk top-down. | ||||
|         all = list(os.walk(test_support.TESTFN)) | ||||
|         all = list(os.walk(walk_path)) | ||||
|         self.assertEqual(len(all), 4) | ||||
|         # We can't know which order SUB1 and SUB2 will appear in. | ||||
|         # Not flipped:  TESTFN, SUB1, SUB11, SUB2 | ||||
|         #     flipped:  TESTFN, SUB2, SUB1, SUB11 | ||||
|         flipped = all[0][1][0] != "SUB1" | ||||
|         all[0][1].sort() | ||||
|         self.assertEqual(all[0], (test_support.TESTFN, ["SUB1", "SUB2"], ["tmp1"])) | ||||
|         self.assertEqual(all[0], (walk_path, ["SUB1", "SUB2"], ["tmp1"])) | ||||
|         self.assertEqual(all[1 + flipped], (sub1_path, ["SUB11"], ["tmp2"])) | ||||
|         self.assertEqual(all[2 + flipped], (sub11_path, [], [])) | ||||
|         self.assertEqual(all[3 - 2 * flipped], (sub2_path, [], ["tmp3"])) | ||||
|         self.assertEqual(all[3 - 2 * flipped], (sub2_path, ["link"], ["tmp3"])) | ||||
| 
 | ||||
|         # Prune the search. | ||||
|         all = [] | ||||
|         for root, dirs, files in os.walk(test_support.TESTFN): | ||||
|         for root, dirs, files in os.walk(walk_path): | ||||
|             all.append((root, dirs, files)) | ||||
|             # Don't descend into SUB1. | ||||
|             if 'SUB1' in dirs: | ||||
|                 # Note that this also mutates the dirs we appended to all! | ||||
|                 dirs.remove('SUB1') | ||||
|         self.assertEqual(len(all), 2) | ||||
|         self.assertEqual(all[0], (test_support.TESTFN, ["SUB2"], ["tmp1"])) | ||||
|         self.assertEqual(all[1], (sub2_path, [], ["tmp3"])) | ||||
|         self.assertEqual(all[0], (walk_path, ["SUB2"], ["tmp1"])) | ||||
|         self.assertEqual(all[1], (sub2_path, ["link"], ["tmp3"])) | ||||
| 
 | ||||
|         # Walk bottom-up. | ||||
|         all = list(os.walk(test_support.TESTFN, topdown=False)) | ||||
|         all = list(os.walk(walk_path, topdown=False)) | ||||
|         self.assertEqual(len(all), 4) | ||||
|         # We can't know which order SUB1 and SUB2 will appear in. | ||||
|         # Not flipped:  SUB11, SUB1, SUB2, TESTFN | ||||
|         #     flipped:  SUB2, SUB11, SUB1, TESTFN | ||||
|         flipped = all[3][1][0] != "SUB1" | ||||
|         all[3][1].sort() | ||||
|         self.assertEqual(all[3], (test_support.TESTFN, ["SUB1", "SUB2"], ["tmp1"])) | ||||
|         self.assertEqual(all[3], (walk_path, ["SUB1", "SUB2"], ["tmp1"])) | ||||
|         self.assertEqual(all[flipped], (sub11_path, [], [])) | ||||
|         self.assertEqual(all[flipped + 1], (sub1_path, ["SUB11"], ["tmp2"])) | ||||
|         self.assertEqual(all[2 - 2 * flipped], (sub2_path, [], ["tmp3"])) | ||||
|         self.assertEqual(all[2 - 2 * flipped], (sub2_path, ["link"], ["tmp3"])) | ||||
| 
 | ||||
|         # Walk, following symlinks. | ||||
|         for root, dirs, files in os.walk(walk_path, followlinks=True): | ||||
|             if root == link_path: | ||||
|                 self.assertEqual(dirs, []) | ||||
|                 self.assertEqual(files, ["tmp4"]) | ||||
|                 break | ||||
|         else: | ||||
|             self.fail("Didn't follow symlink with followlinks=True") | ||||
|          | ||||
| 
 | ||||
|         # Tear everything down.  This is a decent use for bottom-up on | ||||
|         # Windows, which doesn't have a recursive delete command.  The | ||||
|  | @ -340,7 +364,11 @@ def test_traversal(self): | |||
|             for name in files: | ||||
|                 os.remove(join(root, name)) | ||||
|             for name in dirs: | ||||
|                 os.rmdir(join(root, name)) | ||||
|                 dirname = join(root, name) | ||||
|                 if not os.path.islink(dirname): | ||||
|                     os.rmdir(dirname) | ||||
|                 else: | ||||
|                     os.remove(dirname) | ||||
|         os.rmdir(test_support.TESTFN) | ||||
| 
 | ||||
| class MakedirTests (unittest.TestCase): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Georg Brandl
						Georg Brandl