#! /usr/bin/env python
#  (Force the script to use the latest build.)
#
#  test_parser.py

import parser, traceback

_numFailed = 0

def testChunk(t, fileName):
    global _numFailed
    print('----', fileName, end=' ')
    try:
        ast = parser.suite(t)
        tup = parser.ast2tuple(ast)
        # this discards the first AST; a huge memory savings when running
        # against a large source file like Tkinter.py.
        ast = None
        new = parser.tuple2ast(tup)
    except parser.ParserError as err:
        print()
        print('parser module raised exception on input file', fileName + ':')
        traceback.print_exc()
        _numFailed = _numFailed + 1
    else:
        if tup != parser.ast2tuple(new):
            print()
            print('parser module failed on input file', fileName)
            _numFailed = _numFailed + 1
        else:
            print('o.k.')

def testFile(fileName):
    t = open(fileName).read()
    testChunk(t, fileName)

def test():
    import sys
    args = sys.argv[1:]
    if not args:
        import glob
        args = glob.glob("*.py")
        args.sort()
    list(map(testFile, args))
    sys.exit(_numFailed != 0)

if __name__ == '__main__':
    test()
