mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	* Fix some docstrings and one Print -> print.
* Fix test_{class,code,descrtut,dis,extcall,parser,popen,pkg,subprocess,syntax,traceback}.
  These were the ones that generated code with a print statement.
  In most remaining failing tests there's an issue with the soft space.
		
	
			
		
			
				
	
	
		
			259 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			259 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Test packages (dotted-name import)
 | 
						|
 | 
						|
import sys, os, tempfile, traceback
 | 
						|
from os import mkdir, rmdir, extsep          # Can't test if these fail
 | 
						|
del mkdir, rmdir
 | 
						|
from test.test_support import verify, verbose, TestFailed
 | 
						|
 | 
						|
# Helpers to create and destroy hierarchies.
 | 
						|
 | 
						|
def mkhier(root, descr):
 | 
						|
    if not os.path.isdir(root):
 | 
						|
        mkdir(root)
 | 
						|
    for name, contents in descr:
 | 
						|
        comps = name.split()
 | 
						|
        fullname = root
 | 
						|
        for c in comps:
 | 
						|
            fullname = os.path.join(fullname, c)
 | 
						|
        if contents is None:
 | 
						|
            mkdir(fullname)
 | 
						|
        else:
 | 
						|
            if verbose: print("write", fullname)
 | 
						|
            f = open(fullname, "w")
 | 
						|
            f.write(contents)
 | 
						|
            if contents and contents[-1] != '\n':
 | 
						|
                f.write('\n')
 | 
						|
            f.close()
 | 
						|
 | 
						|
def mkdir(x):
 | 
						|
    if verbose: print("mkdir", x)
 | 
						|
    os.mkdir(x)
 | 
						|
 | 
						|
def cleanout(root):
 | 
						|
    names = os.listdir(root)
 | 
						|
    for name in names:
 | 
						|
        fullname = os.path.join(root, name)
 | 
						|
        if os.path.isdir(fullname) and not os.path.islink(fullname):
 | 
						|
            cleanout(fullname)
 | 
						|
        else:
 | 
						|
            os.remove(fullname)
 | 
						|
    rmdir(root)
 | 
						|
 | 
						|
def rmdir(x):
 | 
						|
    if verbose: print("rmdir", x)
 | 
						|
    os.rmdir(x)
 | 
						|
 | 
						|
def fixdir(lst):
 | 
						|
    try:
 | 
						|
        lst.remove('__builtins__')
 | 
						|
    except ValueError:
 | 
						|
        pass
 | 
						|
    return lst
 | 
						|
 | 
						|
# Helper to run a test
 | 
						|
 | 
						|
def runtest(hier, code):
 | 
						|
    root = tempfile.mkdtemp()
 | 
						|
    mkhier(root, hier)
 | 
						|
    savepath = sys.path[:]
 | 
						|
    fd, fname = tempfile.mkstemp(text=True)
 | 
						|
    os.write(fd, code)
 | 
						|
    os.close(fd)
 | 
						|
    try:
 | 
						|
        sys.path.insert(0, root)
 | 
						|
        if verbose: print("sys.path =", sys.path)
 | 
						|
        try:
 | 
						|
            execfile(fname, globals(), {})
 | 
						|
        except:
 | 
						|
            traceback.print_exc(file=sys.stdout)
 | 
						|
    finally:
 | 
						|
        sys.path[:] = savepath
 | 
						|
        os.unlink(fname)
 | 
						|
        try:
 | 
						|
            cleanout(root)
 | 
						|
        except (os.error, IOError):
 | 
						|
            pass
 | 
						|
 | 
						|
# Test descriptions
 | 
						|
 | 
						|
