#! /usr/bin/env python3
#  (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:
        st = parser.suite(t)
        tup = parser.st2tuple(st)
        # this discards the first ST; a huge memory savings when running
        # against a large source file like Tkinter.py.
        st = None
        new = parser.tuple2st(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.st2tuple(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()
