Commit | Line | Data |
---|---|---|
b85894a3 MJ |
1 | # Copyright (c) 2016, Matt Layman |
2 | ||
3 | ||
4 | class Adapter(object): | |
5 | """The adapter processes a TAP test line and updates a unittest result. | |
6 | ||
7 | It is an alternative to TestCase to collect TAP results. | |
8 | """ | |
9 | failureException = AssertionError | |
10 | ||
11 | def __init__(self, filename, line): | |
12 | self._filename = filename | |
13 | self._line = line | |
14 | ||
15 | def shortDescription(self): | |
16 | """Get the short description for verbeose results.""" | |
17 | return self._line.description | |
18 | ||
19 | def __call__(self, result): | |
20 | """Update test result with the lines in the TAP file. | |
21 | ||
22 | Provide the interface that TestCase provides to a suite or runner. | |
23 | """ | |
24 | result.startTest(self) | |
25 | ||
26 | if self._line.skip: | |
27 | result.addSkip(None, self._line.directive.reason) | |
28 | return | |
29 | ||
30 | if self._line.todo: | |
31 | if self._line.ok: | |
32 | result.addUnexpectedSuccess(self) | |
33 | else: | |
34 | result.addExpectedFailure(self, (Exception, Exception(), None)) | |
35 | return | |
36 | ||
37 | if self._line.ok: | |
38 | result.addSuccess(self) | |
39 | else: | |
40 | self.addFailure(result) | |
41 | ||
42 | def addFailure(self, result): | |
43 | """Add a failure to the result.""" | |
44 | result.addFailure(self, (Exception, Exception(), None)) | |
45 | # Since TAP will not provide assertion data, clean up the assertion | |
46 | # section so it is not so spaced out. | |
47 | test, err = result.failures[-1] | |
48 | result.failures[-1] = (test, '') | |
49 | ||
50 | def __repr__(self): | |
51 | return '<file={filename}>'.format(filename=self._filename) |