| """Run the Python regression test using the compiler |
| |
| This test runs the standard Python test suite using bytecode generated |
| by this compiler instead of by the builtin compiler. |
| |
| The regression test is run with the interpreter in verbose mode so |
| that import problems can be observed easily. |
| """ |
| |
| from compiler import compileFile |
| |
| import os |
| import sys |
| import test |
| import tempfile |
| |
| def copy_test_suite(): |
| dest = tempfile.mktemp() |
| os.mkdir(dest) |
| os.system("cp -r %s/* %s" % (test.__path__[0], dest)) |
| print "Creating copy of test suite in", dest |
| return dest |
| |
| def copy_library(): |
| dest = tempfile.mktemp() |
| os.mkdir(dest) |
| libdir = os.path.split(test.__path__[0])[0] |
| print "Found standard library in", libdir |
| print "Creating copy of standard library in", dest |
| os.system("cp -r %s/* %s" % (libdir, dest)) |
| return dest |
| |
| def compile_files(dir): |
| print "Compiling", dir, "\n\t", |
| line_len = 10 |
| for file in os.listdir(dir): |
| base, ext = os.path.splitext(file) |
| if ext == '.py': |
| source = os.path.join(dir, file) |
| line_len = line_len + len(file) + 1 |
| if line_len > 75: |
| print "\n\t", |
| line_len = len(source) + 9 |
| print file, |
| try: |
| compileFile(source) |
| except SyntaxError, err: |
| print err |
| continue |
| # make sure the .pyc file is not over-written |
| os.chmod(source + "c", 444) |
| else: |
| path = os.path.join(dir, file) |
| if os.path.isdir(path): |
| print |
| print |
| compile_files(path) |
| print "\t", |
| line_len = 10 |
| print |
| |
| def run_regrtest(lib_dir): |
| test_dir = os.path.join(lib_dir, "test") |
| os.chdir(test_dir) |
| os.system("PYTHONPATH=%s %s -v regrtest.py" % (lib_dir, sys.executable)) |
| |
| def cleanup(dir): |
| os.system("rm -rf %s" % dir) |
| |
| def main(): |
| lib_dir = copy_library() |
| compile_files(lib_dir) |
| run_regrtest(lib_dir) |
| raw_input("Cleanup?") |
| cleanup(lib_dir) |
| |
| if __name__ == "__main__": |
| main() |