1 /* 2 * Copyright 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.dreams; 18 19 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; 20 import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; 21 22 import static org.mockito.ArgumentMatchers.any; 23 import static org.mockito.ArgumentMatchers.anyInt; 24 import static org.mockito.ArgumentMatchers.eq; 25 import static org.mockito.Mockito.mock; 26 import static org.mockito.Mockito.spy; 27 import static org.mockito.Mockito.when; 28 29 import android.app.ActivityManagerInternal; 30 import android.content.ContextWrapper; 31 import android.content.pm.UserInfo; 32 import android.content.res.Resources; 33 import android.os.PowerManagerInternal; 34 import android.os.UserHandle; 35 import android.os.UserManager; 36 import android.provider.Settings; 37 38 import androidx.test.InstrumentationRegistry; 39 40 import com.android.server.LocalServices; 41 import com.android.server.SystemService; 42 43 import org.junit.After; 44 import org.junit.Before; 45 import org.junit.Test; 46 import org.mockito.Mock; 47 import org.mockito.MockitoAnnotations; 48 import org.mockito.MockitoSession; 49 import org.mockito.quality.Strictness; 50 51 /** 52 * Collection of tests for exercising the {@link DreamManagerService} lifecycle. 53 */ 54 public class DreamManagerServiceMockingTest { 55 private ContextWrapper mContextSpy; 56 private Resources mResourcesSpy; 57 58 @Mock 59 private ActivityManagerInternal mActivityManagerInternalMock; 60 61 @Mock 62 private PowerManagerInternal mPowerManagerInternalMock; 63 64 @Mock 65 private UserManager mUserManagerMock; 66 67 private MockitoSession mMockitoSession; 68 addLocalServiceMock(Class<T> clazz, T mock)69 private static <T> void addLocalServiceMock(Class<T> clazz, T mock) { 70 LocalServices.removeServiceForTest(clazz); 71 LocalServices.addService(clazz, mock); 72 } 73 74 @Before setUp()75 public void setUp() throws Exception { 76 MockitoAnnotations.initMocks(this); 77 78 mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext())); 79 mResourcesSpy = spy(mContextSpy.getResources()); 80 when(mContextSpy.getResources()).thenReturn(mResourcesSpy); 81 82 addLocalServiceMock(ActivityManagerInternal.class, mActivityManagerInternalMock); 83 addLocalServiceMock(PowerManagerInternal.class, mPowerManagerInternalMock); 84 85 when(mContextSpy.getSystemService(UserManager.class)).thenReturn(mUserManagerMock); 86 mMockitoSession = mockitoSession() 87 .initMocks(this) 88 .strictness(Strictness.LENIENT) 89 .mockStatic(Settings.Secure.class) 90 .startMocking(); 91 } 92 93 @After tearDown()94 public void tearDown() throws Exception { 95 mMockitoSession.finishMocking(); 96 LocalServices.removeServiceForTest(ActivityManagerInternal.class); 97 LocalServices.removeServiceForTest(PowerManagerInternal.class); 98 } 99 createService()100 private DreamManagerService createService() { 101 return new DreamManagerService(mContextSpy); 102 } 103 104 @Test testSettingsQueryUserChange()105 public void testSettingsQueryUserChange() { 106 final DreamManagerService service = createService(); 107 108 final SystemService.TargetUser from = 109 new SystemService.TargetUser(mock(UserInfo.class)); 110 final SystemService.TargetUser to = 111 new SystemService.TargetUser(mock(UserInfo.class)); 112 113 service.onUserSwitching(from, to); 114 115 verify(() -> Settings.Secure.getIntForUser(any(), 116 eq(Settings.Secure.SCREENSAVER_ENABLED), 117 anyInt(), 118 eq(UserHandle.USER_CURRENT))); 119 } 120 } 121