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

Commit 40c61779 authored by Jacky Wang's avatar Jacky Wang
Browse files

[Catalyst] Remove some deps from Preference/testutils

Bug: 421105115
Flag: TEST_ONLY
Test: atest
Change-Id: I401645411cf71200abaf1ad66d02c7c9b0bc950a
parent 37a6cc5d
Loading
Loading
Loading
Loading
+1 −6
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:tools="http://schemas.android.com/tools"
<manifest package="com.android.settingslib.preference.test" />
    package="com.android.settingslib.preference.test">

    <!-- override temporarily to support running tests in Android Studio. -->
    <uses-sdk tools:overrideLibrary="platform_testing.libraries.flag.junit,android.frameworks.base" />
</manifest>
+0 −2
Original line number Original line Diff line number Diff line
@@ -26,8 +26,6 @@ android_library {
        "androidx.fragment_fragment-testing",
        "androidx.fragment_fragment-testing",
        "androidx.test.core",
        "androidx.test.core",
        "androidx.test.ext.junit",
        "androidx.test.ext.junit",
        "flag-junit",
        "mockito-kotlin2",
        "truth",
        "truth",
    ],
    ],
    test_only: true,
    test_only: true,
+5 −26
Original line number Original line Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.settingslib.preference
package com.android.settingslib.preference


import android.content.Context
import android.content.Context
import android.platform.test.flag.junit.SetFlagsRule
import android.util.Log
import android.util.Log
import androidx.fragment.app.testing.FragmentScenario
import androidx.fragment.app.testing.FragmentScenario
import androidx.preference.Preference
import androidx.preference.Preference
@@ -28,23 +27,17 @@ import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertThat
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicBoolean
import org.junit.Rule
import org.junit.Test
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runner.RunWith


/** Test case for catalyst screen. */
/** Test case for catalyst screen. */
@RunWith(AndroidJUnit4::class)
@RunWith(AndroidJUnit4::class)
abstract class CatalystScreenTestCase {
abstract class CatalystScreenTestCase {
    @get:Rule val setFlagsRule = SetFlagsRule()

    protected val appContext: Context = ApplicationProvider.getApplicationContext()
    protected val appContext: Context = ApplicationProvider.getApplicationContext()


    /** Catalyst screen. */
    /** Catalyst screen. */
    protected abstract val preferenceScreenCreator: PreferenceScreenCreator
    protected abstract val preferenceScreenCreator: PreferenceScreenCreator


    /** Flag to control catalyst screen. */
    protected abstract val flagName: String

    /**
    /**
     * Test to compare the preference screen hierarchy between legacy screen (flag is disabled) and
     * Test to compare the preference screen hierarchy between legacy screen (flag is disabled) and
     * catalyst screen (flag is enabled).
     * catalyst screen (flag is enabled).
@@ -63,25 +56,11 @@ abstract class CatalystScreenTestCase {
        assertThat(catalystScreen).isEqualTo(legacyScreen)
        assertThat(catalystScreen).isEqualTo(legacyScreen)
    }
    }


    /**
    /** Enables the flag to test catalyst screen. */
     * Enables the catalyst screen.
    abstract fun enableCatalystScreen()
     *
     * By default, enable the [flagName]. Override for more complex situation.
     */
    @Suppress("DEPRECATION")
    protected open fun enableCatalystScreen() {
        setFlagsRule.enableFlags(flagName)
    }


    /**
    /** Disables the flag to test legacy screen. */
     * Disables the catalyst screen (legacy screen is shown).
    abstract fun disableCatalystScreen()
     *
     * By default, disable the [flagName]. Override for more complex situation.
     */
    @Suppress("DEPRECATION")
    protected open fun disableCatalystScreen() {
        setFlagsRule.disableFlags(flagName)
    }


    private fun dumpPreferenceScreen(): String {
    private fun dumpPreferenceScreen(): String {
        // Dump threads for troubleshooting when the test thread is stuck.
        // Dump threads for troubleshooting when the test thread is stuck.
@@ -93,7 +72,7 @@ abstract class CatalystScreenTestCase {
            }
            }
            .apply {
            .apply {
                isDaemon = true
                isDaemon = true
                start()
                @Suppress("DEPRECATION") start()
            }
            }


        @Suppress("UNCHECKED_CAST")
        @Suppress("UNCHECKED_CAST")
+13 −2
Original line number Original line Diff line number Diff line
@@ -28,7 +28,8 @@ import com.android.settingslib.metadata.EXTRA_BINDING_SCREEN_KEY
import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceScreenMetadata
import com.android.settingslib.metadata.PreferenceScreenMetadata
import org.mockito.kotlin.mock
import com.android.settingslib.metadata.preferenceHierarchy
import kotlinx.coroutines.CoroutineScope


/** Creates [Preference] widget and binds with metadata. */
/** Creates [Preference] widget and binds with metadata. */
@Suppress("UNCHECKED_CAST")
@Suppress("UNCHECKED_CAST")
@@ -36,7 +37,7 @@ import org.mockito.kotlin.mock
fun <P : Preference> PreferenceMetadata.createAndBindWidget(
fun <P : Preference> PreferenceMetadata.createAndBindWidget(
    context: Context,
    context: Context,
    preferenceScreen: PreferenceScreen? = null,
    preferenceScreen: PreferenceScreen? = null,
    preferenceScreenMetadata: PreferenceScreenMetadata = mock(),
    preferenceScreenMetadata: PreferenceScreenMetadata = DummyPreferenceScreenMetadata,
): P {
): P {
    val binding = PreferenceBindingFactory.defaultFactory.getPreferenceBinding(this)!!
    val binding = PreferenceBindingFactory.defaultFactory.getPreferenceBinding(this)!!
    return (binding.createWidget(context) as P).also {
    return (binding.createWidget(context) as P).also {
@@ -52,6 +53,16 @@ fun <P : Preference> PreferenceMetadata.createAndBindWidget(
    }
    }
}
}


private object DummyPreferenceScreenMetadata : PreferenceScreenMetadata {
    override val key: String
        get() = ""

    override fun fragmentClass() = null

    override fun getPreferenceHierarchy(context: Context, coroutineScope: CoroutineScope) =
        preferenceHierarchy(context) {}
}

/** Launches fragment for given [PreferenceScreenMetadata]. */
/** Launches fragment for given [PreferenceScreenMetadata]. */
@Suppress("UNCHECKED_CAST")
@Suppress("UNCHECKED_CAST")
fun PreferenceScreenMetadata.launchFragmentScenario() =
fun PreferenceScreenMetadata.launchFragmentScenario() =