"""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.mkdtemp() | |
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.mkdtemp() | |
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 as err: | |
print err | |
continue | |
# make sure the .pyc file is not over-written | |
os.chmod(source + "c", 444) | |
elif file == 'CVS': | |
pass | |
else: | |
path = os.path.join(dir, file) | |
if os.path.isdir(path): | |
compile_files(path) | |
print "\t", | |
line_len = 10 | |
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 raw_input(prompt): | |
sys.stdout.write(prompt) | |
sys.stdout.flush() | |
return sys.stdin.readline() | |
def main(): | |
lib_dir = copy_library() | |
compile_files(lib_dir) | |
run_regrtest(lib_dir) | |
raw_input("Cleanup?") | |
cleanup(lib_dir) | |
if __name__ == "__main__": | |
main() |