package org.robolectric.internal.bytecode; import android.os.Build; import javax.annotation.Nonnull; import org.junit.Before; import org.junit.Test; import org.robolectric.android.AndroidInterceptors; import org.robolectric.internal.AndroidConfigurer; import org.robolectric.internal.SandboxFactory; import java.lang.reflect.Modifier; import static org.assertj.core.api.Assertions.assertThat; public class AndroidSandboxClassLoaderTest { private ClassLoader classLoader; @Before public void setUp() throws Exception { classLoader = SandboxFactory.INSTANCE.createClassLoader(configureBuilder().build()); } @Test public void shouldMakeBuildVersionIntsNonFinal() throws Exception { Class<?> versionClass = loadClass(Build.VERSION.class); int modifiers = versionClass.getDeclaredField("SDK_INT").getModifiers(); assertThat(Modifier.isFinal(modifiers)).as("SDK_INT should be non-final").isFalse(); } //////////////////////// @Nonnull private InstrumentationConfiguration.Builder configureBuilder() { InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder(); builder.doNotAcquirePackage("java."); AndroidConfigurer.configure(builder, new Interceptors(AndroidInterceptors.all())); return builder; } private Class<?> loadClass(Class<?> clazz) throws ClassNotFoundException { return classLoader.loadClass(clazz.getName()); } }