mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	svn+ssh://pythondev@svn.python.org/python/trunk
................
  r61825 | martin.v.loewis | 2008-03-24 01:46:53 +0100 (Mo, 24 Mär 2008) | 17 lines
  Merged revisions 61724-61824 via svnmerge from
  svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
  ........
    r61730 | martin.v.loewis | 2008-03-22 02:20:58 +0100 (Sa, 22 Mär 2008) | 2 lines
    More explicit relative imports.
  ........
    r61755 | david.wolever | 2008-03-22 21:33:52 +0100 (Sa, 22 Mär 2008) | 1 line
    Fixing #2446 -- 2to3 now translates 'import foo' to 'from . import foo'
  ........
    r61824 | david.wolever | 2008-03-24 01:30:24 +0100 (Mo, 24 Mär 2008) | 3 lines
    Fixed a bug where 'from itertools import izip' would return 'from itertools import'
  ........
................
		
	
			
		
			
				
	
	
		
			92 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env python2.5
 | 
						|
# 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):
 | 
						|
        print("No diffs.")
 | 
						|
    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
 | 
						|
        print("Parsing", fn, file=sys.stderr)
 | 
						|
        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)
 | 
						|
        except os.error:
 | 
						|
            continue
 | 
						|
        print("Scanning", dir, "...", file=sys.stderr)
 | 
						|
        for name in names:
 | 
						|
            if not name.endswith(".py"):
 | 
						|
                continue
 | 
						|
            print("Parsing", name, file=sys.stderr)
 | 
						|
            fn = os.path.join(dir, name)
 | 
						|
            try:
 | 
						|
                tree = dr.parse_file(fn, debug=True)
 | 
						|
            except pgen2.parse.ParseError as err:
 | 
						|
                print("ParseError:", err)
 | 
						|
            else:
 | 
						|
                if diff(fn, tree):
 | 
						|
                    problems.append(fn)
 | 
						|
 | 
						|
    # Show summary of problem files
 | 
						|
    if not problems:
 | 
						|
        print("No problems.  Congratulations!")
 | 
						|
    else:
 | 
						|
        print("Problems in following files:")
 | 
						|
        for fn in problems:
 | 
						|
            print("***", fn)
 | 
						|
 | 
						|
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()
 |