blob: ad9cc1a4383f73efa6596f986c4d79468ed9e1fc [file] [log] [blame]
Guido van Rossum6c612421997-09-06 18:42:57 +00001# Test packages (dotted-name import)
2
Eric S. Raymondfc170b12001-02-09 11:51:27 +00003import sys, os, tempfile, traceback
Guido van Rossume2ae77b2001-10-24 20:42:55 +00004from os import mkdir, rmdir, extsep # Can't test if these fail
Guido van Rossum6c612421997-09-06 18:42:57 +00005del mkdir, rmdir
Barry Warsaw04f357c2002-07-23 19:04:11 +00006from test.test_support import verify, verbose, TestFailed
Guido van Rossum6c612421997-09-06 18:42:57 +00007
8# Helpers to create and destroy hierarchies.
9
10def mkhier(root, descr):
Guido van Rossum3b0a3292002-08-09 16:38:32 +000011 if not os.path.isdir(root):
12 mkdir(root)
Guido van Rossum6c612421997-09-06 18:42:57 +000013 for name, contents in descr:
Eric S. Raymondfc170b12001-02-09 11:51:27 +000014 comps = name.split()
Guido van Rossum41360a41998-03-26 19:42:58 +000015 fullname = root
16 for c in comps:
17 fullname = os.path.join(fullname, c)
18 if contents is None:
19 mkdir(fullname)
20 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000021 if verbose: print("write", fullname)
Guido van Rossum41360a41998-03-26 19:42:58 +000022 f = open(fullname, "w")
23 f.write(contents)
24 if contents and contents[-1] != '\n':
25 f.write('\n')
26 f.close()
Guido van Rossum6c612421997-09-06 18:42:57 +000027
28def mkdir(x):
Guido van Rossumbe19ed72007-02-09 05:37:30 +000029 if verbose: print("mkdir", x)
Guido van Rossum6c612421997-09-06 18:42:57 +000030 os.mkdir(x)
31
32def cleanout(root):
33 names = os.listdir(root)
34 for name in names:
Guido van Rossum41360a41998-03-26 19:42:58 +000035 fullname = os.path.join(root, name)
36 if os.path.isdir(fullname) and not os.path.islink(fullname):
37 cleanout(fullname)
38 else:
39 os.remove(fullname)
Guido van Rossum6c612421997-09-06 18:42:57 +000040 rmdir(root)
41
42def rmdir(x):
Guido van Rossumbe19ed72007-02-09 05:37:30 +000043 if verbose: print("rmdir", x)
Guido van Rossum6c612421997-09-06 18:42:57 +000044 os.rmdir(x)
45
Barry Warsaw3a9d0612000-09-01 06:53:52 +000046def fixdir(lst):
47 try:
48 lst.remove('__builtins__')
49 except ValueError:
50 pass
51 return lst
52
Guido van Rossum6c612421997-09-06 18:42:57 +000053# Helper to run a test
54
55def runtest(hier, code):
Guido van Rossum3b0a3292002-08-09 16:38:32 +000056 root = tempfile.mkdtemp()
Guido van Rossum6c612421997-09-06 18:42:57 +000057 mkhier(root, hier)
58 savepath = sys.path[:]
Tim Peters04490bf2002-08-14 15:41:26 +000059 fd, fname = tempfile.mkstemp(text=True)
Tim Peters632a4fb2002-08-14 01:05:57 +000060 os.write(fd, code)
61 os.close(fd)
Guido van Rossum6c612421997-09-06 18:42:57 +000062 try:
Guido van Rossum41360a41998-03-26 19:42:58 +000063 sys.path.insert(0, root)
Guido van Rossumbe19ed72007-02-09 05:37:30 +000064 if verbose: print("sys.path =", sys.path)
Guido van Rossum41360a41998-03-26 19:42:58 +000065 try:
Tim Peters632a4fb2002-08-14 01:05:57 +000066 execfile(fname, globals(), {})
Guido van Rossum41360a41998-03-26 19:42:58 +000067 except:
68 traceback.print_exc(file=sys.stdout)
Guido van Rossum6c612421997-09-06 18:42:57 +000069 finally:
Guido van Rossum41360a41998-03-26 19:42:58 +000070 sys.path[:] = savepath
Tim Peters632a4fb2002-08-14 01:05:57 +000071 os.unlink(fname)
Guido van Rossum41360a41998-03-26 19:42:58 +000072 try:
73 cleanout(root)
74 except (os.error, IOError):
75 pass
Guido van Rossum6c612421997-09-06 18:42:57 +000076
77# Test descriptions
78
79tests = [
Guido van Rossume2ae77b2001-10-24 20:42:55 +000080 ("t1", [("t1", None), ("t1 __init__"+os.extsep+"py", "")], "import t1"),
Fred Drake004d5e62000-10-23 17:22:08 +000081
Guido van Rossum6c612421997-09-06 18:42:57 +000082 ("t2", [
83 ("t2", None),
Georg Brandl88fc6642007-02-09 21:28:07 +000084 ("t2 __init__"+os.extsep+"py", "'doc for t2'; print(__name__, 'loading')"),
Guido van Rossum6c612421997-09-06 18:42:57 +000085 ("t2 sub", None),
Guido van Rossume2ae77b2001-10-24 20:42:55 +000086 ("t2 sub __init__"+os.extsep+"py", ""),
Guido van Rossum6c612421997-09-06 18:42:57 +000087 ("t2 sub subsub", None),
Georg Brandl88fc6642007-02-09 21:28:07 +000088 ("t2 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
Guido van Rossum6c612421997-09-06 18:42:57 +000089 ],
90"""
91import t2
Georg Brandl88fc6642007-02-09 21:28:07 +000092print(t2.__doc__)
Guido van Rossum6c612421997-09-06 18:42:57 +000093import t2.sub
94import t2.sub.subsub
Georg Brandl88fc6642007-02-09 21:28:07 +000095print(t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__)
Guido van Rossum6c612421997-09-06 18:42:57 +000096import t2
97from t2 import *
Georg Brandl88fc6642007-02-09 21:28:07 +000098print(dir())
Guido van Rossum6c612421997-09-06 18:42:57 +000099from t2 import sub
100from t2.sub import subsub
101from t2.sub.subsub import spam
Georg Brandl88fc6642007-02-09 21:28:07 +0000102print(sub.__name__, subsub.__name__)
103print(sub.subsub.__name__)
104print(dir())
Guido van Rossum6c612421997-09-06 18:42:57 +0000105import t2.sub
106import t2.sub.subsub
Georg Brandl88fc6642007-02-09 21:28:07 +0000107print(t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__)
Guido van Rossum6c612421997-09-06 18:42:57 +0000108from t2 import *
Georg Brandl88fc6642007-02-09 21:28:07 +0000109print(dir())
Guido van Rossum6c612421997-09-06 18:42:57 +0000110"""),
Fred Drake004d5e62000-10-23 17:22:08 +0000111
Guido van Rossum6c612421997-09-06 18:42:57 +0000112 ("t3", [
113 ("t3", None),
Georg Brandl88fc6642007-02-09 21:28:07 +0000114 ("t3 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
Guido van Rossum6c612421997-09-06 18:42:57 +0000115 ("t3 sub", None),
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000116 ("t3 sub __init__"+os.extsep+"py", ""),
Guido van Rossum6c612421997-09-06 18:42:57 +0000117 ("t3 sub subsub", None),
Georg Brandl88fc6642007-02-09 21:28:07 +0000118 ("t3 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
Guido van Rossum6c612421997-09-06 18:42:57 +0000119 ],
120"""
121import t3.sub.subsub
Georg Brandl88fc6642007-02-09 21:28:07 +0000122print(t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__)
Guido van Rossum81da02e1997-09-06 19:58:53 +0000123reload(t3)
124reload(t3.sub)
125reload(t3.sub.subsub)
Guido van Rossum6c612421997-09-06 18:42:57 +0000126"""),
Fred Drake004d5e62000-10-23 17:22:08 +0000127
Guido van Rossum6c612421997-09-06 18:42:57 +0000128 ("t4", [
Georg Brandl88fc6642007-02-09 21:28:07 +0000129 ("t4"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)')"),
Guido van Rossum6c612421997-09-06 18:42:57 +0000130 ("t4", None),
Georg Brandl88fc6642007-02-09 21:28:07 +0000131 ("t4 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
132 ("t4 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
Guido van Rossum6c612421997-09-06 18:42:57 +0000133 ("t4 sub", None),
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000134 ("t4 sub __init__"+os.extsep+"py", ""),
Georg Brandl88fc6642007-02-09 21:28:07 +0000135 ("t4 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
Guido van Rossum6c612421997-09-06 18:42:57 +0000136 ("t4 sub subsub", None),
Georg Brandl88fc6642007-02-09 21:28:07 +0000137 ("t4 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
Guido van Rossum6c612421997-09-06 18:42:57 +0000138 ],
139"""
140from t4.sub.subsub import *
Georg Brandl88fc6642007-02-09 21:28:07 +0000141print("t4.sub.subsub.spam =", spam)
Guido van Rossum6c612421997-09-06 18:42:57 +0000142"""),
143
144 ("t5", [
145 ("t5", None),
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000146 ("t5 __init__"+os.extsep+"py", "import t5.foo"),
Georg Brandl88fc6642007-02-09 21:28:07 +0000147 ("t5 string"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000148 ("t5 foo"+os.extsep+"py",
Georg Brandl88fc6642007-02-09 21:28:07 +0000149 "print(__name__, 'loading'); from . import string; print(string.spam)"),
Guido van Rossum6c612421997-09-06 18:42:57 +0000150 ],
151"""
Guido van Rossum10887a31997-09-07 06:12:11 +0000152import t5
Guido van Rossum6c612421997-09-06 18:42:57 +0000153from t5 import *
Georg Brandl88fc6642007-02-09 21:28:07 +0000154print(dir())
Guido van Rossum6c612421997-09-06 18:42:57 +0000155import t5
Georg Brandl88fc6642007-02-09 21:28:07 +0000156print(fixdir(dir(t5)))
157print(fixdir(dir(t5.foo)))
158print(fixdir(dir(t5.string)))
Guido van Rossum6c612421997-09-06 18:42:57 +0000159"""),
160
Guido van Rossumc8bf8841997-09-08 16:06:20 +0000161 ("t6", [
162 ("t6", None),
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000163 ("t6 __init__"+os.extsep+"py", "__all__ = ['spam', 'ham', 'eggs']"),
Georg Brandl88fc6642007-02-09 21:28:07 +0000164 ("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')"),
Guido van Rossumc8bf8841997-09-08 16:06:20 +0000167 ],
168"""
169import t6
Georg Brandl88fc6642007-02-09 21:28:07 +0000170print(fixdir(dir(t6)))
Guido van Rossumc8bf8841997-09-08 16:06:20 +0000171from t6 import *
Georg Brandl88fc6642007-02-09 21:28:07 +0000172print(fixdir(dir(t6)))
173print(dir())
Guido van Rossumc8bf8841997-09-08 16:06:20 +0000174"""),
Fred Drake004d5e62000-10-23 17:22:08 +0000175
Thomas Wouters52152252000-08-17 22:55:00 +0000176 ("t7", [
Georg Brandl88fc6642007-02-09 21:28:07 +0000177 ("t7"+os.extsep+"py", "print('Importing t7"+os.extsep+"py')"),
Thomas Wouters52152252000-08-17 22:55:00 +0000178 ("t7", None),
Georg Brandl88fc6642007-02-09 21:28:07 +0000179 ("t7 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
180 ("t7 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
Thomas Wouters52152252000-08-17 22:55:00 +0000181 ("t7 sub", None),
Guido van Rossume2ae77b2001-10-24 20:42:55 +0000182 ("t7 sub __init__"+os.extsep+"py", ""),
Georg Brandl88fc6642007-02-09 21:28:07 +0000183 ("t7 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
Thomas Wouters52152252000-08-17 22:55:00 +0000184 ("t7 sub subsub", None),
Georg Brandl88fc6642007-02-09 21:28:07 +0000185 ("t7 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
Thomas Wouters52152252000-08-17 22:55:00 +0000186 ],
187"""
188t7, sub, subsub = None, None, None
189import t7 as tas
Georg Brandl88fc6642007-02-09 21:28:07 +0000190print(fixdir(dir(tas)))
Marc-André Lemburg36619082001-01-17 19:11:13 +0000191verify(not t7)
Thomas Wouters52152252000-08-17 22:55:00 +0000192from t7 import sub as subpar
Georg Brandl88fc6642007-02-09 21:28:07 +0000193print(fixdir(dir(subpar)))
Marc-André Lemburg36619082001-01-17 19:11:13 +0000194verify(not t7 and not sub)
Thomas Wouters52152252000-08-17 22:55:00 +0000195from t7.sub import subsub as subsubsub
Georg Brandl88fc6642007-02-09 21:28:07 +0000196print(fixdir(dir(subsubsub)))
Marc-André Lemburg36619082001-01-17 19:11:13 +0000197verify(not t7 and not sub and not subsub)
Thomas Wouters52152252000-08-17 22:55:00 +0000198from t7.sub.subsub import spam as ham
Georg Brandl88fc6642007-02-09 21:28:07 +0000199print("t7.sub.subsub.spam =", ham)
Marc-André Lemburg36619082001-01-17 19:11:13 +0000200verify(not t7 and not sub and not subsub)
Thomas Wouters52152252000-08-17 22:55:00 +0000201"""),
Guido van Rossumc8bf8841997-09-08 16:06:20 +0000202
Guido van Rossum6c612421997-09-06 18:42:57 +0000203]
204
205nontests = [
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)),
216]
217
218"""XXX Things to test
219
220import package without __init__
221import package with __init__
222__init__ importing submodule
223__init__ importing global module
224__init__ defining variables
225submodule importing other submodule
226submodule importing global module
227submodule import submodule via global name
228from package import submodule
229from package import subpackage
230from package import variable (defined in __init__)
231from package import * (defined in __init__)
232"""
233
234# Run the tests
235
Guido van Rossum10887a31997-09-07 06:12:11 +0000236args = []
237if __name__ == '__main__':
238 args = sys.argv[1:]
239 if args and args[0] == '-q':
Guido van Rossum41360a41998-03-26 19:42:58 +0000240 verbose = 0
241 del args[0]
Guido van Rossum10887a31997-09-07 06:12:11 +0000242
Guido van Rossum6c612421997-09-06 18:42:57 +0000243for name, hier, code in tests:
Guido van Rossum10887a31997-09-07 06:12:11 +0000244 if args and name not in args:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000245 print("skipping test", name)
Guido van Rossum41360a41998-03-26 19:42:58 +0000246 continue
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000247 print("running test", name)
Guido van Rossum6c612421997-09-06 18:42:57 +0000248 runtest(hier, code)
Guido van Rossum5f4fb911998-05-19 15:09:42 +0000249
250# Test
251import sys
252import imp
253try:
254 import sys.imp
255except ImportError:
256 # This is what we expect
257 pass
258else:
259 raise TestFailed, "No ImportError exception on 'import sys.imp'"