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

Commit 559f63cd authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Fix FlagDependenciesTest

This change ensures that FlagDependencies does not compile out flags in tests.  Prior to this the test would only every validate dependencies when run from studio.

Fixes: 325049179
Test: atest FlagDependenciesTest
Flag: NA
Change-Id: I4ef402beb2d969b2902640cd4fef435c2f51c713
parent c3c62274
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -48,10 +48,14 @@ abstract class FlagDependenciesBase(
    private var unmetDependencies = emptyList<Dependency>()

    override fun start() {
        if (!handler.enableDependencies) {
            return
        }
        defineDependencies()
        allDependencies = workingDependencies.toList()
        unmetDependencies = workingDependencies.filter { !it.isMet }
        workingDependencies.clear()
        handler.onCollected(allDependencies)
        if (unmetDependencies.isNotEmpty()) {
            handler.warnAboutBadFlagConfiguration(all = allDependencies, unmet = unmetDependencies)
        }
@@ -106,14 +110,24 @@ abstract class FlagDependenciesBase(

    /** Add a dependency to the working list */
    private fun addDependency(first: FlagToken, second: FlagToken) {
        if (!Compile.IS_DEBUG) return // `user` builds should omit all this code
        if (!handler.enableDependencies) return
        workingDependencies.add(
            Dependency(first.name, first.isEnabled, second.name, second.isEnabled)
        )
    }

    /** An interface which handles a warning about a bad flag configuration. */
    /** An interface which handles dependency collection. */
    interface Handler {
        /**
         * Should FlagDependencies do anything?
         *
         * @return false for user builds so that we skip this overhead.
         */
        val enableDependencies: Boolean
            get() = Compile.IS_DEBUG
        /** Handle the complete list of dependencies. */
        fun onCollected(all: List<Dependency>) {}
        /** Handle a bad flag configuration. */
        fun warnAboutBadFlagConfiguration(all: List<Dependency>, unmet: List<Dependency>)
    }
}
@@ -133,7 +147,7 @@ constructor(
        all: List<FlagDependenciesBase.Dependency>,
        unmet: List<FlagDependenciesBase.Dependency>
    ) {
        val title = "Invalid flag dependencies: ${unmet.size} of ${all.size}"
        val title = "Invalid flag dependencies: ${unmet.size}"
        val details = unmet.joinToString("\n") { it.shortUnmetString() }
        Log.e("FlagDependencies", "$title:\n$details")
        val channel = NotificationChannel("FLAGS", "Flags", NotificationManager.IMPORTANCE_DEFAULT)
+9 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.flags

import android.testing.AndroidTestingRunner
import android.util.Log
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import java.io.PrintWriter
@@ -41,14 +42,21 @@ class FlagDependenciesTest : SysuiTestCase() {
        FlagDependencies(TestFeatureFlags(teamfood = teamfood), TestHandler())

    private class TestHandler : FlagDependenciesBase.Handler {
        override val enableDependencies: Boolean
            get() = true
        override fun warnAboutBadFlagConfiguration(
            all: List<FlagDependenciesBase.Dependency>,
            unmet: List<FlagDependenciesBase.Dependency>
        ) {
            val title = "${unmet.size} invalid of ${all.size} flag dependencies"
            val title = "Invalid flag dependencies: ${unmet.size}"
            val details = unmet.joinToString("\n")
            fail("$title:\n$details")
        }

        override fun onCollected(all: List<FlagDependenciesBase.Dependency>) {
            Log.d("FlagDependencies", "All: ${all.size}")
            all.forEach { Log.d("FlagDependencies", "  $it") }
        }
    }

    private class TestFeatureFlags(val teamfood: Boolean) : FeatureFlagsClassic {