1 # Test packages (dotted-name import)
3 import sys
, os
, tempfile
, traceback
4 from os
import mkdir
, rmdir
, extsep
# Can't test if these fail
6 from test
.test_support
import verify
, verbose
, TestFailed
8 # Helpers to create and destroy hierarchies.
10 def mkhier(root
, descr
):
11 if not os
.path
.isdir(root
):
13 for name
, contents
in descr
:
17 fullname
= os
.path
.join(fullname
, c
)
21 if verbose
: print "write", fullname
22 f
= open(fullname
, "w")
24 if contents
and contents
[-1] != '\n':
29 if verbose
: print "mkdir", x
33 names
= os
.listdir(root
)
35 fullname
= os
.path
.join(root
, name
)
36 if os
.path
.isdir(fullname
) and not os
.path
.islink(fullname
):
43 if verbose
: print "rmdir", x
48 lst
.remove('__builtins__')
53 # Helper to run a test
55 def runtest(hier
, code
):
56 root
= tempfile
.mkdtemp()
58 savepath
= sys
.path
[:]
59 fd
, fname
= tempfile
.mkstemp(text
=True)
63 sys
.path
.insert(0, root
)
64 if verbose
: print "sys.path =", sys
.path
66 execfile(fname
, globals(), {})
68 traceback
.print_exc(file=sys
.stdout
)
70 sys
.path
[:] = savepath
74 except (os
.error
, IOError):
80 ("t1", [("t1", None), ("t1 __init__"+os
.extsep
+"py", "")], "import t1"),
84 ("t2 __init__"+os
.extsep
+"py", "'doc for t2'; print __name__, 'loading'"),
86 ("t2 sub __init__"+os
.extsep
+"py", ""),
87 ("t2 sub subsub", None),
88 ("t2 sub subsub __init__"+os
.extsep
+"py", "print __name__, 'loading'; spam = 1"),
95 print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
100 from t2.sub import subsub
101 from t2.sub.subsub import spam
102 print sub.__name__, subsub.__name__
103 print sub.subsub.__name__
107 print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
114 ("t3 __init__"+os
.extsep
+"py", "print __name__, 'loading'"),
116 ("t3 sub __init__"+os
.extsep
+"py", ""),
117 ("t3 sub subsub", None),
118 ("t3 sub subsub __init__"+os
.extsep
+"py", "print __name__, 'loading'; spam = 1"),
122 print t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__
125 reload(t3.sub.subsub)
129 ("t4"+os
.extsep
+"py", "print 'THIS SHOULD NOT BE PRINTED (t4"+os
.extsep
+"py)'"),
131 ("t4 __init__"+os
.extsep
+"py", "print __name__, 'loading'"),
132 ("t4 sub"+os
.extsep
+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os
.extsep
+"py)'"),
134 ("t4 sub __init__"+os
.extsep
+"py", ""),
135 ("t4 sub subsub"+os
.extsep
+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os
.extsep
+"py)'"),
136 ("t4 sub subsub", None),
137 ("t4 sub subsub __init__"+os
.extsep
+"py", "print __name__, 'loading'; spam = 1"),
140 from t4.sub.subsub import *
141 print "t4.sub.subsub.spam =", spam
146 ("t5 __init__"+os
.extsep
+"py", "import t5.foo"),
147 ("t5 string"+os
.extsep
+"py", "print __name__, 'loading'; spam = 1"),
148 ("t5 foo"+os
.extsep
+"py",
149 "print __name__, 'loading'; import string; print string.spam"),
156 print fixdir(dir(t5))
157 print fixdir(dir(t5.foo))
158 print fixdir(dir(t5.string))
163 ("t6 __init__"+os
.extsep
+"py", "__all__ = ['spam', 'ham', 'eggs']"),
164 ("t6 spam"+os
.extsep
+"py", "print __name__, 'loading'"),
165 ("t6 ham"+os
.extsep
+"py", "print __name__, 'loading'"),
166 ("t6 eggs"+os
.extsep
+"py", "print __name__, 'loading'"),
170 print fixdir(dir(t6))
172 print fixdir(dir(t6))
177 ("t7"+os
.extsep
+"py", "print 'Importing t7"+os
.extsep
+"py'"),
179 ("t7 __init__"+os
.extsep
+"py", "print __name__, 'loading'"),
180 ("t7 sub"+os
.extsep
+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os
.extsep
+"py)'"),
182 ("t7 sub __init__"+os
.extsep
+"py", ""),
183 ("t7 sub subsub"+os
.extsep
+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os
.extsep
+"py)'"),
184 ("t7 sub subsub", None),
185 ("t7 sub subsub __init__"+os
.extsep
+"py", "print __name__, 'loading'; spam = 1"),
188 t7, sub, subsub = None, None, None
190 print fixdir(dir(tas))
192 from t7 import sub as subpar
193 print fixdir(dir(subpar))
194 verify(not t7 and not sub)
195 from t7.sub import subsub as subsubsub
196 print fixdir(dir(subsubsub))
197 verify(not t7 and not sub and not subsub)
198 from t7.sub.subsub import spam as ham
199 print "t7.sub.subsub.spam =", ham
200 verify(not t7 and not sub and not subsub)
206 ("x5", [], ("import a" + ".a"*400)),
207 ("x6", [], ("import a" + ".a"*499)),
208 ("x7", [], ("import a" + ".a"*500)),
209 ("x8", [], ("import a" + ".a"*1100)),
210 ("x9", [], ("import " + "a"*400)),
211 ("x10", [], ("import " + "a"*500)),
212 ("x11", [], ("import " + "a"*998)),
213 ("x12", [], ("import " + "a"*999)),
214 ("x13", [], ("import " + "a"*999)),
215 ("x14", [], ("import " + "a"*2000)),
218 """XXX Things to test
220 import package without __init__
221 import package with __init__
222 __init__ importing submodule
223 __init__ importing global module
224 __init__ defining variables
225 submodule importing other submodule
226 submodule importing global module
227 submodule import submodule via global name
228 from package import submodule
229 from package import subpackage
230 from package import variable (defined in __init__)
231 from package import * (defined in __init__)
237 if __name__
== '__main__':
239 if args
and args
[0] == '-q':
243 for name
, hier
, code
in tests
:
244 if args
and name
not in args
:
245 print "skipping test", name
247 print "running test", name
256 # This is what we expect
259 raise TestFailed
, "No ImportError exception on 'import sys.imp'"