blob: a3a22ef9b9e03ef76e0088f6fae035acf4fd9cb4 [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
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000126 def test_expandvars(self):
Walter Dörwald6733bed2009-05-01 17:35:37 +0000127 with test_support.EnvironmentVarGuard() as env:
128 env.clear()
129 env["foo"] = "bar"
130 env["{foo"] = "baz1"
131 env["{foo}"] = "baz2"
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000132 tester('ntpath.expandvars("foo")', "foo")
133 tester('ntpath.expandvars("$foo bar")', "bar bar")
134 tester('ntpath.expandvars("${foo}bar")', "barbar")
135 tester('ntpath.expandvars("$[foo]bar")', "$[foo]bar")
136 tester('ntpath.expandvars("$bar bar")', "$bar bar")
137 tester('ntpath.expandvars("$?bar")', "$?bar")
138 tester('ntpath.expandvars("${foo}bar")', "barbar")
139 tester('ntpath.expandvars("$foo}bar")', "bar}bar")
140 tester('ntpath.expandvars("${foo")', "${foo")
141 tester('ntpath.expandvars("${{foo}}")', "baz1}")
142 tester('ntpath.expandvars("$foo$foo")', "barbar")
143 tester('ntpath.expandvars("$bar$bar")', "$bar$bar")
144 tester('ntpath.expandvars("%foo% bar")', "bar bar")
145 tester('ntpath.expandvars("%foo%bar")', "barbar")
146 tester('ntpath.expandvars("%foo%%foo%")', "barbar")
147 tester('ntpath.expandvars("%%foo%%foo%foo%")', "%foo%foobar")
148 tester('ntpath.expandvars("%?bar%")', "%?bar%")
149 tester('ntpath.expandvars("%foo%%bar")', "bar%bar")
150 tester('ntpath.expandvars("\'%foo%\'%bar")', "\'%foo%\'%bar")
Collin Winter6f187742007-03-16 22:16:08 +0000151
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000152 def test_abspath(self):
153 # ntpath.abspath() can only be used on a system with the "nt" module
154 # (reasonably), so we protect this test with "import nt". This allows
155 # the rest of the tests for the ntpath module to be run to completion
156 # on any platform, since most of the module is intended to be usable
157 # from any platform.
Ezio Melotti4cc80ca2010-02-20 08:09:39 +0000158 # XXX this needs more tests
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000159 try:
160 import nt
161 except ImportError:
Ezio Melotti4cc80ca2010-02-20 08:09:39 +0000162 # check that the function is there even if we are not on Windows
163 ntpath.abspath
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000164 else:
165 tester('ntpath.abspath("C:\\")', "C:\\")
166
167 def test_relpath(self):
168 currentdir = os.path.split(os.getcwd())[-1]
169 tester('ntpath.relpath("a")', 'a')
170 tester('ntpath.relpath(os.path.abspath("a"))', 'a')
171 tester('ntpath.relpath("a/b")', 'a\\b')
172 tester('ntpath.relpath("../a/b")', '..\\a\\b')
173 tester('ntpath.relpath("a", "../b")', '..\\'+currentdir+'\\a')
174 tester('ntpath.relpath("a/b", "../c")', '..\\'+currentdir+'\\a\\b')
175 tester('ntpath.relpath("a", "b/c")', '..\\..\\a')
176 tester('ntpath.relpath("//conky/mountpoint/a", "//conky/mountpoint/b/c")', '..\\..\\a')
177 tester('ntpath.relpath("a", "a")', '.')
178
179
Florent Xiclunadc1531c2010-03-06 18:07:18 +0000180class NtCommonTest(test_genericpath.CommonTest):
Florent Xicluna985478d2010-03-06 18:52:52 +0000181 pathmodule = ntpath
Florent Xiclunadc1531c2010-03-06 18:07:18 +0000182 attributes = ['relpath', 'splitunc']
183
184
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000185def test_main():
Florent Xiclunadc1531c2010-03-06 18:07:18 +0000186 test_support.run_unittest(TestNtpath, NtCommonTest)
Jerry Seutterfc7b3e32008-03-26 05:58:14 +0000187
188
189if __name__ == "__main__":
190 unittest.main()