| Index: build/android/pylib/host_driven/python_test_caller.py
|
| diff --git a/build/android/pylib/host_driven/python_test_caller.py b/build/android/pylib/host_driven/python_test_caller.py
|
| index 7800ad621b467a2cee1ede768356498a2ce41cac..fc53d7725f9bb8291eab00accd67fa128e8168d1 100644
|
| --- a/build/android/pylib/host_driven/python_test_caller.py
|
| +++ b/build/android/pylib/host_driven/python_test_caller.py
|
| @@ -8,8 +8,35 @@
|
| import logging
|
| import sys
|
| import time
|
| +import traceback
|
|
|
| -from pylib.base.test_result import TestResults
|
| +from pylib.base import base_test_result
|
| +from pylib.instrumentation import test_result
|
| +
|
| +
|
| +class PythonExceptionTestResult(test_result.InstrumentationTestResult):
|
| + """Helper class for creating a test result from python exception."""
|
| +
|
| + def __init__(self, test_name, start_date_ms, exc_info):
|
| + """Constructs an PythonExceptionTestResult object.
|
| +
|
| + Args:
|
| + test_name: name of the test which raised an exception.
|
| + start_date_ms: the starting time for the test.
|
| + exc_info: exception info, ostensibly from sys.exc_info().
|
| + """
|
| + exc_type, exc_value, exc_traceback = exc_info
|
| + trace_info = ''.join(traceback.format_exception(exc_type, exc_value,
|
| + exc_traceback))
|
| + log_msg = 'Exception:\n' + trace_info
|
| + duration_ms = (int(time.time()) * 1000) - start_date_ms
|
| +
|
| + super(PythonExceptionTestResult, self).__init__(
|
| + 'PythonWrapper#' + test_name,
|
| + base_test_result.ResultType.FAIL,
|
| + start_date_ms,
|
| + duration_ms,
|
| + log=str(exc_type) + ' ' + log_msg)
|
|
|
|
|
| def CallPythonTest(test, options):
|
| @@ -35,8 +62,8 @@ def CallPythonTest(test, options):
|
| options: Options to use for setting up tests.
|
|
|
| Returns:
|
| - A TestResults object which contains any results produced by the test or, in
|
| - the case of a Python exception, the Python exception info.
|
| + A TestRunResults object which contains any results produced by the test or,
|
| + in the case of a Python exception, the Python exception info.
|
| """
|
|
|
| start_date_ms = int(time.time()) * 1000
|
| @@ -52,11 +79,13 @@ def CallPythonTest(test, options):
|
| # Tests whose SetUp() method has failed are likely to fail, or at least
|
| # yield invalid results.
|
| exc_info = sys.exc_info()
|
| - return TestResults.FromPythonException(test.qualified_name, start_date_ms,
|
| - exc_info)
|
| + results = base_test_result.TestRunResults()
|
| + results.AddResult(PythonExceptionTestResult(
|
| + test.qualified_name, start_date_ms, exc_info))
|
| + return results
|
|
|
| try:
|
| - result = test.Run()
|
| + results = test.Run()
|
| except Exception:
|
| # Setting this lets TearDown() avoid stomping on our stack trace from Run()
|
| # should TearDown() also raise an exception.
|
| @@ -64,8 +93,9 @@ def CallPythonTest(test, options):
|
| logging.exception('Caught exception while trying to run test: ' +
|
| test.qualified_name)
|
| exc_info = sys.exc_info()
|
| - result = TestResults.FromPythonException(test.qualified_name, start_date_ms,
|
| - exc_info)
|
| + results = base_test_result.TestRunResults()
|
| + results.AddResult(PythonExceptionTestResult(
|
| + test.qualified_name, start_date_ms, exc_info))
|
|
|
| try:
|
| test.TearDown()
|
| @@ -78,7 +108,8 @@ def CallPythonTest(test, options):
|
| # trade-off: if the test fails, this will mask any problem with TearDown
|
| # until the test is fixed.
|
| exc_info = sys.exc_info()
|
| - result = TestResults.FromPythonException(test.qualified_name,
|
| - start_date_ms, exc_info)
|
| + results = base_test_result.TestRunResults()
|
| + results.AddResult(PythonExceptionTestResult(
|
| + test.qualified_name, start_date_ms, exc_info))
|
|
|
| - return result
|
| + return results
|
|
|