summaryrefslogtreecommitdiff
path: root/Lib/test/test_os.py
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2007-03-16 08:22:40 +0000
committerGeorg Brandl <georg@python.org>2007-03-16 08:22:40 +0000
commit8844e438b1e0a3546f15213df7741c3141859eeb (patch)
tree9e11e3f32ead5bd309c3c1429a98be2be559d01b /Lib/test/test_os.py
parent8f06d02935939629209b303a8ec54cf2db0cc302 (diff)
downloadcpython-git-8844e438b1e0a3546f15213df7741c3141859eeb.tar.gz
Patch #1273829: os.walk() now has a "followlinks" parameter. If set to
True (which is not the default), it visits symlinks pointing to directories.
Diffstat (limited to 'Lib/test/test_os.py')
-rw-r--r--Lib/test/test_os.py40
1 files changed, 34 insertions, 6 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 9dcdb1808f..a40dd5eb25 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -277,22 +277,34 @@ class WalkTests(unittest.TestCase):
# SUB1/ a file kid and a directory kid
# tmp2
# SUB11/ no kids
- # SUB2/ just a file kid
+ # SUB2/ a file kid and a dirsymlink kid
# tmp3
+ # link/ a symlink to TESTFN.2
+ # TESTFN.2/
+ # tmp4 a lone file
sub1_path = join(test_support.TESTFN, "SUB1")
sub11_path = join(sub1_path, "SUB11")
sub2_path = join(test_support.TESTFN, "SUB2")
tmp1_path = join(test_support.TESTFN, "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 + ".2")
+ tmp4_path = join(test_support.TESTFN + ".2", "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.join("..", "..", 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))
@@ -305,7 +317,7 @@ class WalkTests(unittest.TestCase):
self.assertEqual(all[0], (test_support.TESTFN, ["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 = []
@@ -317,7 +329,7 @@ class WalkTests(unittest.TestCase):
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[1], (sub2_path, ["link"], ["tmp3"]))
# Walk bottom-up.
all = list(os.walk(test_support.TESTFN, topdown=False))
@@ -330,7 +342,17 @@ class WalkTests(unittest.TestCase):
self.assertEqual(all[3], (test_support.TESTFN, ["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(test_support.TESTFN, 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,8 +362,14 @@ class WalkTests(unittest.TestCase):
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)
+ os.unlink(tmp4_path)
+ os.rmdir(t2_path)
class MakedirTests (unittest.TestCase):
def setUp(self):