package de.vksi.c4j.systemtest.contractclassmagic;
import static de.vksi.c4j.Condition.preCondition;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Rule;
import org.junit.Test;
import de.vksi.c4j.AllowPureAccess;
import de.vksi.c4j.ContractReference;
import de.vksi.c4j.Target;
import de.vksi.c4j.systemtest.TransformerAwareRule;
public class InitContractSystemTest {
@Rule
public TransformerAwareRule transformerAware = new TransformerAwareRule();
@Test
public void testInitContractNotCalledWithoutCondition() {
TargetClass target = new TargetClass();
assertFalse(target.initContractCalled);
}
@Test
public void testInitContractCalled() {
TargetClass target = new TargetClass();
target.method();
assertTrue(target.initContractCalled);
}
@ContractReference(ContractClass.class)
private static class TargetClass {
@AllowPureAccess
protected boolean initContractCalled;
public void method() {
}
}
@SuppressWarnings("unused")
private static class ContractClass extends TargetClass {
@Target
private TargetClass target;
public ContractClass() {
target.initContractCalled = true;
}
@Override
public void method() {
if (preCondition()) {
}
}
}
}