blob: 376f7ed141093b7bf6c0d91a1d4ef9dc18371de1 [file] [log] [blame]
Guido van Rossumead9d8d1999-02-03 17:21:21 +00001import ntpath
Mark Hammond673c6cf2000-08-14 06:21:26 +00002import os
Brian Curtin13a0db52010-09-06 19:46:17 +00003import sys
Victor Stinner1ab6c2d2011-11-15 22:27:41 +01004import unittest
5import warnings
Georg Brandl1b37e872010-03-14 10:45:50 +00006from test.support import TestFailed
Florent Xiclunac9c79782010-03-08 12:24:53 +00007from test import support, test_genericpath
Brian Curtin62857742010-09-06 17:07:27 +00008from tempfile import TemporaryFile
Guido van Rossumead9d8d1999-02-03 17:21:21 +00009
Guido van Rossumead9d8d1999-02-03 17:21:21 +000010
11def tester(fn, wantResult):
Eric S. Raymondfc170b12001-02-09 11:51:27 +000012 fn = fn.replace("\\", "\\\\")
Fred Drake004d5e62000-10-23 17:22:08 +000013 gotResult = eval(fn)
14 if wantResult != gotResult:
Christian Heimesf6cd9672008-03-26 13:45:42 +000015 raise TestFailed("%s should return: %s but returned: %s" \
16 %(str(fn), str(wantResult), str(gotResult)))
Tim Peters6578dc92002-12-24 18:31:27 +000017
Amaury Forgeot d'Arcc72ef8b2008-10-03 18:38:26 +000018 # then with bytes
19 fn = fn.replace("('", "(b'")
20 fn = fn.replace('("', '(b"')
21 fn = fn.replace("['", "[b'")
22 fn = fn.replace('["', '[b"')
23 fn = fn.replace(", '", ", b'")
24 fn = fn.replace(', "', ', b"')
Serhiy Storchakadbb10192014-02-13 10:13:53 +020025 fn = os.fsencode(fn).decode('latin1')
26 fn = fn.encode('ascii', 'backslashreplace').decode('ascii')
Victor Stinner1ab6c2d2011-11-15 22:27:41 +010027 with warnings.catch_warnings():
28 warnings.simplefilter("ignore", DeprecationWarning)
29 gotResult = eval(fn)
Amaury Forgeot d'Arcc72ef8b2008-10-03 18:38:26 +000030 if isinstance(wantResult, str):
Serhiy Storchakadbb10192014-02-13 10:13:53 +020031 wantResult = os.fsencode(wantResult)
Amaury Forgeot d'Arcc72ef8b2008-10-03 18:38:26 +000032 elif isinstance(wantResult, tuple):
Serhiy Storchakadbb10192014-02-13 10:13:53 +020033 wantResult = tuple(os.fsencode(r) for r in wantResult)
Amaury Forgeot d'Arcc72ef8b2008-10-03 18:38:26 +000034
35 gotResult = eval(fn)
36 if wantResult != gotResult:
37 raise TestFailed("%s should return: %s but returned: %s" \
38 %(str(fn), str(wantResult), repr(gotResult)))
Guido van Rossumead9d8d1999-02-03 17:21:21 +000039
Mark Hammond5a607a32009-05-06 08:04:54 +000040
Christian Heimesf6cd9672008-03-26 13:45:42 +000041class TestNtpath(unittest.TestCase):
42 def test_splitext(self):
43 tester('ntpath.splitext("foo.ext")', ('foo', '.ext'))
44 tester('ntpath.splitext("/foo/foo.ext")', ('/foo/foo', '.ext'))
45 tester('ntpath.splitext(".ext")', ('.ext', ''))
46 tester('ntpath.splitext("\\foo.ext\\foo")', ('\\foo.ext\\foo', ''))
47 tester('ntpath.splitext("foo.ext\\")', ('foo.ext\\', ''))
48 tester('ntpath.splitext("")', ('', ''))
49 tester('ntpath.splitext("foo.bar.ext")', ('foo.bar', '.ext'))
50 tester('ntpath.splitext("xx/foo.bar.ext")', ('xx/foo.bar', '.ext'))
51 tester('ntpath.splitext("xx\\foo.bar.ext")', ('xx\\foo.bar', '.ext'))
52 tester('ntpath.splitext("c:a/b\\c.d")', ('c:a/b\\c', '.d'))
Guido van Rossumead9d8d1999-02-03 17:21:21 +000053
Christian Heimesf6cd9672008-03-26 13:45:42 +000054 def test_splitdrive(self):
55 tester('ntpath.splitdrive("c:\\foo\\bar")',
56 ('c:', '\\foo\\bar'))
57 tester('ntpath.splitdrive("c:/foo/bar")',
58 ('c:', '/foo/bar'))
Mark Hammond5a607a32009-05-06 08:04:54 +000059 tester('ntpath.splitdrive("\\\\conky\\mountpoint\\foo\\bar")',
Christian Heimesf6cd9672008-03-26 13:45:42 +000060 ('\\\\conky\\mountpoint', '\\foo\\bar'))
Mark Hammond5a607a32009-05-06 08:04:54 +000061 tester('ntpath.splitdrive("//conky/mountpoint/foo/bar")',
Christian Heimesf6cd9672008-03-26 13:45:42 +000062 ('//conky/mountpoint', '/foo/bar'))
Mark Hammond5a607a32009-05-06 08:04:54 +000063 tester('ntpath.splitdrive("\\\\\\conky\\mountpoint\\foo\\bar")',
64 ('', '\\\\\\conky\\mountpoint\\foo\\bar'))
65 tester('ntpath.splitdrive("///conky/mountpoint/foo/bar")',
66 ('', '///conky/mountpoint/foo/bar'))
67 tester('ntpath.splitdrive("\\\\conky\\\\mountpoint\\foo\\bar")',
68 ('', '\\\\conky\\\\mountpoint\\foo\\bar'))
69 tester('ntpath.splitdrive("//conky//mountpoint/foo/bar")',
70 ('', '//conky//mountpoint/foo/bar'))
Serhiy Storchaka3d7e1152013-12-16 14:34:55 +020071 # Issue #19911: UNC part containing U+0130
72 self.assertEqual(ntpath.splitdrive('//conky/MOUNTPOİNT/foo/bar'),
73 ('//conky/MOUNTPOİNT', '/foo/bar'))
Guido van Rossumead9d8d1999-02-03 17:21:21 +000074
Serhiy Storchaka593568b2013-12-16 15:13:28 +020075 def test_splitunc(self):
76 with self.assertWarns(DeprecationWarning):
77 ntpath.splitunc('')
78 with support.check_warnings(('', DeprecationWarning)):
79 tester('ntpath.splitunc("c:\\foo\\bar")',
80 ('', 'c:\\foo\\bar'))
81 tester('ntpath.splitunc("c:/foo/bar")',
82 ('', 'c:/foo/bar'))
83 tester('ntpath.splitunc("\\\\conky\\mountpoint\\foo\\bar")',
84 ('\\\\conky\\mountpoint', '\\foo\\bar'))
85 tester('ntpath.splitunc("//conky/mountpoint/foo/bar")',
86 ('//conky/mountpoint', '/foo/bar'))
87 tester('ntpath.splitunc("\\\\\\conky\\mountpoint\\foo\\bar")',
88 ('', '\\\\\\conky\\mountpoint\\foo\\bar'))
89 tester('ntpath.splitunc("///conky/mountpoint/foo/bar")',
90 ('', '///conky/mountpoint/foo/bar'))
91 tester('ntpath.splitunc("\\\\conky\\\\mountpoint\\foo\\bar")',
92 ('', '\\\\conky\\\\mountpoint\\foo\\bar'))
93 tester('ntpath.splitunc("//conky//mountpoint/foo/bar")',
94 ('', '//conky//mountpoint/foo/bar'))
95 self.assertEqual(ntpath.splitunc('//conky/MOUNTPOİNT/foo/bar'),
96 ('//conky/MOUNTPOİNT', '/foo/bar'))
97
Christian Heimesf6cd9672008-03-26 13:45:42 +000098 def test_split(self):
99 tester('ntpath.split("c:\\foo\\bar")', ('c:\\foo', 'bar'))
100 tester('ntpath.split("\\\\conky\\mountpoint\\foo\\bar")',
101 ('\\\\conky\\mountpoint\\foo', 'bar'))
Guido van Rossumead9d8d1999-02-03 17:21:21 +0000102
Christian Heimesf6cd9672008-03-26 13:45:42 +0000103 tester('ntpath.split("c:\\")', ('c:\\', ''))
104 tester('ntpath.split("\\\\conky\\mountpoint\\")',
Mark Hammond5a607a32009-05-06 08:04:54 +0000105 ('\\\\conky\\mountpoint\\', ''))
Guido van Rossumead9d8d1999-02-03 17:21:21 +0000106
Christian Heimesf6cd9672008-03-26 13:45:42 +0000107 tester('ntpath.split("c:/")', ('c:/', ''))
Mark Hammond5a607a32009-05-06 08:04:54 +0000108 tester('ntpath.split("//conky/mountpoint/")', ('//conky/mountpoint/', ''))
Mark Hammond673c6cf2000-08-14 06:21:26 +0000109
Christian Heimesf6cd9672008-03-26 13:45:42 +0000110 def test_isabs(self):
111 tester('ntpath.isabs("c:\\")', 1)
112 tester('ntpath.isabs("\\\\conky\\mountpoint\\")', 1)
113 tester('ntpath.isabs("\\foo")', 1)
114 tester('ntpath.isabs("\\foo\\bar")', 1)
Tim Petersd4f7f602001-07-19 19:11:41 +0000115
Christian Heimesf6cd9672008-03-26 13:45:42 +0000116 def test_commonprefix(self):
117 tester('ntpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])',
118 "/home/swen")
119 tester('ntpath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])',
120 "\\home\\swen\\")
121 tester('ntpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])',
122 "/home/swen/spam")
Tim Peters6a3e5f12001-11-05 21:25:02 +0000123
Christian Heimesf6cd9672008-03-26 13:45:42 +0000124 def test_join(self):
125 tester('ntpath.join("")', '')
126 tester('ntpath.join("", "", "")', '')
127 tester('ntpath.join("a")', 'a')
128 tester('ntpath.join("/a")', '/a')
129 tester('ntpath.join("\\a")', '\\a')
130 tester('ntpath.join("a:")', 'a:')
Christian Heimesf6cd9672008-03-26 13:45:42 +0000131 tester('ntpath.join("a:", "\\b")', 'a:\\b')
Christian Heimesf6cd9672008-03-26 13:45:42 +0000132 tester('ntpath.join("a", "\\b")', '\\b')
133 tester('ntpath.join("a", "b", "c")', 'a\\b\\c')
134 tester('ntpath.join("a\\", "b", "c")', 'a\\b\\c')
135 tester('ntpath.join("a", "b\\", "c")', 'a\\b\\c')
136 tester('ntpath.join("a", "b", "\\c")', '\\c')
137 tester('ntpath.join("d:\\", "\\pleep")', 'd:\\pleep')
138 tester('ntpath.join("d:\\", "a", "b")', 'd:\\a\\b')
Tim Peters54a14a32001-08-30 22:05:26 +0000139
Christian Heimesf6cd9672008-03-26 13:45:42 +0000140 tester("ntpath.join('', 'a')", 'a')
141 tester("ntpath.join('', '', '', '', 'a')", 'a')
142 tester("ntpath.join('a', '')", 'a\\')
143 tester("ntpath.join('a', '', '', '', '')", 'a\\')
144 tester("ntpath.join('a\\', '')", 'a\\')
145 tester("ntpath.join('a\\', '', '', '', '')", 'a\\')
Serhiy Storchakac369c2c2014-01-27 23:15:14 +0200146 tester("ntpath.join('a/', '')", 'a/')
Tim Peters54a14a32001-08-30 22:05:26 +0000147
Serhiy Storchakac369c2c2014-01-27 23:15:14 +0200148 tester("ntpath.join('a/b', 'x/y')", 'a/b\\x/y')
149 tester("ntpath.join('/a/b', 'x/y')", '/a/b\\x/y')
150 tester("ntpath.join('/a/b/', 'x/y')", '/a/b/x/y')
151 tester("ntpath.join('c:', 'x/y')", 'c:x/y')
152 tester("ntpath.join('c:a/b', 'x/y')", 'c:a/b\\x/y')
153 tester("ntpath.join('c:a/b/', 'x/y')", 'c:a/b/x/y')
154 tester("ntpath.join('c:/', 'x/y')", 'c:/x/y')
155 tester("ntpath.join('c:/a/b', 'x/y')", 'c:/a/b\\x/y')
156 tester("ntpath.join('c:/a/b/', 'x/y')", 'c:/a/b/x/y')
157 tester("ntpath.join('//computer/share', 'x/y')", '//computer/share\\x/y')
158 tester("ntpath.join('//computer/share/', 'x/y')", '//computer/share/x/y')
159 tester("ntpath.join('//computer/share/a/b', 'x/y')", '//computer/share/a/b\\x/y')
Mark Hammond5a607a32009-05-06 08:04:54 +0000160
Serhiy Storchakac369c2c2014-01-27 23:15:14 +0200161 tester("ntpath.join('a/b', '/x/y')", '/x/y')
162 tester("ntpath.join('/a/b', '/x/y')", '/x/y')
163 tester("ntpath.join('c:', '/x/y')", 'c:/x/y')
164 tester("ntpath.join('c:a/b', '/x/y')", 'c:/x/y')
165 tester("ntpath.join('c:/', '/x/y')", 'c:/x/y')
166 tester("ntpath.join('c:/a/b', '/x/y')", 'c:/x/y')
167 tester("ntpath.join('//computer/share', '/x/y')", '//computer/share/x/y')
168 tester("ntpath.join('//computer/share/', '/x/y')", '//computer/share/x/y')
169 tester("ntpath.join('//computer/share/a', '/x/y')", '//computer/share/x/y')
170
171 tester("ntpath.join('c:', 'C:x/y')", 'C:x/y')
172 tester("ntpath.join('c:a/b', 'C:x/y')", 'C:a/b\\x/y')
173 tester("ntpath.join('c:/', 'C:x/y')", 'C:/x/y')
174 tester("ntpath.join('c:/a/b', 'C:x/y')", 'C:/a/b\\x/y')
175
176 for x in ('', 'a/b', '/a/b', 'c:', 'c:a/b', 'c:/', 'c:/a/b',
177 '//computer/share', '//computer/share/', '//computer/share/a/b'):
178 for y in ('d:', 'd:x/y', 'd:/', 'd:/x/y',
179 '//machine/common', '//machine/common/', '//machine/common/x/y'):
180 tester("ntpath.join(%r, %r)" % (x, y), y)
Mark Hammond5a607a32009-05-06 08:04:54 +0000181
182 tester("ntpath.join('\\\\computer\\share\\', 'a', 'b')", '\\\\computer\\share\\a\\b')
183 tester("ntpath.join('\\\\computer\\share', 'a', 'b')", '\\\\computer\\share\\a\\b')
184 tester("ntpath.join('\\\\computer\\share', 'a\\b')", '\\\\computer\\share\\a\\b')
185 tester("ntpath.join('//computer/share/', 'a', 'b')", '//computer/share/a\\b')
186 tester("ntpath.join('//computer/share', 'a', 'b')", '//computer/share\\a\\b')
187 tester("ntpath.join('//computer/share', 'a/b')", '//computer/share\\a/b')
188
Christian Heimesf6cd9672008-03-26 13:45:42 +0000189 def test_normpath(self):
190 tester("ntpath.normpath('A//////././//.//B')", r'A\B')
191 tester("ntpath.normpath('A/./B')", r'A\B')
192 tester("ntpath.normpath('A/foo/../B')", r'A\B')
193 tester("ntpath.normpath('C:A//B')", r'C:A\B')
194 tester("ntpath.normpath('D:A/./B')", r'D:A\B')
195 tester("ntpath.normpath('e:A/foo/../B')", r'e:A\B')
Tim Peters54a14a32001-08-30 22:05:26 +0000196
Christian Heimesf6cd9672008-03-26 13:45:42 +0000197 tester("ntpath.normpath('C:///A//B')", r'C:\A\B')
198 tester("ntpath.normpath('D:///A/./B')", r'D:\A\B')
199 tester("ntpath.normpath('e:///A/foo/../B')", r'e:\A\B')
Thomas Woutersb2137042007-02-01 18:02:27 +0000200
Christian Heimesf6cd9672008-03-26 13:45:42 +0000201 tester("ntpath.normpath('..')", r'..')
202 tester("ntpath.normpath('.')", r'.')
203 tester("ntpath.normpath('')", r'.')
204 tester("ntpath.normpath('/')", '\\')
205 tester("ntpath.normpath('c:/')", 'c:\\')
206 tester("ntpath.normpath('/../.././..')", '\\')
207 tester("ntpath.normpath('c:/../../..')", 'c:\\')
208 tester("ntpath.normpath('../.././..')", r'..\..\..')
209 tester("ntpath.normpath('K:../.././..')", r'K:..\..\..')
210 tester("ntpath.normpath('C:////a/b')", r'C:\a\b')
211 tester("ntpath.normpath('//machine/share//a/b')", r'\\machine\share\a\b')
Fred Drake5e997312002-01-15 03:46:43 +0000212
Georg Brandlcfb68212010-07-31 21:40:15 +0000213 tester("ntpath.normpath('\\\\.\\NUL')", r'\\.\NUL')
214 tester("ntpath.normpath('\\\\?\\D:/XY\\Z')", r'\\?\D:/XY\Z')
215
Christian Heimesf6cd9672008-03-26 13:45:42 +0000216 def test_expandvars(self):
Walter Dörwald155374d2009-05-01 19:58:58 +0000217 with support.EnvironmentVarGuard() as env:
218 env.clear()
219 env["foo"] = "bar"
220 env["{foo"] = "baz1"
221 env["{foo}"] = "baz2"
Christian Heimesf6cd9672008-03-26 13:45:42 +0000222 tester('ntpath.expandvars("foo")', "foo")
223 tester('ntpath.expandvars("$foo bar")', "bar bar")
224 tester('ntpath.expandvars("${foo}bar")', "barbar")
225 tester('ntpath.expandvars("$[foo]bar")', "$[foo]bar")
226 tester('ntpath.expandvars("$bar bar")', "$bar bar")
227 tester('ntpath.expandvars("$?bar")', "$?bar")
Christian Heimesf6cd9672008-03-26 13:45:42 +0000228 tester('ntpath.expandvars("$foo}bar")', "bar}bar")
229 tester('ntpath.expandvars("${foo")', "${foo")
230 tester('ntpath.expandvars("${{foo}}")', "baz1}")
231 tester('ntpath.expandvars("$foo$foo")', "barbar")
232 tester('ntpath.expandvars("$bar$bar")', "$bar$bar")
233 tester('ntpath.expandvars("%foo% bar")', "bar bar")
234 tester('ntpath.expandvars("%foo%bar")', "barbar")
235 tester('ntpath.expandvars("%foo%%foo%")', "barbar")
236 tester('ntpath.expandvars("%%foo%%foo%foo%")', "%foo%foobar")
237 tester('ntpath.expandvars("%?bar%")', "%?bar%")
238 tester('ntpath.expandvars("%foo%%bar")', "bar%bar")
239 tester('ntpath.expandvars("\'%foo%\'%bar")', "\'%foo%\'%bar")
Guido van Rossumd8faa362007-04-27 19:54:29 +0000240
Serhiy Storchakadbb10192014-02-13 10:13:53 +0200241 @unittest.skipUnless(support.FS_NONASCII, 'need support.FS_NONASCII')
242 def test_expandvars_nonascii(self):
243 def check(value, expected):
244 tester('ntpath.expandvars(%r)' % value, expected)
245 with support.EnvironmentVarGuard() as env:
246 env.clear()
247 nonascii = support.FS_NONASCII
248 env['spam'] = nonascii
249 env[nonascii] = 'ham' + nonascii
250 check('$spam bar', '%s bar' % nonascii)
251 check('$%s bar' % nonascii, '$%s bar' % nonascii)
252 check('${spam}bar', '%sbar' % nonascii)
253 check('${%s}bar' % nonascii, 'ham%sbar' % nonascii)
254 check('$spam}bar', '%s}bar' % nonascii)
255 check('$%s}bar' % nonascii, '$%s}bar' % nonascii)
256 check('%spam% bar', '%s bar' % nonascii)
257 check('%{}% bar'.format(nonascii), 'ham%s bar' % nonascii)
258 check('%spam%bar', '%sbar' % nonascii)
259 check('%{}%bar'.format(nonascii), 'ham%sbar' % nonascii)
260
Serhiy Storchakaffc1e6d2014-05-28 18:11:29 +0300261 def test_expanduser(self):
262 tester('ntpath.expanduser("test")', 'test')
263
264 with support.EnvironmentVarGuard() as env:
265 env.clear()
266 tester('ntpath.expanduser("~test")', '~test')
267
268 env['HOMEPATH'] = 'eric\\idle'
269 env['HOMEDRIVE'] = 'C:\\'
270 tester('ntpath.expanduser("~test")', 'C:\\eric\\test')
271 tester('ntpath.expanduser("~")', 'C:\\eric\\idle')
272
273 del env['HOMEDRIVE']
274 tester('ntpath.expanduser("~test")', 'eric\\test')
275 tester('ntpath.expanduser("~")', 'eric\\idle')
276
277 env.clear()
278 env['USERPROFILE'] = 'C:\\eric\\idle'
279 tester('ntpath.expanduser("~test")', 'C:\\eric\\test')
280 tester('ntpath.expanduser("~")', 'C:\\eric\\idle')
281
282 env.clear()
283 env['HOME'] = 'C:\\idle\\eric'
284 tester('ntpath.expanduser("~test")', 'C:\\idle\\test')
285 tester('ntpath.expanduser("~")', 'C:\\idle\\eric')
286
287 tester('ntpath.expanduser("~test\\foo\\bar")',
288 'C:\\idle\\test\\foo\\bar')
289 tester('ntpath.expanduser("~test/foo/bar")',
290 'C:\\idle\\test/foo/bar')
291 tester('ntpath.expanduser("~\\foo\\bar")',
292 'C:\\idle\\eric\\foo\\bar')
293 tester('ntpath.expanduser("~/foo/bar")',
294 'C:\\idle\\eric/foo/bar')
295
Christian Heimesf6cd9672008-03-26 13:45:42 +0000296 def test_abspath(self):
297 # ntpath.abspath() can only be used on a system with the "nt" module
298 # (reasonably), so we protect this test with "import nt". This allows
299 # the rest of the tests for the ntpath module to be run to completion
300 # on any platform, since most of the module is intended to be usable
301 # from any platform.
302 try:
303 import nt
Mark Hammond5a607a32009-05-06 08:04:54 +0000304 tester('ntpath.abspath("C:\\")', "C:\\")
Christian Heimesf6cd9672008-03-26 13:45:42 +0000305 except ImportError:
Zachary Ware9fe6d862013-12-08 00:20:35 -0600306 self.skipTest('nt module not available')
Christian Heimesf6cd9672008-03-26 13:45:42 +0000307
308 def test_relpath(self):
309 currentdir = os.path.split(os.getcwd())[-1]
310 tester('ntpath.relpath("a")', 'a')
311 tester('ntpath.relpath(os.path.abspath("a"))', 'a')
312 tester('ntpath.relpath("a/b")', 'a\\b')
313 tester('ntpath.relpath("../a/b")', '..\\a\\b')
314 tester('ntpath.relpath("a", "../b")', '..\\'+currentdir+'\\a')
315 tester('ntpath.relpath("a/b", "../c")', '..\\'+currentdir+'\\a\\b')
316 tester('ntpath.relpath("a", "b/c")', '..\\..\\a')
Mark Hammond5a607a32009-05-06 08:04:54 +0000317 tester('ntpath.relpath("c:/foo/bar/bat", "c:/x/y")', '..\\..\\foo\\bar\\bat')
Christian Heimesf6cd9672008-03-26 13:45:42 +0000318 tester('ntpath.relpath("//conky/mountpoint/a", "//conky/mountpoint/b/c")', '..\\..\\a')
319 tester('ntpath.relpath("a", "a")', '.')
Mark Hammond5a607a32009-05-06 08:04:54 +0000320 tester('ntpath.relpath("/foo/bar/bat", "/x/y/z")', '..\\..\\..\\foo\\bar\\bat')
321 tester('ntpath.relpath("/foo/bar/bat", "/foo/bar")', 'bat')
322 tester('ntpath.relpath("/foo/bar/bat", "/")', 'foo\\bar\\bat')
323 tester('ntpath.relpath("/", "/foo/bar/bat")', '..\\..\\..')
324 tester('ntpath.relpath("/foo/bar/bat", "/x")', '..\\foo\\bar\\bat')
325 tester('ntpath.relpath("/x", "/foo/bar/bat")', '..\\..\\..\\x')
326 tester('ntpath.relpath("/", "/")', '.')
327 tester('ntpath.relpath("/a", "/a")', '.')
328 tester('ntpath.relpath("/a/b", "/a/b")', '.')
Hirokazu Yamamotob08820a2010-10-18 12:13:18 +0000329 tester('ntpath.relpath("c:/foo", "C:/FOO")', '.')
Christian Heimesf6cd9672008-03-26 13:45:42 +0000330
Brian Curtin62857742010-09-06 17:07:27 +0000331 def test_sameopenfile(self):
332 with TemporaryFile() as tf1, TemporaryFile() as tf2:
333 # Make sure the same file is really the same
334 self.assertTrue(ntpath.sameopenfile(tf1.fileno(), tf1.fileno()))
335 # Make sure different files are really different
336 self.assertFalse(ntpath.sameopenfile(tf1.fileno(), tf2.fileno()))
Brian Curtin13a0db52010-09-06 19:46:17 +0000337 # Make sure invalid values don't cause issues on win32
338 if sys.platform == "win32":
Hirokazu Yamamoto26253bb2010-12-05 04:16:47 +0000339 with self.assertRaises(OSError):
Brian Curtin13a0db52010-09-06 19:46:17 +0000340 # Invalid file descriptors shouldn't display assert
341 # dialogs (#4804)
342 ntpath.sameopenfile(-1, -1)
Brian Curtin62857742010-09-06 17:07:27 +0000343
Tim Golden6b528062013-08-01 12:44:00 +0100344 def test_ismount(self):
345 self.assertTrue(ntpath.ismount("c:\\"))
346 self.assertTrue(ntpath.ismount("C:\\"))
347 self.assertTrue(ntpath.ismount("c:/"))
348 self.assertTrue(ntpath.ismount("C:/"))
349 self.assertTrue(ntpath.ismount("\\\\.\\c:\\"))
350 self.assertTrue(ntpath.ismount("\\\\.\\C:\\"))
351
352 self.assertTrue(ntpath.ismount(b"c:\\"))
353 self.assertTrue(ntpath.ismount(b"C:\\"))
354 self.assertTrue(ntpath.ismount(b"c:/"))
355 self.assertTrue(ntpath.ismount(b"C:/"))
356 self.assertTrue(ntpath.ismount(b"\\\\.\\c:\\"))
357 self.assertTrue(ntpath.ismount(b"\\\\.\\C:\\"))
358
359 with support.temp_dir() as d:
360 self.assertFalse(ntpath.ismount(d))
361
Tim Goldenb2fcebb2013-08-01 13:58:58 +0100362 if sys.platform == "win32":
363 #
364 # Make sure the current folder isn't the root folder
365 # (or any other volume root). The drive-relative
366 # locations below cannot then refer to mount points
367 #
368 drive, path = ntpath.splitdrive(sys.executable)
369 with support.change_cwd(os.path.dirname(sys.executable)):
370 self.assertFalse(ntpath.ismount(drive.lower()))
371 self.assertFalse(ntpath.ismount(drive.upper()))
Tim Golden6b528062013-08-01 12:44:00 +0100372
Tim Goldenb2fcebb2013-08-01 13:58:58 +0100373 self.assertTrue(ntpath.ismount("\\\\localhost\\c$"))
374 self.assertTrue(ntpath.ismount("\\\\localhost\\c$\\"))
Tim Golden6b528062013-08-01 12:44:00 +0100375
Tim Goldenb2fcebb2013-08-01 13:58:58 +0100376 self.assertTrue(ntpath.ismount(b"\\\\localhost\\c$"))
377 self.assertTrue(ntpath.ismount(b"\\\\localhost\\c$\\"))
Christian Heimesf6cd9672008-03-26 13:45:42 +0000378
Ezio Melottid0dfe9a2013-01-10 03:12:50 +0200379class NtCommonTest(test_genericpath.CommonTest, unittest.TestCase):
Florent Xiclunac9c79782010-03-08 12:24:53 +0000380 pathmodule = ntpath
381 attributes = ['relpath', 'splitunc']
382
383
Christian Heimesf6cd9672008-03-26 13:45:42 +0000384if __name__ == "__main__":
385 unittest.main()