| Index: build/android/pylib/gtest/test_package_apk.py
|
| diff --git a/build/android/pylib/gtest/test_package_apk.py b/build/android/pylib/gtest/test_package_apk.py
|
| index 1ea0f8892451f6d5f3d0d84acc8f3bda26adce8d..84dd7bd8e746f0396e0ed49e9e9ded64fad081a5 100644
|
| --- a/build/android/pylib/gtest/test_package_apk.py
|
| +++ b/build/android/pylib/gtest/test_package_apk.py
|
| @@ -12,6 +12,7 @@ import tempfile
|
| import time
|
|
|
| from pylib import android_commands
|
| +from pylib import cmd_helper
|
| from pylib import constants
|
| from pylib import pexpect
|
| from pylib.android_commands import errors
|
| @@ -22,41 +23,36 @@ from test_package import TestPackage
|
| class TestPackageApk(TestPackage):
|
| """A helper class for running APK-based native tests."""
|
|
|
| - def __init__(self, adb, device, suite_path_full, tool, test_apk_package_name,
|
| - test_activity_name, command_line_file):
|
| + def __init__(self, suite_name, build_type):
|
| """
|
| Args:
|
| - adb: ADB interface the tests are using.
|
| - device: Device to run the tests.
|
| - suite_path_full: Absolute path to a specific test suite to run,
|
| - empty to run all.
|
| - Ex: '/foo/bar/base_unittests-debug.apk', for which
|
| - self.suite_path_full = '/foo/bar/base_unittests-debug.apk'
|
| - self.suite_path = '/foo/bar/base_unittests-debug'
|
| - self.suite_basename = 'base_unittests'
|
| - self.suite_dirname = '/foo/bar'
|
| - tool: Name of the Valgrind tool.
|
| - test_apk_package_name: Apk package name for tests running in APKs.
|
| - test_activity_name: Test activity to invoke for APK tests.
|
| - command_line_file: Filename to use to pass arguments to tests.
|
| + suite_name: Name of the test suite (e.g. base_unittests).
|
| + build_type: 'Release' or 'Debug'.
|
| """
|
| - TestPackage.__init__(self, adb, device, suite_path_full, tool)
|
| - self._test_apk_package_name = test_apk_package_name
|
| - self._test_activity_name = test_activity_name
|
| - self._command_line_file = command_line_file
|
| + TestPackage.__init__(self, suite_name)
|
| + product_dir = os.path.join(cmd_helper.OutDirectory.get(), build_type)
|
| + if suite_name == 'content_browsertests':
|
| + self.suite_path = os.path.join(
|
| + product_dir, 'apks', '%s.apk' % suite_name)
|
| + self._test_apk_package_name = constants.BROWSERTEST_TEST_PACKAGE_NAME
|
| + self._test_activity_name = constants.BROWSERTEST_TEST_ACTIVITY_NAME
|
| + self._command_line_file = constants.BROWSERTEST_COMMAND_LINE_FILE
|
| + else:
|
| + self.suite_path = os.path.join(
|
| + product_dir, '%s_apk' % suite_name, '%s-debug.apk' % suite_name)
|
| + self._test_apk_package_name = constants.GTEST_TEST_PACKAGE_NAME
|
| + self._test_activity_name = constants.GTEST_TEST_ACTIVITY_NAME
|
| + self._command_line_file = constants.GTEST_COMMAND_LINE_FILE
|
|
|
| - def _CreateCommandLineFileOnDevice(self, options):
|
| + def _CreateCommandLineFileOnDevice(self, adb, options):
|
| command_line_file = tempfile.NamedTemporaryFile()
|
| # GTest expects argv[0] to be the executable path.
|
| - command_line_file.write(self.suite_basename + ' ' + options)
|
| + command_line_file.write(self.suite_name + ' ' + options)
|
| command_line_file.flush()
|
| - self.adb.PushIfNeeded(command_line_file.name,
|
| + adb.PushIfNeeded(command_line_file.name,
|
| constants.TEST_EXECUTABLE_DIR + '/' +
|
| self._command_line_file)
|
|
|
| - def _GetGTestReturnCode(self):
|
| - return None
|
| -
|
| def _GetFifo(self):
|
| # The test.fifo path is determined by:
|
| # testing/android/java/src/org/chromium/native_test/
|
| @@ -64,54 +60,49 @@ class TestPackageApk(TestPackage):
|
| # testing/android/native_test_launcher.cc
|
| return '/data/data/' + self._test_apk_package_name + '/files/test.fifo'
|
|
|
| - def _ClearFifo(self):
|
| - self.adb.RunShellCommand('rm -f ' + self._GetFifo())
|
| + def _ClearFifo(self, adb):
|
| + adb.RunShellCommand('rm -f ' + self._GetFifo())
|
|
|
| - def _WatchFifo(self, timeout, logfile=None):
|
| + def _WatchFifo(self, adb, timeout, logfile=None):
|
| for i in range(10):
|
| - if self.adb.FileExistsOnDevice(self._GetFifo()):
|
| + if adb.FileExistsOnDevice(self._GetFifo()):
|
| logging.info('Fifo created.')
|
| break
|
| time.sleep(i)
|
| else:
|
| raise errors.DeviceUnresponsiveError(
|
| 'Unable to find fifo on device %s ' % self._GetFifo())
|
| - args = shlex.split(self.adb.Adb()._target_arg)
|
| + args = shlex.split(adb.Adb()._target_arg)
|
| args += ['shell', 'cat', self._GetFifo()]
|
| return pexpect.spawn('adb', args, timeout=timeout, logfile=logfile)
|
|
|
| - def _StartActivity(self):
|
| - self.adb.StartActivity(
|
| + def _StartActivity(self, adb):
|
| + adb.StartActivity(
|
| self._test_apk_package_name,
|
| self._test_activity_name,
|
| wait_for_completion=True,
|
| action='android.intent.action.MAIN',
|
| force_stop=True)
|
|
|
| - def _GetTestSuiteBaseName(self):
|
| - """Returns the base name of the test suite."""
|
| - # APK test suite names end with '-debug.apk'
|
| - return os.path.basename(self.suite_path).rsplit('-debug', 1)[0]
|
| -
|
| #override
|
| - def ClearApplicationState(self):
|
| - self.adb.ClearApplicationState(self._test_apk_package_name)
|
| + def ClearApplicationState(self, adb):
|
| + adb.ClearApplicationState(self._test_apk_package_name)
|
|
|
| #override
|
| - def CreateCommandLineFileOnDevice(self, test_filter, test_arguments):
|
| + def CreateCommandLineFileOnDevice(self, adb, test_filter, test_arguments):
|
| self._CreateCommandLineFileOnDevice(
|
| - '--gtest_filter=%s %s' % (test_filter, test_arguments))
|
| + adb, '--gtest_filter=%s %s' % (test_filter, test_arguments))
|
|
|
| #override
|
| - def GetAllTests(self):
|
| - self._CreateCommandLineFileOnDevice('--gtest_list_tests')
|
| + def GetAllTests(self, adb):
|
| + self._CreateCommandLineFileOnDevice(adb, '--gtest_list_tests')
|
| try:
|
| self.tool.SetupEnvironment()
|
| # Clear and start monitoring logcat.
|
| - self._ClearFifo()
|
| - self._StartActivity()
|
| + self._ClearFifo(adb)
|
| + self._StartActivity(adb)
|
| # Wait for native test to complete.
|
| - p = self._WatchFifo(timeout=30 * self.tool.GetTimeoutScale())
|
| + p = self._WatchFifo(adb, timeout=30 * self.tool.GetTimeoutScale())
|
| p.expect('<<ScopedMainEntryLogger')
|
| p.close()
|
| finally:
|
| @@ -121,19 +112,18 @@ class TestPackageApk(TestPackage):
|
| return self._ParseGTestListTests(content)
|
|
|
| #override
|
| - def SpawnTestProcess(self):
|
| + def SpawnTestProcess(self, adb):
|
| try:
|
| self.tool.SetupEnvironment()
|
| - self._ClearFifo()
|
| - self._StartActivity()
|
| + self._ClearFifo(adb)
|
| + self._StartActivity(adb)
|
| finally:
|
| self.tool.CleanUpEnvironment()
|
| logfile = android_commands.NewLineNormalizer(sys.stdout)
|
| - return self._WatchFifo(timeout=10, logfile=logfile)
|
| + return self._WatchFifo(adb, timeout=10, logfile=logfile)
|
|
|
| #override
|
| - def Install(self):
|
| + def Install(self, adb):
|
| self.tool.CopyFiles()
|
| - self.adb.ManagedInstall(self.suite_path_full, False,
|
| + adb.ManagedInstall(self.suite_path, False,
|
| package_name=self._test_apk_package_name)
|
| -
|
|
|