package de.vksi.c4j.systemtest.classinvariant; import static de.vksi.c4j.Condition.constructorCall; import static de.vksi.c4j.Condition.old; import org.junit.Rule; import org.junit.Test; import de.vksi.c4j.ClassInvariant; import de.vksi.c4j.ContractReference; import de.vksi.c4j.Target; import de.vksi.c4j.systemtest.TransformerAwareRule; public class OldInClassInvariantSystemTest { @Rule public TransformerAwareRule transformerAware = new TransformerAwareRule(); @Test public void testOldInClassInvariant() { new TargetClass().incrementValue(); } @Test(expected = AssertionError.class) public void testOldInClassInvariantFailing() { new TargetClass().decrementValue(); } @ContractReference(ContractClass.class) private static class TargetClass { protected int value; public void incrementValue() { value++; } public void decrementValue() { value--; } } @SuppressWarnings("unused") private static class ContractClass { @Target private TargetClass target; @ClassInvariant public void invariant() { assert constructorCall() || old(target.value) < target.value; } } }