Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56deb846 authored by Chaohui Wang's avatar Chaohui Wang
Browse files

New NetworkOperatorSettingsTest

Also DataUsageSettingsTest and NfcSettingsTest.

Fix: 236276001
Test: ui test
Change-Id: Idba525e3d4bbf40fbb414cf76afb9c71166179d9
parent e711c0f2
Loading
Loading
Loading
Loading
+0 −95
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.ui;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import android.content.Context;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.nfc.NfcManager;
import android.os.RemoteException;

import androidx.test.InstrumentationRegistry;
import androidx.test.filters.MediumTest;
import androidx.test.runner.AndroidJUnit4;
import androidx.test.uiautomator.By;
import androidx.test.uiautomator.UiDevice;
import androidx.test.uiautomator.UiObject2;
import androidx.test.uiautomator.Until;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

@Ignore
@MediumTest
@RunWith(AndroidJUnit4.class)
public class ConnectedDeviceTests {

    private static final String SETTINGS_PACKAGE = "com.android.settings";
    private static final int TIMEOUT = 2000;
    private UiDevice mDevice;

    @Before
    public void setUp() throws Exception {
        mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
        try {
            mDevice.setOrientationNatural();
        } catch (RemoteException e) {
            throw new RuntimeException("failed to freeze device orientation", e);
        }
    }

    @After
    public void tearDown() throws Exception {
        mDevice.pressBack();
        mDevice.pressHome();
    }

    // This NFC toggle test is set up this way since there's no way to set
    // the NFC flag to enabled or disabled without touching UI.
    // This way, we get coverage for whether or not the toggle button works.
    @Test
    public void testNFCToggle() throws Exception {
        NfcManager manager = (NfcManager) InstrumentationRegistry.getTargetContext()
                .getSystemService(Context.NFC_SERVICE);
        NfcAdapter nfcAdapter = manager.getDefaultAdapter();
        boolean nfcInitiallyEnabled = nfcAdapter.isEnabled();
        InstrumentationRegistry.getContext().startActivity(new Intent()
                .setClassName(
                        SETTINGS_PACKAGE,
                        "com.android.settings.Settings$ConnectedDeviceDashboardActivity"));
        UiObject2 nfcSetting = mDevice.wait(Until.findObject(By.text("NFC")), TIMEOUT);
        nfcSetting.click();
        Thread.sleep(TIMEOUT * 2);
        if (nfcInitiallyEnabled) {
            assertFalse("NFC wasn't disabled on toggle", nfcAdapter.isEnabled());
            nfcSetting.click();
            Thread.sleep(TIMEOUT * 2);
            assertTrue("NFC wasn't enabled on toggle", nfcAdapter.isEnabled());
        } else {
            assertTrue("NFC wasn't enabled on toggle", nfcAdapter.isEnabled());
            nfcSetting.click();
            Thread.sleep(TIMEOUT * 2);
            assertFalse("NFC wasn't disabled on toggle", nfcAdapter.isEnabled());
        }
    }
}
+50 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.ui

import android.provider.Settings
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.android.settings.ui.testutils.SettingsTestUtils.assertHasTexts
import com.android.settings.ui.testutils.SettingsTestUtils.startMainActivityFromHomeScreen
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class DataUsageSettingsTest {
    private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())

    @Before
    fun setUp() {
        device.startMainActivityFromHomeScreen(Settings.ACTION_DATA_USAGE_SETTINGS)
    }

    @Test
    fun hasTexts() {
        device.assertHasTexts(ON_SCREEN_TEXTS)
    }

    private companion object {
        val ON_SCREEN_TEXTS = listOf(
            "0 B",
            "Data Saver",
            "Wi‑Fi data usage",
        )
    }
}
+0 −87
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.ui;

import android.os.RemoteException;
import android.provider.Settings;
import android.system.helpers.SettingsHelper;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.MediumTest;

import androidx.test.uiautomator.By;
import androidx.test.uiautomator.UiDevice;
import androidx.test.uiautomator.Until;

import org.junit.Ignore;

@Ignore
public class DataUsageSettingsTests extends InstrumentationTestCase {

