You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.3 KiB
86 lines
2.3 KiB
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
red = '\033[91m'
|
|
green = '\033[92m'
|
|
bold = '\033[1m'
|
|
reset = '\033[0m'
|
|
prefix_pass = bold + "[" + green + "PASS" + reset + bold + "]" + reset
|
|
prefix_fail = bold + "[" + red + "FAIL" + reset + bold + "]" + reset
|
|
|
|
|
|
def indent(text, spaces=4):
|
|
text = text.decode("utf-8")
|
|
prefix = " "
|
|
return "\n".join([prefix + line for line in text.split("\n")])
|
|
|
|
|
|
def run_test(test_name, path):
|
|
os.chdir(path)
|
|
process = subprocess.Popen(
|
|
["/bin/sh", "run.sh"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
(output, _) = process.communicate()
|
|
|
|
if os.path.exists("expected_fail"):
|
|
with open("expected_fail", "rb") as f:
|
|
expected_output = f.read()
|
|
if process.returncode == 0:
|
|
print("{} {}: unexpected success:".format(prefix_fail, test_name))
|
|
print("")
|
|
print(" Expected:")
|
|
print(indent(expected_output))
|
|
print(" Actual:")
|
|
print(indent(output))
|
|
return False
|
|
elif not output.endswith(expected_output):
|
|
print("{} {}: expected output mismatch".format(
|
|
prefix_fail, test_name))
|
|
print("")
|
|
print(" Expected:")
|
|
print(indent(expected_output))
|
|
print(" Actual:")
|
|
print(indent(output))
|
|
return False
|
|
elif process.returncode != 0:
|
|
print("{} {}: unexpected failure:".format(prefix_fail, test_name))
|
|
print("")
|
|
print(indent(output))
|
|
return False
|
|
|
|
print("{} {}".format(prefix_pass, test_name))
|
|
return True
|
|
|
|
|
|
def usage():
|
|
print("Usage: run_tests.py [-f]")
|
|
print(" -f\t\tdon't run slow tests")
|
|
sys.exit(0)
|
|
|
|
|
|
root_dir = os.path.dirname(os.path.realpath(__file__))
|
|
test_dir = os.path.join(root_dir, "tests")
|
|
tests = os.listdir(test_dir)
|
|
run_slow = True
|
|
|
|
if len(sys.argv) > 2:
|
|
usage()
|
|
elif len(sys.argv) == 2:
|
|
if sys.argv[1] != "-f":
|
|
usage()
|
|
run_slow = False
|
|
|
|
success = True
|
|
for test in sorted(tests):
|
|
if test.startswith("slow") and not run_slow:
|
|
continue
|
|
path = os.path.join(test_dir, test)
|
|
if not os.path.isdir(path):
|
|
continue
|
|
if not run_test(test, path):
|
|
success = False
|
|
|
|
sys.exit(0 if success else 1)
|