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 */
16package com.android.emergency.preferences;
17
18import android.preference.PreferenceManager;
19import android.test.ActivityInstrumentationTestCase2;
20import android.test.suitebuilder.annotation.LargeTest;
21import android.text.SpannableString;
22import android.text.TextUtils;
23import android.text.style.TtsSpan;
24
25import com.android.emergency.PreferenceKeys;
26import com.android.emergency.R;
27import com.android.emergency.edit.EditEmergencyInfoFragment;
28import com.android.emergency.edit.EditInfoActivity;
29
30/**
31 * Tests for {@link EmergencyListPreference}.
32 */
33@LargeTest
34public class EmergencyListPreferenceTest
35        extends ActivityInstrumentationTestCase2<EditInfoActivity> {
36    private EmergencyListPreference mOrganDonorPreference;
37    private EmergencyListPreference mBloodTypeListPreference;
38    private EditEmergencyInfoFragment mEditInfoFragment;
39
40    public EmergencyListPreferenceTest() {
41        super(EditInfoActivity.class);
42    }
43
44    @Override
45    protected void setUp() throws Exception {
46        super.setUp();
47        mEditInfoFragment = (EditEmergencyInfoFragment) getActivity().getFragments().get(0).second;
48        mOrganDonorPreference = (EmergencyListPreference)
49                mEditInfoFragment.findPreference(PreferenceKeys.KEY_ORGAN_DONOR);
50        mBloodTypeListPreference = (EmergencyListPreference)
51                mEditInfoFragment.findPreference(PreferenceKeys.KEY_BLOOD_TYPE);
52        try {
53            runTestOnUiThread(new Runnable() {
54                @Override
55                public void run() {
56                    mOrganDonorPreference.setValue("");
57                    mBloodTypeListPreference.setValue("");
58                }
59            });
60        } catch (Throwable throwable) {
61            fail("Should not throw exception");
62        }
63    }
64
65    @Override
66    protected void tearDown() throws Exception {
67        PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().clear().commit();
68        super.tearDown();
69    }
70
71    public void testSummary_organDonor() {
72        String summary = (String) mOrganDonorPreference.getSummary();
73        String summaryExp =
74                getActivity().getResources().getString(R.string.unknown_organ_donor);
75        assertEquals(summaryExp, summary);
76    }
77
78    public void testSummary_bloodType() {
79        String summary = mBloodTypeListPreference.getSummary().toString();
80        CharSequence summaryExp =
81                getActivity().getResources().getString(R.string.unknown_blood_type);
82        assertEquals(summaryExp, summary);
83    }
84
85    public void testTitle_organDonor() {
86        String title = (String) mOrganDonorPreference.getTitle();
87        String titleExp =
88                getActivity().getResources().getString(R.string.organ_donor);
89        assertEquals(titleExp, title);
90    }
91
92    public void testTitle_bloodType() {
93        String title = (String) mBloodTypeListPreference.getTitle();
94        String titleExp =
95                getActivity().getResources().getString(R.string.blood_type);
96        assertEquals(titleExp, title);
97    }
98
99    public void testProperties_organDonor() {
100        assertNotNull(mOrganDonorPreference);
101        assertEquals(PreferenceKeys.KEY_ORGAN_DONOR, mOrganDonorPreference.getKey());
102        assertTrue(mOrganDonorPreference.isEnabled());
103        assertTrue(mOrganDonorPreference.isPersistent());
104        assertTrue(mOrganDonorPreference.isSelectable());
105        assertTrue(mOrganDonorPreference.isNotSet());
106        assertEquals("", mOrganDonorPreference.getValue());
107        assertEquals(mOrganDonorPreference.getEntryValues().length,
108                mOrganDonorPreference.getEntries().length);
109        assertNull(mOrganDonorPreference.getContentDescriptions());
110    }
111
112    public void testProperties_bloodType() {
113        assertNotNull(mBloodTypeListPreference);
114        assertEquals(PreferenceKeys.KEY_BLOOD_TYPE, mBloodTypeListPreference.getKey());
115        assertTrue(mBloodTypeListPreference.isEnabled());
116        assertTrue(mBloodTypeListPreference.isPersistent());
117        assertTrue(mBloodTypeListPreference.isSelectable());
118        assertTrue(mBloodTypeListPreference.isNotSet());
119        assertEquals("", mBloodTypeListPreference.getValue());
120        assertEquals(mBloodTypeListPreference.getEntryValues().length,
121                mBloodTypeListPreference.getEntries().length);
122        assertEquals(mBloodTypeListPreference.getContentDescriptions().length,
123                mBloodTypeListPreference.getEntries().length);
124    }
125
126    public void testReloadFromPreference() throws Throwable {
127        mEditInfoFragment.getPreferenceManager().getSharedPreferences()
128                .edit()
129                .putString(mOrganDonorPreference.getKey(),
130                        (String) mOrganDonorPreference.getEntryValues()[0])
131                .commit();
132        runTestOnUiThread(new Runnable() {
133            @Override
134            public void run() {
135                mOrganDonorPreference.reloadFromPreference();
136            }
137        });
138        assertEquals(mOrganDonorPreference.getEntryValues()[0], mOrganDonorPreference.getValue());
139        assertFalse(mOrganDonorPreference.isNotSet());
140    }
141
142    public void testSetValue() throws Throwable {
143        for (int i = 0; i < mOrganDonorPreference.getEntryValues().length; i++) {
144            final int index = i;
145            runTestOnUiThread(new Runnable() {
146                @Override
147                public void run() {
148                    mOrganDonorPreference.setValue((String)
149                            mOrganDonorPreference.getEntryValues()[index]);
150                }
151            });
152
153            assertEquals(mOrganDonorPreference.getEntryValues()[index],
154                    mOrganDonorPreference.getValue());
155            if (!TextUtils.isEmpty(mOrganDonorPreference.getEntryValues()[index])) {
156                assertEquals(mOrganDonorPreference.getEntries()[index],
157                        mOrganDonorPreference.getSummary());
158            } else {
159                assertEquals(getActivity().getResources().getString(R.string.unknown_organ_donor),
160                        mOrganDonorPreference.getSummary());
161            }
162        }
163    }
164
165    public void testContentDescriptions() {
166        for (int i = 0; i < mBloodTypeListPreference.getEntries().length; i++) {
167            SpannableString entry = ((SpannableString) mBloodTypeListPreference.getEntries()[i]);
168            TtsSpan[] span = entry.getSpans(0,
169                    mBloodTypeListPreference.getContentDescriptions().length, TtsSpan.class);
170            assertEquals(1, span.length);
171            assertEquals(span[0].getArgs().get(TtsSpan.ARG_TEXT),
172                    mBloodTypeListPreference.getContentDescriptions()[i]);
173        }
174    }
175}
176