1"""Run the Python regression test using the compiler 2 3This test runs the standard Python test suite using bytecode generated 4by this compiler instead of by the builtin compiler. 5 6The regression test is run with the interpreter in verbose mode so 7that import problems can be observed easily. 8""" 9 10from compiler import compileFile 11 12import os 13import sys 14import test 15import tempfile 16 17def copy_test_suite(): 18 dest = tempfile.mkdtemp() 19 os.system("cp -r %s/* %s" % (test.__path__[0], dest)) 20 print "Creating copy of test suite in", dest 21 return dest 22 23def copy_library(): 24 dest = tempfile.mkdtemp() 25 libdir = os.path.split(test.__path__[0])[0] 26 print "Found standard library in", libdir 27 print "Creating copy of standard library in", dest 28 os.system("cp -r %s/* %s" % (libdir, dest)) 29 return dest 30 31def compile_files(dir): 32 print "Compiling", dir, "\n\t", 33 line_len = 10 34 for file in os.listdir(dir): 35 base, ext = os.path.splitext(file) 36 if ext == '.py': 37 source = os.path.join(dir, file) 38 line_len = line_len + len(file) + 1 39 if line_len > 75: 40 print "\n\t", 41 line_len = len(source) + 9 42 print file, 43 try: 44 compileFile(source) 45 except SyntaxError, err: 46 print err 47 continue 48 # make sure the .pyc file is not over-written 49 os.chmod(source + "c", 444) 50 elif file == 'CVS': 51 pass 52 else: 53 path = os.path.join(dir, file) 54 if os.path.isdir(path): 55 print 56 print 57 compile_files(path) 58 print "\t", 59 line_len = 10 60 print 61 62def run_regrtest(lib_dir): 63 test_dir = os.path.join(lib_dir, "test") 64 os.chdir(test_dir) 65 os.system("PYTHONPATH=%s %s -v regrtest.py" % (lib_dir, sys.executable)) 66 67def cleanup(dir): 68 os.system("rm -rf %s" % dir) 69 70def main(): 71 lib_dir = copy_library() 72 compile_files(lib_dir) 73 run_regrtest(lib_dir) 74 raw_input("Cleanup?") 75 cleanup(lib_dir) 76 77if __name__ == "__main__": 78 main() 79