Index: testing/android/driver/java/src/org/chromium/test/driver/OnDeviceInstrumentationDriver.java |
diff --git a/testing/android/driver/java/src/org/chromium/test/driver/OnDeviceInstrumentationDriver.java b/testing/android/driver/java/src/org/chromium/test/driver/OnDeviceInstrumentationDriver.java |
deleted file mode 100644 |
index 78c571a4c51cb7f9e2928e0158a09f82f4a88a43..0000000000000000000000000000000000000000 |
--- a/testing/android/driver/java/src/org/chromium/test/driver/OnDeviceInstrumentationDriver.java |
+++ /dev/null |
@@ -1,271 +0,0 @@ |
-// Copyright 2015 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. |
- |
-package org.chromium.test.driver; |
- |
-import android.app.Activity; |
-import android.app.Instrumentation; |
-import android.content.ComponentName; |
-import android.content.Intent; |
-import android.os.Bundle; |
-import android.os.Environment; |
-import android.test.InstrumentationTestRunner; |
-import android.util.Log; |
- |
-import org.chromium.test.broker.OnDeviceInstrumentationBroker; |
-import org.chromium.test.reporter.TestStatusReceiver; |
-import org.chromium.test.reporter.TestStatusReporter; |
-import org.chromium.test.support.ResultsBundleGenerator; |
-import org.chromium.test.support.RobotiumBundleGenerator; |
- |
-import java.io.BufferedReader; |
-import java.io.File; |
-import java.io.FileReader; |
-import java.io.IOException; |
-import java.util.ArrayList; |
-import java.util.Arrays; |
-import java.util.HashMap; |
-import java.util.List; |
-import java.util.regex.Pattern; |
- |
-/** |
- * An Instrumentation that drives instrumentation tests from outside the app. |
- */ |
-public class OnDeviceInstrumentationDriver extends Instrumentation { |
- |
- private static final String TAG = "OnDeviceInstrumentationDriver"; |
- |
- private static final String EXTRA_TEST_LIST = |
- "org.chromium.test.driver.OnDeviceInstrumentationDriver.TestList"; |
- private static final String EXTRA_TEST_LIST_FILE = |
- "org.chromium.test.driver.OnDeviceInstrumentationDriver.TestListFile"; |
- private static final String EXTRA_TARGET_PACKAGE = |
- "org.chromium.test.driver.OnDeviceInstrumentationDriver.TargetPackage"; |
- private static final String EXTRA_TARGET_CLASS = |
- "org.chromium.test.driver.OnDeviceInstrumentationDriver.TargetClass"; |
- |
- private static final Pattern COMMA = Pattern.compile(","); |
- private static final int TEST_WAIT_TIMEOUT = 5 * TestStatusReporter.HEARTBEAT_INTERVAL_MS; |
- |
- private boolean mDriverStarted; |
- private Thread mDriverThread; |
- private Bundle mTargetArgs; |
- private String mTargetClass; |
- private String mTargetPackage; |
- private List<String> mTestClasses; |
- |
- /** Parse any arguments and prepare to run tests. |
- |
- @param arguments The arguments to parse. |
- */ |
- @Override |
- public void onCreate(Bundle arguments) { |
- mTargetArgs = new Bundle(arguments); |
- mTargetPackage = arguments.getString(EXTRA_TARGET_PACKAGE); |
- if (mTargetPackage == null) { |
- fail("No target package."); |
- return; |
- } |
- mTargetArgs.remove(EXTRA_TARGET_PACKAGE); |
- |
- mTargetClass = arguments.getString(EXTRA_TARGET_CLASS); |
- if (mTargetClass == null) { |
- fail("No target class."); |
- return; |
- } |
- mTargetArgs.remove(EXTRA_TARGET_CLASS); |
- |
- mTestClasses = new ArrayList<String>(); |
- String testList = arguments.getString(EXTRA_TEST_LIST); |
- if (testList != null) { |
- mTestClasses.addAll(Arrays.asList(COMMA.split(testList))); |
- mTargetArgs.remove(EXTRA_TEST_LIST); |
- } |
- |
- String testListFilePath = arguments.getString(EXTRA_TEST_LIST_FILE); |
- if (testListFilePath != null) { |
- File testListFile = new File(Environment.getExternalStorageDirectory(), |
- testListFilePath); |
- try { |
- BufferedReader testListFileReader = |
- new BufferedReader(new FileReader(testListFile)); |
- String test; |
- while ((test = testListFileReader.readLine()) != null) { |
- mTestClasses.add(test); |
- } |
- testListFileReader.close(); |
- } catch (IOException e) { |
- Log.e(TAG, "Error reading " + testListFile.getAbsolutePath(), e); |
- } |
- mTargetArgs.remove(EXTRA_TEST_LIST_FILE); |
- } |
- |
- if (mTestClasses.isEmpty()) { |
- fail("No tests."); |
- return; |
- } |
- |
- mDriverThread = new Thread( |
- new Driver(mTargetPackage, mTargetClass, mTargetArgs, mTestClasses)); |
- |
- start(); |
- } |
- |
- /** Start running tests. */ |
- @Override |
- public void onStart() { |
- super.onStart(); |
- |
- // Start the driver on its own thread s.t. it can block while the main thread's |
- // Looper receives and handles messages. |
- if (!mDriverStarted) { |
- mDriverThread.start(); |
- mDriverStarted = true; |
- } |
- } |
- |
- /** Clean up the reporting service. */ |
- @Override |
- public void onDestroy() { |
- super.onDestroy(); |
- } |
- |
- private class Driver implements Runnable { |
- |
- private static final String TAG = OnDeviceInstrumentationDriver.TAG + ".Driver"; |
- |
- private Bundle mTargetArgs; |
- private String mTargetClass; |
- private String mTargetPackage; |
- private List<String> mTestClasses; |
- |
- public Driver(String targetPackage, String targetClass, Bundle targetArgs, |
- List<String> testClasses) { |
- mTargetPackage = targetPackage; |
- mTargetClass = targetClass; |
- mTargetArgs = targetArgs; |
- mTestClasses = testClasses; |
- } |
- |
- private void sendTestStatus(int status, String testClass, String testMethod) { |
- Bundle statusBundle = new Bundle(); |
- statusBundle.putString(InstrumentationTestRunner.REPORT_KEY_NAME_CLASS, testClass); |
- statusBundle.putString(InstrumentationTestRunner.REPORT_KEY_NAME_TEST, testMethod); |
- sendStatus(status, statusBundle); |
- } |
- |
- /** Run the tests. */ |
- @Override |
- public void run() { |
- final HashMap<String, ResultsBundleGenerator.TestResult> finished = |
- new HashMap<String, ResultsBundleGenerator.TestResult>(); |
- final Object statusLock = new Object(); |
- |
- try { |
- TestStatusReceiver r = new TestStatusReceiver(); |
- r.registerCallback(new TestStatusReceiver.StartCallback() { |
- @Override |
- public void testStarted(String testClass, String testMethod) { |
- sendTestStatus(InstrumentationTestRunner.REPORT_VALUE_RESULT_START, |
- testClass, testMethod); |
- synchronized (statusLock) { |
- statusLock.notify(); |
- } |
- } |
- }); |
- r.registerCallback(new TestStatusReceiver.PassCallback() { |
- @Override |
- public void testPassed(String testClass, String testMethod) { |
- sendTestStatus(InstrumentationTestRunner.REPORT_VALUE_RESULT_OK, testClass, |
- testMethod); |
- synchronized (statusLock) { |
- finished.put(testClass + "#" + testMethod, |
- ResultsBundleGenerator.TestResult.PASSED); |
- statusLock.notify(); |
- } |
- } |
- }); |
- r.registerCallback(new TestStatusReceiver.FailCallback() { |
- @Override |
- public void testFailed(String testClass, String testMethod) { |
- sendTestStatus(InstrumentationTestRunner.REPORT_VALUE_RESULT_ERROR, |
- testClass, testMethod); |
- synchronized (statusLock) { |
- finished.put(testClass + "#" + testMethod, |
- ResultsBundleGenerator.TestResult.FAILED); |
- statusLock.notify(); |
- } |
- } |
- }); |
- r.registerCallback(new TestStatusReceiver.HeartbeatCallback() { |
- @Override |
- public void heartbeat() { |
- Log.i(TAG, "Heartbeat received."); |
- synchronized (statusLock) { |
- statusLock.notify(); |
- } |
- } |
- }); |
- r.register(getContext()); |
- |
- for (String t : mTestClasses) { |
- Intent slaveIntent = new Intent(); |
- slaveIntent.setComponent(new ComponentName( |
- mTargetPackage, OnDeviceInstrumentationBroker.class.getName())); |
- slaveIntent.putExtra( |
- OnDeviceInstrumentationBroker.EXTRA_INSTRUMENTATION_PACKAGE, |
- mTargetPackage); |
- slaveIntent.putExtra( |
- OnDeviceInstrumentationBroker.EXTRA_INSTRUMENTATION_CLASS, |
- mTargetClass); |
- slaveIntent.putExtra(OnDeviceInstrumentationBroker.EXTRA_TEST, t); |
- slaveIntent.putExtra(OnDeviceInstrumentationBroker.EXTRA_TARGET_ARGS, |
- mTargetArgs); |
- slaveIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- |
- getContext().startActivity(slaveIntent); |
- |
- synchronized (statusLock) { |
- while (!finished.containsKey(t)) { |
- long waitStart = System.currentTimeMillis(); |
- statusLock.wait(TEST_WAIT_TIMEOUT); |
- if (System.currentTimeMillis() - waitStart > TEST_WAIT_TIMEOUT) { |
- Log.e(TAG, t + " has gone missing and is assumed to be dead."); |
- finished.put(t, ResultsBundleGenerator.TestResult.FAILED); |
- break; |
- } |
- } |
- } |
- } |
- getContext().unregisterReceiver(r); |
- |
- } catch (InterruptedException e) { |
- fail("Interrupted while running tests.", e); |
- return; |
- } |
- pass(new RobotiumBundleGenerator().generate(finished)); |
- } |
- |
- } |
- |
- private void fail(String reason) { |
- Log.e(TAG, reason); |
- failImpl(reason); |
- } |
- |
- private void fail(String reason, Exception e) { |
- Log.e(TAG, reason, e); |
- failImpl(reason); |
- } |
- |
- private void failImpl(String reason) { |
- Bundle b = new Bundle(); |
- b.putString("reason", reason); |
- finish(Activity.RESULT_CANCELED, b); |
- } |
- |
- private void pass(Bundle results) { |
- finish(Activity.RESULT_OK, results); |
- } |
-} |