diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2017-11-16 10:38:26 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-16 10:38:26 (GMT) |
commit | 05cb728d68a278d11466f9a6c8258d914135c96c (patch) | |
tree | da7fd67bdacf4239d820bcf40cad9f60cab9fb82 /Lib/test/test_re.py | |
parent | 3daaafb700df45716bb55f3a293f88773baf3463 (diff) | |
download | cpython-05cb728d68a278d11466f9a6c8258d914135c96c.zip cpython-05cb728d68a278d11466f9a6c8258d914135c96c.tar.gz cpython-05cb728d68a278d11466f9a6c8258d914135c96c.tar.bz2 |
bpo-30349: Raise FutureWarning for nested sets and set operations (#1553)
in regular expressions.
Diffstat (limited to 'Lib/test/test_re.py')
-rw-r--r-- | Lib/test/test_re.py | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index fc015e4..ee87446 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -914,6 +914,51 @@ class ReTests(unittest.TestCase): self.assertEqual(re.search(r"\s([^a])", " b").group(1), "b") self.assertEqual(re.search(r"\s([^a]*)", " bb").group(1), "bb") + def test_possible_set_operations(self): + s = bytes(range(128)).decode() + with self.assertWarns(FutureWarning): + p = re.compile(r'[0-9--1]') + self.assertEqual(p.findall(s), list('-./0123456789')) + self.assertEqual(re.findall(r'[--1]', s), list('-./01')) + with self.assertWarns(FutureWarning): + p = re.compile(r'[%--1]') + self.assertEqual(p.findall(s), list("%&'()*+,-1")) + with self.assertWarns(FutureWarning): + p = re.compile(r'[%--]') + self.assertEqual(p.findall(s), list("%&'()*+,-")) + + with self.assertWarns(FutureWarning): + p = re.compile(r'[0-9&&1]') + self.assertEqual(p.findall(s), list('&0123456789')) + with self.assertWarns(FutureWarning): + p = re.compile(r'[\d&&1]') + self.assertEqual(p.findall(s), list('&0123456789')) + self.assertEqual(re.findall(r'[&&1]', s), list('&1')) + + with self.assertWarns(FutureWarning): + p = re.compile(r'[0-9||a]') + self.assertEqual(p.findall(s), list('0123456789a|')) + with self.assertWarns(FutureWarning): + p = re.compile(r'[\d||a]') + self.assertEqual(p.findall(s), list('0123456789a|')) + self.assertEqual(re.findall(r'[||1]', s), list('1|')) + + with self.assertWarns(FutureWarning): + p = re.compile(r'[0-9~~1]') + self.assertEqual(p.findall(s), list('0123456789~')) + with self.assertWarns(FutureWarning): + p = re.compile(r'[\d~~1]') + self.assertEqual(p.findall(s), list('0123456789~')) + self.assertEqual(re.findall(r'[~~1]', s), list('1~')) + + with self.assertWarns(FutureWarning): + p = re.compile(r'[[0-9]|]') + self.assertEqual(p.findall(s), list('0123456789[]')) + + with self.assertWarns(FutureWarning): + p = re.compile(r'[[:digit:]|]') + self.assertEqual(p.findall(s), list(':[]dgit')) + def test_search_coverage(self): self.assertEqual(re.search(r"\s(b)", " b").group(1), "b") self.assertEqual(re.search(r"a\s", "a ").group(0), "a ") @@ -932,7 +977,7 @@ class ReTests(unittest.TestCase): self.assertEqual(m.group(), match) self.assertEqual(m.span(), span) - LITERAL_CHARS = string.ascii_letters + string.digits + '!"%&\',/:;<=>@_`~' + LITERAL_CHARS = string.ascii_letters + string.digits + '!"%\',/:;<=>@_`' def test_re_escape(self): p = ''.join(chr(i) for i in range(256)) |