diff -r b0935ef48186 Lib/test/test_glob.py --- a/Lib/test/test_glob.py Sun Dec 16 13:55:47 2012 +0100 +++ b/Lib/test/test_glob.py Sun Dec 16 21:12:51 2012 +0200 @@ -5,6 +5,8 @@ import shutil import sys +def fsdecode(s): + return unicode(s, sys.getfilesystemencoding()) class GlobTests(unittest.TestCase): @@ -31,7 +33,8 @@ self.mktemp('a', 'bcd', 'efg', 'ha') if hasattr(os, 'symlink'): os.symlink(self.norm('broken'), self.norm('sym1')) - os.symlink(self.norm('broken'), self.norm('sym2')) + os.symlink('broken', self.norm('sym2')) + os.symlink(os.path.join('a', 'bcd'), self.norm('sym3')) def tearDown(self): shutil.rmtree(self.tempdir) @@ -44,10 +47,16 @@ p = os.path.join(self.tempdir, pattern) res = glob.glob(p) self.assertEqual(list(glob.iglob(p)), res) + ures = [fsdecode(x) for x in res] + self.assertEqual(glob.glob(fsdecode(p)), ures) + self.assertEqual(list(glob.iglob(fsdecode(p))), ures) return res def assertSequencesEqual_noorder(self, l1, l2): + l1 = list(l1) + l2 = list(l2) self.assertEqual(set(l1), set(l2)) + self.assertEqual(sorted(l1), sorted(l2)) def test_glob_literal(self): eq = self.assertSequencesEqual_noorder @@ -58,13 +67,23 @@ # test return types are unicode, but only if os.listdir # returns unicode filenames - uniset = set([unicode]) - tmp = os.listdir(u'.') - if set(type(x) for x in tmp) == uniset: + uniset = {unicode} + tmp = os.listdir(fsdecode(os.curdir)) + if {type(x) for x in tmp} == uniset: u1 = glob.glob(u'*') - u2 = glob.glob(u'./*') - self.assertEqual(set(type(r) for r in u1), uniset) - self.assertEqual(set(type(r) for r in u2), uniset) + u2 = glob.glob(os.path.join(fsdecode(os.curdir), u'*')) + self.assertEqual({type(r) for r in u1}, uniset) + self.assertEqual({type(r) for r in u2}, uniset) + + # test return types are string, but only if os.listdir + # returns string filenames + strset = {str} + tmp = os.listdir(os.curdir) + if {type(x) for x in tmp} == strset: + u1 = glob.glob('*') + u2 = glob.glob(os.path.join(os.curdir, '*')) + self.assertEqual({type(r) for r in u1}, strset) + self.assertEqual({type(r) for r in u2}, strset) def test_glob_one_directory(self): eq = self.assertSequencesEqual_noorder @@ -103,11 +122,24 @@ self.assertEqual(len(res), 1) # either of these results are reasonable self.assertIn(res[0], [self.tempdir, self.tempdir + os.sep]) + eq = self.assertSequencesEqual_noorder + eq(self.glob('a*', ''), [os.path.join(self.tempdir, x, '') + for x in ['a', 'aaa', 'aab']]) + + def test_glob_symlinks(self): + if hasattr(os, 'symlink'): + eq = self.assertSequencesEqual_noorder + eq(self.glob('sym3'), [self.norm('sym3')]) + eq(self.glob('sym3', '*'), [self.norm('sym3', 'EF'), + self.norm('sym3', 'efg')]) + eq(self.glob('*', '*F'), [self.norm('aaa', 'zzzF'), + self.norm('aab', 'F'), self.norm('sym3', 'EF')]) def test_glob_broken_symlinks(self): if hasattr(os, 'symlink'): eq = self.assertSequencesEqual_noorder - eq(self.glob('sym*'), [self.norm('sym1'), self.norm('sym2')]) + eq(self.glob('sym*'), [self.norm('sym1'), self.norm('sym2'), + self.norm('sym3')]) eq(self.glob('sym1'), [self.norm('sym1')]) eq(self.glob('sym2'), [self.norm('sym2')])