17b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang/*
27b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang * Copyright (C) 2017 The Android Open Source Project
37b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang *
47b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License");
57b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang * you may not use this file except in compliance with the License.
67b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang * You may obtain a copy of the License at
77b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang *
87b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang *      http://www.apache.org/licenses/LICENSE-2.0
97b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang *
107b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang * Unless required by applicable law or agreed to in writing, software
117b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS,
127b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang * See the License for the specific language governing permissions and
147b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang * limitations under the License.
157b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang */
167b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
177b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangpackage com.android.settings.bluetooth;
187b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
197b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport static com.google.common.truth.Truth.assertThat;
207b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport static org.mockito.Matchers.any;
217b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport static org.mockito.Matchers.anyString;
227b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport static org.mockito.Mockito.spy;
237b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport static org.mockito.Mockito.verify;
247b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport static org.mockito.Mockito.when;
257b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
267b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport android.app.Fragment;
277b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport android.app.FragmentTransaction;
287b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport android.content.Context;
297b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport android.support.v7.preference.Preference;
30f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhangimport android.support.v7.preference.PreferenceScreen;
317b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
327b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport com.android.settings.TestConfig;
337b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport com.android.settings.testutils.SettingsRobolectricTestRunner;
347b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport com.android.settingslib.bluetooth.LocalBluetoothAdapter;
357b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
367b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport org.junit.Before;
377b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport org.junit.Test;
387b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport org.junit.runner.RunWith;
397b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport org.mockito.Answers;
407b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport org.mockito.Mock;
417b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport org.mockito.MockitoAnnotations;
427b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport org.robolectric.RuntimeEnvironment;
437b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangimport org.robolectric.annotation.Config;
447b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
457b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang@RunWith(SettingsRobolectricTestRunner.class)
467b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
477b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhangpublic class BluetoothDeviceRenamePreferenceControllerTest {
487b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
497b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    private static final String DEVICE_NAME = "Nightshade";
507b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
517b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    @Mock
527b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    private LocalBluetoothAdapter mLocalAdapter;
537b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
547b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    private Fragment mFragment;
557b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    @Mock
567b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    private FragmentTransaction mFragmentTransaction;
57f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang    @Mock
58f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang    private PreferenceScreen mScreen;
597b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    private Context mContext;
607b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    private Preference mPreference;
617b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    private BluetoothDeviceRenamePreferenceController mController;
627b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
637b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    @Before
647b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    public void setUp() {
657b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        MockitoAnnotations.initMocks(this);
667b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
677b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        mContext = spy(RuntimeEnvironment.application);
687b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        mPreference = new Preference(mContext);
697b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        mPreference.setKey(BluetoothDeviceRenamePreferenceController.PREF_KEY);
707b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
717b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        mController = new BluetoothDeviceRenamePreferenceController(
727b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang                mContext, mFragment, mLocalAdapter);
737b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    }
747b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
757b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    @Test
767b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    public void testUpdateDeviceName_showSummaryWithDeviceName() {
777b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        mController.updateDeviceName(mPreference, DEVICE_NAME);
787b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
797b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        final CharSequence summary = mPreference.getSummary();
807b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
817b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        assertThat(summary.toString()).isEqualTo(DEVICE_NAME);
827b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    }
837b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
847b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    @Test
857b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    public void testHandlePreferenceTreeClick_startDialogFragment() {
867b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        when(mFragment.getFragmentManager().beginTransaction()).thenReturn(mFragmentTransaction);
877b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
887b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        mController.handlePreferenceTreeClick(mPreference);
897b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang
907b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        verify(mFragmentTransaction).add(any(), anyString());
917b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang        verify(mFragmentTransaction).commit();
927b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang    }
93f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang
94f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang    @Test
95f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang    public void displayPreference_shouldFindPreferenceWithMatchingPrefKey() {
96f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
97f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang
98f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang        mController.displayPreference(mScreen);
99f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang
100f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang        assertThat(mController.mPreference.getKey()).isEqualTo(mController.getPreferenceKey());
101f6e6ae2441158cd0497dac804098bce27fa51a4cFan Zhang    }
1027b9568c10d18f91e34a24fe9e11503bb1513b7e1Fan Zhang}
103