gh-122798: Make tests for warnings in the re module more strict (GH-122799)

* Test warning messages.
* Test stack level for re.compile() and re.findall().
This commit is contained in:
Serhiy Storchaka 2024-08-07 22:43:49 +03:00 committed by GitHub
parent 3e753c689a
commit d2e5be1f39
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 40 additions and 11 deletions

View File

@ -1115,47 +1115,76 @@ class ReTests(unittest.TestCase):
def test_possible_set_operations(self): def test_possible_set_operations(self):
s = bytes(range(128)).decode() s = bytes(range(128)).decode()
with self.assertWarns(FutureWarning): with self.assertWarnsRegex(FutureWarning, 'Possible set difference') as w:
p = re.compile(r'[0-9--1]') p = re.compile(r'[0-9--1]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list('-./0123456789')) self.assertEqual(p.findall(s), list('-./0123456789'))
with self.assertWarnsRegex(FutureWarning, 'Possible set difference') as w:
self.assertEqual(re.findall(r'[0-9--2]', s), list('-./0123456789'))
self.assertEqual(w.filename, __file__)
self.assertEqual(re.findall(r'[--1]', s), list('-./01')) self.assertEqual(re.findall(r'[--1]', s), list('-./01'))
with self.assertWarns(FutureWarning):
with self.assertWarnsRegex(FutureWarning, 'Possible set difference') as w:
p = re.compile(r'[%--1]') p = re.compile(r'[%--1]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list("%&'()*+,-1")) self.assertEqual(p.findall(s), list("%&'()*+,-1"))
with self.assertWarns(FutureWarning):
with self.assertWarnsRegex(FutureWarning, 'Possible set difference ') as w:
p = re.compile(r'[%--]') p = re.compile(r'[%--]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list("%&'()*+,-")) self.assertEqual(p.findall(s), list("%&'()*+,-"))
with self.assertWarns(FutureWarning): with self.assertWarnsRegex(FutureWarning, 'Possible set intersection ') as w:
p = re.compile(r'[0-9&&1]') p = re.compile(r'[0-9&&1]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list('&0123456789')) self.assertEqual(p.findall(s), list('&0123456789'))
with self.assertWarns(FutureWarning): with self.assertWarnsRegex(FutureWarning, 'Possible set intersection ') as w:
self.assertEqual(re.findall(r'[0-8&&1]', s), list('&012345678'))
self.assertEqual(w.filename, __file__)
with self.assertWarnsRegex(FutureWarning, 'Possible set intersection ') as w:
p = re.compile(r'[\d&&1]') p = re.compile(r'[\d&&1]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list('&0123456789')) self.assertEqual(p.findall(s), list('&0123456789'))
self.assertEqual(re.findall(r'[&&1]', s), list('&1')) self.assertEqual(re.findall(r'[&&1]', s), list('&1'))
with self.assertWarns(FutureWarning): with self.assertWarnsRegex(FutureWarning, 'Possible set union ') as w:
p = re.compile(r'[0-9||a]') p = re.compile(r'[0-9||a]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list('0123456789a|')) self.assertEqual(p.findall(s), list('0123456789a|'))
with self.assertWarns(FutureWarning):
with self.assertWarnsRegex(FutureWarning, 'Possible set union ') as w:
p = re.compile(r'[\d||a]') p = re.compile(r'[\d||a]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list('0123456789a|')) self.assertEqual(p.findall(s), list('0123456789a|'))
self.assertEqual(re.findall(r'[||1]', s), list('1|')) self.assertEqual(re.findall(r'[||1]', s), list('1|'))
with self.assertWarns(FutureWarning): with self.assertWarnsRegex(FutureWarning, 'Possible set symmetric difference ') as w:
p = re.compile(r'[0-9~~1]') p = re.compile(r'[0-9~~1]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list('0123456789~')) self.assertEqual(p.findall(s), list('0123456789~'))
with self.assertWarns(FutureWarning):
with self.assertWarnsRegex(FutureWarning, 'Possible set symmetric difference ') as w:
p = re.compile(r'[\d~~1]') p = re.compile(r'[\d~~1]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list('0123456789~')) self.assertEqual(p.findall(s), list('0123456789~'))
self.assertEqual(re.findall(r'[~~1]', s), list('1~')) self.assertEqual(re.findall(r'[~~1]', s), list('1~'))
with self.assertWarns(FutureWarning): with self.assertWarnsRegex(FutureWarning, 'Possible nested set ') as w:
p = re.compile(r'[[0-9]|]') p = re.compile(r'[[0-9]|]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list('0123456789[]')) self.assertEqual(p.findall(s), list('0123456789[]'))
with self.assertWarnsRegex(FutureWarning, 'Possible nested set ') as w:
self.assertEqual(re.findall(r'[[0-8]|]', s), list('012345678[]'))
self.assertEqual(w.filename, __file__)
with self.assertWarns(FutureWarning): with self.assertWarnsRegex(FutureWarning, 'Possible nested set ') as w:
p = re.compile(r'[[:digit:]|]') p = re.compile(r'[[:digit:]|]')
self.assertEqual(w.filename, __file__)
self.assertEqual(p.findall(s), list(':[]dgit')) self.assertEqual(p.findall(s), list(':[]dgit'))
def test_search_coverage(self): def test_search_coverage(self):