package de.vksi.c4j.systemtest.classinvariant; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; 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.Target; import de.vksi.c4j.systemtest.TransformerAwareRule; public class ClassInvariantInPrivateMethodSystemTest { @Rule public TransformerAwareRule transformerAware = new TransformerAwareRule(); @Test public void testClassInvariantInPrivateMethod() { new TargetClass(); assertThat(ContractClass.invariantCalled, is(true)); } @ContractReference(ContractClass.class) private static class TargetClass { private int value = 0; public TargetClass() { init(); value = 1; } private void init() { value = 0; } @Pure public int getValue() { return value; } } @SuppressWarnings("unused") private static class ContractClass { private static boolean invariantCalled; @Target private TargetClass target; @ClassInvariant public void invariant() { invariantCalled = true; assert target.getValue() > 0; } } }