package de.vksi.c4j.systemtest.contractclassmagic; import static de.vksi.c4j.internal.classfile.ClassAnalyzer.getSimplerName; import static org.junit.Assert.assertNotNull; import org.apache.log4j.Level; import org.junit.Rule; import org.junit.Test; import de.vksi.c4j.ContractReference; import de.vksi.c4j.systemtest.TransformerAwareRule; public class ExplicitlyLoadContractClassBeforeTargetClassSystemTest { @Rule public TransformerAwareRule transformerAwareRule = new TransformerAwareRule(); @Test public void testLoadContractClassBeforeTargetClass1() { transformerAwareRule.expectGlobalLog(Level.ERROR, "Class " + getSimplerName(ContractClass.class) + " cannot be its own contract-class. Try explicitly marking " + getSimplerName(ContractClass.class) + " with @Contract."); // load ContractClass assertNotNull(ContractClass.class); } @Test public void testLoadContractClassBeforeTargetClass2() { // load ContractClass assertNotNull(ContractClass.class); transformerAwareRule.expectGlobalLog(Level.ERROR, "Ignoring contract class " + getSimplerName(ContractClass.class) + " defined on " + getSimplerName(TargetClass.class) + " as it has been loaded before the target type was loaded."); new TargetClass(); } @ContractReference(ContractClass.class) private static class TargetClass { } private static class ContractClass extends TargetClass { } }