mirror of
https://github.com/python/cpython.git
synced 2025-07-24 19:54:21 +00:00

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.assertLessEqual(len(_cache), _MAXCACHE)
|
|
|
|
def test_main():
|
|
test_support.run_unittest(FnmatchTestCase)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|