blob: 14255185f063966d2952b5724086cab933c441ec [file] [log] [blame]
Jeremy Hyltonac148b52000-10-13 22:00:13 +00001"""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 compile
11
12import os
13import sys
14import test
15import tempfile
16
17def copy_test_suite():
18 dest = tempfile.mktemp()
19 os.mkdir(dest)
20 os.system("cp -r %s/* %s" % (test.__path__[0], dest))
21 print "Creating copy of test suite in", dest
22 return dest
23
Jeremy Hylton2a8ec792001-08-27 20:40:43 +000024def copy_library():
25 dest = tempfile.mktemp()
26 os.mkdir(dest)
27 libdir = os.path.split(test.__path__[0])[0]
28 os.system("cp -r %s/* %s" % (libdir, dest))
29 print "Creating copy of standard library in", dest
30 return dest
31
Jeremy Hyltonac148b52000-10-13 22:00:13 +000032def compile_files(dir):
Jeremy Hylton2a8ec792001-08-27 20:40:43 +000033 print "Compiling", dir
Jeremy Hyltonac148b52000-10-13 22:00:13 +000034 line_len = 10
35 for file in os.listdir(dir):
36 base, ext = os.path.splitext(file)
Jeremy Hylton2a8ec792001-08-27 20:40:43 +000037 if ext == '.py':
Jeremy Hyltonac148b52000-10-13 22:00:13 +000038 source = os.path.join(dir, file)
39 line_len = line_len + len(file) + 1
40 if line_len > 75:
41 print "\n\t",
42 line_len = len(source) + 9
43 print file,
Jeremy Hylton2a8ec792001-08-27 20:40:43 +000044 try:
45 compile(source)
46 except SyntaxError, err:
47 print err
48 continue
Jeremy Hyltonac148b52000-10-13 22:00:13 +000049 # make sure the .pyc file is not over-written
50 os.chmod(source + "c", 444)
Jeremy Hylton2a8ec792001-08-27 20:40:43 +000051 else:
52 path = os.path.join(dir, file)
53 if os.path.isdir(path):
54 print
55 compile_files(path)
Jeremy Hyltonac148b52000-10-13 22:00:13 +000056 print
57
Jeremy Hylton2a8ec792001-08-27 20:40:43 +000058def run_regrtest(lib_dir):
59 test_dir = os.path.join(lib_dir, "test")
Jeremy Hyltonac148b52000-10-13 22:00:13 +000060 os.chdir(test_dir)
Jeremy Hylton2a8ec792001-08-27 20:40:43 +000061 os.system("PYTHONPATH=%s %s -v regrtest.py -r" % (lib_dir, sys.executable))
Jeremy Hyltonac148b52000-10-13 22:00:13 +000062
63def cleanup(dir):
64 os.system("rm -rf %s" % dir)
65
66def main():
Jeremy Hylton2a8ec792001-08-27 20:40:43 +000067 lib_dir = copy_library()
68 compile_files(lib_dir)
69 run_regrtest(lib_dir)
70 raw_input("Cleanup?")
71 cleanup(lib_dir)
Jeremy Hyltonac148b52000-10-13 22:00:13 +000072
73if __name__ == "__main__":
74 main()