blob: 3080c2395dbb3e8c95900e0ec90f2a8b809dc786 [file] [log] [blame]
// Copyright 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_public.browser.test.util;
import java.util.concurrent.Callable;
/**
* Provides a means for validating whether some condition/criteria has been met.
* <p>
* See {@link CriteriaHelper} for usage guidelines.
*/
public abstract class Criteria {
private String mFailureReason;
/**
* Constructs a Criteria with a default failure message.
*/
public Criteria() {
this("Criteria not met in allotted time.");
}
/**
* Constructs a Criteria with an explicit message to be shown on failure.
* @param failureReason The failure reason to be shown.
*/
public Criteria(String failureReason) {
if (failureReason != null) mFailureReason = failureReason;
}
/**
* @return Whether the criteria this is testing has been satisfied.
*/
public abstract boolean isSatisfied();
/**
* @return The failure message that will be logged if the criteria is not satisfied within
* the specified time range.
*/
public String getFailureReason() {
return mFailureReason;
}
/**
* Updates the message to displayed if this criteria does not succeed in the allotted time. For
* correctness, you should be updating this in {@link #isSatisfied()} to ensure the error state
* is the same that you last checked.
*
* @param reason The failure reason to be shown.
*/
public void updateFailureReason(String reason) {
mFailureReason = reason;
}
/**
* Constructs a Criteria that will determine the equality of two items.
*
* <p>
* <pre>
* Sample Usage:
* <code>
* public void waitForTabTitle(final Tab tab, String title) {
* CriteriaHelper.pollUiThread(Criteria.equals(title, new Callable<String>() {
* {@literal @}Override
* public String call() {
* return tab.getTitle();
* }
* }));
* }
* </code>
* </pre>
*
* @param <T> The type of value whose equality will be tested.
* @param expectedValue The value that is expected to determine the success of the criteria.
* @param actualValueCallable A {@link Callable} that provides a way of getting the current
* actual value.
* @return A Criteria that will check the equality of the passed in data.
*/
public static <T> Criteria equals(T expectedValue, Callable<T> actualValueCallable) {
return new EqualityCriteria<T>(expectedValue, actualValueCallable);
}
}