package de.vksi.c4j.acceptancetest.object; import static de.vksi.c4j.Condition.ignored; import static de.vksi.c4j.Condition.postCondition; import static de.vksi.c4j.Condition.result; import de.vksi.c4j.Target; public class ObjectSpecContract implements ObjectSpec { @Target private ObjectSpec target; private Object z; @Override public boolean equals(Object obj) { if (postCondition()) { boolean result = result(Boolean.class); Object x = target; Object y = obj; if (z == null) { z = obj; } if (obj == null) { assert result == false : "if obj == null then false"; } else { assert x.equals(x) : "is reflexive"; assert x.equals(y) == y.equals(x) : "is symmetric"; if (x.equals(y) && y.equals(z)) { assert x.equals(z) : "is transitive"; } assert x.equals(y) == x.equals(y) : "is consistent with equals"; if (x.equals(y)) { assert x.hashCode() == y.hashCode() : "is consistent with hashCode"; } } } return (Boolean) ignored(); } @Override public String toString() { if (postCondition()) { String result = result(String.class); assert result != null : "result not null"; } return ignored(); } }