package de.vksi.c4j.systemtest.contractclassmagic; import static de.vksi.c4j.Condition.ignored; import static de.vksi.c4j.Condition.postCondition; import static de.vksi.c4j.Condition.result; import org.junit.Rule; import org.junit.Test; import de.vksi.c4j.ContractReference; import de.vksi.c4j.Pure; import de.vksi.c4j.systemtest.TransformerAwareRule; public class ContractClassDefiningOwnConstructorSystemTest { @Rule public TransformerAwareRule transformerAwareRule = new TransformerAwareRule(); @Test public void testContractClassDefiningOwnConstructor() { new TargetClass(5).getValue(); } @ContractReference(ContractClass.class) private static class TargetClass { private int value; public TargetClass(int value) { this.value = value; } @Pure public int getValue() { return value; } } private static class ContractClass extends TargetClass { public ContractClass() { super(0); } @Override public int getValue() { if (postCondition()) { int result = (Integer) result(); assert result > 0; } return (Integer) ignored(); } } }