[lit] Move top-level execute code into Run object.
[oota-llvm.git] / utils / lit / lit / run.py
1 import time
2 import traceback
3
4 import lit.Test
5
6 class 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)