package fr.openwide.core.test.wicket.more.model;
import java.util.Map;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import com.google.common.base.Equivalence;
import com.google.common.base.Supplier;
public abstract class AbstractTestMapModel<M extends Map<?, ?>>
extends AbstractTestModel<M> {
protected static final Equivalence<Map<?, ?>> UNORDERED_MAP_EQUIVALENCE = new Equivalence<Map<?, ?>>() {
@Override
protected boolean doEquivalent(Map<?, ?> a, Map<?, ?> b) {
return a.size() == b.size() && b.entrySet().containsAll(a.entrySet()); // No constraint on Map order
}
@Override
protected int doHash(Map<?, ?> t) {
return t.hashCode();
}
@Override
public String toString() {
return "UNORDERED_SET_EQUIVALENCE";
}
};
protected final Supplier<? extends M> mapSupplier;
public AbstractTestMapModel(Supplier<? extends M> mapSupplier, Equivalence<? super M> equivalence) {
super(equivalence);
this.mapSupplier = mapSupplier;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
protected M clone(M map) {
M clone = mapSupplier.get();
clone.putAll((Map)map);
return clone;
}
protected Matcher<M> isEmpty() {
return new TypeSafeMatcher<M>() {
@Override
public void describeTo(Description description) {
description.appendText("an empty collection");
}
@Override
protected boolean matchesSafely(M item) {
return item.isEmpty();
}
};
}
}