dvander@195: # vim: set ts=2 sw=4 tw=99 ft=python et: dvander@195: import os dvander@195: import os.path dvander@195: dvander@195: class Result: dvander@195: def __init__(self, ok, out, err, code, timeout, message): dvander@195: self.ok = ok dvander@195: self.out = out dvander@195: self.err = err dvander@195: self.code = code dvander@195: self.timeout = timeout dvander@195: self.message = message dvander@195: dvander@195: class Test: dvander@195: def __init__(self, path, name, type): dvander@195: self.path = path dvander@195: self.name = name dvander@195: self.type = type dvander@195: dvander@195: def cmd(self): dvander@195: return os.path.join(self.path, self.name + '.sp') dvander@195: dvander@195: def compare(self, text): dvander@195: ok = True dvander@195: message = None dvander@229: with open(os.path.join(self.path, self.name + '.' + self.type), 'rt') as f: dvander@229: text = str.replace(text, '\r', '') dvander@195: lines = text.split('\n') dvander@195: i = 0 dvander@195: for line in f: dvander@195: line = line.rstrip('\r\n') dvander@195: if line != lines[i]: dvander@195: message = 'Got "' + lines[i] + '", expected "' + line + '"' dvander@195: ok = False dvander@195: break dvander@195: i += 1 dvander@195: return (ok, message) dvander@195: dvander@195: def check(self, out, err, code, timeout): dvander@195: if not out: dvander@195: out = '' dvander@195: if not err: dvander@195: err = '' dvander@195: if self.type == 'err': dvander@195: if code == 0: dvander@195: message = 'Expected failure, got success' dvander@195: ok = False dvander@195: else: dvander@195: (ok, message) = self.compare(err) dvander@195: elif self.type == 'out': dvander@195: if code != 0: dvander@195: message = 'Expected success, got failure (code: ' + str(code) + ')' dvander@195: ok = False dvander@195: else: dvander@195: (ok, message) = self.compare(out) dvander@195: dvander@195: if timeout: dvander@214: ok = False dvander@195: message = 'timeout' dvander@195: dvander@195: return Result(ok, out, err, code, timeout, message)