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

Commit f2e9f1e5 authored by Jacky Wang's avatar Jacky Wang Committed by Android (Google) Code Review
Browse files

Merge "[Catalyst] Remove some deps from Preference/testutils" into main

parents 457a729d 40c61779
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:tools="http://schemas.android.com/tools"
    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>
<manifest package="com.android.settingslib.preference.test" />
+0 −2
Original line number Diff line number Diff line
@@ -26,8 +26,6 @@ android_library {
        "androidx.fragment_fragment-testing",
        "androidx.test.core",
        "androidx.test.ext.junit",
        "flag-junit",
        "mockito-kotlin2",
        "truth",
    ],
    test_only: true,
+5 −26
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.settingslib.preference

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

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

    protected val appContext: Context = ApplicationProvider.getApplicationContext()

    /** Catalyst screen. */
    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
     * catalyst screen (flag is enabled).
@@ -63,25 +56,11 @@ abstract class CatalystScreenTestCase {
        assertThat(catalystScreen).isEqualTo(legacyScreen)
    }

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

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

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

        @Suppress("UNCHECKED_CAST")
+13 −2
Original line number 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.PreferenceMetadata
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. */
@Suppress("UNCHECKED_CAST")
@@ -36,7 +37,7 @@ import org.mockito.kotlin.mock
fun <P : Preference> PreferenceMetadata.createAndBindWidget(
    context: Context,
    preferenceScreen: PreferenceScreen? = null,
    preferenceScreenMetadata: PreferenceScreenMetadata = mock(),
    preferenceScreenMetadata: PreferenceScreenMetadata = DummyPreferenceScreenMetadata,
): P {
    val binding = PreferenceBindingFactory.defaultFactory.getPreferenceBinding(this)!!
    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]. */
@Suppress("UNCHECKED_CAST")
fun PreferenceScreenMetadata.launchFragmentScenario() =