tests = [
 | 
						|
    ("t1", [("t1", None), ("t1 __init__"+os.extsep+"py", "")], "import t1"),
 | 
						|
 | 
						|
    ("t2", [
 | 
						|
    ("t2", None),
 | 
						|
    ("t2 __init__"+os.extsep+"py", "'doc for t2'; print(__name__, 'loading')"),
 | 
						|
    ("t2 sub", None),
 | 
						|
    ("t2 sub __init__"+os.extsep+"py", ""),
 | 
						|
    ("t2 sub subsub", None),
 | 
						|
    ("t2 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | 
						|
    ],
 | 
						|
"""
 | 
						|
import t2
 | 
						|
print(t2.__doc__)
 | 
						|
import t2.sub
 | 
						|
import t2.sub.subsub
 | 
						|
print(t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__)
 | 
						|
import t2
 | 
						|
from t2 import *
 | 
						|
print(dir())
 | 
						|
from t2 import sub
 | 
						|
from t2.sub import subsub
 | 
						|
from t2.sub.subsub import spam
 | 
						|
print(sub.__name__, subsub.__name__)
 | 
						|
print(sub.subsub.__name__)
 | 
						|
print(dir())
 | 
						|
import t2.sub
 | 
						|
import t2.sub.subsub
 | 
						|
print(t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__)
 | 
						|
from t2 import *
 | 
						|
print(dir())
 | 
						|
"""),
 | 
						|
 | 
						|
    ("t3", [
 | 
						|
    ("t3", None),
 | 
						|
    ("t3 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
 | 
						|
    ("t3 sub", None),
 | 
						|
    ("t3 sub __init__"+os.extsep+"py", ""),
 | 
						|
    ("t3 sub subsub", None),
 | 
						|
    ("t3 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | 
						|
    ],
 | 
						|
"""
 | 
						|
import t3.sub.subsub
 | 
						|
print(t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__)
 | 
						|
reload(t3)
 | 
						|
reload(t3.sub)
 | 
						|
reload(t3.sub.subsub)
 | 
						|
"""),
 | 
						|
 | 
						|
    ("t4", [
 | 
						|
    ("t4"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)')"),
 | 
						|
    ("t4", None),
 | 
						|
    ("t4 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
 | 
						|
    ("t4 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
 | 
						|
    ("t4 sub", None),
 | 
						|
    ("t4 sub __init__"+os.extsep+"py", ""),
 | 
						|
    ("t4 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
 | 
						|
    ("t4 sub subsub", None),
 | 
						|
    ("t4 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | 
						|
    ],
 | 
						|
"""
 | 
						|
from t4.sub.subsub import *
 | 
						|
print("t4.sub.subsub.spam =", spam)
 | 
						|
"""),
 | 
						|
 | 
						|
    ("t5", [
 | 
						|
    ("t5", None),
 | 
						|
    ("t5 __init__"+os.extsep+"py", "import t5.foo"),
 | 
						|
    ("t5 string"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | 
						|
    ("t5 foo"+os.extsep+"py",
 | 
						|
     "print(__name__, 'loading'); from . import string; print(string.spam)"),
 | 
						|
     ],
 | 
						|
"""
 | 
						|
import t5
 | 
						|
from t5 import *
 | 
						|
print(dir())
 | 
						|
import t5
 | 
						|
print(fixdir(dir(t5)))
 | 
						|
print(fixdir(dir(t5.foo)))
 | 
						|
print(fixdir(dir(t5.string)))
 | 
						|
"""),
 | 
						|
 | 
						|
    ("t6", [
 | 
						|
    ("t6", None),
 | 
						|
    ("t6 __init__"+os.extsep+"py", "__all__ = ['spam', 'ham', 'eggs']"),
 | 
						|
    ("t6 spam"+os.extsep+"py", "print(__name__, 'loading')"),
 | 
						|
    ("t6 ham"+os.extsep+"py", "print(__name__, 'loading')"),
 | 
						|
    ("t6 eggs"+os.extsep+"py", "print(__name__, 'loading')"),
 | 
						|
    ],
 | 
						|
"""
 | 
						|
import t6
 | 
						|
print(fixdir(dir(t6)))
 | 
						|
from t6 import *
 | 
						|
print(fixdir(dir(t6)))
 | 
						|
print(dir())
 | 
						|
"""),
 | 
						|
 | 
						|
    ("t7", [
 | 
						|
    ("t7"+os.extsep+"py", "print('Importing t7"+os.extsep+"py')"),
 | 
						|
    ("t7", None),
 | 
						|
    ("t7 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
 | 
						|
    ("t7 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
 | 
						|
    ("t7 sub", None),
 | 
						|
    ("t7 sub __init__"+os.extsep+"py", ""),
 | 
						|
    ("t7 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
 | 
						|
    ("t7 sub subsub", None),
 | 
						|
    ("t7 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | 
						|
    ],
 | 
						|
"""
 | 
						|
t7, sub, subsub = None, None, None
 | 
						|
import t7 as tas
 | 
						|
print(fixdir(dir(tas)))
 | 
						|
verify(not t7)
 | 
						|
from t7 import sub as subpar
 | 
						|
print(fixdir(dir(subpar)))
 | 
						|
verify(not t7 and not sub)
 | 
						|
from t7.sub import subsub as subsubsub
 | 
						|
print(fixdir(dir(subsubsub)))
 | 
						|
verify(not t7 and not sub and not subsub)
 | 
						|
from t7.sub.subsub import spam as ham
 | 
						|
print("t7.sub.subsub.spam =", ham)
 | 
						|
verify(not t7 and not sub and not subsub)
 | 
						|
"""),
 | 
						|
 | 
						|
]
 | 
						|
 | 
						|
nontests = [
 | 
						|
    ("x5", [], ("import a" + ".a"*400)),
 | 
						|
    ("x6", [], ("import a" + ".a"*499)),
 | 
						|
    ("x7", [], ("import a" + ".a"*500)),
 | 
						|
    ("x8", [], ("import a" + ".a"*1100)),
 | 
						|
    ("x9", [], ("import " + "a"*400)),
 | 
						|
    ("x10", [], ("import " + "a"*500)),
 | 
						|
    ("x11", [], ("import " + "a"*998)),
 | 
						|
    ("x12", [], ("import " + "a"*999)),
 | 
						|
    ("x13", [], ("import " + "a"*999)),
 | 
						|
    ("x14", [], ("import " + "a"*2000)),
 | 
						|
]
 | 
						|
 | 
						|
"""XXX Things to test
 | 
						|
 | 
						|
import package without __init__
 | 
						|
import package with __init__
 | 
						|
__init__ importing submodule
 | 
						|
__init__ importing global module
 | 
						|
__init__ defining variables
 | 
						|
submodule importing other submodule
 | 
						|
submodule importing global module
 | 
						|
submodule import submodule via global name
 | 
						|
from package import submodule
 | 
						|
from package import subpackage
 | 
						|
from package import variable (defined in __init__)
 | 
						|
from package import * (defined in __init__)
 | 
						|
"""
 | 
						|
 | 
						|
# Run the tests
 | 
						|
 | 
						|
args = []
 | 
						|
if __name__ == '__main__':
 | 
						|
    args = sys.argv[1:]
 | 
						|
    if args and args[0] == '-q':
 | 
						|
        verbose = 0
 | 
						|
        del args[0]
 | 
						|
 | 
						|
for name, hier, code in tests:
 | 
						|
    if args and name not in args:
 | 
						|
        print("skipping test", name)
 | 
						|
        continue
 | 
						|
    print("running test", name)
 | 
						|
    runtest(hier, code)
 | 
						|
 | 
						|
# Test
 | 
						|
import sys
 | 
						|
import imp
 | 
						|
try:
 | 
						|
    import sys.imp
 | 
						|
except ImportError:
 | 
						|
    # This is what we expect
 | 
						|
    pass
 | 
						|
else:
 | 
						|
    raise TestFailed, "No ImportError exception on 'import sys.imp'"
 |