+++ /dev/null
-#!/usr/bin/env python\r
-# Copyright 2006 Google, Inc. All Rights Reserved.\r
-# Licensed to PSF under a Contributor Agreement.\r
-\r
-"""Main program for testing the infrastructure."""\r
-\r
-__author__ = "Guido van Rossum <guido@python.org>"\r
-\r
-# Support imports (need to be imported first)\r
-from . import support\r
-\r
-# Python imports\r
-import os\r
-import sys\r
-import logging\r
-\r
-# Local imports\r
-from .. import pytree\r
-import pgen2\r
-from pgen2 import driver\r
-\r
-logging.basicConfig()\r
-\r
-def main():\r
- gr = driver.load_grammar("Grammar.txt")\r
- dr = driver.Driver(gr, convert=pytree.convert)\r
-\r
- fn = "example.py"\r
- tree = dr.parse_file(fn, debug=True)\r
- if not diff(fn, tree):\r
- print "No diffs."\r
- if not sys.argv[1:]:\r
- return # Pass a dummy argument to run the complete test suite below\r
-\r
- problems = []\r
-\r
- # Process every imported module\r
- for name in sys.modules:\r
- mod = sys.modules[name]\r
- if mod is None or not hasattr(mod, "__file__"):\r
- continue\r
- fn = mod.__file__\r
- if fn.endswith(".pyc"):\r
- fn = fn[:-1]\r
- if not fn.endswith(".py"):\r
- continue\r
- print >>sys.stderr, "Parsing", fn\r
- tree = dr.parse_file(fn, debug=True)\r
- if diff(fn, tree):\r
- problems.append(fn)\r
-\r
- # Process every single module on sys.path (but not in packages)\r
- for dir in sys.path:\r
- try:\r
- names = os.listdir(dir)\r
- except os.error:\r
- continue\r
- print >>sys.stderr, "Scanning", dir, "..."\r
- for name in names:\r
- if not name.endswith(".py"):\r
- continue\r
- print >>sys.stderr, "Parsing", name\r
- fn = os.path.join(dir, name)\r
- try:\r
- tree = dr.parse_file(fn, debug=True)\r
- except pgen2.parse.ParseError, err:\r
- print "ParseError:", err\r
- else:\r
- if diff(fn, tree):\r
- problems.append(fn)\r
-\r
- # Show summary of problem files\r
- if not problems:\r
- print "No problems. Congratulations!"\r
- else:\r
- print "Problems in following files:"\r
- for fn in problems:\r
- print "***", fn\r
-\r
-def diff(fn, tree):\r
- f = open("@", "w")\r
- try:\r
- f.write(str(tree))\r
- finally:\r
- f.close()\r
- try:\r
- return os.system("diff -u %s @" % fn)\r
- finally:\r
- os.remove("@")\r
-\r
-if __name__ == "__main__":\r
- main()\r