/usr/lib/python2.7/test/test_fnmatch.py is in libpython2.7-testsuite 2.7.15~rc1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | """Test cases for the fnmatch module."""
from test import test_support
import unittest
import os
from fnmatch import (fnmatch, fnmatchcase, translate, filter,
_MAXCACHE, _cache, _purge)
class FnmatchTestCase(unittest.TestCase):
def tearDown(self):
_purge()
def check_match(self, filename, pattern, should_match=True, fn=fnmatch):
if should_match:
self.assertTrue(fn(filename, pattern),
"expected %r to match pattern %r"
% (filename, pattern))
else:
self.assertFalse(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]', False)
check('a', '??', False)
check('a', 'b', False)
# these test that '\' is handled correctly in character sets;
# see SF bug #409651
check('\\', r'[\]')
check('a', r'[!\]')
check('\\', r'[!\]', False)
# 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_unicode_str(self):
check = self.check_match
check('test', u'*')
check(u'test', '*')
check('test', u'*', fn=fnmatchcase)
check(u'test', '*', fn=fnmatchcase)
with test_support.check_warnings(("", UnicodeWarning), quiet=True):
check('test\xff', u'*\xff')
check(u'test\xff', '*\xff')
check('test\xff', u'*\xff', fn=fnmatchcase)
check(u'test\xff', '*\xff', fn=fnmatchcase)
def test_fnmatchcase(self):
check = self.check_match
check('abc', 'abc', True, fnmatchcase)
check('AbC', 'abc', False, fnmatchcase)
check('abc', 'AbC', False, fnmatchcase)
check('AbC', 'AbC', True, fnmatchcase)
check('usr/bin', 'usr/bin', True, fnmatchcase)
check('usr\\bin', 'usr/bin', False, fnmatchcase)
check('usr/bin', 'usr\\bin', False, fnmatchcase)
check('usr\\bin', 'usr\\bin', True, 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)
@test_support.requires_unicode
def test_unicode(self):
with test_support.check_warnings(("", UnicodeWarning), quiet=True):
self.check_match(u'test', u'te*')
self.check_match(u'test\xff', u'te*\xff')
self.check_match(u'test'+unichr(0x20ac), u'te*'+unichr(0x20ac))
self.check_match(u'foo\nbar', u'foo*')
def test_case(self):
ignorecase = os.path.normcase('ABC') == os.path.normcase('abc')
check = self.check_match
check('abc', 'abc')
check('AbC', 'abc', ignorecase)
check('abc', 'AbC', ignorecase)
check('AbC', 'AbC')
def test_sep(self):
normsep = os.path.normcase('\\') == os.path.normcase('/')
check = self.check_match
check('usr/bin', 'usr/bin')
check('usr\\bin', 'usr/bin', normsep)
check('usr/bin', 'usr\\bin', normsep)
check('usr\\bin', 'usr\\bin')
class TranslateTestCase(unittest.TestCase):
def test_translate(self):
self.assertEqual(translate('*'), r'.*\Z(?ms)')
self.assertEqual(translate('?'), r'.\Z(?ms)')
self.assertEqual(translate('a?b*'), r'a.b.*\Z(?ms)')
self.assertEqual(translate('[abc]'), r'[abc]\Z(?ms)')
self.assertEqual(translate('[]]'), r'[]]\Z(?ms)')
self.assertEqual(translate('[!x]'), r'[^x]\Z(?ms)')
self.assertEqual(translate('[^x]'), r'[\^x]\Z(?ms)')
self.assertEqual(translate('[x'), r'\[x\Z(?ms)')
class FilterTestCase(unittest.TestCase):
def test_filter(self):
self.assertEqual(filter(['Python', 'Ruby', 'Perl', 'Tcl'], 'P*'),
['Python', 'Perl'])
self.assertEqual(filter([u'Python', u'Ruby', u'Perl', u'Tcl'], u'P*'),
[u'Python', u'Perl'])
with test_support.check_warnings(("", UnicodeWarning), quiet=True):
self.assertEqual(filter([u'test\xff'], u'*\xff'), [u'test\xff'])
@test_support.requires_unicode
def test_mix_bytes_str(self):
with test_support.check_warnings(("", UnicodeWarning), quiet=True):
self.assertEqual(filter(['test'], u'*'), ['test'])
self.assertEqual(filter([u'test'], '*'), [u'test'])
self.assertEqual(filter(['test\xff'], u'*'), ['test\xff'])
self.assertEqual(filter([u'test\xff'], '*'), [u'test\xff'])
self.assertEqual(filter(['test\xff'], u'*\xff'), ['test\xff'])
self.assertEqual(filter([u'test\xff'], '*\xff'), [u'test\xff'])
def test_case(self):
ignorecase = os.path.normcase('P') == os.path.normcase('p')
self.assertEqual(filter(['Test.py', 'Test.rb', 'Test.PL'], '*.p*'),
['Test.py', 'Test.PL'] if ignorecase else ['Test.py'])
self.assertEqual(filter(['Test.py', 'Test.rb', 'Test.PL'], '*.P*'),
['Test.py', 'Test.PL'] if ignorecase else ['Test.PL'])
def test_sep(self):
normsep = os.path.normcase('\\') == os.path.normcase('/')
self.assertEqual(filter(['usr/bin', 'usr', 'usr\\lib'], 'usr/*'),
['usr/bin', 'usr\\lib'] if normsep else ['usr/bin'])
self.assertEqual(filter(['usr/bin', 'usr', 'usr\\lib'], 'usr\\*'),
['usr/bin', 'usr\\lib'] if normsep else ['usr\\lib'])
def test_main():
test_support.run_unittest(FnmatchTestCase, TranslateTestCase, FilterTestCase)
if __name__ == "__main__":
test_main()
|