blob: 73645f19bf3c77968144414ec5d924c0f4743ca4 [file] [log] [blame]
Guido van Rossumead9d8d1999-02-03 17:21:21 +00001import ntpath
Mark Hammond673c6cf2000-08-14 06:21:26 +00002import os
Georg Brandla4f46e12010-02-07 17:03:15 +00003from test.test_support import TestFailed
Florent Xiclunadc1531c2010-03-06 18:07:18 +00004from test import test_support, test_genericpath
Jerry Seutterfc7b3e32008-03-26 05:58:14 +00005import unittest
Guido van Rossumead9d8d1999-02-03 17:21:21 +00006
Guido van Rossumead9d8d1999-02-03 17:21:21 +00007
8def tester(fn, wantResult):
Eric S. Raymondfc170b12001-02-09 11:51:27 +00009 fn = fn.replace("\\", "\\\\")
Fred Drake004d5e62000-10-23 17:22:08 +000010 gotResult = eval(fn)
11 if wantResult != gotResult:
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000012 raise TestFailed, "%s should return: %s but returned: %s" \
13 %(str(fn), str(wantResult), str(gotResult))
Tim Peters6578dc92002-12-24 18:31:27 +000014
Guido van Rossumead9d8d1999-02-03 17:21:21 +000015
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000016class TestNtpath(unittest.TestCase):
17 def test_splitext(self):
18 tester('ntpath.splitext("foo.ext")', ('foo', '.ext'))
19 tester('ntpath.splitext("/foo/foo.ext")', ('/foo/foo', '.ext'))
20 tester('ntpath.splitext(".ext")', ('.ext', ''))
21 tester('ntpath.splitext("\\foo.ext\\foo")', ('\\foo.ext\\foo', ''))
22 tester('ntpath.splitext("foo.ext\\")', ('foo.ext\\', ''))
23 tester('ntpath.splitext("")', ('', ''))
24 tester('ntpath.splitext("foo.bar.ext")', ('foo.bar', '.ext'))
25 tester('ntpath.splitext("xx/foo.bar.ext")', ('xx/foo.bar', '.ext'))
26 tester('ntpath.splitext("xx\\foo.bar.ext")', ('xx\\foo.bar', '.ext'))
27 tester('ntpath.splitext("c:a/b\\c.d")', ('c:a/b\\c', '.d'))
Guido van Rossumead9d8d1999-02-03 17:21:21 +000028
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000029 def test_splitdrive(self):
30 tester('ntpath.splitdrive("c:\\foo\\bar")',
31 ('c:', '\\foo\\bar'))
32 tester('ntpath.splitdrive("c:/foo/bar")',
33 ('c:', '/foo/bar'))
Guido van Rossumead9d8d1999-02-03 17:21:21 +000034
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000035 def test_splitunc(self):
36 tester('ntpath.splitunc("\\\\conky\\mountpoint\\foo\\bar")',
37 ('\\\\conky\\mountpoint', '\\foo\\bar'))
38 tester('ntpath.splitunc("//conky/mountpoint/foo/bar")',
39 ('//conky/mountpoint', '/foo/bar'))
Guido van Rossumead9d8d1999-02-03 17:21:21 +000040
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000041 def test_split(self):
42 tester('ntpath.split("c:\\foo\\bar")', ('c:\\foo', 'bar'))
43 tester('ntpath.split("\\\\conky\\mountpoint\\foo\\bar")',
44 ('\\\\conky\\mountpoint\\foo', 'bar'))
Guido van Rossumead9d8d1999-02-03 17:21:21 +000045
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000046 tester('ntpath.split("c:\\")', ('c:\\', ''))
47 tester('ntpath.split("\\\\conky\\mountpoint\\")',
48 ('\\\\conky\\mountpoint', ''))
Guido van Rossumead9d8d1999-02-03 17:21:21 +000049
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000050 tester('ntpath.split("c:/")', ('c:/', ''))
51 tester('ntpath.split("//conky/mountpoint/")', ('//conky/mountpoint', ''))
Mark Hammond673c6cf2000-08-14 06:21:26 +000052
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000053 def test_isabs(self):
54 tester('ntpath.isabs("c:\\")', 1)
55 tester('ntpath.isabs("\\\\conky\\mountpoint\\")', 1)
56 tester('ntpath.isabs("\\foo")', 1)
57 tester('ntpath.isabs("\\foo\\bar")', 1)
Tim Petersd4f7f602001-07-19 19:11:41 +000058
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000059 def test_commonprefix(self):
60 tester('ntpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])',
61 "/home/swen")
62 tester('ntpath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])',
63 "\\home\\swen\\")
64 tester('ntpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])',
65 "/home/swen/spam")
Tim Peters6a3e5f12001-11-05 21:25:02 +000066
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000067 def test_join(self):
68 tester('ntpath.join("")', '')
69 tester('ntpath.join("", "", "")', '')
70 tester('ntpath.join("a")', 'a')
71 tester('ntpath.join("/a")', '/a')
72 tester('ntpath.join("\\a")', '\\a')
73 tester('ntpath.join("a:")', 'a:')
74 tester('ntpath.join("a:", "b")', 'a:b')
75 tester('ntpath.join("a:", "/b")', 'a:/b')
76 tester('ntpath.join("a:", "\\b")', 'a:\\b')
77 tester('ntpath.join("a", "/b")', '/b')
78 tester('ntpath.join("a", "\\b")', '\\b')
79 tester('ntpath.join("a", "b", "c")', 'a\\b\\c')
80 tester('ntpath.join("a\\", "b", "c")', 'a\\b\\c')
81 tester('ntpath.join("a", "b\\", "c")', 'a\\b\\c')
82 tester('ntpath.join("a", "b", "\\c")', '\\c')
83 tester('ntpath.join("d:\\", "\\pleep")', 'd:\\pleep')
84 tester('ntpath.join("d:\\", "a", "b")', 'd:\\a\\b')
85 tester("ntpath.join('c:', '/a')", 'c:/a')
86 tester("ntpath.join('c:/', '/a')", 'c:/a')
87 tester("ntpath.join('c:/a', '/b')", '/b')
88 tester("ntpath.join('c:', 'd:/')", 'd:/')
89 tester("ntpath.join('c:/', 'd:/')", 'd:/')
90 tester("ntpath.join('c:/', 'd:/a/b')", 'd:/a/b')
Tim Peters54a14a32001-08-30 22:05:26 +000091
Jerry Seutterfc7b3e32008-03-26 05:58:14 +000092 tester("ntpath.join('')", '')
93 tester("ntpath.join('', '', '', '', '')", '')
94 tester("ntpath.join('a')", 'a')
95 tester("ntpath.join('', 'a')", 'a')
96 tester("ntpath.join('', '', '', '', 'a')", 'a')
97 tester("ntpath.join('a', '')", 'a\\')
98 tester("ntpath.join('a', '', '', '', '')", 'a\\')
99 tester("ntpath.join('a\\', '')", 'a\\')
100 tester("ntpath.join('a\\', '', '', '', '')", 'a\\')
Tim Peters54a14a32001-08-30 22:05:26 +0000101
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000102 def test_normpath(self):
103 tester("ntpath.normpath('A//////././//.//B')", r'A\B')
104 tester("ntpath.normpath('A/./B')", r'A\B')
105 tester("ntpath.normpath('A/foo/../B')", r'A\B')
106 tester("ntpath.normpath('C:A//B')", r'C:A\B')
107 tester("ntpath.normpath('D:A/./B')", r'D:A\B')
108 tester("ntpath.normpath('e:A/foo/../B')", r'e:A\B')
Tim Peters54a14a32001-08-30 22:05:26 +0000109
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000110 tester("ntpath.normpath('C:///A//B')", r'C:\A\B')
111 tester("ntpath.normpath('D:///A/./B')", r'D:\A\B')
112 tester("ntpath.normpath('e:///A/foo/../B')", r'e:\A\B')
Sjoerd Mullender33a0a062007-01-16 16:42:38 +0000113
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000114 tester("ntpath.normpath('..')", r'..')
115 tester("ntpath.normpath('.')", r'.')
116 tester("ntpath.normpath('')", r'.')
117 tester("ntpath.normpath('/')", '\\')
118 tester("ntpath.normpath('c:/')", 'c:\\')
119 tester("ntpath.normpath('/../.././..')", '\\')
120 tester("ntpath.normpath('c:/../../..')", 'c:\\')
121 tester("ntpath.normpath('../.././..')", r'..\..\..')
122 tester("ntpath.normpath('K:../.././..')", r'K:..\..\..')
123 tester("ntpath.normpath('C:////a/b')", r'C:\a\b')
124 tester("ntpath.normpath('//machine/share//a/b')", r'\\machine\share\a\b')
Fred Drake5e997312002-01-15 03:46:43 +0000125
Georg Brandle2773252010-08-01 19:14:56 +0000126 tester("ntpath.normpath('\\\\.\\NUL')", r'\\.\NUL')
127 tester("ntpath.normpath('\\\\?\\D:/XY\\Z')", r'\\?\D:/XY\Z')
128
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000129 def test_expandvars(self):
Walter Dörwald6733bed2009-05-01 17:35:37 +0000130 with test_support.EnvironmentVarGuard() as env:
131 env.clear()
132 env["foo"] = "bar"
133 env["{foo"] = "baz1"
134 env["{foo}"] = "baz2"
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000135 tester('ntpath.expandvars("foo")', "foo")
136 tester('ntpath.expandvars("$foo bar")', "bar bar")
137 tester('ntpath.expandvars("${foo}bar")', "barbar")
138 tester('ntpath.expandvars("$[foo]bar")', "$[foo]bar")
139 tester('ntpath.expandvars("$bar bar")', "$bar bar")
140 tester('ntpath.expandvars("$?bar")', "$?bar")
141 tester('ntpath.expandvars("${foo}bar")', "barbar")
142 tester('ntpath.expandvars("$foo}bar")', "bar}bar")
143 tester('ntpath.expandvars("${foo")', "${foo")
144 tester('ntpath.expandvars("${{foo}}")', "baz1}")
145 tester('ntpath.expandvars("$foo$foo")', "barbar")
146 tester('ntpath.expandvars("$bar$bar")', "$bar$bar")
147 tester('ntpath.expandvars("%foo% bar")', "bar bar")
148 tester('ntpath.expandvars("%foo%bar")', "barbar")
149 tester('ntpath.expandvars("%foo%%foo%")', "barbar")
150 tester('ntpath.expandvars("%%foo%%foo%foo%")', "%foo%foobar")
151 tester('ntpath.expandvars("%?bar%")', "%?bar%")
152 tester('ntpath.expandvars("%foo%%bar")', "bar%bar")
153 tester('ntpath.expandvars("\'%foo%\'%bar")', "\'%foo%\'%bar")
Collin Winter6f187742007-03-16 22:16:08 +0000154
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000155 def test_abspath(self):
156 # ntpath.abspath() can only be used on a system with the "nt" module
157 # (reasonably), so we protect this test with "import nt". This allows
158 # the rest of the tests for the ntpath module to be run to completion
159 # on any platform, since most of the module is intended to be usable
160 # from any platform.
Ezio Melotti4cc80ca2010-02-20 08:09:39 +0000161 # XXX this needs more tests
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000162 try:
163 import nt
164 except ImportError:
Ezio Melotti4cc80ca2010-02-20 08:09:39 +0000165 # check that the function is there even if we are not on Windows
166 ntpath.abspath
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000167 else:
168 tester('ntpath.abspath("C:\\")', "C:\\")
169
170 def test_relpath(self):
171 currentdir = os.path.split(os.getcwd())[-1]
172 tester('ntpath.relpath("a")', 'a')
173 tester('ntpath.relpath(os.path.abspath("a"))', 'a')
174 tester('ntpath.relpath("a/b")', 'a\\b')
175 tester('ntpath.relpath("../a/b")', '..\\a\\b')
176 tester('ntpath.relpath("a", "../b")', '..\\'+currentdir+'\\a')
177 tester('ntpath.relpath("a/b", "../c")', '..\\'+currentdir+'\\a\\b')
178 tester('ntpath.relpath("a", "b/c")', '..\\..\\a')
179 tester('ntpath.relpath("//conky/mountpoint/a", "//conky/mountpoint/b/c")', '..\\..\\a')
180 tester('ntpath.relpath("a", "a")', '.')
181
182
Florent Xiclunadc1531c2010-03-06 18:07:18 +0000183class NtCommonTest(test_genericpath.CommonTest):
Florent Xicluna985478d2010-03-06 18:52:52 +0000184 pathmodule = ntpath
Florent Xiclunadc1531c2010-03-06 18:07:18 +0000185 attributes = ['relpath', 'splitunc']
186
187
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000188def test_main():
Florent Xiclunadc1531c2010-03-06 18:07:18 +0000189 test_support.run_unittest(TestNtpath, NtCommonTest)
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000190
191
192if __name__ == "__main__":
193 unittest.main()