mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
[3.11] Move implementation specific RE tests to separate class (GH-106563) (GH-106565)
(cherry picked from commit 8cb6f9761e
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
2d037fb406
commit
769b7d2d0b
1 changed files with 58 additions and 56 deletions
|
@ -1077,33 +1077,6 @@ class ReTests(unittest.TestCase):
|
|||
def test_category(self):
|
||||
self.assertEqual(re.match(r"(\s)", " ").group(1), " ")
|
||||
|
||||
@cpython_only
|
||||
def test_case_helpers(self):
|
||||
import _sre
|
||||
for i in range(128):
|
||||
c = chr(i)
|
||||
lo = ord(c.lower())
|
||||
self.assertEqual(_sre.ascii_tolower(i), lo)
|
||||
self.assertEqual(_sre.unicode_tolower(i), lo)
|
||||
iscased = c in string.ascii_letters
|
||||
self.assertEqual(_sre.ascii_iscased(i), iscased)
|
||||
self.assertEqual(_sre.unicode_iscased(i), iscased)
|
||||
|
||||
for i in list(range(128, 0x1000)) + [0x10400, 0x10428]:
|
||||
c = chr(i)
|
||||
self.assertEqual(_sre.ascii_tolower(i), i)
|
||||
if i != 0x0130:
|
||||
self.assertEqual(_sre.unicode_tolower(i), ord(c.lower()))
|
||||
iscased = c != c.lower() or c != c.upper()
|
||||
self.assertFalse(_sre.ascii_iscased(i))
|
||||
self.assertEqual(_sre.unicode_iscased(i),
|
||||
c != c.lower() or c != c.upper())
|
||||
|
||||
self.assertEqual(_sre.ascii_tolower(0x0130), 0x0130)
|
||||
self.assertEqual(_sre.unicode_tolower(0x0130), ord('i'))
|
||||
self.assertFalse(_sre.ascii_iscased(0x0130))
|
||||
self.assertTrue(_sre.unicode_iscased(0x0130))
|
||||
|
||||
def test_not_literal(self):
|
||||
self.assertEqual(re.search(r"\s([^a])", " b").group(1), "b")
|
||||
self.assertEqual(re.search(r"\s([^a]*)", " bb").group(1), "bb")
|
||||
|
@ -1800,20 +1773,6 @@ class ReTests(unittest.TestCase):
|
|||
pat = re.compile(b'..')
|
||||
self.assertEqual(pat.sub(lambda m: b'bytes', b'a5'), b'bytes')
|
||||
|
||||
def test_dealloc(self):
|
||||
# issue 3299: check for segfault in debug build
|
||||
import _sre
|
||||
# the overflow limit is different on wide and narrow builds and it
|
||||
# depends on the definition of SRE_CODE (see sre.h).
|
||||
# 2**128 should be big enough to overflow on both. For smaller values
|
||||
# a RuntimeError is raised instead of OverflowError.
|
||||
long_overflow = 2**128
|
||||
self.assertRaises(TypeError, re.finditer, "a", {})
|
||||
with self.assertRaises(OverflowError):
|
||||
_sre.compile("abc", 0, [long_overflow], 0, {}, ())
|
||||
with self.assertRaises(TypeError):
|
||||
_sre.compile({}, 0, [], 0, [], [])
|
||||
|
||||
def test_search_dot_unicode(self):
|
||||
self.assertTrue(re.search("123.*-", '123abc-'))
|
||||
self.assertTrue(re.search("123.*-", '123\xe9-'))
|
||||
|
@ -1871,21 +1830,6 @@ class ReTests(unittest.TestCase):
|
|||
self.assertRaises(OverflowError, re.compile, r".{%d,}?" % 2**128)
|
||||
self.assertRaises(OverflowError, re.compile, r".{%d,%d}" % (2**129, 2**128))
|
||||
|
||||
@cpython_only
|
||||
def test_repeat_minmax_overflow_maxrepeat(self):
|
||||
try:
|
||||
from _sre import MAXREPEAT
|
||||
except ImportError:
|
||||
self.skipTest('requires _sre.MAXREPEAT constant')
|
||||
string = "x" * 100000
|
||||
self.assertIsNone(re.match(r".{%d}" % (MAXREPEAT - 1), string))
|
||||
self.assertEqual(re.match(r".{,%d}" % (MAXREPEAT - 1), string).span(),
|
||||
(0, 100000))
|
||||
self.assertIsNone(re.match(r".{%d,}?" % (MAXREPEAT - 1), string))
|
||||
self.assertRaises(OverflowError, re.compile, r".{%d}" % MAXREPEAT)
|
||||
self.assertRaises(OverflowError, re.compile, r".{,%d}" % MAXREPEAT)
|
||||
self.assertRaises(OverflowError, re.compile, r".{%d,}?" % MAXREPEAT)
|
||||
|
||||
def test_backref_group_name_in_exception(self):
|
||||
# Issue 17341: Poor error message when compiling invalid regex
|
||||
self.checkPatternError('(?P=<foo>)',
|
||||
|
@ -2720,6 +2664,64 @@ class ImplementationTest(unittest.TestCase):
|
|||
self.assertTrue(hasattr(mod, attr))
|
||||
del sys.modules[name]
|
||||
|
||||
@cpython_only
|
||||
def test_case_helpers(self):
|
||||
import _sre
|
||||
for i in range(128):
|
||||
c = chr(i)
|
||||
lo = ord(c.lower())
|
||||
self.assertEqual(_sre.ascii_tolower(i), lo)
|
||||
self.assertEqual(_sre.unicode_tolower(i), lo)
|
||||
iscased = c in string.ascii_letters
|
||||
self.assertEqual(_sre.ascii_iscased(i), iscased)
|
||||
self.assertEqual(_sre.unicode_iscased(i), iscased)
|
||||
|
||||
for i in list(range(128, 0x1000)) + [0x10400, 0x10428]:
|
||||
c = chr(i)
|
||||
self.assertEqual(_sre.ascii_tolower(i), i)
|
||||
if i != 0x0130:
|
||||
self.assertEqual(_sre.unicode_tolower(i), ord(c.lower()))
|
||||
iscased = c != c.lower() or c != c.upper()
|
||||
self.assertFalse(_sre.ascii_iscased(i))
|
||||
self.assertEqual(_sre.unicode_iscased(i),
|
||||
c != c.lower() or c != c.upper())
|
||||
|
||||
self.assertEqual(_sre.ascii_tolower(0x0130), 0x0130)
|
||||
self.assertEqual(_sre.unicode_tolower(0x0130), ord('i'))
|
||||
self.assertFalse(_sre.ascii_iscased(0x0130))
|
||||
self.assertTrue(_sre.unicode_iscased(0x0130))
|
||||
|
||||
@cpython_only
|
||||
def test_dealloc(self):
|
||||
# issue 3299: check for segfault in debug build
|
||||
import _sre
|
||||
# the overflow limit is different on wide and narrow builds and it
|
||||
# depends on the definition of SRE_CODE (see sre.h).
|
||||
# 2**128 should be big enough to overflow on both. For smaller values
|
||||
# a RuntimeError is raised instead of OverflowError.
|
||||
long_overflow = 2**128
|
||||
self.assertRaises(TypeError, re.finditer, "a", {})
|
||||
with self.assertRaises(OverflowError):
|
||||
_sre.compile("abc", 0, [long_overflow], 0, {}, ())
|
||||
with self.assertRaises(TypeError):
|
||||
_sre.compile({}, 0, [], 0, [], [])
|
||||
|
||||
@cpython_only
|
||||
def test_repeat_minmax_overflow_maxrepeat(self):
|
||||
try:
|
||||
from _sre import MAXREPEAT
|
||||
except ImportError:
|
||||
self.skipTest('requires _sre.MAXREPEAT constant')
|
||||
string = "x" * 100000
|
||||
self.assertIsNone(re.match(r".{%d}" % (MAXREPEAT - 1), string))
|
||||
self.assertEqual(re.match(r".{,%d}" % (MAXREPEAT - 1), string).span(),
|
||||
(0, 100000))
|
||||
self.assertIsNone(re.match(r".{%d,}?" % (MAXREPEAT - 1), string))
|
||||
self.assertRaises(OverflowError, re.compile, r".{%d}" % MAXREPEAT)
|
||||
self.assertRaises(OverflowError, re.compile, r".{,%d}" % MAXREPEAT)
|
||||
self.assertRaises(OverflowError, re.compile, r".{%d,}?" % MAXREPEAT)
|
||||
|
||||
|
||||
class ExternalTests(unittest.TestCase):
|
||||
|
||||
def test_re_benchmarks(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue