"""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() |