package de.vksi.c4j.systemtest.inheritance;
import static de.vksi.c4j.Condition.preCondition;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import de.vksi.c4j.ContractReference;
import de.vksi.c4j.systemtest.TransformerAwareRule;
public class InterfaceSystemTest {
@Rule
public TransformerAwareRule transformerAware = new TransformerAwareRule();
private DummyClass dummy;
@Before
public void before() {
dummy = new DummyClass();
}
@Test
public void testPreCondition() {
dummy.method(3);
}
@Test(expected = AssertionError.class)
public void testPreConditionFailsInSuperClass() {
dummy.method(0);
}
private static class DummyClass implements ContractedInterface {
@Override
public void method(int value) {
}
}
@ContractReference(ContractedInterfaceContract.class)
public interface ContractedInterface {
void method(int value);
}
private static class ContractedInterfaceContract implements ContractedInterface {
@Override
public void method(int value) {
if (preCondition()) {
assert value > 0;
}
}
}
}