Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Unified Diff: chrome/android/javatests_shell/src/org/chromium/chrome/browser/feedback/FeedbackCollectorTest.java

Issue 1222453002: [Feedback] Use callbacks for FeedbackCollector and use ScreenshotTask (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@add-feedback-collector-test
Patch Set: Squashed branch Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/preferences/website/TranslatePreferences.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/javatests_shell/src/org/chromium/chrome/browser/feedback/FeedbackCollectorTest.java
diff --git a/chrome/android/javatests_shell/src/org/chromium/chrome/browser/feedback/FeedbackCollectorTest.java b/chrome/android/javatests_shell/src/org/chromium/chrome/browser/feedback/FeedbackCollectorTest.java
index 0d863d3a6f790df7245fdd1a9029a241ef47ada1..9e3362be4da9eb179090872321339c666450c407 100644
--- a/chrome/android/javatests_shell/src/org/chromium/chrome/browser/feedback/FeedbackCollectorTest.java
+++ b/chrome/android/javatests_shell/src/org/chromium/chrome/browser/feedback/FeedbackCollectorTest.java
@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.feedback;
+import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.test.suitebuilder.annotation.SmallTest;
@@ -14,12 +15,18 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.shell.ChromeShellActivity;
import org.chromium.chrome.shell.ChromeShellTab;
import org.chromium.chrome.shell.ChromeShellTestBase;
+import org.chromium.content.browser.test.util.UiUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
+import javax.annotation.Nullable;
+
/**
* Test for {@link FeedbackCollector}.
*/
@@ -39,18 +46,51 @@ public class FeedbackCollectorTest extends ChromeShellTestBase {
* no real tasks are started during creation.
*/
class TestFeedbackCollector extends FeedbackCollector {
- TestFeedbackCollector(Profile profile, String url) {
- super(profile, url);
+ private final AtomicBoolean mTimedOut = new AtomicBoolean(false);
+
+ TestFeedbackCollector(
+ Activity activity, Profile profile, String url, FeedbackResult callback) {
+ super(activity, profile, url, callback);
}
@Override
- void init() {
+ void init(Activity activity) {
mTestConnectivityTask =
new TestConnectivityTask(mProfile, CONNECTIVITY_TASK_TIMEOUT_MS, null);
mConnectivityTask = mTestConnectivityTask;
}
@Override
+ public void onResult(final ConnectivityTask.FeedbackData feedbackData) {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ TestFeedbackCollector.super.onResult(feedbackData);
+ }
+ });
+ }
+
+ @Override
+ public void onGotBitmap(@Nullable final Bitmap bitmap, final boolean success) {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ TestFeedbackCollector.super.onGotBitmap(bitmap, success);
+ }
+ });
+ }
+
+ @Override
+ void maybePostResult() {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ TestFeedbackCollector.super.maybePostResult();
+ }
+ });
+ }
+
+ @Override
public void add(final String key, final String value) {
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
@@ -109,6 +149,15 @@ public class FeedbackCollectorTest extends ChromeShellTestBase {
}
});
}
+
+ @Override
+ boolean hasTimedOut() {
+ return mTimedOut.get();
+ }
+
+ void setTimedOut(boolean timedOut) {
+ mTimedOut.set(timedOut);
+ }
}
static class TestConnectivityTask extends ConnectivityTask {
@@ -150,7 +199,7 @@ public class FeedbackCollectorTest extends ChromeShellTestBase {
@SmallTest
@Feature({"Feedback"})
public void testGatheringOfData() {
- mCollector = createCollector("http://www.example.com/");
+ mCollector = createCollector("http://www.example.com/", null);
ConnectivityTask.FeedbackData feedbackData = createFeedbackData();
mTestConnectivityTask.setFeedbackData(feedbackData);
mCollector.setDescription("some description");
@@ -166,6 +215,113 @@ public class FeedbackCollectorTest extends ChromeShellTestBase {
assertEquals(bitmap, mCollector.getScreenshot());
}
+ @SmallTest
+ @Feature({"Feedback"})
+ public void testGatheringOfDataWithCallback() throws InterruptedException {
+ final Semaphore semaphore = new Semaphore(0);
+ final AtomicBoolean hasResult = new AtomicBoolean(false);
+ FeedbackCollector.FeedbackResult callback = new FeedbackCollector.FeedbackResult() {
+ @Override
+ public void onResult(FeedbackCollector collector) {
+ hasResult.set(true);
+ semaphore.release();
+ }
+ };
+ mCollector = createCollector("http://www.example.com/", callback);
+ assertFalse("Result should not be ready directly after creation.", hasResult.get());
+ ConnectivityTask.FeedbackData feedbackData = createFeedbackData();
+ mCollector.onResult(feedbackData);
+ assertFalse("Result should not be ready after connectivity data.", hasResult.get());
+ mCollector.setDescription("some description");
+ mCollector.add("foo", "bar");
+ Bitmap bitmap = createBitmap();
+ mCollector.onGotBitmap(bitmap, true);
+
+ // Wait until the callback has been called.
+ assertTrue("Failed to acquire semaphore.", semaphore.tryAcquire(1, TimeUnit.SECONDS));
+ assertTrue("Result should be ready after retrieving all data.", hasResult.get());
+
+ Bundle bundle = mCollector.getBundle();
+ assertEquals("http://www.example.com/", bundle.getString(FeedbackCollector.URL_KEY));
+ assertEquals("CONNECTED", bundle.getString(ConnectivityTask.CHROME_HTTPS_KEY));
+ assertEquals("some description", mCollector.getDescription());
+ assertEquals("bar", bundle.getString("foo"));
+ assertEquals(bitmap, mCollector.getScreenshot());
+ }
+
+ @SmallTest
+ @Feature({"Feedback"})
+ public void testGatheringOfDataTimesOut() throws InterruptedException {
+ final Semaphore semaphore = new Semaphore(0);
+ final AtomicBoolean hasResult = new AtomicBoolean(false);
+ FeedbackCollector.FeedbackResult callback = new FeedbackCollector.FeedbackResult() {
+ @Override
+ public void onResult(FeedbackCollector collector) {
+ hasResult.set(true);
+ semaphore.release();
+ }
+ };
+ mCollector = createCollector(null, callback);
+ assertFalse("Result should not be ready directly after creation.", hasResult.get());
+ ConnectivityTask.FeedbackData feedbackData = createFeedbackData();
+ // Set the feedback data on the connectivity task instead of through callback.
+ mTestConnectivityTask.setFeedbackData(feedbackData);
+ assertFalse("Result should not be ready after connectivity data.", hasResult.get());
+ Bitmap bitmap = createBitmap();
+ mCollector.onGotBitmap(bitmap, true);
+
+ // This timeout task should trigger the callback.
+ mCollector.setTimedOut(true);
+ mCollector.maybePostResult();
+ UiUtils.settleDownUI(getInstrumentation());
+
+ // Wait until the callback has been called.
+ assertTrue("Failed to acquire semaphore.", semaphore.tryAcquire(1, TimeUnit.SECONDS));
+ assertTrue("Result should be ready after retrieving all data.", hasResult.get());
+
+ Bundle bundle = mCollector.getBundle();
+ assertEquals("CONNECTED", bundle.getString(ConnectivityTask.CHROME_HTTPS_KEY));
+ assertEquals(bitmap, mCollector.getScreenshot());
+ }
+
+ @SmallTest
+ @Feature({"Feedback"})
+ public void testGatheringOfDataAlwaysWaitForScreenshot() throws InterruptedException {
+ final Semaphore semaphore = new Semaphore(0);
+ final AtomicBoolean hasResult = new AtomicBoolean(false);
+ FeedbackCollector.FeedbackResult callback = new FeedbackCollector.FeedbackResult() {
+ @Override
+ public void onResult(FeedbackCollector collector) {
+ hasResult.set(true);
+ semaphore.release();
+ }
+ };
+ mCollector = createCollector(null, callback);
+ assertFalse("Result should not be ready directly after creation.", hasResult.get());
+ ConnectivityTask.FeedbackData feedbackData = createFeedbackData();
+ mCollector.onResult(feedbackData);
+ assertFalse("Result should not be ready after connectivity data.", hasResult.get());
+
+ // This timeout task should not trigger the callback.
+ mCollector.setTimedOut(true);
+ mCollector.maybePostResult();
+ UiUtils.settleDownUI(getInstrumentation());
+ assertFalse("Result should not be ready after timeout.", hasResult.get());
+
+ // Trigger callback by finishing taking the screenshot.
+ Bitmap bitmap = createBitmap();
+ mCollector.onGotBitmap(bitmap, true);
+
+ // Wait until the callback has been called.
+ assertTrue("Failed to acquire semaphore.", semaphore.tryAcquire(1, TimeUnit.SECONDS));
+ assertTrue("Result should be ready after retrieving all data.", hasResult.get());
+
+ Bundle bundle = mCollector.getBundle();
+ // The FeedbackData should have been gathered from the ConnectivityTask directly.
+ assertEquals("CONNECTED", bundle.getString(ConnectivityTask.CHROME_HTTPS_KEY));
+ assertEquals(bitmap, mCollector.getScreenshot());
+ }
+
private static ConnectivityTask.FeedbackData createFeedbackData() {
Map<ConnectivityTask.Type, Integer> connections = new HashMap<>();
connections.put(ConnectivityTask.Type.CHROME_HTTPS, ConnectivityCheckResult.CONNECTED);
@@ -176,11 +332,12 @@ public class FeedbackCollectorTest extends ChromeShellTestBase {
return Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_4444);
}
- private TestFeedbackCollector createCollector(final String url) {
+ private TestFeedbackCollector createCollector(
+ final String url, final FeedbackCollector.FeedbackResult callback) {
return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<TestFeedbackCollector>() {
@Override
public TestFeedbackCollector call() {
- return new TestFeedbackCollector(mProfile, url);
+ return new TestFeedbackCollector(mActivity, mProfile, url, callback);
}
});
}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/preferences/website/TranslatePreferences.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698