1 /* 2 * Copyright (C) 2016 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.settings.notification; 18 19 import android.content.Context; 20 import android.preference.SeekBarVolumizer; 21 import android.support.v7.preference.Preference; 22 import android.support.v7.preference.PreferenceScreen; 23 24 import com.android.settings.SettingsRobolectricTestRunner; 25 import com.android.settings.TestConfig; 26 27 import org.junit.Before; 28 import org.junit.Test; 29 import org.junit.runner.RunWith; 30 import org.mockito.Mock; 31 import org.mockito.MockitoAnnotations; 32 import org.robolectric.annotation.Config; 33 34 import static org.mockito.Matchers.any; 35 import static org.mockito.Matchers.anyInt; 36 import static org.mockito.Matchers.anyString; 37 import static org.mockito.Mockito.never; 38 import static org.mockito.Mockito.verify; 39 import static org.mockito.Mockito.when; 40 41 @RunWith(SettingsRobolectricTestRunner.class) 42 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 43 public class VolumeSeekBarPreferenceControllerTest { 44 45 @Mock 46 private Context mContext; 47 @Mock 48 private PreferenceScreen mScreen; 49 @Mock 50 private VolumeSeekBarPreference mPreference; 51 @Mock 52 private VolumeSeekBarPreference.Callback mCallback; 53 54 private VolumeSeekBarPreferenceControllerTestable mController; 55 56 @Before setUp()57 public void setUp() { 58 MockitoAnnotations.initMocks(this); 59 when(mScreen.findPreference(anyString())).thenReturn(mPreference); 60 mController = 61 new VolumeSeekBarPreferenceControllerTestable(mContext, mCallback); 62 } 63 64 @Test displayPreference_available_shouldUpdatePreference()65 public void displayPreference_available_shouldUpdatePreference() { 66 mController.displayPreference(mScreen); 67 68 verify(mPreference).setCallback(mCallback); 69 verify(mPreference).setStream(mController.AUDIO_STREAM); 70 verify(mPreference).setMuteIcon(mController.MUTE_ICON); 71 } 72 73 @Test displayPreference_notAvailable_shouldNotUpdatePreference()74 public void displayPreference_notAvailable_shouldNotUpdatePreference() { 75 mController = 76 new VolumeSeekBarPreferenceControllerTestable(mContext, mCallback, false); 77 78 mController.displayPreference(mScreen); 79 80 verify(mPreference, never()).setCallback(any(VolumeSeekBarPreference.Callback.class)); 81 verify(mPreference, never()).setStream(anyInt()); 82 verify(mPreference, never()).setMuteIcon(anyInt()); 83 } 84 85 @Test onResume_shouldResumePreference()86 public void onResume_shouldResumePreference() { 87 mController.displayPreference(mScreen); 88 89 mController.onResume(); 90 91 verify(mPreference).onActivityResume(); 92 } 93 94 @Test onPause_shouldPausePreference()95 public void onPause_shouldPausePreference() { 96 mController.displayPreference(mScreen); 97 98 mController.onPause(); 99 100 verify(mPreference).onActivityPause(); 101 } 102 103 private class VolumeSeekBarPreferenceControllerTestable extends 104 VolumeSeekBarPreferenceController { 105 106 private final static int AUDIO_STREAM = 1; 107 private final static int MUTE_ICON = 2; 108 109 private boolean mAvailable; 110 VolumeSeekBarPreferenceControllerTestable(Context context, VolumeSeekBarPreference.Callback callback)111 VolumeSeekBarPreferenceControllerTestable(Context context, 112 VolumeSeekBarPreference.Callback callback) { 113 this(context, callback, true); 114 } 115 VolumeSeekBarPreferenceControllerTestable(Context context, VolumeSeekBarPreference.Callback callback, boolean available)116 VolumeSeekBarPreferenceControllerTestable(Context context, 117 VolumeSeekBarPreference.Callback callback, boolean available) { 118 super(context, callback, null); 119 mAvailable = available; 120 } 121 122 @Override getPreferenceKey()123 public String getPreferenceKey() { 124 return null; 125 } 126 127 @Override handlePreferenceTreeClick(Preference preference)128 public boolean handlePreferenceTreeClick(Preference preference) { 129 return false; 130 } 131 132 @Override isAvailable()133 public boolean isAvailable() { 134 return mAvailable; 135 } 136 137 @Override getAudioStream()138 public int getAudioStream() { 139 return AUDIO_STREAM; 140 } 141 142 @Override getMuteIcon()143 public int getMuteIcon() { 144 return MUTE_ICON; 145 } 146 setAvailable(boolean available)147 private void setAvailable(boolean available) { 148 149 } 150 } 151 152 } 153