15290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang/*
25290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang * Copyright (C) 2017 The Android Open Source Project
35290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang *
45290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang * Licensed under the Apache License, Version 2.0 (the "License");
55290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang * you may not use this file except in compliance with the License.
65290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang * You may obtain a copy of the License at
75290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang *
85290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang *      http://www.apache.org/licenses/LICENSE-2.0
95290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang *
105290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang * Unless required by applicable law or agreed to in writing, software
115290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang * distributed under the License is distributed on an "AS IS" BASIS,
125290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang * See the License for the specific language governing permissions and
145290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang * limitations under the License.
155290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang */
165290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langpackage com.android.emergency.preferences;
175290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
185290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport static com.google.common.truth.Truth.assertThat;
195290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
205290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport android.app.Instrumentation;
215290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport android.content.Context;
225290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport android.content.Intent;
235290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport android.support.test.InstrumentationRegistry;
245290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport android.support.test.runner.AndroidJUnit4;
252c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Langimport android.support.v7.preference.PreferenceManager;
265290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport android.text.SpannableString;
275290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport android.text.style.TtsSpan;
285290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
295290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport com.android.emergency.PreferenceKeys;
305290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport com.android.emergency.R;
315290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport com.android.emergency.edit.EditInfoActivity;
325290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport com.android.emergency.edit.EditInfoFragment;
335290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
345290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport org.junit.After;
355290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport org.junit.Before;
365290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport org.junit.Test;
375290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langimport org.junit.runner.RunWith;
385290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
395290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang/** Unit tests for {@link EmergencyListPreference}. */
405290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang@RunWith(AndroidJUnit4.class)
415290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Langpublic final class EmergencyListPreferenceTest {
425290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    private Instrumentation mInstrumentation;
435290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    private Context mTargetContext;
445290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
455290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    @Before
465290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    public void setUp() {
475290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        mInstrumentation = InstrumentationRegistry.getInstrumentation();
485290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        mTargetContext = mInstrumentation.getTargetContext();
495290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        PreferenceManager.getDefaultSharedPreferences(mTargetContext).edit().clear().commit();
505290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
515290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
525290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    @After
535290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    public void tearDown() {
545290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        PreferenceManager.getDefaultSharedPreferences(mTargetContext).edit().clear().commit();
555290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
565290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
575290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    @Test
585290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    public void testSummary_organDonor() {
595290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoActivity activity = startEditInfoActivity();
605290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoFragment fragment = (EditInfoFragment) activity.getFragment();
615290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EmergencyListPreference preference =
625290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                getEmergencyListPreference(fragment, PreferenceKeys.KEY_ORGAN_DONOR);
635290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        String summary = (String) preference.getSummary();
645290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        String summaryExp =
655290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                mTargetContext.getResources().getString(R.string.unknown_organ_donor);
665290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(summary).isEqualTo(summaryExp);
675290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
685290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
695290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    @Test
705290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    public void testSummary_bloodType() {
715290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoActivity activity = startEditInfoActivity();
725290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoFragment fragment = (EditInfoFragment) activity.getFragment();
735290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EmergencyListPreference preference =
745290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                getEmergencyListPreference(fragment, PreferenceKeys.KEY_BLOOD_TYPE);
755290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        String summary = preference.getSummary().toString();
765290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        CharSequence summaryExp =
775290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                mTargetContext.getResources().getString(R.string.unknown_blood_type);
785290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(summary).isEqualTo(summaryExp);
795290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
805290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
815290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    @Test
825290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    public void testTitle_organDonor() {
835290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoActivity activity = startEditInfoActivity();
845290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoFragment fragment = (EditInfoFragment) activity.getFragment();
855290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EmergencyListPreference preference =
865290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                getEmergencyListPreference(fragment, PreferenceKeys.KEY_ORGAN_DONOR);
875290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        String title = (String) preference.getTitle();
885290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        String titleExp = mTargetContext.getResources().getString(R.string.organ_donor);
895290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(title).isEqualTo(titleExp);
905290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
915290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
925290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    @Test
935290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    public void testTitle_bloodType() {
945290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoActivity activity = startEditInfoActivity();
955290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoFragment fragment = (EditInfoFragment) activity.getFragment();
965290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EmergencyListPreference preference =
975290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                getEmergencyListPreference(fragment, PreferenceKeys.KEY_BLOOD_TYPE);
985290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        String title = preference.getTitle().toString();
995290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        CharSequence titleExp = mTargetContext.getResources().getString(R.string.blood_type);
1005290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(title).isEqualTo(titleExp);
1015290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
1025290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
1035290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    @Test
1045290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    public void testProperties_organDonor() {
1055290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoActivity activity = startEditInfoActivity();
1065290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoFragment fragment = (EditInfoFragment) activity.getFragment();
1075290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EmergencyListPreference preference =
1085290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                getEmergencyListPreference(fragment, PreferenceKeys.KEY_ORGAN_DONOR);
1095290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference).isNotNull();
1105290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.getKey()).isEqualTo(PreferenceKeys.KEY_ORGAN_DONOR);
1115290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.isPersistent()).isTrue();
1125290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.isNotSet()).isTrue();
1135290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.getValue()).isEqualTo("");
1145290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.getEntries().length).isEqualTo(preference.getEntryValues().length);
1155290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.getContentDescriptions()).isNull();
1165290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
1175290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
1185290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    @Test
1195290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    public void testProperties_bloodType() {
1205290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoActivity activity = startEditInfoActivity();
1215290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoFragment fragment = (EditInfoFragment) activity.getFragment();
1225290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EmergencyListPreference preference =
1235290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                getEmergencyListPreference(fragment, PreferenceKeys.KEY_BLOOD_TYPE);
1245290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference).isNotNull();
1255290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.getKey()).isEqualTo(PreferenceKeys.KEY_BLOOD_TYPE);
1265290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.isPersistent()).isTrue();
1275290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.isNotSet()).isTrue();
1285290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.getValue()).isEqualTo("");
1295290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.getEntries().length).isEqualTo(preference.getEntryValues().length);
1305290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        assertThat(preference.getContentDescriptions().length).isEqualTo(
1315290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                preference.getEntries().length);
1325290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
1335290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
1345290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    @Test
1355290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    public void testContentDescriptions() {
1365290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoActivity activity = startEditInfoActivity();
1375290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EditInfoFragment fragment = (EditInfoFragment) activity.getFragment();
1385290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        EmergencyListPreference preference =
1395290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                getEmergencyListPreference(fragment, PreferenceKeys.KEY_BLOOD_TYPE);
1405290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        for (int i = 0; i < preference.getEntries().length; i++) {
1415290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang            SpannableString entry = ((SpannableString) preference.getEntries()[i]);
1425290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang            TtsSpan[] span = entry.getSpans(0,
1435290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                    preference.getContentDescriptions().length, TtsSpan.class);
1445290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang            assertThat(span.length).isEqualTo(1);
1455290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang            assertThat(preference.getContentDescriptions()[i]).isEqualTo(
1465290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang                    span[0].getArgs().get(TtsSpan.ARG_TEXT));
1475290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        }
1485290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
1495290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
1505290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    private EditInfoActivity startEditInfoActivity() {
1515290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        final Intent editActivityIntent = new Intent(mTargetContext, EditInfoActivity.class);
1525290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        return (EditInfoActivity) mInstrumentation.startActivitySync(editActivityIntent);
1535290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
1545290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang
1555290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    private EmergencyListPreference getEmergencyListPreference(
1565290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang            EditInfoFragment fragment, String key) {
1575290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang        return (EmergencyListPreference) fragment.getMedicalInfoPreference(key);
1585290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang    }
1595290685a0e5117f0cd02d5d71a72e34d8369be4cJuan Lang}
160