package de.vksi.c4j.systemtest.cleanup;
import static de.vksi.c4j.Condition.preCondition;
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 UnpureCacheSideEffectSystemTest {
@Rule
public TransformerAwareRule transformerAwareRule = new TransformerAwareRule();
@Test(expected = AssertionError.class)
public void testSideEffect() {
new TargetClass().pureMethod();
}
@ContractReference(ContractClass.class)
private static class TargetClass {
private OtherClass other = new OtherClass();
@Pure
public void pureMethod() {
unpureMethod();
}
protected void unpureMethod() {
other.unpureMethod();
}
}
private static class OtherClass {
public void unpureMethod() {
}
}
private static class ContractClass extends TargetClass {
@Override
protected void unpureMethod() {
if (preCondition()) {
}
}
}
}