summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2012-12-16 15:03:57 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2012-12-16 15:03:57 (GMT)
commitfeb318a37aaed80633e621eb2d46b13ecf004583 (patch)
treee18e516754856a450f369f9fd7b1426696574a1c
parent39a6ee20ac5f353a6b8204864d9491deb997ef88 (diff)
parent33138df36abda2d4f1e92537d375f04942d9ab19 (diff)
downloadcpython-feb318a37aaed80633e621eb2d46b13ecf004583.zip
cpython-feb318a37aaed80633e621eb2d46b13ecf004583.tar.gz
cpython-feb318a37aaed80633e621eb2d46b13ecf004583.tar.bz2
Issue #16696: fix comparison between bytes and string. Also, improve glob tests.
-rw-r--r--Lib/glob.py2
-rw-r--r--Lib/test/test_glob.py33
2 files changed, 29 insertions, 6 deletions
diff --git a/Lib/glob.py b/Lib/glob.py
index 00f867f..3c9c30c 100644
--- a/Lib/glob.py
+++ b/Lib/glob.py
@@ -62,7 +62,7 @@ def glob1(dirname, pattern):
return fnmatch.filter(names, pattern)
def glob0(dirname, basename):
- if basename == '':
+ if not basename:
# `os.path.split()` returns an empty basename for paths ending with a
# directory separator. 'q*x/' should match only directories.
if os.path.isdir(dirname):
diff --git a/Lib/test/test_glob.py b/Lib/test/test_glob.py
index 8972b8f..e6538f7 100644
--- a/Lib/test/test_glob.py
+++ b/Lib/test/test_glob.py
@@ -97,12 +97,35 @@ class GlobTests(unittest.TestCase):
os.path.join('aab', 'F')]))
def test_glob_directory_with_trailing_slash(self):
- # We are verifying that when there is wildcard pattern which
- # ends with os.sep doesn't blow up.
- res = glob.glob(self.tempdir + '*' + os.sep)
- self.assertEqual(len(res), 1)
+ # Patterns ending with a slash shouldn't match non-dirs
+ res = glob.glob(os.path.join(self.tempdir, 'Z*Z') + os.sep)
+ self.assertEqual(res, [])
+ res = glob.glob(os.path.join(self.tempdir, 'ZZZ') + os.sep)
+ self.assertEqual(res, [])
+ # When there is wildcard pattern which ends with os.sep, glob()
+ # doesn't blow up.
+ res = glob.glob(os.path.join(self.tempdir, 'aa*') + os.sep)
+ self.assertEqual(len(res), 2)
# either of these results are reasonable
- self.assertIn(res[0], [self.tempdir, self.tempdir + os.sep])
+ self.assertIn(set(res), [
+ {self.norm('aaa'), self.norm('aab')},
+ {self.norm('aaa') + os.sep, self.norm('aab') + os.sep},
+ ])
+
+ def test_glob_bytes_directory_with_trailing_slash(self):
+ # Same as test_glob_directory_with_trailing_slash, but with a
+ # bytes argument.
+ res = glob.glob(os.fsencode(os.path.join(self.tempdir, 'Z*Z') + os.sep))
+ self.assertEqual(res, [])
+ res = glob.glob(os.fsencode(os.path.join(self.tempdir, 'ZZZ') + os.sep))
+ self.assertEqual(res, [])
+ res = glob.glob(os.fsencode(os.path.join(self.tempdir, 'aa*') + os.sep))
+ self.assertEqual(len(res), 2)
+ # either of these results are reasonable
+ self.assertIn({os.fsdecode(x) for x in res}, [
+ {self.norm('aaa'), self.norm('aab')},
+ {self.norm('aaa') + os.sep, self.norm('aab') + os.sep},
+ ])
@skip_unless_symlink
def test_glob_broken_symlinks(self):