| Index: content/public/android/javatests/src/org/chromium/content/browser/CriteriaHelper.java
|
| diff --git a/content/public/android/javatests/src/org/chromium/content/browser/CriteriaHelper.java b/content/public/android/javatests/src/org/chromium/content/browser/CriteriaHelper.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9655361f573aa02b6b796de25fa7c8d91bcbf7d6
|
| --- /dev/null
|
| +++ b/content/public/android/javatests/src/org/chromium/content/browser/CriteriaHelper.java
|
| @@ -0,0 +1,71 @@
|
| +// Copyright (c) 2012 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.content.browser.test;
|
| +
|
| +/**
|
| + * Helper methods for creating and managing criteria.
|
| + *
|
| + * <p>
|
| + * If possible, use callbacks or testing delegates instead of criteria as they
|
| + * do not introduce any polling delays. Should only use Criteria if no suitable
|
| + * other approach exists.
|
| + */
|
| +public class CriteriaHelper {
|
| +
|
| + /** The default maximum time to wait for a criteria to become valid. */
|
| + public static final long DEFAULT_MAX_TIME_TO_POLL = 3000;
|
| + /** The default polling interval to wait between checking for a satisfied criteria. */
|
| + public static final long DEFAULT_POLLING_INTERVAL = 50;
|
| +
|
| + /**
|
| + * Checks whether the given Criteria is satisfied at a given interval, until either
|
| + * the criteria is satisfied, or the specified maxTimeoutMs number of ms has elapsed.
|
| + * @param criteria The Criteria that will be checked.
|
| + * @param maxTimeoutMs The maximum number of ms that this check will be performed for
|
| + * before timeout.
|
| + * @param checkIntervalMs The number of ms between checks.
|
| + * @return true iff checking has ended with the criteria being satisfied.
|
| + * @throws InterruptedException
|
| + */
|
| + public static boolean pollForCriteria(Criteria criteria, long maxTimeoutMs,
|
| + long checkIntervalMs) throws InterruptedException {
|
| + boolean isSatisfied = criteria.isSatisfied();
|
| + long startTime = System.currentTimeMillis();
|
| + while (!isSatisfied && System.currentTimeMillis() - startTime < maxTimeoutMs) {
|
| + Thread.sleep(checkIntervalMs);
|
| + isSatisfied = criteria.isSatisfied();
|
| + }
|
| + return isSatisfied;
|
| + }
|
| +
|
| + /**
|
| + * Checks whether the given Criteria is satisfied polling at a default interval.
|
| + *
|
| + * @param criteria The Criteria that will be checked.
|
| + * @return iff checking has ended with the criteria being satisfied.
|
| + * @throws InterruptedException
|
| + * @see #pollForCriteria(Criteria, long, long)
|
| + */
|
| + public static boolean pollForCriteria(Criteria criteria) throws InterruptedException {
|
| + return pollForCriteria(criteria, DEFAULT_MAX_TIME_TO_POLL, DEFAULT_POLLING_INTERVAL);
|
| + }
|
| +
|
| + /**
|
| + * Performs the runnable action, then checks whether the given criteria are satisfied
|
| + * until the specified timeout, using the pollForCriteria method. If not, then the runnable
|
| + * action is performed again, to a maximum of maxAttempts tries.
|
| + */
|
| + public static boolean runUntilCriteria(Runnable runnable, Criteria criteria,
|
| + int maxAttempts, long maxTimeoutMs, long checkIntervalMs) throws InterruptedException {
|
| + int count = 0;
|
| + boolean success = false;
|
| + while (count < maxAttempts && !success) {
|
| + count++;
|
| + runnable.run();
|
| + success = pollForCriteria(criteria, maxTimeoutMs, checkIntervalMs);
|
| + }
|
| + return success;
|
| + }
|
| +}
|
|
|