summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2017-05-21 05:57:00 (GMT)
committerGitHub <noreply@github.com>2017-05-21 05:57:00 (GMT)
commit817554715b5578b0bac5c35e6ec9a1abd8649e53 (patch)
treee409c0a0aba5f0a2a8a7215a2b0e015ad00eb5fd /Lib
parent62c7d90b6446288be1a7906581befe3c211fad5f (diff)
downloadcpython-817554715b5578b0bac5c35e6ec9a1abd8649e53.zip
cpython-817554715b5578b0bac5c35e6ec9a1abd8649e53.tar.gz
cpython-817554715b5578b0bac5c35e6ec9a1abd8649e53.tar.bz2
bpo-30415: Add new tests for the fnmatch module. (#1684)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_fnmatch.py64
1 files changed, 55 insertions, 9 deletions
diff --git a/Lib/test/test_fnmatch.py b/Lib/test/test_fnmatch.py
index fb74246..78245c3 100644
--- a/Lib/test/test_fnmatch.py
+++ b/Lib/test/test_fnmatch.py
@@ -1,18 +1,19 @@
"""Test cases for the fnmatch module."""
import unittest
+import os
from fnmatch import fnmatch, fnmatchcase, translate, filter
class FnmatchTestCase(unittest.TestCase):
- def check_match(self, filename, pattern, should_match=1, fn=fnmatch):
+ 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.assertTrue(not fn(filename, pattern),
+ self.assertFalse(fn(filename, pattern),
"expected %r not to match pattern %r"
% (filename, pattern))
@@ -26,15 +27,15 @@ class FnmatchTestCase(unittest.TestCase):
check('abc', '*')
check('abc', 'ab[cd]')
check('abc', 'ab[!de]')
- check('abc', 'ab[de]', 0)
- check('a', '??', 0)
- check('a', 'b', 0)
+ 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'[!\]', 0)
+ check('\\', r'[!\]', False)
# test that filenames with newlines in them are handled correctly.
# http://bugs.python.org/issue6665
@@ -51,14 +52,38 @@ class FnmatchTestCase(unittest.TestCase):
def test_fnmatchcase(self):
check = self.check_match
- check('AbC', 'abc', 0, fnmatchcase)
- check('abc', 'AbC', 0, fnmatchcase)
+ 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_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*')
+ 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):
@@ -75,7 +100,28 @@ class TranslateTestCase(unittest.TestCase):
class FilterTestCase(unittest.TestCase):
def test_filter(self):
- self.assertEqual(filter(['a', 'b'], 'a'), ['a'])
+ self.assertEqual(filter(['Python', 'Ruby', 'Perl', 'Tcl'], 'P*'),
+ ['Python', 'Perl'])
+ self.assertEqual(filter([b'Python', b'Ruby', b'Perl', b'Tcl'], b'P*'),
+ [b'Python', b'Perl'])
+
+ def test_mix_bytes_str(self):
+ self.assertRaises(TypeError, filter, ['test'], b'*')
+ self.assertRaises(TypeError, filter, [b'test'], '*')
+
+ 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'])
if __name__ == "__main__":