| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | # Test packages (dotted-name import) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-02-09 11:51:27 +00:00
										 |  |  | import sys, os, tempfile, traceback | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  | from os import mkdir, rmdir, extsep          # Can't test if these fail | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | del mkdir, rmdir | 
					
						
							| 
									
										
										
										
											2002-07-23 19:04:11 +00:00
										 |  |  | from test.test_support import verify, verbose, TestFailed | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Helpers to create and destroy hierarchies. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def mkhier(root, descr): | 
					
						
							| 
									
										
										
										
											2002-08-09 16:38:32 +00:00
										 |  |  |     if not os.path.isdir(root): | 
					
						
							|  |  |  |         mkdir(root) | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     for name, contents in descr: | 
					
						
							| 
									
										
										
										
											2001-02-09 11:51:27 +00:00
										 |  |  |         comps = name.split() | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         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() | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def mkdir(x): | 
					
						
							|  |  |  |     if verbose: print "mkdir", x | 
					
						
							|  |  |  |     os.mkdir(x) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def cleanout(root): | 
					
						
							|  |  |  |     names = os.listdir(root) | 
					
						
							|  |  |  |     for name in names: | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         fullname = os.path.join(root, name) | 
					
						
							|  |  |  |         if os.path.isdir(fullname) and not os.path.islink(fullname): | 
					
						
							|  |  |  |             cleanout(fullname) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             os.remove(fullname) | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     rmdir(root) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def rmdir(x): | 
					
						
							|  |  |  |     if verbose: print "rmdir", x | 
					
						
							|  |  |  |     os.rmdir(x) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-09-01 06:53:52 +00:00
										 |  |  | def fixdir(lst): | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         lst.remove('__builtins__') | 
					
						
							|  |  |  |     except ValueError: | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  |     return lst | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | # Helper to run a test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def runtest(hier, code): | 
					
						
							| 
									
										
										
										
											2002-08-09 16:38:32 +00:00
										 |  |  |     root = tempfile.mkdtemp() | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     mkhier(root, hier) | 
					
						
							|  |  |  |     savepath = sys.path[:] | 
					
						
							| 
									
										
										
										
											2002-08-14 15:41:26 +00:00
										 |  |  |     fd, fname = tempfile.mkstemp(text=True) | 
					
						
							| 
									
										
										
										
											2002-08-14 01:05:57 +00:00
										 |  |  |     os.write(fd, code) | 
					
						
							|  |  |  |     os.close(fd) | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         sys.path.insert(0, root) | 
					
						
							|  |  |  |         if verbose: print "sys.path =", sys.path | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2002-08-14 01:05:57 +00:00
										 |  |  |             execfile(fname, globals(), {}) | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         except: | 
					
						
							|  |  |  |             traceback.print_exc(file=sys.stdout) | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     finally: | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         sys.path[:] = savepath | 
					
						
							| 
									
										
										
										
											2002-08-14 01:05:57 +00:00
										 |  |  |         os.unlink(fname) | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             cleanout(root) | 
					
						
							|  |  |  |         except (os.error, IOError): | 
					
						
							|  |  |  |             pass | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Test descriptions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tests = [ | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t1", [("t1", None), ("t1 __init__"+os.extsep+"py", "")], "import t1"), | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t2", [ | 
					
						
							|  |  |  |     ("t2", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t2 __init__"+os.extsep+"py", "'doc for t2'; print __name__, 'loading'"), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t2 sub", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t2 sub __init__"+os.extsep+"py", ""), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t2 sub subsub", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t2 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 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() | 
					
						
							|  |  |  | """),
 | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t3", [ | 
					
						
							|  |  |  |     ("t3", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t3 __init__"+os.extsep+"py", "print __name__, 'loading'"), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t3 sub", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t3 sub __init__"+os.extsep+"py", ""), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t3 sub subsub", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t3 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | import t3.sub.subsub | 
					
						
							|  |  |  | print t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__ | 
					
						
							| 
									
										
										
										
											1997-09-06 19:58:53 +00:00
										 |  |  | reload(t3) | 
					
						
							|  |  |  | reload(t3.sub) | 
					
						
							|  |  |  | reload(t3.sub.subsub) | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | """),
 | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t4", [ | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t4"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)'"), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t4", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t4 __init__"+os.extsep+"py", "print __name__, 'loading'"), | 
					
						
							|  |  |  |     ("t4 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t4 sub", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t4 sub __init__"+os.extsep+"py", ""), | 
					
						
							|  |  |  |     ("t4 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ("t4 sub subsub", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t4 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"), | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | from t4.sub.subsub import * | 
					
						
							|  |  |  | print "t4.sub.subsub.spam =", spam | 
					
						
							|  |  |  | """),
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ("t5", [ | 
					
						
							|  |  |  |     ("t5", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t5 __init__"+os.extsep+"py", "import t5.foo"), | 
					
						
							|  |  |  |     ("t5 string"+os.extsep+"py", "print __name__, 'loading'; spam = 1"), | 
					
						
							|  |  |  |     ("t5 foo"+os.extsep+"py", | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |      "print __name__, 'loading'; import string; print string.spam"), | 
					
						
							|  |  |  |      ], | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											1997-09-07 06:12:11 +00:00
										 |  |  | import t5 | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | from t5 import * | 
					
						
							|  |  |  | print dir() | 
					
						
							|  |  |  | import t5 | 
					
						
							| 
									
										
										
										
											2000-09-01 06:53:52 +00:00
										 |  |  | print fixdir(dir(t5)) | 
					
						
							|  |  |  | print fixdir(dir(t5.foo)) | 
					
						
							|  |  |  | print fixdir(dir(t5.string)) | 
					
						
							| 
									
										
										
										
											1997-09-08 16:06:20 +00:00
										 |  |  | """),
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ("t6", [ | 
					
						
							|  |  |  |     ("t6", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t6 __init__"+os.extsep+"py", "__all__ = ['spam', 'ham', 'eggs']"), | 
					
						
							|  |  |  |     ("t6 spam"+os.extsep+"py", "print __name__, 'loading'"), | 
					
						
							|  |  |  |     ("t6 ham"+os.extsep+"py", "print __name__, 'loading'"), | 
					
						
							|  |  |  |     ("t6 eggs"+os.extsep+"py", "print __name__, 'loading'"), | 
					
						
							| 
									
										
										
										
											1997-09-08 16:06:20 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | import t6 | 
					
						
							| 
									
										
										
										
											2000-09-01 06:53:52 +00:00
										 |  |  | print fixdir(dir(t6)) | 
					
						
							| 
									
										
										
										
											1997-09-08 16:06:20 +00:00
										 |  |  | from t6 import * | 
					
						
							| 
									
										
										
										
											2000-09-01 06:53:52 +00:00
										 |  |  | print fixdir(dir(t6)) | 
					
						
							| 
									
										
										
										
											1997-09-08 16:06:20 +00:00
										 |  |  | print dir() | 
					
						
							| 
									
										
										
										
											2000-08-17 22:55:00 +00:00
										 |  |  | """),
 | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-17 22:55:00 +00:00
										 |  |  |     ("t7", [ | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t7"+os.extsep+"py", "print 'Importing t7"+os.extsep+"py'"), | 
					
						
							| 
									
										
										
										
											2000-08-17 22:55:00 +00:00
										 |  |  |     ("t7", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t7 __init__"+os.extsep+"py", "print __name__, 'loading'"), | 
					
						
							|  |  |  |     ("t7 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"), | 
					
						
							| 
									
										
										
										
											2000-08-17 22:55:00 +00:00
										 |  |  |     ("t7 sub", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t7 sub __init__"+os.extsep+"py", ""), | 
					
						
							|  |  |  |     ("t7 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"), | 
					
						
							| 
									
										
										
										
											2000-08-17 22:55:00 +00:00
										 |  |  |     ("t7 sub subsub", None), | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     ("t7 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"), | 
					
						
							| 
									
										
										
										
											2000-08-17 22:55:00 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | t7, sub, subsub = None, None, None | 
					
						
							|  |  |  | import t7 as tas | 
					
						
							| 
									
										
										
										
											2001-01-21 19:51:53 +00:00
										 |  |  | print fixdir(dir(tas)) | 
					
						
							| 
									
										
										
										
											2001-01-17 19:11:13 +00:00
										 |  |  | verify(not t7) | 
					
						
							| 
									
										
										
										
											2000-08-17 22:55:00 +00:00
										 |  |  | from t7 import sub as subpar | 
					
						
							| 
									
										
										
										
											2001-01-21 19:51:53 +00:00
										 |  |  | print fixdir(dir(subpar)) | 
					
						
							| 
									
										
										
										
											2001-01-17 19:11:13 +00:00
										 |  |  | verify(not t7 and not sub) | 
					
						
							| 
									
										
										
										
											2000-08-17 22:55:00 +00:00
										 |  |  | from t7.sub import subsub as subsubsub | 
					
						
							| 
									
										
										
										
											2001-01-21 19:51:53 +00:00
										 |  |  | print fixdir(dir(subsubsub)) | 
					
						
							| 
									
										
										
										
											2001-01-17 19:11:13 +00:00
										 |  |  | verify(not t7 and not sub and not subsub) | 
					
						
							| 
									
										
										
										
											2000-08-17 22:55:00 +00:00
										 |  |  | from t7.sub.subsub import spam as ham | 
					
						
							|  |  |  | print "t7.sub.subsub.spam =", ham | 
					
						
							| 
									
										
										
										
											2001-01-17 19:11:13 +00:00
										 |  |  | verify(not t7 and not sub and not subsub) | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | """),
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-09-07 06:12:11 +00:00
										 |  |  | args = [] | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     args = sys.argv[1:] | 
					
						
							|  |  |  |     if args and args[0] == '-q': | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         verbose = 0 | 
					
						
							|  |  |  |         del args[0] | 
					
						
							| 
									
										
										
										
											1997-09-07 06:12:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  | for name, hier, code in tests: | 
					
						
							| 
									
										
										
										
											1997-09-07 06:12:11 +00:00
										 |  |  |     if args and name not in args: | 
					
						
							| 
									
										
										
										
											1998-03-26 19:42:58 +00:00
										 |  |  |         print "skipping test", name | 
					
						
							|  |  |  |         continue | 
					
						
							| 
									
										
										
										
											1997-09-06 18:42:57 +00:00
										 |  |  |     print "running test", name | 
					
						
							|  |  |  |     runtest(hier, code) | 
					
						
							| 
									
										
										
										
											1998-05-19 15:09:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Test | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import imp | 
					
						
							|  |  |  | try: | 
					
						
							|  |  |  |     import sys.imp | 
					
						
							|  |  |  | except ImportError: | 
					
						
							|  |  |  |     # This is what we expect | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | else: | 
					
						
							|  |  |  |     raise TestFailed, "No ImportError exception on 'import sys.imp'" |