python-2.5.2/win32/Lib/test/test_pkg.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 # Test packages (dotted-name import)
       
     2 
       
     3 import sys, os, tempfile, traceback
       
     4 from os import mkdir, rmdir, extsep          # Can't test if these fail
       
     5 del mkdir, rmdir
       
     6 from test.test_support import verify, verbose, TestFailed
       
     7 
       
     8 # Helpers to create and destroy hierarchies.
       
     9 
       
    10 def mkhier(root, descr):
       
    11     if not os.path.isdir(root):
       
    12         mkdir(root)
       
    13     for name, contents in descr:
       
    14         comps = name.split()
       
    15         fullname = root
       
    16         for c in comps:
       
    17             fullname = os.path.join(fullname, c)
       
    18         if contents is None:
       
    19             mkdir(fullname)
       
    20         else:
       
    21             if verbose: print "write", fullname
       
    22             f = open(fullname, "w")
       
    23             f.write(contents)
       
    24             if contents and contents[-1] != '\n':
       
    25                 f.write('\n')
       
    26             f.close()
       
    27 
       
    28 def mkdir(x):
       
    29     if verbose: print "mkdir", x
       
    30     os.mkdir(x)
       
    31 
       
    32 def cleanout(root):
       
    33     names = os.listdir(root)
       
    34     for name in names:
       
    35         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)
       
    40     rmdir(root)
       
    41 
       
    42 def rmdir(x):
       
    43     if verbose: print "rmdir", x
       
    44     os.rmdir(x)
       
    45 
       
    46 def fixdir(lst):
       
    47     try:
       
    48         lst.remove('__builtins__')
       
    49     except ValueError:
       
    50         pass
       
    51     return lst
       
    52 
       
    53 # Helper to run a test
       
    54 
       
    55 def runtest(hier, code):
       
    56     root = tempfile.mkdtemp()
       
    57     mkhier(root, hier)
       
    58     savepath = sys.path[:]
       
    59     fd, fname = tempfile.mkstemp(text=True)
       
    60     os.write(fd, code)
       
    61     os.close(fd)
       
    62     try:
       
    63         sys.path.insert(0, root)
       
    64         if verbose: print "sys.path =", sys.path
       
    65         try:
       
    66             execfile(fname, globals(), {})
       
    67         except:
       
    68             traceback.print_exc(file=sys.stdout)
       
    69     finally:
       
    70         sys.path[:] = savepath
       
    71         os.unlink(fname)
       
    72         try:
       
    73             cleanout(root)
       
    74         except (os.error, IOError):
       
    75             pass
       
    76 
       
    77 # Test descriptions
       
    78 
       
    79 tests = [
       
    80     ("t1", [("t1", None), ("t1 __init__"+os.extsep+"py", "")], "import t1"),
       
    81 
       
    82     ("t2", [
       
    83     ("t2", None),
       
    84     ("t2 __init__"+os.extsep+"py", "'doc for t2'; print __name__, 'loading'"),
       
    85     ("t2 sub", None),
       
    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"),
       
    89     ],
       
    90 """
       
    91 import t2
       
    92 print t2.__doc__
       
    93 import t2.sub
       
    94 import t2.sub.subsub
       
    95 print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
       
    96 import t2
       
    97 from t2 import *
       
    98 print dir()
       
    99 from t2 import sub
       
   100 from t2.sub import subsub
       
   101 from t2.sub.subsub import spam
       
   102 print sub.__name__, subsub.__name__
       
   103 print sub.subsub.__name__
       
   104 print dir()
       
   105 import t2.sub
       
   106 import t2.sub.subsub
       
   107 print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
       
   108 from t2 import *
       
   109 print dir()
       
   110 """),
       
   111 
       
   112     ("t3", [
       
   113     ("t3", None),
       
   114     ("t3 __init__"+os.extsep+"py", "print __name__, 'loading'"),
       
   115     ("t3 sub", None),
       
   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"),
       
   119     ],
       
   120 """
       
   121 import t3.sub.subsub
       
   122 print t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__
       
   123 reload(t3)
       
   124 reload(t3.sub)
       
   125 reload(t3.sub.subsub)
       
   126 """),
       
   127 
       
   128     ("t4", [
       
   129     ("t4"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)'"),
       
   130     ("t4", None),
       
   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)'"),
       
   133     ("t4 sub", None),
       
   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"),
       
   138     ],
       
   139 """
       
   140 from t4.sub.subsub import *
       
   141 print "t4.sub.subsub.spam =", spam
       
   142 """),
       
   143 
       
   144     ("t5", [
       
   145     ("t5", None),
       
   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"),
       
   150      ],
       
   151 """
       
   152 import t5
       
   153 from t5 import *
       
   154 print dir()
       
   155 import t5
       
   156 print fixdir(dir(t5))
       
   157 print fixdir(dir(t5.foo))
       
   158 print fixdir(dir(t5.string))
       
   159 """),
       
   160 
       
   161     ("t6", [
       
   162     ("t6", None),
       
   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'"),
       
   167     ],
       
   168 """
       
   169 import t6
       
   170 print fixdir(dir(t6))
       
   171 from t6 import *
       
   172 print fixdir(dir(t6))
       
   173 print dir()
       
   174 """),
       
   175 
       
   176     ("t7", [
       
   177     ("t7"+os.extsep+"py", "print 'Importing t7"+os.extsep+"py'"),
       
   178     ("t7", None),
       
   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)'"),
       
   181     ("t7 sub", None),
       
   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"),
       
   186     ],
       
   187 """
       
   188 t7, sub, subsub = None, None, None
       
   189 import t7 as tas
       
   190 print fixdir(dir(tas))
       
   191 verify(not t7)
       
   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)
       
   201 """),
       
   202 
       
   203 ]
       
   204 
       
   205 nontests = [
       
   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 
       
   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__)
       
   232 """
       
   233 
       
   234 # Run the tests
       
   235 
       
   236 args = []
       
   237 if __name__ == '__main__':
       
   238     args = sys.argv[1:]
       
   239     if args and args[0] == '-q':
       
   240         verbose = 0
       
   241         del args[0]
       
   242 
       
   243 for name, hier, code in tests:
       
   244     if args and name not in args:
       
   245         print "skipping test", name
       
   246         continue
       
   247     print "running test", name
       
   248     runtest(hier, code)
       
   249 
       
   250 # Test
       
   251 import sys
       
   252 import imp
       
   253 try:
       
   254     import sys.imp
       
   255 except ImportError:
       
   256     # This is what we expect
       
   257     pass
       
   258 else:
       
   259     raise TestFailed, "No ImportError exception on 'import sys.imp'"