mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 02:15:10 +00:00 
			
		
		
		
	 88fc6646d1
			
		
	
	
		88fc6646d1
		
	
	
	
	
		
			
			* Fix some docstrings and one Print -> print.
* Fix test_{class,code,descrtut,dis,extcall,parser,popen,pkg,subprocess,syntax,traceback}.
  These were the ones that generated code with a print statement.
  In most remaining failing tests there's an issue with the soft space.
		
	
			
		
			
				
	
	
		
			259 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			259 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Test packages (dotted-name import)
 | |
| 
 | |
| import sys, os, tempfile, traceback
 | |
| from os import mkdir, rmdir, extsep          # Can't test if these fail
 | |
| del mkdir, rmdir
 | |
| from test.test_support import verify, verbose, TestFailed
 | |
| 
 | |
| # Helpers to create and destroy hierarchies.
 | |
| 
 | |
| def mkhier(root, descr):
 | |
|     if not os.path.isdir(root):
 | |
|         mkdir(root)
 | |
|     for name, contents in descr:
 | |
|         comps = name.split()
 | |
|         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()
 | |
| 
 | |
| def mkdir(x):
 | |
|     if verbose: print("mkdir", x)
 | |
|     os.mkdir(x)
 | |
| 
 | |
| def cleanout(root):
 | |
|     names = os.listdir(root)
 | |
|     for name in names:
 | |
|         fullname = os.path.join(root, name)
 | |
|         if os.path.isdir(fullname) and not os.path.islink(fullname):
 | |
|             cleanout(fullname)
 | |
|         else:
 | |
|             os.remove(fullname)
 | |
|     rmdir(root)
 | |
| 
 | |
| def rmdir(x):
 | |
|     if verbose: print("rmdir", x)
 | |
|     os.rmdir(x)
 | |
| 
 | |
| def fixdir(lst):
 | |
|     try:
 | |
|         lst.remove('__builtins__')
 | |
|     except ValueError:
 | |
|         pass
 | |
|     return lst
 | |
| 
 | |
| # Helper to run a test
 | |
| 
 | |
| def runtest(hier, code):
 | |
|     root = tempfile.mkdtemp()
 | |
|     mkhier(root, hier)
 | |
|     savepath = sys.path[:]
 | |
|     fd, fname = tempfile.mkstemp(text=True)
 | |
|     os.write(fd, code)
 | |
|     os.close(fd)
 | |
|     try:
 | |
|         sys.path.insert(0, root)
 | |
|         if verbose: print("sys.path =", sys.path)
 | |
|         try:
 | |
|             execfile(fname, globals(), {})
 | |
|         except:
 | |
|             traceback.print_exc(file=sys.stdout)
 | |
|     finally:
 | |
|         sys.path[:] = savepath
 | |
|         os.unlink(fname)
 | |
|         try:
 | |
|             cleanout(root)
 | |
|         except (os.error, IOError):
 | |
|             pass
 | |
| 
 | |
| # Test descriptions
 | |
| 
 | |
| tests = [
 | |
|     ("t1", [("t1", None), ("t1 __init__"+os.extsep+"py", "")], "import t1"),
 | |
| 
 | |
|     ("t2", [
 | |
|     ("t2", None),
 | |
|     ("t2 __init__"+os.extsep+"py", "'doc for t2'; print(__name__, 'loading')"),
 | |
|     ("t2 sub", None),
 | |
|     ("t2 sub __init__"+os.extsep+"py", ""),
 | |
|     ("t2 sub subsub", None),
 | |
|     ("t2 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | |
|     ],
 | |
| """
 | |
| 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())
 | |
| """),
 | |
| 
 | |
|     ("t3", [
 | |
|     ("t3", None),
 | |
|     ("t3 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
 | |
|     ("t3 sub", None),
 | |
|     ("t3 sub __init__"+os.extsep+"py", ""),
 | |
|     ("t3 sub subsub", None),
 | |
|     ("t3 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | |
|     ],
 | |
| """
 | |
| import t3.sub.subsub
 | |
| print(t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__)
 | |
| reload(t3)
 | |
| reload(t3.sub)
 | |
| reload(t3.sub.subsub)
 | |
| """),
 | |
| 
 | |
|     ("t4", [
 | |
|     ("t4"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)')"),
 | |
|     ("t4", None),
 | |
|     ("t4 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
 | |
|     ("t4 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
 | |
|     ("t4 sub", None),
 | |
|     ("t4 sub __init__"+os.extsep+"py", ""),
 | |
|     ("t4 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
 | |
|     ("t4 sub subsub", None),
 | |
|     ("t4 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | |
|     ],
 | |
| """
 | |
| from t4.sub.subsub import *
 | |
| print("t4.sub.subsub.spam =", spam)
 | |
| """),
 | |
| 
 | |
|     ("t5", [
 | |
|     ("t5", None),
 | |
|     ("t5 __init__"+os.extsep+"py", "import t5.foo"),
 | |
|     ("t5 string"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | |
|     ("t5 foo"+os.extsep+"py",
 | |
|      "print(__name__, 'loading'); from . import string; print(string.spam)"),
 | |
|      ],
 | |
| """
 | |
| import t5
 | |
| from t5 import *
 | |
| print(dir())
 | |
| import t5
 | |
| print(fixdir(dir(t5)))
 | |
| print(fixdir(dir(t5.foo)))
 | |
| print(fixdir(dir(t5.string)))
 | |
| """),
 | |
| 
 | |
|     ("t6", [
 | |
|     ("t6", None),
 | |
|     ("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')"),
 | |
|     ],
 | |
| """
 | |
| import t6
 | |
| print(fixdir(dir(t6)))
 | |
| from t6 import *
 | |
| print(fixdir(dir(t6)))
 | |
| print(dir())
 | |
| """),
 | |
| 
 | |
|     ("t7", [
 | |
|     ("t7"+os.extsep+"py", "print('Importing t7"+os.extsep+"py')"),
 | |
|     ("t7", None),
 | |
|     ("t7 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
 | |
|     ("t7 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
 | |
|     ("t7 sub", None),
 | |
|     ("t7 sub __init__"+os.extsep+"py", ""),
 | |
|     ("t7 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
 | |
|     ("t7 sub subsub", None),
 | |
|     ("t7 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
 | |
|     ],
 | |
| """
 | |
| t7, sub, subsub = None, None, None
 | |
| import t7 as tas
 | |
| print(fixdir(dir(tas)))
 | |
| verify(not t7)
 | |
| from t7 import sub as subpar
 | |
| print(fixdir(dir(subpar)))
 | |
| verify(not t7 and not sub)
 | |
| from t7.sub import subsub as subsubsub
 | |
| print(fixdir(dir(subsubsub)))
 | |
| verify(not t7 and not sub and not subsub)
 | |
| from t7.sub.subsub import spam as ham
 | |
| print("t7.sub.subsub.spam =", ham)
 | |
| verify(not t7 and not sub and not subsub)
 | |
| """),
 | |
| 
 | |
| ]
 | |
| 
 | |
| 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
 | |
| 
 | |
| args = []
 | |
| if __name__ == '__main__':
 | |
|     args = sys.argv[1:]
 | |
|     if args and args[0] == '-q':
 | |
|         verbose = 0
 | |
|         del args[0]
 | |
| 
 | |
| for name, hier, code in tests:
 | |
|     if args and name not in args:
 | |
|         print("skipping test", name)
 | |
|         continue
 | |
|     print("running test", name)
 | |
|     runtest(hier, code)
 | |
| 
 | |
| # 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'"
 |