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.
85 lines
2.3 KiB
85 lines
2.3 KiB
#!/usr/bin/env python2 |
|
|
|
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)
|
|
|