package de.vksi.c4j.systemtest.pure; import org.junit.Rule; import org.junit.Test; import de.vksi.c4j.Pure; import de.vksi.c4j.systemtest.TransformerAwareRule; public class StaticInitializerInPureContextSystemTest { @Rule public TransformerAwareRule transformerAwareRule = new TransformerAwareRule(); @Test public void enumReferenceSettingOwnFields() throws Exception { new DummyClass().methodReferencingEnum(); } @Test public void staticInitializerSettingOwnFields() throws Exception { new DummyClass().methodCausingStaticInitializerCall(); } @Test(expected = AssertionError.class) public void staticInitializerSettingExternalFields() throws Exception { new DummyClass().methodCausingStaticInitializerCallInitializingExternalFields(); } private static class DummyClass { @Pure public void methodReferencingEnum() { doNothingWithEnumValue(SampleEnum.ENUM_VALUE); } @Pure public void methodCausingStaticInitializerCallInitializingExternalFields() { doNothingWithIntValue(StaticClassInitializingExternalFields.ownValue); } @Pure public void methodCausingStaticInitializerCall() { doNothingWithIntValue(StaticClass.value); } @Pure private void doNothingWithIntValue(int value) { } @Pure private void doNothingWithEnumValue(SampleEnum enumValue) { } } private static class StaticClassInitializingExternalFields { public static int ownValue; static { ownValue = 2; StaticClass.value = 5; } } private static class StaticClass { public static int value; static { value = 3; } } public static enum SampleEnum { ENUM_VALUE; } }