summaryrefslogtreecommitdiff
path: root/utils/lit/lit/Test.py
blob: db2e0324651e74bbe6c68bdcc0ed24c04a5845d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import os

# Test results.

class TestResult:
    def __init__(self, name, isFailure):
        self.name = name
        self.isFailure = isFailure

PASS        = TestResult('PASS', False)
XFAIL       = TestResult('XFAIL', False)
FAIL        = TestResult('FAIL', True)
XPASS       = TestResult('XPASS', True)
UNRESOLVED  = TestResult('UNRESOLVED', True)
UNSUPPORTED = TestResult('UNSUPPORTED', False)

# Test classes.

class TestFormat:
    """TestFormat - Test information provider."""

    def __init__(self, name):
        self.name = name

class TestSuite:
    """TestSuite - Information on a group of tests.

    A test suite groups together a set of logically related tests.
    """

    def __init__(self, name, source_root, exec_root, config):
        self.name = name
        self.source_root = source_root
        self.exec_root = exec_root
        # The test suite configuration.
        self.config = config

    def getSourcePath(self, components):
        return os.path.join(self.source_root, *components)

    def getExecPath(self, components):
        return os.path.join(self.exec_root, *components)

class Test:
    """Test - Information on a single test instance."""

    def __init__(self, suite, path_in_suite, config):
        self.suite = suite
        self.path_in_suite = path_in_suite
        self.config = config
        # The test result code, once complete.
        self.result = None
        # Any additional output from the test, once complete.
        self.output = None
        # The wall time to execute this test, if timing and once complete.
        self.elapsed = None
        # The repeat index of this test, or None.
        self.index = None

    def copyWithIndex(self, index):
        import copy
        res = copy.copy(self)
        res.index = index
        return res

    def setResult(self, result, output, elapsed):
        assert self.result is None, "Test result already set!"
        self.result = result
        self.output = output
        self.elapsed = elapsed

    def getFullName(self):
        return self.suite.config.name + ' :: ' + '/'.join(self.path_in_suite)

    def getSourcePath(self):
        return self.suite.getSourcePath(self.path_in_suite)

    def getExecPath(self):
        return self.suite.getExecPath(self.path_in_suite)