package org.robolectric.shadows; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import com.google.android.collect.Lists; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.TestRunners; import org.robolectric.annotation.Config; import static android.os.Build.VERSION_CODES.M; import static org.assertj.core.api.Assertions.assertThat; import static org.robolectric.Shadows.shadowOf; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowActivityManagerTest { @Test public void getMemoryInfo_canGetMemoryInfoForOurProcess() { final ActivityManager activityManager = getActivityManager(); ShadowActivityManager shadowActivityManager = shadowOf(activityManager); ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); memoryInfo.availMem = 12345; memoryInfo.lowMemory = true; memoryInfo.threshold = 10000; memoryInfo.totalMem = 55555; shadowActivityManager.setMemoryInfo(memoryInfo); ActivityManager.MemoryInfo fetchedMemoryInfo = new ActivityManager.MemoryInfo(); activityManager.getMemoryInfo(fetchedMemoryInfo); assertThat(fetchedMemoryInfo.availMem).isEqualTo(12345); assertThat(fetchedMemoryInfo.lowMemory).isTrue(); assertThat(fetchedMemoryInfo.threshold).isEqualTo(10000); assertThat(fetchedMemoryInfo.totalMem).isEqualTo(55555); } @Test public void getMemoryInfo_canGetMemoryInfoEvenWhenWeDidNotSetIt() { final ActivityManager activityManager = getActivityManager(); ActivityManager.MemoryInfo fetchedMemoryInfo = new ActivityManager.MemoryInfo(); activityManager.getMemoryInfo(fetchedMemoryInfo); assertThat(fetchedMemoryInfo.lowMemory).isFalse(); } @Test public void getRunningTasks_shouldReturnTaskList() { final ActivityManager activityManager = getActivityManager(); final ActivityManager.RunningTaskInfo task1 = buildTaskInfo(new ComponentName("org.robolectric", "Task 1")); final ActivityManager.RunningTaskInfo task2 = buildTaskInfo(new ComponentName("org.robolectric", "Task 2")); assertThat(activityManager.getRunningTasks(Integer.MAX_VALUE)).isEmpty(); shadowOf(activityManager).setTasks(Lists.newArrayList(task1, task2)); assertThat(activityManager.getRunningTasks(Integer.MAX_VALUE)).containsExactly(task1, task2); } @Test public void getRunningAppProcesses_shouldReturnProcessList() { final ActivityManager activityManager = getActivityManager(); final ActivityManager.RunningAppProcessInfo process1 = buildProcessInfo(new ComponentName("org.robolectric", "Process 1")); final ActivityManager.RunningAppProcessInfo process2 = buildProcessInfo(new ComponentName("org.robolectric", "Process 2")); assertThat(activityManager.getRunningAppProcesses()).isEmpty(); shadowOf(activityManager).setProcesses(Lists.newArrayList(process1, process2)); assertThat(activityManager.getRunningAppProcesses()).containsExactly(process1, process2); } @Test public void getRunningServices_shouldReturnServiceList() { final ActivityManager activityManager = getActivityManager(); final ActivityManager.RunningServiceInfo service1 = buildServiceInfo(new ComponentName("org.robolectric", "Service 1")); final ActivityManager.RunningServiceInfo service2 = buildServiceInfo(new ComponentName("org.robolectric", "Service 2")); assertThat(activityManager.getRunningServices(Integer.MAX_VALUE)).isEmpty(); shadowOf(activityManager).setServices(Lists.newArrayList(service1, service2)); assertThat(activityManager.getRunningServices(Integer.MAX_VALUE)).containsExactly(service1, service2); } @Test public void getMemoryClass_shouldWork() { final ActivityManager activityManager = getActivityManager(); assertThat(activityManager.getMemoryClass()).isEqualTo(16); shadowOf(activityManager).setMemoryClass(42); assertThat(activityManager.getMemoryClass()).isEqualTo(42); } @Test public void killBackgroundProcesses_shouldWork() { final ActivityManager activityManager = getActivityManager(); assertThat(shadowOf(activityManager).getBackgroundPackage()).isNull(); activityManager.killBackgroundProcesses("org.robolectric"); assertThat(shadowOf(activityManager).getBackgroundPackage()).isEqualTo("org.robolectric"); } @Test public void getLauncherLargeIconDensity_shouldWork() { final ActivityManager activityManager = getActivityManager(); assertThat(activityManager.getLauncherLargeIconDensity()).isGreaterThan(0); } @Test public void isUserAMonkey_shouldReturnFalse() { assertThat(ActivityManager.isUserAMonkey()).isFalse(); } @Test @Config(minSdk = M) public void getLockTaskModeState() throws Exception { assertThat(getActivityManager().getLockTaskModeState()).isEqualTo(0); // just don't throw } /////////////////////// private ActivityManager getActivityManager() { return (ActivityManager) RuntimeEnvironment.application.getSystemService(Context.ACTIVITY_SERVICE); } private ActivityManager.RunningTaskInfo buildTaskInfo(ComponentName name) { final ActivityManager.RunningTaskInfo info = new ActivityManager.RunningTaskInfo(); info.baseActivity = name; return info; } private ActivityManager.RunningServiceInfo buildServiceInfo(ComponentName name) { final ActivityManager.RunningServiceInfo info = new ActivityManager.RunningServiceInfo(); info.service = name; return info; } private ActivityManager.RunningAppProcessInfo buildProcessInfo(ComponentName name) { final ActivityManager.RunningAppProcessInfo info = new ActivityManager.RunningAppProcessInfo(); info.importanceReasonComponent = name; return info; } }