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_glob.py

    r2 r391  
    1 import unittest
    2 from test.test_support import run_unittest, TESTFN
    31import glob
    42import os
    53import shutil
     4import sys
     5import unittest
     6
     7from test.test_support import run_unittest, TESTFN
     8
     9
     10def fsdecode(s):
     11    return unicode(s, sys.getfilesystemencoding())
     12
    613
    714class GlobTests(unittest.TestCase):
     
    1926
    2027    def setUp(self):
    21         self.tempdir = TESTFN+"_dir"
     28        self.tempdir = TESTFN + "_dir"
    2229        self.mktemp('a', 'D')
    2330        self.mktemp('aab', 'F')
     31        self.mktemp('.aa', 'G')
     32        self.mktemp('.bb', 'H')
    2433        self.mktemp('aaa', 'zzzF')
    2534        self.mktemp('ZZZ')
     
    2837        if hasattr(os, 'symlink'):
    2938            os.symlink(self.norm('broken'), self.norm('sym1'))
    30             os.symlink(self.norm('broken'), self.norm('sym2'))
     39            os.symlink('broken', self.norm('sym2'))
     40            os.symlink(os.path.join('a', 'bcd'), self.norm('sym3'))
    3141
    3242    def tearDown(self):
     
    4151        res = glob.glob(p)
    4252        self.assertEqual(list(glob.iglob(p)), res)
     53        ures = [fsdecode(x) for x in res]
     54        self.assertEqual(glob.glob(fsdecode(p)), ures)
     55        self.assertEqual(list(glob.iglob(fsdecode(p))), ures)
    4356        return res
    4457
    4558    def assertSequencesEqual_noorder(self, l1, l2):
     59        l1 = list(l1)
     60        l2 = list(l2)
    4661        self.assertEqual(set(l1), set(l2))
     62        self.assertEqual(sorted(l1), sorted(l2))
    4763
    4864    def test_glob_literal(self):
     
    5369        eq(self.glob('zymurgy'), [])
    5470
     71        res = glob.glob('*')
     72        self.assertEqual({type(r) for r in res}, {str})
     73        res = glob.glob(os.path.join(os.curdir, '*'))
     74        self.assertEqual({type(r) for r in res}, {str})
     75
    5576        # test return types are unicode, but only if os.listdir
    5677        # returns unicode filenames
    57         uniset = set([unicode])
    58         tmp = os.listdir(u'.')
    59         if set(type(x) for x in tmp) == uniset:
    60             u1 = glob.glob(u'*')
    61             u2 = glob.glob(u'./*')
    62             self.assertEquals(set(type(r) for r in u1), uniset)
    63             self.assertEquals(set(type(r) for r in u2), uniset)
     78        tmp = os.listdir(fsdecode(os.curdir))
     79        if {type(x) for x in tmp} == {unicode}:
     80            res = glob.glob(u'*')
     81            self.assertEqual({type(r) for r in res}, {unicode})
     82            res = glob.glob(os.path.join(fsdecode(os.curdir), u'*'))
     83            self.assertEqual({type(r) for r in res}, {unicode})
    6484
    6585    def test_glob_one_directory(self):
     
    6787        eq(self.glob('a*'), map(self.norm, ['a', 'aab', 'aaa']))
    6888        eq(self.glob('*a'), map(self.norm, ['a', 'aaa']))
     89        eq(self.glob('.*'), map(self.norm, ['.aa', '.bb']))
     90        eq(self.glob('?aa'), map(self.norm, ['aaa']))
    6991        eq(self.glob('aa?'), map(self.norm, ['aaa', 'aab']))
    7092        eq(self.glob('aa[ab]'), map(self.norm, ['aaa', 'aab']))
     
    88110        eq(self.glob('a', '*', '*', '*a'),
    89111           [self.norm('a', 'bcd', 'efg', 'ha')])
    90         eq(self.glob('?a?', '*F'), map(self.norm, [os.path.join('aaa', 'zzzF'),
    91                                                    os.path.join('aab', 'F')]))
     112        eq(self.glob('?a?', '*F'), [self.norm('aaa', 'zzzF'),
     113                                    self.norm('aab', 'F')])
    92114
    93115    def test_glob_directory_with_trailing_slash(self):
    94         # We are verifying that when there is wildcard pattern which
    95         # ends with os.sep doesn't blow up.
    96         res = glob.glob(self.tempdir + '*' + os.sep)
    97         self.assertEqual(len(res), 1)
    98         # either of these results are reasonable
    99         self.assertTrue(res[0] in [self.tempdir, self.tempdir + os.sep])
     116        # Patterns ending with a slash shouldn't match non-dirs
     117        res = glob.glob(self.norm('Z*Z') + os.sep)
     118        self.assertEqual(res, [])
     119        res = glob.glob(self.norm('ZZZ') + os.sep)
     120        self.assertEqual(res, [])
     121        # When there is a wildcard pattern which ends with os.sep, glob()
     122        # doesn't blow up.
     123        res = glob.glob(self.norm('aa*') + os.sep)
     124        self.assertEqual(len(res), 2)
     125        # either of these results is reasonable
     126        self.assertIn(set(res), [
     127                      {self.norm('aaa'), self.norm('aab')},
     128                      {self.norm('aaa') + os.sep, self.norm('aab') + os.sep},
     129                      ])
    100130
     131    def test_glob_unicode_directory_with_trailing_slash(self):
     132        # Same as test_glob_directory_with_trailing_slash, but with an
     133        # unicode argument.
     134        res = glob.glob(fsdecode(self.norm('Z*Z') + os.sep))
     135        self.assertEqual(res, [])
     136        res = glob.glob(fsdecode(self.norm('ZZZ') + os.sep))
     137        self.assertEqual(res, [])
     138        res = glob.glob(fsdecode(self.norm('aa*') + os.sep))
     139        self.assertEqual(len(res), 2)
     140        # either of these results is reasonable
     141        self.assertIn(set(res), [
     142                      {fsdecode(self.norm('aaa')), fsdecode(self.norm('aab'))},
     143                      {fsdecode(self.norm('aaa') + os.sep),
     144                       fsdecode(self.norm('aab') + os.sep)},
     145                      ])
     146
     147    @unittest.skipUnless(hasattr(os, 'symlink'), "Requires symlink support")
     148    def test_glob_symlinks(self):
     149        eq = self.assertSequencesEqual_noorder
     150        eq(self.glob('sym3'), [self.norm('sym3')])
     151        eq(self.glob('sym3', '*'), [self.norm('sym3', 'EF'),
     152                                    self.norm('sym3', 'efg')])
     153        self.assertIn(self.glob('sym3' + os.sep),
     154                      [[self.norm('sym3')], [self.norm('sym3') + os.sep]])
     155        eq(self.glob('*', '*F'),
     156           [self.norm('aaa', 'zzzF'), self.norm('aab', 'F'),
     157            self.norm('sym3', 'EF')])
     158
     159    @unittest.skipUnless(hasattr(os, 'symlink'), "Requires symlink support")
    101160    def test_glob_broken_symlinks(self):
    102         if hasattr(os, 'symlink'):
    103             eq = self.assertSequencesEqual_noorder
    104             eq(self.glob('sym*'), [self.norm('sym1'), self.norm('sym2')])
    105             eq(self.glob('sym1'), [self.norm('sym1')])
    106             eq(self.glob('sym2'), [self.norm('sym2')])
     161        eq = self.assertSequencesEqual_noorder
     162        eq(self.glob('sym*'), [self.norm('sym1'), self.norm('sym2'),
     163                               self.norm('sym3')])
     164        eq(self.glob('sym1'), [self.norm('sym1')])
     165        eq(self.glob('sym2'), [self.norm('sym2')])
     166
     167    @unittest.skipUnless(sys.platform == "win32", "Win32 specific test")
     168    def test_glob_magic_in_drive(self):
     169        eq = self.assertSequencesEqual_noorder
     170        eq(glob.glob('*:'), [])
     171        eq(glob.glob(u'*:'), [])
     172        eq(glob.glob('?:'), [])
     173        eq(glob.glob(u'?:'), [])
    107174
    108175
Note: See TracChangeset for help on using the changeset viewer.