Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/test/test_posixpath.py

    r2 r391  
    11import unittest
    2 from test import test_support
    3 
    4 import posixpath, os, sys
     2from test import test_support, test_genericpath
     3
     4import posixpath, os
    55from posixpath import realpath, abspath, dirname, basename
    66
     
    99
    1010ABSTFN = abspath(test_support.TESTFN)
     11
     12def skip_if_ABSTFN_contains_backslash(test):
     13    """
     14    On Windows, posixpath.abspath still returns paths with backslashes
     15    instead of posix forward slashes. If this is the case, several tests
     16    fail, so skip them.
     17    """
     18    found_backslash = '\\' in ABSTFN
     19    msg = "ABSTFN is not a posix path - tests fail"
     20    return [test, unittest.skip(msg)(test)][found_backslash]
    1121
    1222def safe_rmdir(dirname):
     
    2636            safe_rmdir(test_support.TESTFN + suffix)
    2737
    28     def assertIs(self, a, b):
    29         self.assert_(a is b)
    30 
    31     def test_normcase(self):
    32         # Check that normcase() is idempotent
    33         p = "FoO/./BaR"
    34         p = posixpath.normcase(p)
    35         self.assertEqual(p, posixpath.normcase(p))
    36 
    37         self.assertRaises(TypeError, posixpath.normcase)
    38 
    3938    def test_join(self):
    4039        self.assertEqual(posixpath.join("/foo", "bar", "/bar", "baz"), "/bar/baz")
    4140        self.assertEqual(posixpath.join("/foo", "bar", "baz"), "/foo/bar/baz")
    4241        self.assertEqual(posixpath.join("/foo/", "bar/", "baz/"), "/foo/bar/baz/")
    43 
    44         self.assertRaises(TypeError, posixpath.join)
    45 
    46     def test_splitdrive(self):
    47         self.assertEqual(posixpath.splitdrive("/foo/bar"), ("", "/foo/bar"))
    48 
    49         self.assertRaises(TypeError, posixpath.splitdrive)
    5042
    5143    def test_split(self):
     
    5547        self.assertEqual(posixpath.split("////foo"), ("////", "foo"))
    5648        self.assertEqual(posixpath.split("//foo//bar"), ("//foo", "bar"))
    57 
    58         self.assertRaises(TypeError, posixpath.split)
    5949
    6050    def splitextTest(self, path, filename, ext):
     
    7969        self.splitextTest("........", "........", "")
    8070        self.splitextTest("", "", "")
    81         self.assertRaises(TypeError, posixpath.splitext)
    8271
    8372    def test_isabs(self):
     
    8877        self.assertIs(posixpath.isabs("foo/bar"), False)
    8978
    90         self.assertRaises(TypeError, posixpath.isabs)
    91 
    9279    def test_basename(self):
    9380        self.assertEqual(posixpath.basename("/foo/bar"), "bar")
     
    9784        self.assertEqual(posixpath.basename("//foo//bar"), "bar")
    9885
    99         self.assertRaises(TypeError, posixpath.basename)
    100 
    10186    def test_dirname(self):
    10287        self.assertEqual(posixpath.dirname("/foo/bar"), "/foo")
     
    10590        self.assertEqual(posixpath.dirname("////foo"), "////")
    10691        self.assertEqual(posixpath.dirname("//foo//bar"), "//foo")
    107 
    108         self.assertRaises(TypeError, posixpath.dirname)
    109 
    110     def test_commonprefix(self):
    111         self.assertEqual(
    112             posixpath.commonprefix([]),
    113             ""
    114         )
    115         self.assertEqual(
    116             posixpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"]),
    117             "/home/swen"
    118         )
    119         self.assertEqual(
    120             posixpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"]),
    121             "/home/swen/"
    122         )
    123         self.assertEqual(
    124             posixpath.commonprefix(["/home/swen/spam", "/home/swen/spam"]),
    125             "/home/swen/spam"
    126         )
    127 
    128         testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', 'aXc', 'abd', 'ab', 'aX', 'abcX']
    129         for s1 in testlist:
    130             for s2 in testlist:
    131                 p = posixpath.commonprefix([s1, s2])
    132                 self.assert_(s1.startswith(p))
    133                 self.assert_(s2.startswith(p))
    134                 if s1 != s2:
    135                     n = len(p)
    136                     self.assertNotEqual(s1[n:n+1], s2[n:n+1])
    137 
    138     def test_getsize(self):
    139         f = open(test_support.TESTFN, "wb")
    140         try:
    141             f.write("foo")
    142             f.close()
    143             self.assertEqual(posixpath.getsize(test_support.TESTFN), 3)
    144         finally:
    145             if not f.closed:
    146                 f.close()
    147 
    148     def test_time(self):
    149         f = open(test_support.TESTFN, "wb")
    150         try:
    151             f.write("foo")
    152             f.close()
    153             f = open(test_support.TESTFN, "ab")
    154             f.write("bar")
    155             f.close()
    156             f = open(test_support.TESTFN, "rb")
    157             d = f.read()
    158             f.close()
    159             self.assertEqual(d, "foobar")
    160 
    161             self.assert_(
    162                 posixpath.getctime(test_support.TESTFN) <=
    163                 posixpath.getmtime(test_support.TESTFN)
    164             )
    165         finally:
    166             if not f.closed:
    167                 f.close()
    16892
    16993    def test_islink(self):
     
    185109                f.close()
    186110
    187         self.assertRaises(TypeError, posixpath.islink)
    188 
    189     def test_exists(self):
    190         self.assertIs(posixpath.exists(test_support.TESTFN), False)
    191         f = open(test_support.TESTFN, "wb")
    192         try:
    193             f.write("foo")
    194             f.close()
    195             self.assertIs(posixpath.exists(test_support.TESTFN), True)
    196             self.assertIs(posixpath.lexists(test_support.TESTFN), True)
    197         finally:
    198             if not f.close():
    199                 f.close()
    200 
    201         self.assertRaises(TypeError, posixpath.exists)
    202 
    203     def test_isdir(self):
    204         self.assertIs(posixpath.isdir(test_support.TESTFN), False)
    205         f = open(test_support.TESTFN, "wb")
    206         try:
    207             f.write("foo")
    208             f.close()
    209             self.assertIs(posixpath.isdir(test_support.TESTFN), False)
    210             os.remove(test_support.TESTFN)
    211             os.mkdir(test_support.TESTFN)
    212             self.assertIs(posixpath.isdir(test_support.TESTFN), True)
    213             os.rmdir(test_support.TESTFN)
    214         finally:
    215             if not f.close():
    216                 f.close()
    217 
    218         self.assertRaises(TypeError, posixpath.isdir)
    219 
    220     def test_isfile(self):
    221         self.assertIs(posixpath.isfile(test_support.TESTFN), False)
    222         f = open(test_support.TESTFN, "wb")
    223         try:
    224             f.write("foo")
    225             f.close()
    226             self.assertIs(posixpath.isfile(test_support.TESTFN), True)
    227             os.remove(test_support.TESTFN)
    228             os.mkdir(test_support.TESTFN)
    229             self.assertIs(posixpath.isfile(test_support.TESTFN), False)
    230             os.rmdir(test_support.TESTFN)
    231         finally:
    232             if not f.close():
    233                 f.close()
    234 
    235         self.assertRaises(TypeError, posixpath.isdir)
    236 
    237111    def test_samefile(self):
    238112        f = open(test_support.TESTFN + "1", "wb")
     
    247121                True
    248122            )
    249             # If we don't have links, assume that os.stat doesn't return resonable
    250             # inode information and thus, that samefile() doesn't work
     123
     124            # If we don't have links, assume that os.stat doesn't return
     125            # reasonable inode information and thus, that samefile() doesn't
     126            # work.
    251127            if hasattr(os, "symlink"):
    252128                os.symlink(
     
    275151            if not f.close():
    276152                f.close()
    277 
    278         self.assertRaises(TypeError, posixpath.samefile)
    279153
    280154    def test_samestat(self):
     
    290164                True
    291165            )
    292             # If we don't have links, assume that os.stat() doesn't return resonable
    293             # inode information and thus, that samefile() doesn't work
     166            # If we don't have links, assume that os.stat() doesn't return
     167            # reasonable inode information and thus, that samestat() doesn't
     168            # work.
    294169            if hasattr(os, "symlink"):
    295                 if hasattr(os, "symlink"):
    296                     os.symlink(test_support.TESTFN + "1", test_support.TESTFN + "2")
    297                     self.assertIs(
    298                         posixpath.samestat(
    299                             os.stat(test_support.TESTFN + "1"),
    300                             os.stat(test_support.TESTFN + "2")
    301                         ),
    302                         True
    303                     )
    304                     os.remove(test_support.TESTFN + "2")
     170                os.symlink(test_support.TESTFN + "1", test_support.TESTFN + "2")
     171                self.assertIs(
     172                    posixpath.samestat(
     173                        os.stat(test_support.TESTFN + "1"),
     174                        os.stat(test_support.TESTFN + "2")
     175                    ),
     176                    True
     177                )
     178                os.remove(test_support.TESTFN + "2")
    305179                f = open(test_support.TESTFN + "2", "wb")
    306180                f.write("bar")
     
    317191                f.close()
    318192
    319         self.assertRaises(TypeError, posixpath.samestat)
    320 
    321193    def test_ismount(self):
    322194        self.assertIs(posixpath.ismount("/"), True)
    323 
    324         self.assertRaises(TypeError, posixpath.ismount)
    325195
    326196    def test_expanduser(self):
     
    331201            pass
    332202        else:
    333             self.assert_(isinstance(posixpath.expanduser("~/"), basestring))
     203            self.assertIsInstance(posixpath.expanduser("~/"), basestring)
    334204            # if home directory == root directory, this test makes no sense
    335205            if posixpath.expanduser("~") != '/':
     
    338208                    posixpath.expanduser("~/")
    339209                )
    340             self.assert_(isinstance(posixpath.expanduser("~root/"), basestring))
    341             self.assert_(isinstance(posixpath.expanduser("~foo/"), basestring))
     210            self.assertIsInstance(posixpath.expanduser("~root/"), basestring)
     211            self.assertIsInstance(posixpath.expanduser("~foo/"), basestring)
    342212
    343213            with test_support.EnvironmentVarGuard() as env:
    344                 env.set('HOME', '/')
     214                env['HOME'] = '/'
    345215                self.assertEqual(posixpath.expanduser("~"), "/")
    346 
    347         self.assertRaises(TypeError, posixpath.expanduser)
    348 
    349     def test_expandvars(self):
    350         oldenv = os.environ.copy()
    351         try:
    352             os.environ.clear()
    353             os.environ["foo"] = "bar"
    354             os.environ["{foo"] = "baz1"
    355             os.environ["{foo}"] = "baz2"
    356             self.assertEqual(posixpath.expandvars("foo"), "foo")
    357             self.assertEqual(posixpath.expandvars("$foo bar"), "bar bar")
    358             self.assertEqual(posixpath.expandvars("${foo}bar"), "barbar")
    359             self.assertEqual(posixpath.expandvars("$[foo]bar"), "$[foo]bar")
    360             self.assertEqual(posixpath.expandvars("$bar bar"), "$bar bar")
    361             self.assertEqual(posixpath.expandvars("$?bar"), "$?bar")
    362             self.assertEqual(posixpath.expandvars("${foo}bar"), "barbar")
    363             self.assertEqual(posixpath.expandvars("$foo}bar"), "bar}bar")
    364             self.assertEqual(posixpath.expandvars("${foo"), "${foo")
    365             self.assertEqual(posixpath.expandvars("${{foo}}"), "baz1}")
    366             self.assertEqual(posixpath.expandvars("$foo$foo"), "barbar")
    367             self.assertEqual(posixpath.expandvars("$bar$bar"), "$bar$bar")
    368         finally:
    369             os.environ.clear()
    370             os.environ.update(oldenv)
    371 
    372         self.assertRaises(TypeError, posixpath.expandvars)
     216                self.assertEqual(posixpath.expanduser("~/foo"), "/foo")
    373217
    374218    def test_normpath(self):
     
    381225        self.assertEqual(posixpath.normpath("///..//./foo/.//bar"), "/foo/bar")
    382226
    383         # Issue 5827: Make sure normpath preserves unicode
    384         for path in (u'', u'.', u'/', u'\\', u'///foo/.//bar//'):
    385             self.assertTrue(isinstance(posixpath.normpath(path), unicode),
    386                             'normpath() returned str instead of unicode')
    387 
    388         self.assertRaises(TypeError, posixpath.normpath)
    389 
    390     def test_abspath(self):
    391         self.assert_("foo" in posixpath.abspath("foo"))
    392 
    393         # Issue 3426: check that abspath retuns unicode when the arg is unicode
    394         # and str when it's str, with both ASCII and non-ASCII cwds
    395         saved_cwd = os.getcwd()
    396         cwds = ['cwd']
    397         try:
    398             cwds.append(u'\xe7w\xf0'.encode(sys.getfilesystemencoding()
    399                                             or 'ascii'))
    400         except UnicodeEncodeError:
    401             pass # the cwd can't be encoded -- test with ascii cwd only
    402         for cwd in cwds:
    403             try:
    404                 os.mkdir(cwd)
    405                 os.chdir(cwd)
    406                 for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'):
    407                     self.assertTrue(isinstance(posixpath.abspath(path), str))
    408                 for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'):
    409                     self.assertTrue(isinstance(posixpath.abspath(upath), unicode))
    410             finally:
    411                 os.chdir(saved_cwd)
    412                 os.rmdir(cwd)
    413 
    414         self.assertRaises(TypeError, posixpath.abspath)
    415 
    416     def test_realpath(self):
    417         self.assert_("foo" in realpath("foo"))
    418         self.assertRaises(TypeError, posixpath.realpath)
     227    @skip_if_ABSTFN_contains_backslash
     228    def test_realpath_curdir(self):
     229        self.assertEqual(realpath('.'), os.getcwd())
     230        self.assertEqual(realpath('./.'), os.getcwd())
     231        self.assertEqual(realpath('/'.join(['.'] * 100)), os.getcwd())
     232
     233    @skip_if_ABSTFN_contains_backslash
     234    def test_realpath_pardir(self):
     235        self.assertEqual(realpath('..'), dirname(os.getcwd()))
     236        self.assertEqual(realpath('../..'), dirname(dirname(os.getcwd())))
     237        self.assertEqual(realpath('/'.join(['..'] * 100)), '/')
    419238
    420239    if hasattr(os, "symlink"):
     
    440259                self.assertEqual(realpath(ABSTFN+"2"), ABSTFN+"2")
    441260
     261                self.assertEqual(realpath(ABSTFN+"1/x"), ABSTFN+"1/x")
     262                self.assertEqual(realpath(ABSTFN+"1/.."), dirname(ABSTFN))
     263                self.assertEqual(realpath(ABSTFN+"1/../x"), dirname(ABSTFN) + "/x")
     264                os.symlink(ABSTFN+"x", ABSTFN+"y")
     265                self.assertEqual(realpath(ABSTFN+"1/../" + basename(ABSTFN) + "y"),
     266                                ABSTFN + "y")
     267                self.assertEqual(realpath(ABSTFN+"1/../" + basename(ABSTFN) + "1"),
     268                                ABSTFN + "1")
     269
     270                os.symlink(basename(ABSTFN) + "a/b", ABSTFN+"a")
     271                self.assertEqual(realpath(ABSTFN+"a"), ABSTFN+"a/b")
     272
     273                os.symlink("../" + basename(dirname(ABSTFN)) + "/" +
     274                        basename(ABSTFN) + "c", ABSTFN+"c")
     275                self.assertEqual(realpath(ABSTFN+"c"), ABSTFN+"c")
     276
    442277                # Test using relative path as well.
    443278                os.chdir(dirname(ABSTFN))
     
    448283                test_support.unlink(ABSTFN+"1")
    449284                test_support.unlink(ABSTFN+"2")
     285                test_support.unlink(ABSTFN+"y")
     286                test_support.unlink(ABSTFN+"c")
     287                test_support.unlink(ABSTFN+"a")
     288
     289        def test_realpath_repeated_indirect_symlinks(self):
     290            # Issue #6975.
     291            try:
     292                os.mkdir(ABSTFN)
     293                os.symlink('../' + basename(ABSTFN), ABSTFN + '/self')
     294                os.symlink('self/self/self', ABSTFN + '/link')
     295                self.assertEqual(realpath(ABSTFN + '/link'), ABSTFN)
     296            finally:
     297                test_support.unlink(ABSTFN + '/self')
     298                test_support.unlink(ABSTFN + '/link')
     299                safe_rmdir(ABSTFN)
     300
     301        def test_realpath_deep_recursion(self):
     302            depth = 10
     303            old_path = abspath('.')
     304            try:
     305                os.mkdir(ABSTFN)
     306                for i in range(depth):
     307                    os.symlink('/'.join(['%d' % i] * 10), ABSTFN + '/%d' % (i + 1))
     308                os.symlink('.', ABSTFN + '/0')
     309                self.assertEqual(realpath(ABSTFN + '/%d' % depth), ABSTFN)
     310
     311                # Test using relative path as well.
     312                os.chdir(ABSTFN)
     313                self.assertEqual(realpath('%d' % depth), ABSTFN)
     314            finally:
     315                os.chdir(old_path)
     316                for i in range(depth + 1):
     317                    test_support.unlink(ABSTFN + '/%d' % i)
     318                safe_rmdir(ABSTFN)
    450319
    451320        def test_realpath_resolve_parents(self):
     
    487356                # Relative path.
    488357                os.chdir(dirname(ABSTFN))
    489                 self.assertEqual(realpath(basename(ABSTFN) + "/link-y/.."), ABSTFN + "/k")
     358                self.assertEqual(realpath(basename(ABSTFN) + "/link-y/.."),
     359                                 ABSTFN + "/k")
    490360            finally:
    491361                os.chdir(old_path)
     
    528398            self.assertEqual(posixpath.relpath("a", "b/c"), "../../a")
    529399            self.assertEqual(posixpath.relpath("a", "a"), ".")
     400            self.assertEqual(posixpath.relpath("/foo/bar/bat", "/x/y/z"), '../../../foo/bar/bat')
     401            self.assertEqual(posixpath.relpath("/foo/bar/bat", "/foo/bar"), 'bat')
     402            self.assertEqual(posixpath.relpath("/foo/bar/bat", "/"), 'foo/bar/bat')
     403            self.assertEqual(posixpath.relpath("/", "/foo/bar/bat"), '../../..')
     404            self.assertEqual(posixpath.relpath("/foo/bar/bat", "/x"), '../foo/bar/bat')
     405            self.assertEqual(posixpath.relpath("/x", "/foo/bar/bat"), '../../../x')
     406            self.assertEqual(posixpath.relpath("/", "/"), '.')
     407            self.assertEqual(posixpath.relpath("/a", "/a"), '.')
     408            self.assertEqual(posixpath.relpath("/a/b", "/a/b"), '.')
    530409        finally:
    531410            os.getcwd = real_getcwd
    532411
     412
     413class PosixCommonTest(test_genericpath.CommonTest):
     414    pathmodule = posixpath
     415    attributes = ['relpath', 'samefile', 'sameopenfile', 'samestat']
     416
     417
    533418def test_main():
    534     test_support.run_unittest(PosixPathTest)
     419    test_support.run_unittest(PosixPathTest, PosixCommonTest)
     420
    535421
    536422if __name__=="__main__":
Note: See TracChangeset for help on using the changeset viewer.