147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler/*
247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler * Copyright (C) 2017 The Android Open Source Project
347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler *
447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler * you may not use this file except in compliance with the License.
647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler * You may obtain a copy of the License at
747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler *
847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler *
1047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler * Unless required by applicable law or agreed to in writing, software
1147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
1247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler * See the License for the specific language governing permissions and
1447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler * limitations under the License.
1547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler */
1647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
1747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerpackage com.android.settingslib.applications;
1847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
1947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport static com.google.common.truth.Truth.assertThat;
2047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport static org.mockito.ArgumentMatchers.anyList;
2147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport static org.mockito.Mockito.mock;
2247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport static org.mockito.Mockito.times;
2347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport static org.mockito.Mockito.verify;
2447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
2547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport android.content.ComponentName;
2647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport android.provider.Settings;
2747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
2847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport com.android.settingslib.SettingsLibRobolectricTestRunner;
2947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
3047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport org.junit.Before;
3147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport org.junit.Test;
3247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport org.junit.runner.RunWith;
3347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerimport org.robolectric.RuntimeEnvironment;
3447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
3547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler@RunWith(SettingsLibRobolectricTestRunner.class)
3647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantlerpublic class ServiceListingTest {
3747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
3847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    private static final String TEST_SETTING = "testSetting";
3947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    private static final String TEST_INTENT = "com.example.intent";
4047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
4147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    private ServiceListing mServiceListing;
4247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
4347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    @Before
4447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    public void setUp() {
4547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        mServiceListing = new ServiceListing.Builder(RuntimeEnvironment.application)
4647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                .setTag("testTag")
4747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                .setSetting(TEST_SETTING)
4847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                .setNoun("testNoun")
4947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                .setIntentAction(TEST_INTENT)
5047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                .setPermission("testPermission")
5147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                .build();
5247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    }
5347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
5447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    @Test
5547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    public void testCallback() {
5647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        ServiceListing.Callback callback = mock(ServiceListing.Callback.class);
5747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        mServiceListing.addCallback(callback);
5847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        mServiceListing.reload();
5947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        verify(callback, times(1)).onServicesReloaded(anyList());
6047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        mServiceListing.removeCallback(callback);
6147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        mServiceListing.reload();
6247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        verify(callback, times(1)).onServicesReloaded(anyList());
6347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    }
6447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
6547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    @Test
6647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    public void testSaveLoad() {
6747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        ComponentName testComponent1 = new ComponentName("testPackage1", "testClass1");
6847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        ComponentName testComponent2 = new ComponentName("testPackage2", "testClass2");
6947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        Settings.Secure.putString(RuntimeEnvironment.application.getContentResolver(),
7047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                TEST_SETTING,
7147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                testComponent1.flattenToString() + ":" + testComponent2.flattenToString());
7247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
7347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        mServiceListing.reload();
7447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
7547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(mServiceListing.isEnabled(testComponent1)).isTrue();
7647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(mServiceListing.isEnabled(testComponent2)).isTrue();
7747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(Settings.Secure.getString(RuntimeEnvironment.application.getContentResolver(),
7847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                TEST_SETTING)).contains(testComponent1.flattenToString());
7947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(Settings.Secure.getString(RuntimeEnvironment.application.getContentResolver(),
8047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                TEST_SETTING)).contains(testComponent2.flattenToString());
8147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
8247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        mServiceListing.setEnabled(testComponent1, false);
8347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
8447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(mServiceListing.isEnabled(testComponent1)).isFalse();
8547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(mServiceListing.isEnabled(testComponent2)).isTrue();
8647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(Settings.Secure.getString(RuntimeEnvironment.application.getContentResolver(),
8747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                TEST_SETTING)).doesNotContain(testComponent1.flattenToString());
8847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(Settings.Secure.getString(RuntimeEnvironment.application.getContentResolver(),
8947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                TEST_SETTING)).contains(testComponent2.flattenToString());
9047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
9147394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        mServiceListing.setEnabled(testComponent1, true);
9247394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler
9347394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(mServiceListing.isEnabled(testComponent1)).isTrue();
9447394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(mServiceListing.isEnabled(testComponent2)).isTrue();
9547394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(Settings.Secure.getString(RuntimeEnvironment.application.getContentResolver(),
9647394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                TEST_SETTING)).contains(testComponent1.flattenToString());
9747394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler        assertThat(Settings.Secure.getString(RuntimeEnvironment.application.getContentResolver(),
9847394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler                TEST_SETTING)).contains(testComponent2.flattenToString());
9947394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler    }
10047394cdbb839de1da5065a1b8a661c68cc690db9Tony Mantler}
101