#! /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,
    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, 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")
    map(testFile, args)
    sys.exit(_numFailed != 0)

if __name__ == '__main__':
    test()

#
#  end of file
