run.py revision 8c59003cc382e4b2fb15b267aa2d356e869a89cc
1import time
2import traceback
3
4import lit.Test
5
6class Run(object):
7    """
8    This class represents a concrete, configured testing run.
9    """
10
11    def __init__(self, lit_config, tests):
12        self.lit_config = lit_config
13        self.tests = tests
14
15    def execute_test(self, test):
16        result = None
17        startTime = time.time()
18        try:
19            result = test.config.test_format.execute(test, self.lit_config)
20
21            # Support deprecated result from execute() which returned the result
22            # code and additional output as a tuple.
23            if isinstance(result, tuple):
24                code, output = result
25                result = lit.Test.Result(code, output)
26            elif not isinstance(result, lit.Test.Result):
27                raise ValueError("unexpected result from test execution")
28        except KeyboardInterrupt:
29            raise
30        except:
31            if self.lit_config.debug:
32                raise
33            output = 'Exception during script execution:\n'
34            output += traceback.format_exc()
35            output += '\n'
36            result = lit.Test.Result(lit.Test.UNRESOLVED, output)
37        result.elapsed = time.time() - startTime
38
39        test.setResult(result)
40