1e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoimport os
2e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
3e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Test results.
4e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
5e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoclass TestResult:
6e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def __init__(self, name, isFailure):
7e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.name = name
8e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.isFailure = isFailure
9e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
10e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoPASS        = TestResult('PASS', False)
11e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoXFAIL       = TestResult('XFAIL', False)
12e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoFAIL        = TestResult('FAIL', True)
13e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoXPASS       = TestResult('XPASS', True)
14e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoUNRESOLVED  = TestResult('UNRESOLVED', True)
15e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoUNSUPPORTED = TestResult('UNSUPPORTED', False)
16e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
17e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Test classes.
18e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
19e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoclass TestFormat:
20e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    """TestFormat - Test information provider."""
21e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
22e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def __init__(self, name):
23e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.name = name
24e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
25e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoclass TestSuite:
26e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    """TestSuite - Information on a group of tests.
27e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
28e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    A test suite groups together a set of logically related tests.
29e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    """
30e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
31e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def __init__(self, name, source_root, exec_root, config):
32e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.name = name
33e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.source_root = source_root
34e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.exec_root = exec_root
35e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        # The test suite configuration.
36e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.config = config
37e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
38e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def getSourcePath(self, components):
39e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        return os.path.join(self.source_root, *components)
40e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
41e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def getExecPath(self, components):
42e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        return os.path.join(self.exec_root, *components)
43e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
44e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoclass Test:
45e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    """Test - Information on a single test instance."""
46e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
47e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def __init__(self, suite, path_in_suite, config):
48e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.suite = suite
49e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.path_in_suite = path_in_suite
50e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.config = config
51e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        # The test result code, once complete.
52e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.result = None
53e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        # Any additional output from the test, once complete.
54e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.output = None
55e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        # The wall time to execute this test, if timing and once complete.
56e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.elapsed = None
57e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        # The repeat index of this test, or None.
58e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.index = None
59e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
60e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def copyWithIndex(self, index):
61e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        import copy
62e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        res = copy.copy(self)
63e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        res.index = index
64e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        return res
65e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
66e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def setResult(self, result, output, elapsed):
67e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        assert self.result is None, "Test result already set!"
68e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.result = result
69e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.output = output
70e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        self.elapsed = elapsed
71e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
72e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def getFullName(self):
73e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        return self.suite.config.name + ' :: ' + '/'.join(self.path_in_suite)
74e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
75e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def getSourcePath(self):
76e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        return self.suite.getSourcePath(self.path_in_suite)
77e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao
78e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao    def getExecPath(self):
79e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao        return self.suite.getExecPath(self.path_in_suite)
80