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