14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#! /usr/bin/env python
24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#  (Force the script to use the latest build.)
34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#
44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#  test_parser.py
54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport parser, traceback
74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm_numFailed = 0
94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef testChunk(t, fileName):
114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    global _numFailed
124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    print '----', fileName,
134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    try:
144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        st = parser.suite(t)
154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        tup = parser.st2tuple(st)
164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # this discards the first ST; a huge memory savings when running
174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # against a large source file like Tkinter.py.
184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        st = None
194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        new = parser.tuple2st(tup)
204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    except parser.ParserError, err:
214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        print
224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        print 'parser module raised exception on input file', fileName + ':'
234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        traceback.print_exc()
244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        _numFailed = _numFailed + 1
254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    else:
264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        if tup != parser.st2tuple(new):
274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            print
284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            print 'parser module failed on input file', fileName
294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            _numFailed = _numFailed + 1
304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        else:
314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            print 'o.k.'
324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef testFile(fileName):
344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    t = open(fileName).read()
354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    testChunk(t, fileName)
364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test():
384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    import sys
394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    args = sys.argv[1:]
404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    if not args:
414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        import glob
424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        args = glob.glob("*.py")
434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        args.sort()
444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    map(testFile, args)
454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    sys.exit(_numFailed != 0)
464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__':
484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    test()
49