diff options
Diffstat (limited to 'Lib/test/test_re.py')
-rw-r--r-- | Lib/test/test_re.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py new file mode 100644 index 0000000..63acff8 --- /dev/null +++ b/Lib/test/test_re.py @@ -0,0 +1,56 @@ +from test_support import verbose +import re +import traceback + +from re_tests import * +if verbose: print 'Running regex_tests test suite' + +for t in tests: + print t + pattern=s=outcome=repl=expected=None + if len(t)==5: + pattern, s, outcome, repl, expected = t + elif len(t)==3: + pattern, s, outcome = t + else: + raise ValueError, ('Test tuples should have 3 or 5 fields',t) + + try: + obj=re.compile(pattern) + except re.error: + if outcome==SYNTAX_ERROR: pass # Expected a syntax error + else: + print '=== Syntax error:', t + except: + print '*** Unexpected error ***' + traceback.print_exc() + else: + try: + result=obj.search(s) + except regex.error, msg: + print '=== Unexpected exception', t, repr(msg) + if outcome==SYNTAX_ERROR: + # This should have been a syntax error; forget it. + pass + elif outcome==FAIL: + if result is None: pass # No match, as expected + else: print '=== Succeeded incorrectly', t + elif outcome==SUCCEED: + if result is not None: + # Matched, as expected, so now we compute the + # result string and compare it to our expected result. + start, end = result.span(0) + vardict={'found': result.group(0)} + for i in range(1, 100): + try: + gi = result.group(i) + except IndexError: + break + else: + vardict['g%d' % i] = gi + repl=eval(repl, vardict) + if repl!=expected: + print '=== grouping error', t, + print repr(repl)+' should be '+repr(expected) + else: + print '=== Failed incorrectly', t |