package de.vksi.c4j.systemtest.postcondition;
import static de.vksi.c4j.Condition.ignored;
import static de.vksi.c4j.Condition.postCondition;
import static de.vksi.c4j.Condition.result;
import org.junit.Rule;
import org.junit.Test;
import de.vksi.c4j.ContractReference;
import de.vksi.c4j.Pure;
import de.vksi.c4j.Target;
import de.vksi.c4j.systemtest.TransformerAwareRule;
public class PostConditionAccessingTargetSystemTest {
@Rule
public TransformerAwareRule transformerAware = new TransformerAwareRule();
@Test
public void testPostConditionAccessingTarget() {
TargetClass target = new TargetClass();
target.method(3, 4);
}
@ContractReference(ContractClass.class)
private static class TargetClass {
private int z;
public Integer method(int x, int y) {
return z = x + y;
}
@Pure
public int getZ() {
return z;
}
}
private static class ContractClass extends TargetClass {
@Target
private TargetClass target;
@Override
public Integer method(int x, int y) {
if (postCondition()) {
// necessary for reproduction
target.getZ();
assert result(Integer.class).intValue() == x + y;
}
return ignored();
}
}
}