diff -r 000000000000 -r ae805ac0140d python-2.5.2/win32/Lib/test/test_pkg.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python-2.5.2/win32/Lib/test/test_pkg.py Fri Apr 03 17:19:34 2009 +0100 @@ -0,0 +1,259 @@ +# 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'; 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'"