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

Unified Diff: chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java

Issue 1473173004: Change the test tab load observer to print a clearer error message. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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/javatests/src/org/chromium/chrome/browser/widget/OverviewListLayoutTest.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java
index ca1b0429fc2e8566128f93a97e8e1a1fd5dc0006..3b0be216af4c3269b1d4f5c85594b3a0e71ea231 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/TabLoadObserver.java
@@ -6,16 +6,22 @@ package org.chromium.chrome.test.util.browser;
import android.text.TextUtils;
+import junit.framework.Assert;
+
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.content.browser.test.util.Criteria;
+import org.chromium.content.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.LoadUrlParams;
+import java.util.Locale;
+import java.util.concurrent.atomic.AtomicReference;
+
/**
* Monitors that a Tab starts loading and stops loading a URL.
*/
-public class TabLoadObserver extends EmptyTabObserver implements Criteria {
+public class TabLoadObserver extends EmptyTabObserver {
private static final float FLOAT_EPSILON = 0.001f;
private final Tab mTab;
@@ -53,21 +59,68 @@ public class TabLoadObserver extends EmptyTabObserver implements Criteria {
mTabLoadStopped = true;
}
- @Override
- public boolean isSatisfied() {
- if (!mTabLoadStarted) return false;
- if (!mTabLoadStopped) return false;
- if (!mTab.isLoadingAndRenderingDone()) return false;
+ /**
+ * Asserts the page has loaded.
+ * @param maxAllowedTime The maximum time this will wait for the page to load.
+ */
+ public void assertLoaded(long maxAllowedTime) throws InterruptedException {
+ final AtomicReference<String> failureReason = new AtomicReference<>();
- if (mExpectedTitle != null && !TextUtils.equals(mExpectedTitle, mTab.getTitle())) {
- return false;
- }
- if (mExpectedScale != null) {
- if (mTab.getContentViewCore() == null) return false;
- if (Math.abs(mExpectedScale - mTab.getContentViewCore().getScale()) >= FLOAT_EPSILON) {
- return false;
+ Criteria loadedCriteria = new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ if (!mTabLoadStarted) {
+ failureReason.set("load started never called");
+ return false;
+ }
+ if (!mTabLoadStopped) {
+ failureReason.set("load stopped never called");
+ return false;
+ }
+ if (!mTab.isLoadingAndRenderingDone()) {
+ failureReason.set("load and rendering never completed");
+ return false;
+ }
+
+ String title = mTab.getTitle();
+ if (mExpectedTitle != null && !TextUtils.equals(mExpectedTitle, title)) {
+ failureReason.set(String.format(
+ Locale.ENGLISH,
+ "title did not match -- expected: \"%s\", actual \"%s\"",
+ mExpectedTitle, title));
+ return false;
+ }
+ if (mExpectedScale != null) {
+ if (mTab.getContentViewCore() == null) {
+ failureReason.set("tab has no content view core");
+ return false;
+ }
+
+ float scale = mTab.getContentViewCore().getScale();
+ if (Math.abs(mExpectedScale - scale) >= FLOAT_EPSILON) {
+ failureReason.set(String.format(
+ Locale.ENGLISH,
+ "scale did not match with allowed epsilon -- "
+ + "expected: \"%f\", actual \"%f\"", mExpectedScale, scale));
+ return false;
+ }
+ }
+ failureReason.set(null);
+ return true;
}
+ };
+
+ boolean result = CriteriaHelper.pollForUIThreadCriteria(
+ loadedCriteria, maxAllowedTime, CriteriaHelper.DEFAULT_POLLING_INTERVAL);
+ if (!result) {
+ Assert.fail("Tab not fully loaded because: " + failureReason.get());
}
- return true;
+ }
+
+ /**
+ * Asserts that the page has loaded.
+ */
+ public void assertLoaded() throws InterruptedException {
+ assertLoaded(CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL);
}
}
« no previous file with comments | « chrome/android/javatests/src/org/chromium/chrome/browser/widget/OverviewListLayoutTest.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698