package de.vksi.c4j.systemtest.inheritance; 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.systemtest.TransformerAwareRule; public class SeparateContractInstantiationSystemTest { @Rule public TransformerAwareRule transformerAwareRule = new TransformerAwareRule(); @Test public void testSeparateContractInstantiation() { new SubClass().interfaceMethod(); } @ContractReference(InterfaceContract.class) public interface Interface { public String interfaceMethod(); } private static class InterfaceContract implements Interface { private String fixedInstance; @Override public String interfaceMethod() { if (postCondition()) { String result = result(String.class); if (fixedInstance == null) { fixedInstance = result; } assert fixedInstance.equals(result); } return null; } } private static class SubClass extends SuperClass { @Override public String interfaceMethod() { super.interfaceMethod(); return "SubClass"; } } private static class SuperClass implements Interface { @Override public String interfaceMethod() { return "SuperClass"; } } }