/*******************************************************************************
* Copyright 2014 JHC Systems Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package jhc.redsniff.internal.predicates;
import jhc.redsniff.core.Finder;
import jhc.redsniff.core.FindingPredicates;
import jhc.redsniff.internal.core.CollectionOf;
import jhc.redsniff.internal.core.Item;
import jhc.redsniff.internal.core.Quantity;
import org.hamcrest.Description;
/**
* A Predicate on an element or a collection of elements meeting a certain criteria.
* E.g.: there being 4 of something; something being absent
* Specifies the condition on the elements found.
* Able to diagnose why the supplied elements are not satisfactory and what it is expecting.
* Basically equivalent to a hamcrest matcher of Quantity<E> but with different signature.
* Commonly used predicates are defined in {@link FindingPredicates}
*
* @param <E> the type of element
* @param <Q> the type of Quantity - either {@link Item} or {@link CollectionOf}
*/
public interface Predicate<E, Q extends Quantity<E>> {
public boolean isSatisfiedBy(Q foundElements);
public void diagnoseNotSatisfyingTo(Description dissatisfactionDescription,Q foundElements, Description notFoundDescription);
public void describePredicateOnFinder(Finder<E, Q, ?> finder, Description description);
}