Home | History | Annotate | Download | only in test
      1 import ntpath
      2 import os
      3 from test.test_support import TestFailed
      4 from test import test_support, test_genericpath
      5 import unittest
      6 
      7 
      8 def tester(fn, wantResult):
      9     fn = fn.replace("\\", "\\\\")
     10     gotResult = eval(fn)
     11     if wantResult != gotResult:
     12         raise TestFailed, "%s should return: %s but returned: %s" \
     13               %(str(fn), str(wantResult), str(gotResult))
     14 
     15 
     16 class 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'))
     28 
     29     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'))
     34 
     35     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'))
     40 
     41     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'))
     45 
     46         tester('ntpath.split("c:\\")', ('c:\\', ''))
     47         tester('ntpath.split("\\\\conky\\mountpoint\\")',
     48                ('\\\\conky\\mountpoint', ''))
     49 
     50         tester('ntpath.split("c:/")', ('c:/', ''))
     51         tester('ntpath.split("//conky/mountpoint/")', ('//conky/mountpoint', ''))
     52 
     53     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)
     58 
     59     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")
     66 
     67     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')
     91 
     92         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\\')
    101 
    102     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')
    109 
    110         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')
    113 
    114         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')
    125 
    126         tester("ntpath.normpath('\\\\.\\NUL')", r'\\.\NUL')
    127         tester("ntpath.normpath('\\\\?\\D:/XY\\Z')", r'\\?\D:/XY\Z')
    128 
    129     def test_expandvars(self):
    130         with test_support.EnvironmentVarGuard() as env:
    131             env.clear()
    132             env["foo"] = "bar"
    133             env["{foo"] = "baz1"
    134             env["{foo}"] = "baz2"
    135             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")
    154 
    155     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.
    161         # XXX this needs more tests
    162         try:
    163             import nt
    164         except ImportError:
    165             # check that the function is there even if we are not on Windows
    166             ntpath.abspath
    167         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         tester('ntpath.relpath("/foo/bar/bat", "/x/y/z")', '..\\..\\..\\foo\\bar\\bat')
    182         tester('ntpath.relpath("/foo/bar/bat", "/foo/bar")', 'bat')
    183         tester('ntpath.relpath("/foo/bar/bat", "/")', 'foo\\bar\\bat')
    184         tester('ntpath.relpath("/", "/foo/bar/bat")', '..\\..\\..')
    185         tester('ntpath.relpath("/foo/bar/bat", "/x")', '..\\foo\\bar\\bat')
    186         tester('ntpath.relpath("/x", "/foo/bar/bat")', '..\\..\\..\\x')
    187         tester('ntpath.relpath("/", "/")', '.')
    188         tester('ntpath.relpath("/a", "/a")', '.')
    189         tester('ntpath.relpath("/a/b", "/a/b")', '.')
    190         tester('ntpath.relpath("c:/foo", "C:/FOO")', '.')
    191 
    192 
    193 class NtCommonTest(test_genericpath.CommonTest):
    194     pathmodule = ntpath
    195     attributes = ['relpath', 'splitunc']
    196 
    197 
    198 def test_main():
    199     test_support.run_unittest(TestNtpath, NtCommonTest)
    200 
    201 
    202 if __name__ == "__main__":
    203     unittest.main()
    204