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 540ef83f1a2415b6e96ac19c89c95a527dc1211e..9670934d879e74c4a00577ac9bef80c03f24cb8c 100644 |
--- a/build/android/pylib/gtest/test_package_apk.py |
+++ b/build/android/pylib/gtest/test_package_apk.py |
@@ -20,27 +20,26 @@ 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. |
- cleanup_test_files: Whether or not to cleanup test files on device. |
- tool: Name of the Valgrind tool. |
- """ |
- |
- def __init__(self, adb, device, test_suite, timeout, |
- cleanup_test_files, tool, apk_package_name, |
+ """A helper class for running APK-based native tests.""" |
+ |
+ def __init__(self, adb, device, test_suite, tool, test_apk_package_name, |
test_activity_name, command_line_file): |
- TestPackage.__init__(self, adb, device, test_suite, timeout, |
- cleanup_test_files, tool) |
- self._apk_package_name = apk_package_name |
+ """ |
+ 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. |
+ 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. |
+ """ |
+ TestPackage.__init__(self, adb, device, test_suite, tool) |
+ self._test_apk_package_name = test_apk_package_name |
self._test_activity_name = test_activity_name |
self._command_line_file = command_line_file |
- def _CreateTestRunnerScript(self, options): |
+ def _CreateCommandLineFileOnDevice(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) |
@@ -57,7 +56,7 @@ class TestPackageApk(TestPackage): |
# testing/android/java/src/org/chromium/native_test/ |
# ChromeNativeTestActivity.java and |
# testing/android/native_test_launcher.cc |
- return '/data/data/' + self._apk_package_name + '/files/test.fifo' |
+ return '/data/data/' + self._test_apk_package_name + '/files/test.fifo' |
def _ClearFifo(self): |
self.adb.RunShellCommand('rm -f ' + self._GetFifo()) |
@@ -75,21 +74,40 @@ class TestPackageApk(TestPackage): |
args += ['shell', 'cat', self._GetFifo()] |
return pexpect.spawn('adb', args, timeout=timeout, logfile=logfile) |
- def ClearApplicationState(self): |
- """Clear the application state.""" |
- self.adb.ClearApplicationState(self._apk_package_name) |
- |
def _StartActivity(self): |
self.adb.StartActivity( |
- self._apk_package_name, |
+ self._test_apk_package_name, |
self._test_activity_name, |
wait_for_completion=True, |
action='android.intent.action.MAIN', |
force_stop=True) |
+ def _NeedsInstall(self): |
+ installed_apk_path = self.adb.GetApplicationPath( |
+ self._test_apk_package_name) |
+ if installed_apk_path: |
+ return not self.adb.CheckMd5Sum( |
+ self.test_suite_full, installed_apk_path, ignore_paths=True) |
+ else: |
+ return 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.test_suite).rsplit('-debug', 1)[0] |
+ |
+ #override |
+ def ClearApplicationState(self): |
+ self.adb.ClearApplicationState(self._test_apk_package_name) |
+ |
+ #override |
+ def CreateCommandLineFileOnDevice(self, test_filter, test_arguments): |
+ self._CreateCommandLineFileOnDevice( |
+ '--gtest_filter=%s %s' % (test_filter, test_arguments)) |
+ |
+ #override |
def GetAllTests(self): |
- """Returns a list of all tests available in the test suite.""" |
- self._CreateTestRunnerScript('--gtest_list_tests') |
+ self._CreateCommandLineFileOnDevice('--gtest_list_tests') |
try: |
self.tool.SetupEnvironment() |
# Clear and start monitoring logcat. |
@@ -103,14 +121,10 @@ class TestPackageApk(TestPackage): |
self.tool.CleanUpEnvironment() |
# We need to strip the trailing newline. |
content = [line.rstrip() for line in p.before.splitlines()] |
- ret = self._ParseGTestListTests(content) |
- return ret |
- |
- def CreateTestRunnerScript(self, test_filter, test_arguments): |
- self._CreateTestRunnerScript('--gtest_filter=%s %s' % (test_filter, |
- test_arguments)) |
+ return self._ParseGTestListTests(content) |
- def RunTestsAndListResults(self): |
+ #override |
+ def SpawnTestProcess(self): |
try: |
self.tool.SetupEnvironment() |
self._ClearFifo() |
@@ -118,25 +132,14 @@ class TestPackageApk(TestPackage): |
finally: |
self.tool.CleanUpEnvironment() |
logfile = android_commands.NewLineNormalizer(sys.stdout) |
- return self._WatchTestOutput(self._WatchFifo(timeout=10, logfile=logfile)) |
+ return self._WatchFifo(timeout=10, logfile=logfile) |
- def _NeedsInstall(self): |
- installed_apk_path = self.adb.GetApplicationPath(self._apk_package_name) |
- if installed_apk_path: |
- return not self.adb.CheckMd5Sum( |
- self.test_suite_full, installed_apk_path, ignore_paths=True) |
- else: |
- return True |
- |
- def StripAndCopyExecutable(self): |
+ #override |
+ def Install(self): |
self.tool.CopyFiles() |
if self._NeedsInstall(): |
# Always uninstall the previous one (by activity name); we don't |
# know what was embedded in it. |
self.adb.ManagedInstall(self.test_suite_full, False, |
- package_name=self._apk_package_name) |
+ package_name=self._test_apk_package_name) |
- def _GetTestSuiteBaseName(self): |
- """Returns the base name of the test suite.""" |
- # APK test suite names end with '-debug.apk' |
- return os.path.basename(self.test_suite).rsplit('-debug', 1)[0] |