package de.vksi.c4j.systemtest.unchanged;
import static de.vksi.c4j.Condition.postCondition;
import static de.vksi.c4j.Condition.preCondition;
import static de.vksi.c4j.Condition.unchanged;
import static org.junit.Assert.assertEquals;
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 UnchangedParamOutOfBoundsSystemTest {
@Rule
public TransformerAwareRule transformerAware = new TransformerAwareRule();
@Test
public void testGetHour() throws Exception {
TargetClass timeOfDay = new TargetClass();
assertEquals(0, timeOfDay.getHour());
timeOfDay.setHour(5);
assertEquals(5, timeOfDay.getHour());
}
private static class ContractClass extends TargetClass {
@Target
private TargetClass target;
@Override
public void setHour(int hour) {
if (preCondition()) {
assert hour >= 0 && hour <= 23;
}
if (postCondition()) {
assert hour == target.getHour();
assert unchanged(target.getMinute());
}
}
}
@ContractReference(ContractClass.class)
private static class TargetClass {
private int hour;
private int minute;
@Pure
public int getHour() {
return hour;
}
public void setHour(int hour) {
this.hour = hour;
}
@Pure
public int getMinute() {
return minute;
}
}
}