# Copyright (c) 2012 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os import re import sys import cmd_helper import constants import logging import shutil import tempfile from test_package import TestPackage class TestPackageApk(TestPackage): """A helper class for running APK-based native tests. Args: adb: ADB interface the tests are using. device: Device to run the tests. test_suite: A specific test suite to run, empty to run all. timeout: Timeout for each test. rebaseline: Whether or not to run tests in isolation and update the filter. performance_test: Whether or not performance test(s). cleanup_test_files: Whether or not to cleanup test files on device. tool: Name of the Valgrind tool. dump_debug_info: A debug_info object. """ # The stdout.txt path is determined by: # testing/android/java/src/org/chromium/native_test/ # ChromeNativeTestActivity.java APK_STDOUT_FILE = '/sdcard/native_tests/stdout.txt' def __init__(self, adb, device, test_suite, timeout, rebaseline, performance_test, cleanup_test_files, tool, dump_debug_info): TestPackage.__init__(self, adb, device, test_suite, timeout, rebaseline, performance_test, cleanup_test_files, tool, dump_debug_info) def _CreateTestRunnerScript(self, options): command_line_file = tempfile.NamedTemporaryFile() # GTest expects argv[0] to be the executable path. command_line_file.write(self.test_suite_basename + ' ' + options) command_line_file.flush() self.adb.PushIfNeeded(command_line_file.name, constants.TEST_DATA_DIR + '/chrome-native-tests-command-line') def _GetGTestReturnCode(self): return None def GetAllTests(self): """Returns a list of all tests available in the test suite.""" self._CreateTestRunnerScript('--gtest_list_tests') try: self.tool.SetupEnvironment() # Clear and start monitoring logcat. self.adb.StartMonitoringLogcat(clear=True, timeout=30 * self.tool.GetTimeoutScale()) self.adb.RunShellCommand( 'am start -n ' 'org.chromium.native_test/' 'org.chromium.native_test.ChromeNativeTestActivity') # Wait for native test to complete. self.adb.WaitForLogMatch(re.compile('<