Index: testing/android/reporter/java/src/org/chromium/test/reporter/TestStatusReporter.java |
diff --git a/testing/android/reporter/java/src/org/chromium/test/reporter/TestStatusReporter.java b/testing/android/reporter/java/src/org/chromium/test/reporter/TestStatusReporter.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6ac7312fad3f422a6fa6bcc1b8acf226d1ae249c |
--- /dev/null |
+++ b/testing/android/reporter/java/src/org/chromium/test/reporter/TestStatusReporter.java |
@@ -0,0 +1,83 @@ |
+// 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.reporter; |
+ |
+import android.content.Context; |
+import android.content.Intent; |
+ |
+import org.chromium.base.ThreadUtils; |
+ |
+import java.util.concurrent.atomic.AtomicBoolean; |
+ |
+/** |
+ * Broadcasts test status to any listening {@link org.chromium.test.reporter.TestStatusReceiver}. |
+ */ |
+public class TestStatusReporter { |
+ |
+ public static final String ACTION_HEARTBEAT = |
+ "org.chromium.test.reporter.TestStatusReporter.HEARTBEAT"; |
+ public static final String ACTION_TEST_STARTED = |
+ "org.chromium.test.reporter.TestStatusReporter.TEST_STARTED"; |
+ public static final String ACTION_TEST_PASSED = |
+ "org.chromium.test.reporter.TestStatusReporter.TEST_PASSED"; |
+ public static final String ACTION_TEST_FAILED = |
+ "org.chromium.test.reporter.TestStatusReporter.TEST_FAILED"; |
+ public static final String DATA_TYPE_HEARTBEAT = "org.chromium.test.reporter/heartbeat"; |
+ public static final String DATA_TYPE_RESULT = "org.chromium.test.reporter/result"; |
+ public static final String EXTRA_TEST_CLASS = |
+ "org.chromium.test.reporter.TestStatusReporter.TEST_CLASS"; |
+ public static final String EXTRA_TEST_METHOD = |
+ "org.chromium.test.reporter.TestStatusReporter.TEST_METHOD"; |
+ |
+ public static final int HEARTBEAT_INTERVAL_MS = 5000; |
+ |
+ private final Context mContext; |
+ private final AtomicBoolean mKeepBeating = new AtomicBoolean(false); |
+ |
+ public TestStatusReporter(Context c) { |
+ mContext = c; |
+ } |
+ |
+ public void startHeartbeat() { |
+ mKeepBeating.set(true); |
+ Runnable heartbeat = new Runnable() { |
+ @Override |
+ public void run() { |
+ Intent i = new Intent(ACTION_HEARTBEAT); |
+ i.setType(DATA_TYPE_HEARTBEAT); |
+ mContext.sendBroadcast(i); |
+ if (mKeepBeating.get()) { |
+ ThreadUtils.postOnUiThreadDelayed(this, HEARTBEAT_INTERVAL_MS); |
+ } |
+ } |
+ }; |
+ ThreadUtils.postOnUiThreadDelayed(heartbeat, HEARTBEAT_INTERVAL_MS); |
+ } |
+ |
+ public void testStarted(String testClass, String testMethod) { |
+ sendBroadcast(testClass, testMethod, ACTION_TEST_STARTED); |
+ } |
+ |
+ public void testPassed(String testClass, String testMethod) { |
+ sendBroadcast(testClass, testMethod, ACTION_TEST_PASSED); |
+ } |
+ |
+ public void testFailed(String testClass, String testMethod) { |
+ sendBroadcast(testClass, testMethod, ACTION_TEST_FAILED); |
+ } |
+ |
+ public void stopHeartbeat() { |
+ mKeepBeating.set(false); |
+ } |
+ |
+ private void sendBroadcast(String testClass, String testMethod, String action) { |
+ Intent i = new Intent(action); |
+ i.setType(DATA_TYPE_RESULT); |
+ i.putExtra(EXTRA_TEST_CLASS, testClass); |
+ i.putExtra(EXTRA_TEST_METHOD, testMethod); |
+ mContext.sendBroadcast(i); |
+ } |
+ |
+} |