blob: 1a6fd4773e27873338e5949d2de810696bf736b5 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.base.test.util;
import android.text.TextUtils;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.StringDescription;
/**
* Provides a means for validating whether some condition/criteria has been met.
* <p>
* See {@link CriteriaHelper} for usage guidelines.
*/
public final class Criteria {
private Criteria() {}
/**
* Validates that a expected condition has been met, and throws an
* {@link CriteriaNotSatisfiedException} if not.
*
* @param <T> The type of value whose being tested.
* @param actual The actual value being tested.
* @param matcher Determines if the current value matches the desired expectation.
*/
public static <T> void checkThat(T actual, Matcher<T> matcher) {
checkThat("", actual, matcher);
}
/**
* Validates that a expected condition has been met, and throws an
* {@link CriteriaNotSatisfiedException} if not.
*
* @param <T> The type of value whose being tested.
* @param reason Additional reason description for the failure.
* @param actual The actual value being tested.
* @param matcher Determines if the current value matches the desired expectation.
*/
public static <T> void checkThat(String reason, T actual, Matcher<T> matcher) {
if (matcher.matches(actual)) return;
Description description = new StringDescription();
if (!TextUtils.isEmpty(reason)) {
description.appendText(reason).appendText(System.lineSeparator());
}
description
.appendText("Expected: ")
.appendDescriptionOf(matcher)
.appendText(System.lineSeparator())
.appendText(" but: ");
matcher.describeMismatch(actual, description);
throw new CriteriaNotSatisfiedException(description.toString());
}
}