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