SettingsDumpServiceTest.java revision 22a39c2b93bc66db71238274a7683d329232d124
1a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei/*
2a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei * Copyright (C) 2016 The Android Open Source Project
3a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei *
4a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei * Licensed under the Apache License, Version 2.0 (the "License");
5a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei * you may not use this file except in compliance with the License.
6a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei * You may obtain a copy of the License at
7a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei *
8a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei *      http://www.apache.org/licenses/LICENSE-2.0
9a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei *
10a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei * Unless required by applicable law or agreed to in writing, software
11a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei * distributed under the License is distributed on an "AS IS" BASIS,
12a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei * See the License for the specific language governing permissions and
14a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei * limitations under the License.
15a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei */
16a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleipackage com.android.settings;
17a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
1822a39c2b93bc66db71238274a7683d329232d124James Lemieuximport static com.google.common.truth.Truth.assertThat;
1922a39c2b93bc66db71238274a7683d329232d124James Lemieuximport static org.mockito.Mockito.when;
2022a39c2b93bc66db71238274a7683d329232d124James Lemieux
21a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport android.content.pm.ActivityInfo;
22a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport android.content.pm.PackageManager;
23a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport android.content.pm.ResolveInfo;
24a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport android.support.annotation.NonNull;
2522a39c2b93bc66db71238274a7683d329232d124James Lemieux
2622a39c2b93bc66db71238274a7683d329232d124James Lemieuximport com.android.settings.testutils.SettingsRobolectricTestRunner;
2722a39c2b93bc66db71238274a7683d329232d124James Lemieux
28a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport org.json.JSONException;
29a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport org.json.JSONObject;
30a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport org.junit.Before;
31a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport org.junit.Test;
32a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport org.junit.runner.RunWith;
33a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport org.mockito.Mock;
34a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport org.mockito.MockitoAnnotations;
35a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
36a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport java.io.OutputStream;
37a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleiimport java.io.PrintWriter;
38a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
39a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei@RunWith(SettingsRobolectricTestRunner.class)
40a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyuleipublic class SettingsDumpServiceTest {
4122a39c2b93bc66db71238274a7683d329232d124James Lemieux
42a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    private static final String PACKAGE_BROWSER = "com.android.test.browser";
43a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    private static final String PACKAGE_NULL = "android";
4422a39c2b93bc66db71238274a7683d329232d124James Lemieux
45a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    @Mock
46a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    private PackageManager mPackageManager;
47a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    @Mock
48a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    private ResolveInfo mResolveInfo;
49a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    private TestService mTestService;
50a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
51a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    @Before
52a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    public void setUp() {
53a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        MockitoAnnotations.initMocks(this);
54a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
55a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        when(mPackageManager.resolveActivity(TestService.BROWSER_INTENT,
56a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei                PackageManager.MATCH_DEFAULT_ONLY)).thenReturn(mResolveInfo);
57a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        mTestService = new TestService();
58a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        mTestService.setPackageManager(mPackageManager);
59a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    }
60a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
61a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    @Test
62a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    public void testDumpDefaultBrowser_DefaultBrowser_ReturnBrowserName() {
63a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        mResolveInfo.activityInfo = new ActivityInfo();
64a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        mResolveInfo.activityInfo.packageName = PACKAGE_BROWSER;
65a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
66a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        assertThat(mTestService.dumpDefaultBrowser()).isEqualTo(PACKAGE_BROWSER);
67a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    }
68a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
69a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    @Test
70a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    public void testDumpDefaultBrowser_NoDefault_ReturnNull() {
71a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        mResolveInfo.activityInfo = new ActivityInfo();
72a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        mResolveInfo.activityInfo.packageName = PACKAGE_NULL;
73a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
74a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        assertThat(mTestService.dumpDefaultBrowser()).isEqualTo(null);
75a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    }
76a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
77a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    @Test
78a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    public void testDump_ReturnJsonObject() throws JSONException {
79a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        mResolveInfo.activityInfo = new ActivityInfo();
80a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        mResolveInfo.activityInfo.packageName = PACKAGE_BROWSER;
81a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        TestPrintWriter printWriter = new TestPrintWriter(System.out);
82a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
83a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        mTestService.dump(null, printWriter, null);
84a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        JSONObject object = (JSONObject)printWriter.getPrintObject();
85a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
86a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        assertThat(object.get(TestService.KEY_SERVICE)).isNotNull();
87a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    }
88a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
89a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    /**
90a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei     * Test service used to pass in the mock {@link PackageManager}
91a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei     */
92a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    private class TestService extends SettingsDumpService {
93a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        private PackageManager mPm;
94a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
95a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        public void setPackageManager(PackageManager pm) {
96a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei            mPm = pm;
97a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        }
98a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
99a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        @Override
100a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        public PackageManager getPackageManager() {
101a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei            return mPm;
102a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        }
103a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    }
104a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
105a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    /**
106a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei     * Test printWriter to store the object to be printed
107a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei     */
108a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    private class TestPrintWriter extends PrintWriter {
109a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        private Object mPrintObject;
110a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
11122a39c2b93bc66db71238274a7683d329232d124James Lemieux        private TestPrintWriter(@NonNull OutputStream out) {
112a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei            super(out);
113a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        }
114a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
115a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        @Override
116a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        public void println(Object object) {
117a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei            mPrintObject = object;
118a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        }
119a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei
12022a39c2b93bc66db71238274a7683d329232d124James Lemieux        private Object getPrintObject() {
121a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei            return mPrintObject;
122a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei        }
123a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei    }
124a9eb4a0ee26fe4f2f6aff36b4a5943736f563733jackqdyulei}
125