package de.vksi.c4j.systemtest.contractclassmagic; import static de.vksi.c4j.Condition.preCondition; import org.junit.Rule; import org.junit.Test; import de.vksi.c4j.ContractReference; import de.vksi.c4j.systemtest.TransformerAwareRule; public class ContractIsInitializedSystemTest { @Rule public TransformerAwareRule transformerAware = new TransformerAwareRule(); @Test public void contractIsInitialized() { new TargetClass().method(); } @ContractReference(ContractClass.class) private static class TargetClass { public void method() { } } private static class ContractClass extends TargetClass { private String value = "sampleValue"; @Override public void method() { if (preCondition()) { assert "sampleValue".equals(value); } } } @Test public void multipleContractsAreInitialized() { new TargetClass1().method(); } @ContractReference(ContractClass1.class) private static class TargetClass1 extends TargetClass2 { public void method() { } } private static class ContractClass1 extends TargetClass1 { private String value = "sampleValue"; @Override public void method() { if (preCondition()) { assert "sampleValue".equals(value); } } } @ContractReference(ContractClass2.class) private static class TargetClass2 { } @SuppressWarnings("unused") private static class ContractClass2 extends TargetClass2 { public ContractClass2() { if (preCondition()) { } } } @Test public void contractClassIsInitialized() throws Exception { new StaticTargetClass().method(); } @ContractReference(StaticContractClass.class) private static class StaticTargetClass { public void method() { } } private static class StaticContractClass extends StaticTargetClass { private static String value = "sampleValue"; @Override public void method() { if (preCondition()) { assert "sampleValue".equals(value); } } } }