blob: bc017e81ccaf4d05dec45569a77b69153485f122 [file] [log] [blame]
Guido van Rossum8e0ce301997-07-11 19:34:44 +00001from test_support import verbose
2import re
Guido van Rossum035aae01997-07-11 20:47:58 +00003import sys, 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 Rossum035aae01997-07-11 20:47:58 +000026 traceback.print_exc(file=sys.stdout)
Guido van Rossum8e0ce301997-07-11 19:34:44 +000027 else:
28 try:
29 result=obj.search(s)
30 except regex.error, msg:
31 print '=== Unexpected exception', t, repr(msg)
32 if outcome==SYNTAX_ERROR:
33 # This should have been a syntax error; forget it.
34 pass
35 elif outcome==FAIL:
36 if result is None: pass # No match, as expected
37 else: print '=== Succeeded incorrectly', t
38 elif outcome==SUCCEED:
39 if result is not None:
40 # Matched, as expected, so now we compute the
41 # result string and compare it to our expected result.
42 start, end = result.span(0)
43 vardict={'found': result.group(0)}
44 for i in range(1, 100):
45 try:
46 gi = result.group(i)
Guido van Rossum035aae01997-07-11 20:47:58 +000047 # Special hack because else the string concat fails:
48 if gi is None: gi = "None"
Guido van Rossum8e0ce301997-07-11 19:34:44 +000049 except IndexError:
50 break
51 else:
52 vardict['g%d' % i] = gi
53 repl=eval(repl, vardict)
54 if repl!=expected:
55 print '=== grouping error', t,
56 print repr(repl)+' should be '+repr(expected)
57 else:
58 print '=== Failed incorrectly', t