openmedialibrary_platform/Darwin/lib/python3.4/lib2to3/tests/pytree_idempotency.py

93 lines
2.3 KiB
Python
Raw Normal View History

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