1 /* 2 * Copyright (C) 2019 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 package com.android.settings.dashboard; 17 18 import static com.android.settingslib.core.instrumentation.Instrumentable.METRICS_CATEGORY_UNKNOWN; 19 20 import static org.mockito.ArgumentMatchers.any; 21 import static org.mockito.Mockito.never; 22 import static org.mockito.Mockito.spy; 23 import static org.mockito.Mockito.verify; 24 25 import android.content.Context; 26 27 import androidx.preference.Preference; 28 import androidx.preference.PreferenceManager; 29 import androidx.preference.PreferenceScreen; 30 31 import com.android.settingslib.core.AbstractPreferenceController; 32 33 import org.junit.Before; 34 import org.junit.Test; 35 import org.junit.runner.RunWith; 36 import org.robolectric.RobolectricTestRunner; 37 import org.robolectric.RuntimeEnvironment; 38 39 @RunWith(RobolectricTestRunner.class) 40 public class ControllerTaskTest { 41 private static final String KEY = "my_key"; 42 43 private Context mContext; 44 private PreferenceScreen mScreen; 45 private TestPreferenceController mTestController; 46 private ControllerTask mControllerTask; 47 48 @Before setUp()49 public void setUp() { 50 mContext = RuntimeEnvironment.application; 51 final PreferenceManager preferenceManager = new PreferenceManager(mContext); 52 mScreen = preferenceManager.createPreferenceScreen(mContext); 53 mTestController = spy(new TestPreferenceController(mContext)); 54 mControllerTask = new ControllerTask(mTestController, mScreen, null /* metricsFeature */, 55 METRICS_CATEGORY_UNKNOWN); 56 } 57 58 @Test doRun_controlNotAvailable_noRunUpdateState()59 public void doRun_controlNotAvailable_noRunUpdateState() { 60 mTestController.setAvailable(false); 61 62 mControllerTask.run(); 63 64 verify(mTestController, never()).updateState(any(Preference.class)); 65 } 66 67 @Test doRun_emptyKey_noRunUpdateState()68 public void doRun_emptyKey_noRunUpdateState() { 69 mTestController.setKey(""); 70 71 mControllerTask.run(); 72 73 verify(mTestController, never()).updateState(any(Preference.class)); 74 } 75 76 @Test doRun_preferenceNotExist_noRunUpdateState()77 public void doRun_preferenceNotExist_noRunUpdateState() { 78 mTestController.setKey(KEY); 79 80 mControllerTask.run(); 81 82 verify(mTestController, never()).updateState(any(Preference.class)); 83 } 84 85 @Test doRun_executeUpdateState()86 public void doRun_executeUpdateState() { 87 mTestController.setKey(KEY); 88 final Preference preference = new Preference(mContext); 89 preference.setKey(KEY); 90 mScreen.addPreference(preference); 91 92 mControllerTask.run(); 93 94 verify(mTestController).updateState(any(Preference.class)); 95 } 96 97 static class TestPreferenceController extends AbstractPreferenceController { 98 private boolean mAvailable; 99 private String mKey; 100 TestPreferenceController(Context context)101 TestPreferenceController(Context context) { 102 super(context); 103 mAvailable = true; 104 } 105 106 @Override isAvailable()107 public boolean isAvailable() { 108 return mAvailable; 109 } 110 111 @Override getPreferenceKey()112 public String getPreferenceKey() { 113 return mKey; 114 } 115 setAvailable(boolean available)116 void setAvailable(boolean available) { 117 mAvailable = available; 118 } 119 setKey(String key)120 void setKey(String key) { 121 mKey = key; 122 } 123 } 124 } 125