package de.vksi.c4j.systemtest.config;
import static org.junit.Assert.assertFalse;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import de.vksi.c4j.ClassInvariant;
import de.vksi.c4j.ContractReference;
import de.vksi.c4j.Pure;
import de.vksi.c4j.systemtest.TransformerAwareRule;
public class DefaultPureBehaviorSystemTest {
@Rule
public TransformerAwareRule transformerAwareRule = new TransformerAwareRule();
private TargetClass target;
@Before
public void before() {
target = new TargetClass();
}
@Test(expected = AssertionError.class)
public void testPureValidated() {
target.pureMethodFailing();
}
@Test
public void testInvariantNotCalled() {
ContractClass.invariantCalled = false;
target.pureMethod();
assertFalse(ContractClass.invariantCalled);
}
@SuppressWarnings("unused")
@ContractReference(ContractClass.class)
private static class TargetClass {
protected int value;
@Pure
public void pureMethod() {
}
@Pure
public void pureMethodFailing() {
value = 3;
}
}
@SuppressWarnings("unused")
private static class ContractClass extends TargetClass {
public static boolean invariantCalled;
@ClassInvariant
public void invariant() {
invariantCalled = true;
}
}
}