diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2012-12-16 15:03:01 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2012-12-16 15:03:01 (GMT) |
commit | 5461558d1ab5809c44d02f5e8669aca64ec07404 (patch) | |
tree | 7815dfec2d4d4950428c7312870962d4b3d75f75 | |
parent | 3d068b2ecfd0e04d61289dce5abed60cd88b4f9f (diff) | |
download | cpython-5461558d1ab5809c44d02f5e8669aca64ec07404.zip cpython-5461558d1ab5809c44d02f5e8669aca64ec07404.tar.gz cpython-5461558d1ab5809c44d02f5e8669aca64ec07404.tar.bz2 |
Issue #16696: fix comparison between bytes and string. Also, improve glob tests.
-rw-r--r-- | Lib/glob.py | 2 | ||||
-rw-r--r-- | Lib/test/test_glob.py | 33 |
2 files changed, 29 insertions, 6 deletions
diff --git a/Lib/glob.py b/Lib/glob.py index 7279244..58888d6 100644 --- a/Lib/glob.py +++ b/Lib/glob.py @@ -63,7 +63,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 0083a70..2dba8de 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): |