1 /*
2  * Copyright (C) 2017 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.doze;
18 
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertSame;
21 import static org.mockito.Mockito.mock;
22 import static org.mockito.Mockito.verify;
23 import static org.mockito.Mockito.when;
24 
25 import android.view.Display;
26 
27 import androidx.test.filters.SmallTest;
28 
29 import com.android.systemui.SysuiTestCase;
30 import com.android.systemui.statusbar.phone.DozeParameters;
31 import com.android.systemui.util.concurrency.FakeExecutor;
32 import com.android.systemui.util.time.FakeSystemClock;
33 
34 import org.junit.Before;
35 import org.junit.Test;
36 
37 import java.util.concurrent.Executor;
38 
39 @SmallTest
40 public class DozeScreenStatePreventingAdapterTest extends SysuiTestCase {
41 
42     private Executor mExecutor;
43     private DozeMachine.Service mInner;
44     private DozeScreenStatePreventingAdapter mWrapper;
45 
46     @Before
setup()47     public void setup() throws Exception {
48         mExecutor = new FakeExecutor(new FakeSystemClock());
49         mInner = mock(DozeMachine.Service.class);
50         mWrapper = new DozeScreenStatePreventingAdapter(
51                 mInner,
52                 mExecutor
53         );
54     }
55 
56     @Test
forwards_finish()57     public void forwards_finish() throws Exception {
58         mWrapper.finish();
59         verify(mInner).finish();
60     }
61 
62     @Test
forwards_setDozeScreenState_on()63     public void forwards_setDozeScreenState_on() throws Exception {
64         mWrapper.setDozeScreenState(Display.STATE_ON);
65         verify(mInner).setDozeScreenState(Display.STATE_ON);
66     }
67 
68     @Test
forwards_setDozeScreenState_off()69     public void forwards_setDozeScreenState_off() throws Exception {
70         mWrapper.setDozeScreenState(Display.STATE_OFF);
71         verify(mInner).setDozeScreenState(Display.STATE_OFF);
72     }
73 
74     @Test
forwards_setDozeScreenState_doze()75     public void forwards_setDozeScreenState_doze() throws Exception {
76         mWrapper.setDozeScreenState(Display.STATE_DOZE);
77         verify(mInner).setDozeScreenState(Display.STATE_ON);
78     }
79 
80     @Test
forwards_setDozeScreenState_doze_suspend()81     public void forwards_setDozeScreenState_doze_suspend() throws Exception {
82         mWrapper.setDozeScreenState(Display.STATE_DOZE_SUSPEND);
83         verify(mInner).setDozeScreenState(Display.STATE_ON_SUSPEND);
84     }
85 
86     @Test
forwards_requestWakeUp()87     public void forwards_requestWakeUp() {
88         mWrapper.requestWakeUp(DozeLog.REASON_SENSOR_PICKUP);
89         verify(mInner).requestWakeUp(DozeLog.REASON_SENSOR_PICKUP);
90     }
91 
92     @Test
wrapIfNeeded_needed()93     public void wrapIfNeeded_needed() throws Exception {
94         DozeParameters params = mock(DozeParameters.class);
95         when(params.getDisplayStateSupported()).thenReturn(false);
96 
97         assertEquals(DozeScreenStatePreventingAdapter.class,
98                 DozeScreenStatePreventingAdapter.wrapIfNeeded(mInner, params, mExecutor)
99                         .getClass());
100     }
101 
102     @Test
wrapIfNeeded_not_needed()103     public void wrapIfNeeded_not_needed() throws Exception {
104         DozeParameters params = mock(DozeParameters.class);
105         when(params.getDisplayStateSupported()).thenReturn(true);
106 
107         assertSame(mInner, DozeScreenStatePreventingAdapter.wrapIfNeeded(mInner, params,
108                 mExecutor));
109     }
110 }
111