#! /usr/bin/python3 import sys import glob import os.path import subprocess from PIL import Image from PIL import ImageChops def imgequal(ref, out): ref = Image.open(ref) out = Image.open(out) diff = ImageChops.difference(ref, out) return diff.getbbox() is None def runtest(program, refout=None, refimg=None): st = subprocess.run("./fx92.py --quiet --save=/tmp/fx92-test.bmp".split() + [program], stdout=subprocess.PIPE) if st.returncode != 0: print(" -> Execution FAILED!") return 0 print(" Execution completed.") success = True if refout is not None: with open(refout, "rb") as fp: refout = fp.read() if st.stdout == refout: print(" Output is correct.") else: print(" -> Output is incorrect!") print(" ref:", repr(refout)) print(" out:", repr(st.stdout)) success = False if refimg is not None: if imgequal(refimg, "/tmp/fx92-test.bmp"): print(" Image is correct.") else: print(" -> Image is incorrect!") success = False return success def main(): paths = glob.glob("tests/*.txt") print("Found {} tests.".format(len(paths))) total = 0 passed = 0 for t in paths: print("\n{}:".format(t)) refout = t[:-4] + ".out" refout = refout if os.path.isfile(refout) else None refimg = t[:-4] + ".png" refimg = refimg if os.path.isfile(refimg) else None passed += runtest(t, refout=refout, refimg=refimg) total += 1 if passed < total: print("\nWarning, some tests failed!") return 1 return 0 if __name__ == "__main__": sys.exit(main())