tests/test-run-tests.py
changeset 20271 4453d08a616a
child 20273 d9d6cbbeef0d
equal deleted inserted replaced
20270:0763d829cbea 20271:4453d08a616a
       
     1 """test line matching with some failing examples and some which warn
       
     2 
       
     3 run-test.t only checks positive matches and can not see warnings
       
     4 (both by design)
       
     5 """
       
     6 
       
     7 
       
     8 import doctest, os, re
       
     9 run_tests = __import__('run-tests')
       
    10 
       
    11 def lm(expected, output):
       
    12     r"""check if output matches expected
       
    13 
       
    14     does it generally work?
       
    15         >>> lm('H*e (glob)\n', 'Here\n')
       
    16         True
       
    17 
       
    18     fail on bad test data
       
    19         >>> try: lm('a\n','a')
       
    20         ... except AssertionError, ex: print ex
       
    21         missing newline
       
    22         >>> try: lm('single backslash\n', 'single \backslash\n')
       
    23         ... except AssertionError, ex: print ex
       
    24         single backslash or unknown char
       
    25     """
       
    26     assert expected.endswith('\n') and output.endswith('\n'), 'missing newline'
       
    27     assert not re.search(r'[^ \w\\/\r\n()*?]', expected + output), \
       
    28            'single backslash or unknown char'
       
    29     match = run_tests.linematch(expected, output)
       
    30     return bool(match)
       
    31 
       
    32 def wintests():
       
    33     r"""test matching like running on windows
       
    34 
       
    35     enable windows matching on any os
       
    36         >>> _osaltsep = os.altsep
       
    37         >>> os.altsep = True
       
    38 
       
    39     valid match on windows
       
    40         >>> lm('g/a*/d (glob)\n', 'g\\abc/d\n')
       
    41         True
       
    42 
       
    43     direct matching, glob unnecessary
       
    44         >>> lm('g/b (glob)\n', 'g/b\n')
       
    45         <BLANKLINE>
       
    46         Info, unnecessary glob: g/b (glob)
       
    47         True
       
    48 
       
    49     missing glob
       
    50         >>> lm('/g/c/d/fg\n', '\\g\\c\\d/fg\n')
       
    51         False
       
    52 
       
    53     restore os.altsep
       
    54         >>> os.altsep = _osaltsep
       
    55     """
       
    56     os.altsep # for pyflakes, because it does not see os in the doctest
       
    57 
       
    58 def otherostests():
       
    59     r"""test matching like running on non-windows os
       
    60 
       
    61     disable windows matching on any os
       
    62         >>> _osaltsep = os.altsep
       
    63         >>> os.altsep = False
       
    64 
       
    65     backslash does not match slash
       
    66         >>> lm('h/a* (glob)\n', 'h\\ab\n')
       
    67         False
       
    68 
       
    69     direct matching glob can not be recognized
       
    70         >>> lm('h/b (glob)\n', 'h/b\n')
       
    71         True
       
    72 
       
    73     missing glob can not not be recognized
       
    74         >>> lm('/h/c/df/g/\n', '\\h/c\\df/g\\\n')
       
    75         False
       
    76 
       
    77     restore os.altsep
       
    78         >>> os.altsep = _osaltsep
       
    79     """
       
    80     pass
       
    81 
       
    82 if __name__ == '__main__':
       
    83     doctest.testmod()