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