[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__":