mirror of
https://github.com/python/cpython.git
synced 2025-11-23 03:56:04 +00:00
svn+ssh://pythondev@svn.python.org/python/branches/release27-maint
................
r82769 | r.david.murray | 2010-07-10 10:06:51 -0400 (Sat, 10 Jul 2010) | 15 lines
Merged revisions 82766 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
Since 'purge' is an API change, modified it to be _purge for 2.x
and deleted the doc update.
........
r82766 | r.david.murray | 2010-07-10 09:52:13 -0400 (Sat, 10 Jul 2010) | 5 lines
Fix 'refleak' introduced by fnmatch cache purge tests.
This introduces a 'purge' function for the fnmatch module analogous
to the 'purge' function in the re module.
........
................
72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
"""Test cases for the fnmatch module."""
|
|
|
|
from test import test_support
|
|
import unittest
|
|
|
|
from fnmatch import fnmatch, fnmatchcase, _MAXCACHE, _cache
|
|
from fnmatch import fnmatch, fnmatchcase, _MAXCACHE, _cache, _purge
|
|
|
|
|
|
class FnmatchTestCase(unittest.TestCase):
|
|
|
|
def tearDown(self):
|
|
_purge()
|
|
|
|
def check_match(self, filename, pattern, should_match=1, fn=fnmatch):
|
|
if should_match:
|
|
self.assertTrue(fn(filename, pattern),
|
|
"expected %r to match pattern %r"
|
|
% (filename, pattern))
|
|
else:
|
|
self.assertTrue(not fn(filename, pattern),
|
|
"expected %r not to match pattern %r"
|
|
% (filename, pattern))
|
|
|
|
def test_fnmatch(self):
|
|
check = self.check_match
|
|
check('abc', 'abc')
|
|
check('abc', '?*?')
|
|
check('abc', '???*')
|
|
check('abc', '*???')
|
|
check('abc', '???')
|
|
check('abc', '*')
|
|
check('abc', 'ab[cd]')
|
|
check('abc', 'ab[!de]')
|
|
check('abc', 'ab[de]', 0)
|
|
check('a', '??', 0)
|
|
check('a', 'b', 0)
|
|
|
|
# these test that '\' is handled correctly in character sets;
|
|
# see SF bug #409651
|
|
check('\\', r'[\]')
|
|
check('a', r'[!\]')
|
|
check('\\', r'[!\]', 0)
|
|
|
|
# test that filenames with newlines in them are handled correctly.
|
|
# http://bugs.python.org/issue6665
|
|
check('foo\nbar', 'foo*')
|
|
check('foo\nbar\n', 'foo*')
|
|
check('\nfoo', 'foo*', False)
|
|
check('\n', '*')
|
|
|
|
def test_fnmatchcase(self):
|
|
check = self.check_match
|
|
check('AbC', 'abc', 0, fnmatchcase)
|
|
check('abc', 'AbC', 0, fnmatchcase)
|
|
|
|
def test_cache_clearing(self):
|
|
# check that caches do not grow too large
|
|
# http://bugs.python.org/issue7846
|
|
|
|
# string pattern cache
|
|
for i in range(_MAXCACHE + 1):
|
|
fnmatch('foo', '?' * i)
|
|
|
|
self.assertTrue(len(_cache) <= _MAXCACHE)
|
|
|
|
def test_main():
|
|
test_support.run_unittest(FnmatchTestCase)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|