|
dvander@195
|
1 |
# vim: set ts=2 sw=4 tw=99 ft=python et: |
|
dvander@195
|
2 |
import os |
|
dvander@195
|
3 |
import os.path |
|
dvander@195
|
4 |
|
|
dvander@195
|
5 |
class Result: |
|
dvander@195
|
6 |
def __init__(self, ok, out, err, code, timeout, message): |
|
dvander@195
|
7 |
self.ok = ok |
|
dvander@195
|
8 |
self.out = out |
|
dvander@195
|
9 |
self.err = err |
|
dvander@195
|
10 |
self.code = code |
|
dvander@195
|
11 |
self.timeout = timeout |
|
dvander@195
|
12 |
self.message = message |
|
dvander@195
|
13 |
|
|
dvander@195
|
14 |
class Test: |
|
dvander@195
|
15 |
def __init__(self, path, name, type): |
|
dvander@195
|
16 |
self.path = path |
|
dvander@195
|
17 |
self.name = name |
|
dvander@195
|
18 |
self.type = type |
|
dvander@195
|
19 |
|
|
dvander@195
|
20 |
def cmd(self): |
|
dvander@195
|
21 |
return os.path.join(self.path, self.name + '.sp') |
|
dvander@195
|
22 |
|
|
dvander@195
|
23 |
def compare(self, text): |
|
dvander@195
|
24 |
ok = True |
|
dvander@195
|
25 |
message = None |
|
dvander@195
|
26 |
with open(os.path.join(self.path, self.name + '.' + self.type)) as f: |
|
dvander@195
|
27 |
lines = text.split('\n') |
|
dvander@195
|
28 |
i = 0 |
|
dvander@195
|
29 |
for line in f: |
|
dvander@195
|
30 |
line = line.rstrip('\r\n') |
|
dvander@195
|
31 |
if line != lines[i]: |
|
dvander@195
|
32 |
message = 'Got "' + lines[i] + '", expected "' + line + '"' |
|
dvander@195
|
33 |
ok = False |
|
dvander@195
|
34 |
break |
|
dvander@195
|
35 |
i += 1 |
|
dvander@195
|
36 |
return (ok, message) |
|
dvander@195
|
37 |
|
|
dvander@195
|
38 |
def check(self, out, err, code, timeout): |
|
dvander@195
|
39 |
if not out: |
|
dvander@195
|
40 |
out = '' |
|
dvander@195
|
41 |
if not err: |
|
dvander@195
|
42 |
err = '' |
|
dvander@195
|
43 |
if self.type == 'err': |
|
dvander@195
|
44 |
if code == 0: |
|
dvander@195
|
45 |
message = 'Expected failure, got success' |
|
dvander@195
|
46 |
ok = False |
|
dvander@195
|
47 |
else: |
|
dvander@195
|
48 |
(ok, message) = self.compare(err) |
|
dvander@195
|
49 |
elif self.type == 'out': |
|
dvander@195
|
50 |
if code != 0: |
|
dvander@195
|
51 |
message = 'Expected success, got failure (code: ' + str(code) + ')' |
|
dvander@195
|
52 |
ok = False |
|
dvander@195
|
53 |
else: |
|
dvander@195
|
54 |
(ok, message) = self.compare(out) |
|
dvander@195
|
55 |
|
|
dvander@195
|
56 |
if timeout: |
|
dvander@195
|
57 |
ok = false |
|
dvander@195
|
58 |
message = 'timeout' |
|
dvander@195
|
59 |
|
|
dvander@195
|
60 |
return Result(ok, out, err, code, timeout, message) |