from glob import glob
import os
import sys
import traceback
def run_test(test_name, out_name, err_name):
out_file = open(out_name, "w")
err_file = open(err_name, "w")
sys.stdout = out_file
sys.stderr = err_file
result = 1
try:
try:
__import__(test_name)
except KeyboardInterrupt:
raise
except SystemExit, e:
sys.stderr.write("Exit code %s\n" % e)
result = 0
except:
traceback.print_exc()
result = 0
finally:
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
out_file.close()
err_file.close()
return result
def check_result(out_name, out2_name):
return read_file(out_name) == read_file(out2_name)
def read_file(name):
f = open(name, "rU")
data = f.read()
f.close()
return data
def remove(name):
try:
os.unlink(name)
except:
pass
def run():
if len(sys.argv) > 1:
tests = sys.argv[1:]
else:
tests = glob("test?*.py")
for test_py in tests:
test_name = os.path.splitext(test_py)[0]
test_out = test_name + ".out"
test_out2 = test_name + ".out2"
test_err = test_name + ".err"
if os.path.exists(test_out):
print "%s:" % test_name,
sys.stdout.flush()
succeeded = run_test(test_name, test_out2, test_err)
if succeeded:
succeeded = check_result(test_out, test_out2)
if succeeded:
print "passed"
else:
print "failed *****"
else:
print "error *****"
else:
print "creating %s:" % test_out,
sys.stdout.flush()
succeeded = run_test(test_name, test_out, test_err)
if succeeded:
print "succeeded"
else:
print "error *****"
if succeeded:
remove(test_out2)
remove(test_err)
if __name__ == "__main__":
run()
syntax highlighted by Code2HTML, v. 0.9.1