1 /* 2 * Copyright (C) 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.devicelockcontroller; 18 19 import static org.mockito.Mockito.mock; 20 21 import android.app.Application; 22 23 import com.android.devicelockcontroller.policy.DevicePolicyController; 24 import com.android.devicelockcontroller.policy.DeviceStateController; 25 import com.android.devicelockcontroller.policy.PolicyObjectsInterface; 26 import com.android.devicelockcontroller.policy.SetupController; 27 import com.android.devicelockcontroller.storage.GlobalParametersClient; 28 import com.android.devicelockcontroller.storage.GlobalParametersService; 29 import com.android.devicelockcontroller.storage.SetupParametersClient; 30 import com.android.devicelockcontroller.storage.SetupParametersService; 31 32 import com.google.common.util.concurrent.testing.TestingExecutors; 33 34 import org.robolectric.Robolectric; 35 import org.robolectric.TestLifecycleApplication; 36 37 import java.lang.reflect.Method; 38 39 /** 40 * Application class that provides mock objects for tests. 41 */ 42 public final class TestDeviceLockControllerApplication extends Application implements 43 PolicyObjectsInterface, TestLifecycleApplication { 44 45 private DevicePolicyController mPolicyController; 46 private DeviceStateController mStateController; 47 private SetupController mSetupController; 48 private SetupParametersClient mSetupParametersClient; 49 private GlobalParametersClient mGlobalParametersClient; 50 51 @Override getStateController()52 public DeviceStateController getStateController() { 53 if (mStateController == null) { 54 mStateController = mock(DeviceStateController.class); 55 } 56 return mStateController; 57 } 58 59 @Override getPolicyController()60 public DevicePolicyController getPolicyController() { 61 if (mPolicyController == null) { 62 mPolicyController = mock(DevicePolicyController.class); 63 } 64 return mPolicyController; 65 } 66 67 @Override getSetupController()68 public SetupController getSetupController() { 69 if (mSetupController == null) { 70 mSetupController = mock(SetupController.class); 71 } 72 return mSetupController; 73 } 74 75 @Override destroyObjects()76 public void destroyObjects() { 77 mPolicyController = null; 78 mStateController = null; 79 mSetupController = null; 80 } 81 82 83 @Override beforeTest(Method method)84 public void beforeTest(Method method) { 85 mSetupParametersClient = SetupParametersClient.getInstance(this, 86 TestingExecutors.sameThreadScheduledExecutor()); 87 mSetupParametersClient.setService( 88 Robolectric.setupService(SetupParametersService.class).onBind(/* intent= */ null)); 89 90 mGlobalParametersClient = GlobalParametersClient.getInstance( 91 this, TestingExecutors.sameThreadScheduledExecutor()); 92 mGlobalParametersClient.setService( 93 Robolectric.setupService(GlobalParametersService.class).onBind(/* intent= */ null)); 94 } 95 96 @Override prepareTest(Object test)97 public void prepareTest(Object test) { 98 } 99 100 @Override afterTest(Method method)101 public void afterTest(Method method) { 102 GlobalParametersClient.reset(); 103 SetupParametersClient.reset(); 104 } 105 } 106