Index: build/android/pylib/local/device/local_device_gtest_run.py |
diff --git a/build/android/pylib/local/device/local_device_gtest_run.py b/build/android/pylib/local/device/local_device_gtest_run.py |
index 72961708288aa54ea3b630a069d8788ebd00a2b3..6679962e0617636355af2fec417c4677a3b7cde8 100644 |
--- a/build/android/pylib/local/device/local_device_gtest_run.py |
+++ b/build/android/pylib/local/device/local_device_gtest_run.py |
@@ -7,6 +7,7 @@ import itertools |
import logging |
import os |
import posixpath |
+import tempfile |
from devil.android import device_errors |
from devil.android import device_temp_file |
@@ -19,8 +20,6 @@ from pylib.local import local_test_server_spawner |
from pylib.local.device import local_device_environment |
from pylib.local.device import local_device_test_run |
-_COMMAND_LINE_FLAGS_SUPPORTED = True |
- |
_MAX_INLINE_FLAGS_LENGTH = 50 # Arbitrarily chosen. |
_EXTRA_COMMAND_LINE_FILE = ( |
'org.chromium.native_test.NativeTest.CommandLineFile') |
@@ -116,6 +115,9 @@ class _ApkDelegate(object): |
device.Install(self._apk_helper, reinstall=True, |
permissions=self._permissions) |
+ def ResultsDirectory(self, device): |
+ return device.GetApplicationDataDirectory(self._package) |
+ |
def Run(self, test, device, flags=None, **kwargs): |
extras = dict(self._extras) |
@@ -175,6 +177,11 @@ class _ExeDelegate(object): |
device.PushChangedFiles([(self._host_dist_dir, self._device_dist_dir)], |
delete_device_stale=True) |
+ def ResultsDirectory(self, device): |
+ # pylint: disable=no-self-use |
+ # pylint: disable=unused-argument |
+ return constants.TEST_EXECUTABLE_DIR |
+ |
def Run(self, test, device, flags=None, **kwargs): |
tool = self._test_run.GetTool(device).GetTestWrapper() |
if tool: |
@@ -341,20 +348,40 @@ class LocalDeviceGtestRun(local_device_test_run.LocalDeviceTestRun): |
# Run the test. |
timeout = (self._test_instance.shard_timeout |
* self.GetTool(device).GetTimeoutScale()) |
- output = self._delegate.Run( |
- test, device, flags=self._test_instance.test_arguments, |
- timeout=timeout, retries=0) |
- for s in self._servers[str(device)]: |
- s.Reset() |
- if self._test_instance.app_files: |
- self._delegate.PullAppFiles(device, self._test_instance.app_files, |
- self._test_instance.app_file_dir) |
- if not self._env.skip_clear_data: |
- self._delegate.Clear(device) |
- |
- # Parse the output. |
- # TODO(jbudorick): Transition test scripts away from parsing stdout. |
- results = gtest_test_instance.ParseGTestOutput(output) |
+ with tempfile.NamedTemporaryFile(suffix='.xml') as host_tmp_results_file: |
+ with device_temp_file.DeviceTempFile( |
+ adb=device.adb, |
+ dir=self._delegate.ResultsDirectory(device), |
+ suffix='.xml') as device_tmp_results_file: |
+ |
+ flags = self._test_instance.test_arguments or '' |
+ if self._test_instance.enable_xml_result_parsing: |
+ flags += ' --gtest_output=xml:%s' % device_tmp_results_file.name |
+ |
+ output = self._delegate.Run( |
+ test, device, flags=flags, |
+ timeout=timeout, retries=0) |
+ |
+ if self._test_instance.enable_xml_result_parsing: |
+ device.PullFile( |
+ device_tmp_results_file.name, |
+ host_tmp_results_file.name) |
+ |
+ for s in self._servers[str(device)]: |
+ s.Reset() |
+ if self._test_instance.app_files: |
+ self._delegate.PullAppFiles(device, self._test_instance.app_files, |
+ self._test_instance.app_file_dir) |
+ if not self._env.skip_clear_data: |
+ self._delegate.Clear(device) |
+ |
+ # Parse the output. |
+ # TODO(jbudorick): Transition test scripts away from parsing stdout. |
+ if self._test_instance.enable_xml_result_parsing: |
+ with open(host_tmp_results_file.name) as xml_results_file: |
+ results = gtest_test_instance.ParseGTestXML(xml_results_file.read()) |
+ else: |
+ results = gtest_test_instance.ParseGTestOutput(output) |
# Check whether there are any crashed testcases. |
self._crashes.update(r.GetName() for r in results |