1 package org.robolectric.shadows; 2 3 import static com.google.common.truth.Truth.assertThat; 4 5 import android.app.Application; 6 import android.content.res.AssetManager; 7 import android.content.res.Resources; 8 import androidx.test.ext.junit.runners.AndroidJUnit4; 9 import java.util.concurrent.atomic.AtomicLong; 10 import org.junit.FixMethodOrder; 11 import org.junit.Test; 12 import org.junit.runner.RunWith; 13 import org.junit.runners.MethodSorters; 14 import org.robolectric.RuntimeEnvironment; 15 import org.robolectric.annotation.Config; 16 import org.robolectric.annotation.ResourcesMode; 17 import org.robolectric.annotation.ResourcesMode.Mode; 18 import org.robolectric.shadow.api.Shadow; 19 import org.robolectric.versioning.AndroidVersions.P; 20 21 @FixMethodOrder(MethodSorters.NAME_ASCENDING) 22 @RunWith(AndroidJUnit4.class) 23 @Config(minSdk = P.SDK_INT) 24 @ResourcesMode(Mode.BINARY) 25 public class AssetManagerCachingTest { 26 private static final AtomicLong systemNativePtr = new AtomicLong(); 27 28 @Test test1_getAssetManagerPtr()29 public void test1_getAssetManagerPtr() { 30 AssetManager systemAssetManager = Resources.getSystem().getAssets(); 31 systemNativePtr.set(getNativePtr(systemAssetManager)); 32 assertThat(systemNativePtr.get()).isNotEqualTo(0); 33 } 34 35 @Test test2_verifySamePtr()36 public void test2_verifySamePtr() { 37 AssetManager systemAssetManager = Resources.getSystem().getAssets(); 38 long nativePtr = getNativePtr(systemAssetManager); 39 assertThat(nativePtr).isEqualTo(systemNativePtr.get()); 40 } 41 42 @Test test3_createApplicationAssets()43 public void test3_createApplicationAssets() { 44 AssetManager systemAssetManager = Resources.getSystem().getAssets(); 45 Application application = RuntimeEnvironment.getApplication(); 46 AssetManager assetManager = application.getAssets(); 47 long nativePtr = getNativePtr(systemAssetManager); 48 long appNativePtr = getNativePtr(assetManager); 49 assertThat(nativePtr).isEqualTo(systemNativePtr.get()); 50 assertThat(nativePtr).isNotEqualTo(appNativePtr); 51 } 52 getNativePtr(AssetManager assetManager)53 private static long getNativePtr(AssetManager assetManager) { 54 return ((ShadowAssetManager) Shadow.extract(assetManager)).getNativePtr(); 55 } 56 } 57