diff options
author | Guido van Rossum <guido@python.org> | 1997-09-06 18:42:57 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-09-06 18:42:57 (GMT) |
commit | 6c61242c7832459932c4b9e3ede6efa8dc2f8cbe (patch) | |
tree | 9275f0e2657f4289c013e70c47f84e168d295ec7 /Lib/test | |
parent | d6bf45bcf669a13b2d8c3996b466c5171eca0e53 (diff) | |
download | cpython-6c61242c7832459932c4b9e3ede6efa8dc2f8cbe.zip cpython-6c61242c7832459932c4b9e3ede6efa8dc2f8cbe.tar.gz cpython-6c61242c7832459932c4b9e3ede6efa8dc2f8cbe.tar.bz2 |
Test set for package import.
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/output/test_pkg | 29 | ||||
-rw-r--r-- | Lib/test/test_pkg.py | 183 |
2 files changed, 212 insertions, 0 deletions
diff --git a/Lib/test/output/test_pkg b/Lib/test/output/test_pkg new file mode 100644 index 0000000..19ac6f2 --- /dev/null +++ b/Lib/test/output/test_pkg @@ -0,0 +1,29 @@ +test_pkg +running test t1 +running test t2 +t2 loading +doc for t2 +t2.sub.subsub loading +t2 t2.sub t2.sub.subsub +['sub', 't2'] +t2.sub t2.sub.subsub +t2.sub.subsub +['spam', 'sub', 'subsub', 't2'] +t2 t2.sub t2.sub.subsub +['spam', 'sub', 'subsub', 't2'] +running test t3 +t3 loading +t3.sub.subsub loading +t3 t3.sub t3.sub.subsub +running test t4 +t4 loading +t4.sub.subsub loading +t4.sub.subsub.spam = 1 +running test t5 +t5.foo loading +t5.string loading +1 +['foo', 'string', 't5'] +['__builtins__', '__doc__', '__file__', '__name__', '__path__', 'foo', 'string', 't5'] +['__builtins__', '__doc__', '__file__', '__name__', 'string'] +['__builtins__', '__doc__', '__file__', '__name__', 'spam'] diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py new file mode 100644 index 0000000..3210500 --- /dev/null +++ b/Lib/test/test_pkg.py @@ -0,0 +1,183 @@ +# Test packages (dotted-name import) + +import sys, os, string, tempfile, traceback +from os import mkdir, rmdir # Can't test if these fail +del mkdir, rmdir +from test_support import verbose +if sys.argv[1:2] == ['-q']: verbose = 0 + +# Helpers to create and destroy hierarchies. + +def mkhier(root, descr): + mkdir(root) + for name, contents in descr: + comps = string.split(name) + 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) + +# Helper to run a test + +def runtest(hier, code): + root = tempfile.mktemp() + mkhier(root, hier) + savepath = sys.path[:] + codefile = tempfile.mktemp() + f = open(codefile, "w") + f.write(code) + f.close() + try: + sys.path.insert(0, root) + if verbose: print "sys.path =", sys.path + try: + execfile(codefile, globals(), {}) + except: + traceback.print_exc() + finally: + sys.path[:] = savepath + try: + cleanout(root) + except (os.error, IOError): + pass + os.remove(codefile) + +# Test descriptions + +tests = [ + ("t1", [("t1", None)], "import ni"), + + ("t2", [ + ("t2", None), + ("t2 __init__.py", "'doc for t2'; print __name__, 'loading'"), + ("t2 sub", None), + ("t2 sub subsub", None), + ("t2 sub subsub __init__.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__.py", "print __name__, 'loading'"), + ("t3 sub", None), + ("t3 sub subsub", None), + ("t3 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"), + ], +""" +import t3.sub.subsub +print t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__ +"""), + + ("t4", [ + ("t4.py", "print 'THIS SHOULD NOT BE PRINTED (t4.py)'"), + ("t4", None), + ("t4 __init__.py", "print __name__, 'loading'"), + ("t4 sub.py", "print 'THIS SHOULD NOT BE PRINTED (sub.py)'"), + ("t4 sub", None), + ("t4 sub subsub.py", "print 'THIS SHOULD NOT BE PRINTED (subsub.py)'"), + ("t4 sub subsub", None), + ("t4 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"), + ], +""" +from t4.sub.subsub import * +print "t4.sub.subsub.spam =", spam +"""), + + ("t5", [ + ("t5", None), + ("t5 __init__.py", "import t5.foo"), + ("t5 string.py", "print __name__, 'loading'; spam = 1"), + ("t5 foo.py", + "print __name__, 'loading'; import string; print string.spam"), + ], +""" +from t5 import * +print dir() +import t5 +print dir(t5) +print dir(t5.foo) +print dir(t5.string) +"""), + +] + +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 + +for name, hier, code in tests: + print "running test", name + runtest(hier, code) |