1 /* 2 * Copyright (C) 2018 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.systemui.statusbar.policy; 18 19 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; 20 21 import static org.mockito.ArgumentMatchers.any; 22 import static org.mockito.Mockito.mock; 23 import static org.mockito.Mockito.verify; 24 import static org.mockito.Mockito.verifyZeroInteractions; 25 26 import android.os.Handler; 27 import android.os.Looper; 28 import android.os.PowerManager; 29 import android.platform.test.annotations.DisableFlags; 30 import android.platform.test.annotations.EnableFlags; 31 import android.testing.AndroidTestingRunner; 32 import android.testing.TestableLooper; 33 34 import androidx.test.filters.SmallTest; 35 36 import com.android.settingslib.fuelgauge.BatterySaverUtils; 37 import com.android.systemui.Flags; 38 import com.android.systemui.SysuiTestCase; 39 import com.android.systemui.broadcast.BroadcastDispatcher; 40 import com.android.systemui.demomode.DemoModeController; 41 import com.android.systemui.dump.DumpManager; 42 import com.android.systemui.power.EnhancedEstimates; 43 import com.android.systemui.util.concurrency.FakeExecutor; 44 import com.android.systemui.util.time.FakeSystemClock; 45 46 import org.junit.After; 47 import org.junit.Before; 48 import org.junit.Test; 49 import org.junit.runner.RunWith; 50 import org.mockito.Mock; 51 import org.mockito.MockitoAnnotations; 52 import org.mockito.MockitoSession; 53 54 @SmallTest 55 @RunWith(AndroidTestingRunner.class) 56 @TestableLooper.RunWithLooper 57 public class BatteryControllerStartableTest extends SysuiTestCase { 58 59 private BatteryController mBatteryController; 60 private BatteryControllerStartable mBatteryControllerStartable; 61 private MockitoSession mMockitoSession; 62 private FakeExecutor mExecutor; 63 @Mock 64 private BroadcastDispatcher mBroadcastDispatcher; 65 66 @Before setUp()67 public void setUp() throws IllegalStateException { 68 MockitoAnnotations.initMocks(this); 69 mMockitoSession = mockitoSession() 70 .initMocks(this) 71 .mockStatic(BatterySaverUtils.class) 72 .startMocking(); 73 74 mExecutor = new FakeExecutor(new FakeSystemClock()); 75 76 mBatteryController = new BatteryControllerImpl(getContext(), 77 mock(EnhancedEstimates.class), 78 mock(PowerManager.class), 79 mock(BroadcastDispatcher.class), 80 mock(DemoModeController.class), 81 mock(DumpManager.class), 82 mock(BatteryControllerLogger.class), 83 new Handler(Looper.getMainLooper()), 84 new Handler(Looper.getMainLooper())); 85 mBatteryController.init(); 86 87 mBatteryControllerStartable = new BatteryControllerStartable(mBatteryController, 88 mBroadcastDispatcher, mExecutor); 89 } 90 91 @After tearDown()92 public void tearDown() { 93 mMockitoSession.finishMocking(); 94 } 95 96 @Test 97 @EnableFlags(Flags.FLAG_REGISTER_BATTERY_CONTROLLER_RECEIVERS_IN_CORESTARTABLE) start_flagEnabled_registersListeners()98 public void start_flagEnabled_registersListeners() { 99 mBatteryControllerStartable.start(); 100 mExecutor.runAllReady(); 101 102 verify(mBroadcastDispatcher).registerReceiver(any(), any()); 103 } 104 105 @Test 106 @DisableFlags(Flags.FLAG_REGISTER_BATTERY_CONTROLLER_RECEIVERS_IN_CORESTARTABLE) start_flagDisabled_doesNotRegistersListeners()107 public void start_flagDisabled_doesNotRegistersListeners() { 108 mBatteryControllerStartable.start(); 109 mExecutor.runAllReady(); 110 111 verifyZeroInteractions(mBroadcastDispatcher); 112 } 113 } 114