1f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler/*
2f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler * Copyright (C) 2017 The Android Open Source Project
3f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler *
4f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
5f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler * you may not use this file except in compliance with the License.
6f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler * You may obtain a copy of the License at
7f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler *
8f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
9f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler *
10f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler * Unless required by applicable law or agreed to in writing, software
11f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
12f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler * See the License for the specific language governing permissions and
14f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler * limitations under the License.
15f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler */
16f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
17f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerpackage com.android.settingslib.deviceinfo;
18f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
19f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport static com.google.common.truth.Truth.assertThat;
20f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport static org.mockito.Mockito.when;
21f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
22f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport android.content.Context;
23f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport android.support.v7.preference.Preference;
24f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport android.support.v7.preference.PreferenceScreen;
25f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
26f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport com.android.settingslib.SettingsLibRobolectricTestRunner;
27f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
28f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport org.junit.Before;
29f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport org.junit.Test;
30f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport org.junit.runner.RunWith;
31f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport org.mockito.Mock;
32f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerimport org.mockito.MockitoAnnotations;
337293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhangimport org.robolectric.RuntimeEnvironment;
34f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
35f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler@RunWith(SettingsLibRobolectricTestRunner.class)
36f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantlerpublic class SerialNumberPreferenceControllerTest {
37f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
387293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang    @Mock
39f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    private PreferenceScreen mScreen;
40f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
417293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang    private Context mContext;
427293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang    private Preference mPreference;
43f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    private AbstractSerialNumberPreferenceController mController;
44f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
45f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    @Before
46f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    public void setUp() {
47f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler        MockitoAnnotations.initMocks(this);
487293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        mContext = RuntimeEnvironment.application;
497293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        mPreference = new Preference(mContext);
507293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        mPreference.setKey(AbstractSerialNumberPreferenceController.KEY_SERIAL_NUMBER);
517293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
52f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    }
53f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
54f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    @Test
55f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    public void testIsAvaiable_noSerial_shouldReturnFalse() {
567293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        mController = new TestPreferenceController(mContext, null);
57f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
58f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler        assertThat(mController.isAvailable()).isFalse();
59f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    }
60f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
61f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    @Test
627293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang    public void testIsAvailable_hasSerial_shouldReturnTrue() {
637293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        mController = new TestPreferenceController(mContext, "123");
64f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
65f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler        assertThat(mController.isAvailable()).isTrue();
66f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    }
67f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
68f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    @Test
69f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    public void testDisplay_noSerial_shouldHidePreference() {
707293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        mController = new TestPreferenceController(mContext, null);
71f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
72f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler        mController.displayPreference(mScreen);
73f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
747293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        assertThat(mPreference.isVisible()).isFalse();
75f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    }
76f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
77f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    @Test
78f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    public void testDisplay_hasSerial_shouldSetSummary() {
79f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler        final String serial = "123";
80f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
817293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        mController = new TestPreferenceController(mContext, serial);
82f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler        mController.displayPreference(mScreen);
83f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
847293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        assertThat(mPreference.isVisible()).isTrue();
857293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        assertThat(mPreference.getSummary()).isEqualTo(serial);
86f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    }
87f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
887293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang    private static class TestPreferenceController
89f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler            extends AbstractSerialNumberPreferenceController {
90f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler
917293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang        TestPreferenceController(Context context, String serialNumber) {
92f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler            super(context, serialNumber);
93f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler        }
94f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler    }
95f43b986e2054ecf2ea70ed3f80df8cc8d586cbeaTony Mantler}
96