package de.vksi.c4j.acceptancetest.subclasses; import static de.vksi.c4j.Condition.ignored; import static de.vksi.c4j.Condition.result; import de.vksi.c4j.ClassInvariant; import de.vksi.c4j.Condition; import de.vksi.c4j.Target; public class TopContract extends Top { @Target private Top target; @Override public int pre(String parameter) { if (Condition.preCondition()) { assert parameter != null : "parameter must not be null"; } return (Integer) ignored(); } @Override public int post(String parameter) { if (Condition.postCondition()) { assert result(Integer.class) >= 0 : "result >= 0"; } return (Integer) ignored(); } @Override public int preAndPost(String parameter) { if (Condition.preCondition()) { assert parameter != null : "parameter must not be null"; } if (Condition.postCondition()) { assert result(Integer.class) >= 0 : "result >= 0"; } return (Integer) ignored(); } @Override public int invariant(String parameter) { return (Integer) ignored(); } @ClassInvariant public void aIsAlwaysAMultipleOfTwo() { assert target.pre("") % 2 == 0 : "a() is a multiple of two"; } @Override public int unchanged() { if (Condition.postCondition()) { assert Condition.unchanged(target.unchanged()) : "unchanged never changes"; } return (Integer) ignored(); } @Override public int old() { if (Condition.postCondition()) { assert result().equals(Condition.old(target.old())) : "old value is preserved"; } return (Integer) ignored(); } }