Files
cappuccino/Tests/Manual/CompilationTests/run.py
T

84 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python
import os
import commands
import re
PATH = os.path.abspath(os.path.join(os.path.dirname(__file__)))
def get_tests_cases():
ret = []
for filename in os.listdir("TestCases"):
ret.append("TestCases/%s" % filename)
return ret
# return ["TestCases/2.j"]
def get_expected_output(test_case):
f = open(test_case)
content = f.readlines();
f.close()
status = int(content[0].replace("// Expected output: ", ""))
recording = False
output = []
for line in content:
if "END_EXPECTED" in line:
recording = False
break;
if "START_EXPECTED" in line:
recording = True
continue
if recording:
output.append(line)
output = "".join(output);
output = output.replace("[__PATH__]", "%s/%s" % (PATH, test_case))
output = cleanup_output(output)
return (status, output)
def get_actual_output(test_case):
status, output = commands.getstatusoutput("objj %s" % test_case)
output = cleanup_output(output)
return (status, output)
def cleanup_output(output):
if not output:
return ""
output = output.replace(" ", "")
output = output.replace("\n", "")
output = output.replace("[0m", "")
output = re.sub('\d*offile\[unknown\]', '', output)
return re.sub('[^\s!-~]', '', output)
if __name__ == "__main__":
for test in get_tests_cases():
expected_status, expected_output = get_expected_output(test)
actual_status, actual_output = get_actual_output(test)
print "########################################"
print "Testing %s" % test
errored = False
if expected_status != actual_status:
errored = True
print " Error in %s: Status code is different: expected %d, actual %d" % (test, expected_status, actual_status)
if expected_output != actual_output:
errored = True
print " Error in %s. Outputs are different" % test
print " EXPECTED: %s" % expected_output
print " ACTUAL: %s" % actual_output
if not errored:
print " OK"