    private static final String SETTINGS_PACKAGE = "com.android.settings";
    private static final int TIMEOUT = 2000;
    private UiDevice mDevice;

    @Override
    public void setUp() throws Exception {
        super.setUp();
        mDevice = UiDevice.getInstance(getInstrumentation());
        try {
            mDevice.setOrientationNatural();
        } catch (RemoteException e) {
            throw new RuntimeException("failed to freeze device orientaion", e);
        }
    }

    @Override
    protected void tearDown() throws Exception {
        // Need to finish settings activity
        mDevice.pressBack();
        mDevice.pressHome();
        super.tearDown();
    }

    @MediumTest
    public void testElementsOnDataUsageScreen() throws Exception {
        launchDataUsageSettings();
        assertNotNull("Data usage element not found",
                mDevice.wait(Until.findObject(By.text("Usage")),
                TIMEOUT));
        assertNotNull("Data usage bar not found",
                mDevice.wait(Until.findObject(By.res(SETTINGS_PACKAGE,
                "color_bar")), TIMEOUT));
        assertNotNull("WiFi Data usage element not found",
                mDevice.wait(Until.findObject(By.text("Wi-Fi data usage")),
                TIMEOUT));
        assertNotNull("Network restrictions element not found",
                mDevice.wait(Until.findObject(By.text("Network restrictions")),
                TIMEOUT));
    }

    public void launchDataUsageSettings() throws Exception {
        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(),
                Settings.ACTION_SETTINGS);
        mDevice.wait(Until
                .findObject(By.text("Network & Internet")), TIMEOUT)
                .click();
        Thread.sleep(TIMEOUT * 2);
        assertNotNull("Network & internet screen not loaded", mDevice.wait(
                Until.findObject(By.text("Data usage")), TIMEOUT));
        mDevice.wait(Until
                .findObject(By.text("Data usage")), TIMEOUT)
                .click();
    }
}
+67 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.ui

import android.provider.Settings
import android.telephony.SubscriptionManager
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.android.settings.ui.testutils.SettingsTestUtils.assertHasTexts
import com.android.settings.ui.testutils.SettingsTestUtils.startMainActivityFromHomeScreen
import com.google.common.truth.TruthJUnit.assume
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class NetworkOperatorSettingsTest {
    private val instrumentation = InstrumentationRegistry.getInstrumentation()
    private val device = UiDevice.getInstance(instrumentation)

    @Before
    fun setUp() {
        assume().that(
            instrumentation.context.getSystemService(SubscriptionManager::class.java)!!
                .availableSubscriptionInfoList
        ).isNotEmpty()
        device.startMainActivityFromHomeScreen(Settings.ACTION_NETWORK_OPERATOR_SETTINGS)
    }

    @Test
    fun hasTexts() {
        device.assertHasTexts(ON_SCREEN_TEXTS)
    }

    private companion object {
        val ON_SCREEN_TEXTS = listOf(
            "Use SIM",
            "0 B",
            "Calls preference",
            "SMS preference",
            "Mobile data",
            "Roaming",
            "App data usage",
            "Data warning & limit",
            "Preferred network type",
            "Carrier settings version",
            "Automatically select network",
            "Choose network",
            "Access Point Names",
        )
    }
}
+54 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.ui

import android.nfc.NfcAdapter
import android.provider.Settings
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.android.settings.ui.testutils.SettingsTestUtils.assertHasTexts
import com.android.settings.ui.testutils.SettingsTestUtils.startMainActivityFromHomeScreen
import com.google.common.truth.TruthJUnit.assume
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class NfcSettingsTest {
    private val instrumentation = InstrumentationRegistry.getInstrumentation()
    private val device = UiDevice.getInstance(instrumentation)

    @Before
    fun setUp() {
        assume().that(NfcAdapter.getDefaultAdapter(instrumentation.context)).isNotNull()
        device.startMainActivityFromHomeScreen(Settings.ACTION_NFC_SETTINGS)
    }

    @Test
    fun hasTexts() {
        device.assertHasTexts(ON_SCREEN_TEXTS)
    }

    private companion object {
        val ON_SCREEN_TEXTS = listOf(
            "Use NFC",
            "Require device unlock for NFC",
            "Contactless payments",
        )
    }
}