blob: fd226126449acd660fc91549b5c651b0ab29b9d2 [file] [log] [blame]
Guido van Rossum6c612421997-09-06 18:42:57 +00001# Test packages (dotted-name import)
2
3import sys, os, string, tempfile, traceback
Guido van Rossum41360a41998-03-26 19:42:58 +00004from os import mkdir, rmdir # Can't test if these fail
Guido van Rossum6c612421997-09-06 18:42:57 +00005del mkdir, rmdir
Guido van Rossum5f4fb911998-05-19 15:09:42 +00006from test_support import verbose, TestFailed
Guido van Rossum6c612421997-09-06 18:42:57 +00007
8# Helpers to create and destroy hierarchies.
9
10def mkhier(root, descr):
11 mkdir(root)
12 for name, contents in descr:
Guido van Rossum41360a41998-03-26 19:42:58 +000013 comps = string.split(name)
14 fullname = root
15 for c in comps:
16 fullname = os.path.join(fullname, c)
17 if contents is None:
18 mkdir(fullname)
19 else:
20 if verbose: print "write", fullname
21 f = open(fullname, "w")
22 f.write(contents)
23 if contents and contents[-1] != '\n':
24 f.write('\n')
25 f.close()
Guido van Rossum6c612421997-09-06 18:42:57 +000026
27def mkdir(x):
28 if verbose: print "mkdir", x
29 os.mkdir(x)
30
31def cleanout(root):
32 names = os.listdir(root)
33 for name in names:
Guido van Rossum41360a41998-03-26 19:42:58 +000034 fullname = os.path.join(root, name)
35 if os.path.isdir(fullname) and not os.path.islink(fullname):
36 cleanout(fullname)
37 else:
38 os.remove(fullname)
Guido van Rossum6c612421997-09-06 18:42:57 +000039 rmdir(root)
40
41def rmdir(x):
42 if verbose: print "rmdir", x
43 os.rmdir(x)
44
45# Helper to run a test
46
47def runtest(hier, code):
48 root = tempfile.mktemp()
49 mkhier(root, hier)
50 savepath = sys.path[:]
51 codefile = tempfile.mktemp()
52 f = open(codefile, "w")
53 f.write(code)
54 f.close()
55 try:
Guido van Rossum41360a41998-03-26 19:42:58 +000056 sys.path.insert(0, root)
57 if verbose: print "sys.path =", sys.path
58 try:
59 execfile(codefile, globals(), {})
60 except:
61 traceback.print_exc(file=sys.stdout)
Guido van Rossum6c612421997-09-06 18:42:57 +000062 finally:
Guido van Rossum41360a41998-03-26 19:42:58 +000063 sys.path[:] = savepath
64 try:
65 cleanout(root)
66 except (os.error, IOError):
67 pass
68 os.remove(codefile)
Guido van Rossum6c612421997-09-06 18:42:57 +000069
70# Test descriptions
71
72tests = [
Guido van Rossume8d11391997-10-31 18:33:41 +000073 ("t1", [("t1", None), ("t1 __init__.py", "")], "import t1"),
Guido van Rossum6c612421997-09-06 18:42:57 +000074
75 ("t2", [
76 ("t2", None),
77 ("t2 __init__.py", "'doc for t2'; print __name__, 'loading'"),
78 ("t2 sub", None),
Guido van Rossume8d11391997-10-31 18:33:41 +000079 ("t2 sub __init__.py", ""),
Guido van Rossum6c612421997-09-06 18:42:57 +000080 ("t2 sub subsub", None),
81 ("t2 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"),
82 ],
83"""
84import t2
85print t2.__doc__
86import t2.sub
87import t2.sub.subsub
88print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
89import t2
90from t2 import *
91print dir()
92from t2 import sub
93from t2.sub import subsub
94from t2.sub.subsub import spam
95print sub.__name__, subsub.__name__
96print sub.subsub.__name__
97print dir()
98import t2.sub
99import t2.sub.subsub
100print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
101from t2 import *
102print dir()
103"""),
104
105 ("t3", [
106 ("t3", None),
107 ("t3 __init__.py", "print __name__, 'loading'"),
108 ("t3 sub", None),
Guido van Rossume8d11391997-10-31 18:33:41 +0000109 ("t3 sub __init__.py", ""),
Guido van Rossum6c612421997-09-06 18:42:57 +0000110 ("t3 sub subsub", None),
111 ("t3 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"),
112 ],
113"""
114import t3.sub.subsub
115print t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__
Guido van Rossum81da02e1997-09-06 19:58:53 +0000116reload(t3)
117reload(t3.sub)
118reload(t3.sub.subsub)
Guido van Rossum6c612421997-09-06 18:42:57 +0000119"""),
120
121 ("t4", [
122 ("t4.py", "print 'THIS SHOULD NOT BE PRINTED (t4.py)'"),
123 ("t4", None),
124 ("t4 __init__.py", "print __name__, 'loading'"),
125 ("t4 sub.py", "print 'THIS SHOULD NOT BE PRINTED (sub.py)'"),
126 ("t4 sub", None),
Guido van Rossume8d11391997-10-31 18:33:41 +0000127 ("t4 sub __init__.py", ""),
Guido van Rossum6c612421997-09-06 18:42:57 +0000128 ("t4 sub subsub.py", "print 'THIS SHOULD NOT BE PRINTED (subsub.py)'"),
129 ("t4 sub subsub", None),
130 ("t4 sub subsub __init__.py", "print __name__, 'loading'; spam = 1"),
131 ],
132"""
133from t4.sub.subsub import *
134print "t4.sub.subsub.spam =", spam
135"""),
136
137 ("t5", [
138 ("t5", None),
139 ("t5 __init__.py", "import t5.foo"),
140 ("t5 string.py", "print __name__, 'loading'; spam = 1"),
141 ("t5 foo.py",
142 "print __name__, 'loading'; import string; print string.spam"),
143 ],
144"""
Guido van Rossum10887a31997-09-07 06:12:11 +0000145import t5
Guido van Rossum6c612421997-09-06 18:42:57 +0000146from t5 import *
147print dir()
148import t5
149print dir(t5)
150print dir(t5.foo)
151print dir(t5.string)
152"""),
153
Guido van Rossumc8bf8841997-09-08 16:06:20 +0000154 ("t6", [
155 ("t6", None),
156 ("t6 __init__.py", "__all__ = ['spam', 'ham', 'eggs']"),
157 ("t6 spam.py", "print __name__, 'loading'"),
158 ("t6 ham.py", "print __name__, 'loading'"),
159 ("t6 eggs.py", "print __name__, 'loading'"),
160 ],
161"""
162import t6
163print dir(t6)
164from t6 import *
165print dir(t6)
166print dir()
167"""),
168
Guido van Rossum6c612421997-09-06 18:42:57 +0000169]
170
171nontests = [
172 ("x5", [], ("import a" + ".a"*400)),
173 ("x6", [], ("import a" + ".a"*499)),
174 ("x7", [], ("import a" + ".a"*500)),
175 ("x8", [], ("import a" + ".a"*1100)),
176 ("x9", [], ("import " + "a"*400)),
177 ("x10", [], ("import " + "a"*500)),
178 ("x11", [], ("import " + "a"*998)),
179 ("x12", [], ("import " + "a"*999)),
180 ("x13", [], ("import " + "a"*999)),
181 ("x14", [], ("import " + "a"*2000)),
182]
183
184"""XXX Things to test
185
186import package without __init__
187import package with __init__
188__init__ importing submodule
189__init__ importing global module
190__init__ defining variables
191submodule importing other submodule
192submodule importing global module
193submodule import submodule via global name
194from package import submodule
195from package import subpackage
196from package import variable (defined in __init__)
197from package import * (defined in __init__)
198"""
199
200# Run the tests
201
Guido van Rossum10887a31997-09-07 06:12:11 +0000202args = []
203if __name__ == '__main__':
204 args = sys.argv[1:]
205 if args and args[0] == '-q':
Guido van Rossum41360a41998-03-26 19:42:58 +0000206 verbose = 0
207 del args[0]
Guido van Rossum10887a31997-09-07 06:12:11 +0000208
Guido van Rossum6c612421997-09-06 18:42:57 +0000209for name, hier, code in tests:
Guido van Rossum10887a31997-09-07 06:12:11 +0000210 if args and name not in args:
Guido van Rossum41360a41998-03-26 19:42:58 +0000211 print "skipping test", name
212 continue
Guido van Rossum6c612421997-09-06 18:42:57 +0000213 print "running test", name
214 runtest(hier, code)
Guido van Rossum5f4fb911998-05-19 15:09:42 +0000215
216# Test
217import sys
218import imp
219try:
220 import sys.imp
221except ImportError:
222 # This is what we expect
223 pass
224else:
225 raise TestFailed, "No ImportError exception on 'import sys.imp'"