[Python-checkins] python/dist/src/Lib/test test_re.py,1.37,1.38
montanaro@users.sourceforge.net
montanaro@users.sourceforge.net
Fri, 25 Apr 2003 08:40:34 -0700
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv5064
Modified Files:
test_re.py
Log Message:
more tests converted from test_sre
Index: test_re.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_re.py,v
retrieving revision 1.37
retrieving revision 1.38
diff -C2 -d -r1.37 -r1.38
*** test_re.py 25 Apr 2003 14:31:54 -0000 1.37
--- test_re.py 25 Apr 2003 15:40:28 -0000 1.38
***************
*** 4,7 ****
--- 4,8 ----
from test.test_support import verbose, run_suite
import re
+ from sre import Scanner
import sys, os, traceback
***************
*** 169,173 ****
self.assertEqual(re.match(re.escape(chr(i)), chr(i)).span(), (0,1))
! pat=re.compile( re.escape(p) )
self.assertEqual(pat.match(p) is not None, True)
self.assertEqual(pat.match(p).span(), (0,256))
--- 170,174 ----
self.assertEqual(re.match(re.escape(chr(i)), chr(i)).span(), (0,1))
! pat=re.compile(re.escape(p))
self.assertEqual(pat.match(p) is not None, True)
self.assertEqual(pat.match(p).span(), (0,256))
***************
*** 175,178 ****
--- 176,184 ----
def test_pickling(self):
import pickle
+ self.pickle_test(pickle)
+ import cPickle
+ self.pickle_test(cPickle)
+
+ def pickle_test(self, pickle):
oldpat = re.compile('a(?:b|(c|e){1,2}?|d)+?(.)')
s = pickle.dumps(oldpat)
***************
*** 188,203 ****
def test_flags(self):
! for flags in [re.I, re.M, re.X, re.S, re.L]:
! r = re.compile('^pattern$', flags)
!
! def test_limitations(self):
! # Try nasty case that overflows the straightforward recursive
! # implementation of repeated groups.
! try:
! re.match('(x)*', 50000*'x')
! except RuntimeError, v:
! self.assertEqual(str(v), "maximum recursion limit exceeded")
! else:
! self.fail("re.match('(x)*', 50000*'x') should have failed")
def test_sre_character_literals(self):
--- 194,199 ----
def test_flags(self):
! for flag in [re.I, re.M, re.X, re.S, re.L]:
! self.assertNotEqual(re.compile('^pattern$', flag), None)
def test_sre_character_literals(self):
***************
*** 244,247 ****
--- 240,268 ----
self.assertEqual(re.compile(pat) and 1, 1)
+ def test_stack_overflow(self):
+ # nasty case that overflows the straightforward recursive
+ # implementation of repeated groups.
+ self.assertRaises(RuntimeError, re.match, '(x)*', 50000*'x')
+ self.assertRaises(RuntimeError, re.match, '(x)*y', 50000*'x'+'y')
+ self.assertRaises(RuntimeError, re.match, '(x)*?y', 50000*'x'+'y')
+
+ def test_scanner(self):
+ def s_ident(scanner, token): return token
+ def s_operator(scanner, token): return "op%s" % token
+ def s_float(scanner, token): return float(token)
+ def s_int(scanner, token): return int(token)
+
+ scanner = Scanner([
+ (r"[a-zA-Z_]\w*", s_ident),
+ (r"\d+\.\d*", s_float),
+ (r"\d+", s_int),
+ (r"=|\+|-|\*|/", s_operator),
+ (r"\s+", None),
+ ])
+
+ self.assertEqual(scanner.scan("sum = 3*foo + 312.50 + bar"),
+ (['sum', 'op=', 3, 'op*', 'foo', 'op+', 312.5,
+ 'op+', 'bar'], ''))
+
def run_re_tests():
from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR
***************
*** 369,376 ****
def test_main():
- run_re_tests()
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(ReTests))
run_suite(suite)
if __name__ == "__main__":
--- 390,397 ----
def test_main():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(ReTests))
run_suite(suite)
+ run_re_tests()
if __name__ == "__main__":