summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1997-09-06 18:42:57 (GMT)
committerGuido van Rossum <guido@python.org>1997-09-06 18:42:57 (GMT)
commit6c61242c7832459932c4b9e3ede6efa8dc2f8cbe (patch)
tree9275f0e2657f4289c013e70c47f84e168d295ec7 /Lib
parentd6bf45bcf669a13b2d8c3996b466c5171eca0e53 (diff)
downloadcpython-6c61242c7832459932c4b9e3ede6efa8dc2f8cbe.zip
cpython-6c61242c7832459932c4b9e3ede6efa8dc2f8cbe.tar.gz
cpython-6c61242c7832459932c4b9e3ede6efa8dc2f8cbe.tar.bz2
Test set for package import.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/output/test_pkg29
-rw-r--r--Lib/test/test_pkg.py183
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)