blob: f1b270df3ba8661a7d84bc5f03dc61de26797f05 [file] [log] [blame]
Guido van Rossum8e0ce301997-07-11 19:34:44 +00001from test_support import verbose
2import re
Guido van Rossume8b81311997-07-15 18:47:48 +00003import sys, os, string, traceback
Guido van Rossum8e0ce301997-07-11 19:34:44 +00004
5from re_tests import *
Guido van Rossum035aae01997-07-11 20:47:58 +00006if verbose: print 'Running re_tests test suite'
Guido van Rossum8e0ce301997-07-11 19:34:44 +00007
8for t in tests:
9 print t
10 pattern=s=outcome=repl=expected=None
11 if len(t)==5:
12 pattern, s, outcome, repl, expected = t
13 elif len(t)==3:
14 pattern, s, outcome = t
15 else:
16 raise ValueError, ('Test tuples should have 3 or 5 fields',t)
17
18 try:
19 obj=re.compile(pattern)
20 except re.error:
21 if outcome==SYNTAX_ERROR: pass # Expected a syntax error
22 else:
23 print '=== Syntax error:', t
24 except:
25 print '*** Unexpected error ***'
Guido van Rossum1d8b7581997-07-11 21:14:53 +000026 if verbose:
27 traceback.print_exc(file=sys.stdout)
Guido van Rossum8e0ce301997-07-11 19:34:44 +000028 else:
29 try:
30 result=obj.search(s)
31 except regex.error, msg:
32 print '=== Unexpected exception', t, repr(msg)
33 if outcome==SYNTAX_ERROR:
34 # This should have been a syntax error; forget it.
35 pass
36 elif outcome==FAIL:
37 if result is None: pass # No match, as expected
38 else: print '=== Succeeded incorrectly', t
39 elif outcome==SUCCEED:
40 if result is not None:
41 # Matched, as expected, so now we compute the
42 # result string and compare it to our expected result.
43 start, end = result.span(0)
Guido van Rossum847ed4a1997-07-15 15:40:57 +000044 vardict={'found': result.group(0), 'groups': result.group()}
Guido van Rossum8e0ce301997-07-11 19:34:44 +000045 for i in range(1, 100):
46 try:
47 gi = result.group(i)
Guido van Rossum035aae01997-07-11 20:47:58 +000048 # Special hack because else the string concat fails:
49 if gi is None: gi = "None"
Guido van Rossum8e0ce301997-07-11 19:34:44 +000050 except IndexError:
Guido van Rossum23b8d4c1997-07-15 15:49:52 +000051 gi = "Error"
Guido van Rossum847ed4a1997-07-15 15:40:57 +000052 vardict['g%d' % i] = gi
Guido van Rossume8b81311997-07-15 18:47:48 +000053 for i in result.re.groupindex.keys():
54 try:
55 gi = result.group(i)
56 except IndexError:
57 pass
58 else:
59 vardict[i] = str(gi)
Guido van Rossum8e0ce301997-07-11 19:34:44 +000060 repl=eval(repl, vardict)
61 if repl!=expected:
62 print '=== grouping error', t,
63 print repr(repl)+' should be '+repr(expected)
64 else:
65 print '=== Failed incorrectly', t