mirror of
https://github.com/python/cpython.git
synced 2025-01-23 09:34:04 +08:00
5b0c1e07ca
Updated to solution to use the functools.lru_cache(). Restores the API so that purge() is not needed (because the cache never gets big).
90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
"""Test cases for the fnmatch module."""
|
|
|
|
from test import support
|
|
import unittest
|
|
|
|
from fnmatch import fnmatch, fnmatchcase, translate, filter
|
|
|
|
class FnmatchTestCase(unittest.TestCase):
|
|
|
|
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_mix_bytes_str(self):
|
|
self.assertRaises(TypeError, fnmatch, 'test', b'*')
|
|
self.assertRaises(TypeError, fnmatch, b'test', '*')
|
|
self.assertRaises(TypeError, fnmatchcase, 'test', b'*')
|
|
self.assertRaises(TypeError, fnmatchcase, b'test', '*')
|
|
|
|
def test_fnmatchcase(self):
|
|
check = self.check_match
|
|
check('AbC', 'abc', 0, fnmatchcase)
|
|
check('abc', 'AbC', 0, fnmatchcase)
|
|
|
|
def test_bytes(self):
|
|
self.check_match(b'test', b'te*')
|
|
self.check_match(b'test\xff', b'te*\xff')
|
|
self.check_match(b'foo\nbar', b'foo*')
|
|
|
|
class TranslateTestCase(unittest.TestCase):
|
|
|
|
def test_translate(self):
|
|
self.assertEqual(translate('*'), '.*\Z(?ms)')
|
|
self.assertEqual(translate('?'), '.\Z(?ms)')
|
|
self.assertEqual(translate('a?b*'), 'a.b.*\Z(?ms)')
|
|
self.assertEqual(translate('[abc]'), '[abc]\Z(?ms)')
|
|
self.assertEqual(translate('[]]'), '[]]\Z(?ms)')
|
|
self.assertEqual(translate('[!x]'), '[^x]\Z(?ms)')
|
|
self.assertEqual(translate('[^x]'), '[\\^x]\Z(?ms)')
|
|
self.assertEqual(translate('[x'), '\\[x\Z(?ms)')
|
|
|
|
|
|
class FilterTestCase(unittest.TestCase):
|
|
|
|
def test_filter(self):
|
|
self.assertEqual(filter(['a', 'b'], 'a'), ['a'])
|
|
|
|
|
|
def test_main():
|
|
support.run_unittest(FnmatchTestCase,
|
|
TranslateTestCase,
|
|
FilterTestCase)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|