blob: 9d0baeb8c24bb72e27d344a9e890c620d714af83 [file] [log] [blame]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001import unittest
Benjamin Petersonee8712c2008-05-20 21:35:26 +00002from test import support
Thomas Wouters89f507f2006-12-13 04:49:30 +00003import os
4import genericpath
5
6class AllCommonTest(unittest.TestCase):
7
8 def assertIs(self, a, b):
9 self.assert_(a is b)
10
11 def test_commonprefix(self):
12 self.assertEqual(
13 genericpath.commonprefix([]),
14 ""
15 )
16 self.assertEqual(
17 genericpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"]),
18 "/home/swen"
19 )
20 self.assertEqual(
21 genericpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"]),
22 "/home/swen/"
23 )
24 self.assertEqual(
25 genericpath.commonprefix(["/home/swen/spam", "/home/swen/spam"]),
26 "/home/swen/spam"
27 )
28
29 def test_getsize(self):
Benjamin Petersonee8712c2008-05-20 21:35:26 +000030 f = open(support.TESTFN, "wb")
Thomas Wouters89f507f2006-12-13 04:49:30 +000031 try:
Guido van Rossum199fc752007-08-27 23:38:12 +000032 f.write(b"foo")
Thomas Wouters89f507f2006-12-13 04:49:30 +000033 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +000034 self.assertEqual(genericpath.getsize(support.TESTFN), 3)
Thomas Wouters89f507f2006-12-13 04:49:30 +000035 finally:
36 if not f.closed:
37 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +000038 os.remove(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +000039
40 def test_time(self):
Benjamin Petersonee8712c2008-05-20 21:35:26 +000041 f = open(support.TESTFN, "wb")
Thomas Wouters89f507f2006-12-13 04:49:30 +000042 try:
Guido van Rossum199fc752007-08-27 23:38:12 +000043 f.write(b"foo")
Thomas Wouters89f507f2006-12-13 04:49:30 +000044 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +000045 f = open(support.TESTFN, "ab")
Guido van Rossum199fc752007-08-27 23:38:12 +000046 f.write(b"bar")
Thomas Wouters89f507f2006-12-13 04:49:30 +000047 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +000048 f = open(support.TESTFN, "rb")
Thomas Wouters89f507f2006-12-13 04:49:30 +000049 d = f.read()
50 f.close()
Guido van Rossumdc122882007-07-10 12:09:13 +000051 self.assertEqual(d, b"foobar")
Thomas Wouters89f507f2006-12-13 04:49:30 +000052
53 self.assert_(
Benjamin Petersonee8712c2008-05-20 21:35:26 +000054 genericpath.getctime(support.TESTFN) <=
55 genericpath.getmtime(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +000056 )
57 finally:
58 if not f.closed:
59 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +000060 os.remove(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +000061
62 def test_exists(self):
Benjamin Petersonee8712c2008-05-20 21:35:26 +000063 self.assertIs(genericpath.exists(support.TESTFN), False)
64 f = open(support.TESTFN, "wb")
Thomas Wouters89f507f2006-12-13 04:49:30 +000065 try:
Guido van Rossum199fc752007-08-27 23:38:12 +000066 f.write(b"foo")
Thomas Wouters89f507f2006-12-13 04:49:30 +000067 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +000068 self.assertIs(genericpath.exists(support.TESTFN), True)
Thomas Wouters89f507f2006-12-13 04:49:30 +000069 finally:
70 if not f.close():
71 f.close()
72 try:
Benjamin Petersonee8712c2008-05-20 21:35:26 +000073 os.remove(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +000074 except os.error:
75 pass
76
77 self.assertRaises(TypeError, genericpath.exists)
78
79 def test_isdir(self):
Benjamin Petersonee8712c2008-05-20 21:35:26 +000080 self.assertIs(genericpath.isdir(support.TESTFN), False)
81 f = open(support.TESTFN, "wb")
Thomas Wouters89f507f2006-12-13 04:49:30 +000082 try:
Guido van Rossum199fc752007-08-27 23:38:12 +000083 f.write(b"foo")
Thomas Wouters89f507f2006-12-13 04:49:30 +000084 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +000085 self.assertIs(genericpath.isdir(support.TESTFN), False)
86 os.remove(support.TESTFN)
87 os.mkdir(support.TESTFN)
88 self.assertIs(genericpath.isdir(support.TESTFN), True)
89 os.rmdir(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +000090 finally:
91 if not f.close():
92 f.close()
93 try:
Benjamin Petersonee8712c2008-05-20 21:35:26 +000094 os.remove(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +000095 except os.error:
96 pass
97 try:
Benjamin Petersonee8712c2008-05-20 21:35:26 +000098 os.rmdir(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +000099 except os.error:
100 pass
101
102 self.assertRaises(TypeError, genericpath.isdir)
103
104 def test_isfile(self):
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000105 self.assertIs(genericpath.isfile(support.TESTFN), False)
106 f = open(support.TESTFN, "wb")
Thomas Wouters89f507f2006-12-13 04:49:30 +0000107 try:
Guido van Rossum199fc752007-08-27 23:38:12 +0000108 f.write(b"foo")
Thomas Wouters89f507f2006-12-13 04:49:30 +0000109 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000110 self.assertIs(genericpath.isfile(support.TESTFN), True)
111 os.remove(support.TESTFN)
112 os.mkdir(support.TESTFN)
113 self.assertIs(genericpath.isfile(support.TESTFN), False)
114 os.rmdir(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000115 finally:
116 if not f.close():
117 f.close()
118 try:
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000119 os.remove(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000120 except os.error:
121 pass
122 try:
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000123 os.rmdir(support.TESTFN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000124 except os.error:
125 pass
126
127 self.assertRaises(TypeError, genericpath.isdir)
128
129 def test_samefile(self):
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000130 f = open(support.TESTFN + "1", "wb")
Thomas Wouters89f507f2006-12-13 04:49:30 +0000131 try:
Guido van Rossum199fc752007-08-27 23:38:12 +0000132 f.write(b"foo")
Thomas Wouters89f507f2006-12-13 04:49:30 +0000133 f.close()
134 self.assertIs(
135 genericpath.samefile(
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000136 support.TESTFN + "1",
137 support.TESTFN + "1"
Thomas Wouters89f507f2006-12-13 04:49:30 +0000138 ),
139 True
140 )
141 # If we don't have links, assume that os.stat doesn't return resonable
142 # inode information and thus, that samefile() doesn't work
143 if hasattr(os, "symlink"):
144 os.symlink(
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000145 support.TESTFN + "1",
146 support.TESTFN + "2"
Thomas Wouters89f507f2006-12-13 04:49:30 +0000147 )
148 self.assertIs(
149 genericpath.samefile(
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000150 support.TESTFN + "1",
151 support.TESTFN + "2"
Thomas Wouters89f507f2006-12-13 04:49:30 +0000152 ),
153 True
154 )
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000155 os.remove(support.TESTFN + "2")
156 f = open(support.TESTFN + "2", "wb")
Guido van Rossum199fc752007-08-27 23:38:12 +0000157 f.write(b"bar")
Thomas Wouters89f507f2006-12-13 04:49:30 +0000158 f.close()
159 self.assertIs(
160 genericpath.samefile(
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000161 support.TESTFN + "1",
162 support.TESTFN + "2"
Thomas Wouters89f507f2006-12-13 04:49:30 +0000163 ),
164 False
165 )
166 finally:
167 if not f.close():
168 f.close()
169 try:
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000170 os.remove(support.TESTFN + "1")
Thomas Wouters89f507f2006-12-13 04:49:30 +0000171 except os.error:
172 pass
173 try:
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000174 os.remove(support.TESTFN + "2")
Thomas Wouters89f507f2006-12-13 04:49:30 +0000175 except os.error:
176 pass
177
178 self.assertRaises(TypeError, genericpath.samefile)
179
180def test_main():
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000181 support.run_unittest(AllCommonTest)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000182
183if __name__=="__main__":
184 test_main()