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

Commit f8b4b7ae authored by Zekan Qian's avatar Zekan Qian
Browse files

Add test on spa.framework.common

Bug: 256582545
Test: unit-test
Change-Id: I17f20ce7132953b5b0f761ef4f3c678a501b4c12
parent 90e9de18
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -30,10 +30,14 @@ data class SettingsPageWithEntry(
    val injectEntry: SettingsEntry,
)

private fun SettingsPage.getTitle(sppRepository: SettingsPageProviderRepository): String {
    return sppRepository.getProviderOrNull(sppName)!!.getTitle(arguments)
}

/**
 * The repository to maintain all Settings entries
 */
class SettingsEntryRepository(sppRepository: SettingsPageProviderRepository) {
class SettingsEntryRepository(private val sppRepository: SettingsPageProviderRepository) {
    // Map of entry unique Id to entry
    private val entryMap: Map<String, SettingsEntry>

@@ -118,8 +122,9 @@ class SettingsEntryRepository(sppRepository: SettingsPageProviderRepository) {
        return entryPath.map {
            if (it.toPage == null)
                defaultTitle
            else
                it.toPage.getTitle()!!
            else {
                it.toPage.getTitle(sppRepository)
            }
        }
    }
}
+0 −5
Original line number Diff line number Diff line
@@ -95,11 +95,6 @@ data class SettingsPage(
        return false
    }

    fun getTitle(): String? {
        val sppRepository by SpaEnvironmentFactory.instance.pageProviderRepository
        return sppRepository.getProviderOrNull(sppName)?.getTitle(arguments)
    }

    fun enterPage() {
        SpaEnvironmentFactory.instance.logger.event(
            id,
+146 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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.settingslib.spa.framework.common

import android.content.Context
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class SettingsEntryRepositoryTest {
    private val context: Context = ApplicationProvider.getApplicationContext()
    private val spaEnvironment = SpaEnvironmentForTest(context)
    private val entryRepository by spaEnvironment.entryRepository

    @Test
    fun testGetPageWithEntry() {
        val pageWithEntry = entryRepository.getAllPageWithEntry()
        assertThat(pageWithEntry.size).isEqualTo(3)
        assertThat(
            entryRepository.getPageWithEntry(getUniquePageId("SppHome"))
                ?.entries?.size
        ).isEqualTo(1)
        assertThat(
            entryRepository.getPageWithEntry(getUniquePageId("SppLayer1"))
                ?.entries?.size
        ).isEqualTo(3)
        assertThat(
            entryRepository.getPageWithEntry(getUniquePageId("SppLayer2"))
                ?.entries?.size
        ).isEqualTo(2)
        assertThat(entryRepository.getPageWithEntry(getUniquePageId("SppWithParam"))).isNull()
    }

    @Test
    fun testGetEntry() {
        val entry = entryRepository.getAllEntries()
        assertThat(entry.size).isEqualTo(7)
        assertThat(
            entryRepository.getEntry(
                getUniqueEntryId(
                    "ROOT",
                    SppHome.createSettingsPage(),
                    SettingsPage.createNull(),
                    SppHome.createSettingsPage(),
                )
            )
        ).isNotNull()
        assertThat(
            entryRepository.getEntry(
                getUniqueEntryId(
                    "INJECT",
                    SppLayer1.createSettingsPage(),
                    SppHome.createSettingsPage(),
                    SppLayer1.createSettingsPage(),
                )
            )
        ).isNotNull()
        assertThat(
            entryRepository.getEntry(
                getUniqueEntryId(
                    "INJECT",
                    SppLayer2.createSettingsPage(),
                    SppLayer1.createSettingsPage(),
                    SppLayer2.createSettingsPage(),
                )
            )
        ).isNotNull()
        assertThat(
            entryRepository.getEntry(
                getUniqueEntryId("Layer1Entry1", SppLayer1.createSettingsPage())
            )
        ).isNotNull()
        assertThat(
            entryRepository.getEntry(
                getUniqueEntryId("Layer1Entry2", SppLayer1.createSettingsPage())
            )
        ).isNotNull()
        assertThat(
            entryRepository.getEntry(
                getUniqueEntryId("Layer2Entry1", SppLayer2.createSettingsPage())
            )
        ).isNotNull()
        assertThat(
            entryRepository.getEntry(
                getUniqueEntryId("Layer2Entry2", SppLayer2.createSettingsPage())
            )
        ).isNotNull()
    }

    @Test
    fun testGetEntryPath() {
        assertThat(
            entryRepository.getEntryPathWithDisplayName(
                getUniqueEntryId("Layer2Entry1", SppLayer2.createSettingsPage())
            )
        ).containsExactly("Layer2Entry1", "INJECT_SppLayer2", "INJECT_SppLayer1", "ROOT_SppHome")
            .inOrder()

        assertThat(
            entryRepository.getEntryPathWithTitle(
                getUniqueEntryId("Layer2Entry2", SppLayer2.createSettingsPage()),
                "entryTitle"
            )
        ).containsExactly("entryTitle", "SppLayer2", "TitleLayer1", "TitleHome").inOrder()

        assertThat(
            entryRepository.getEntryPathWithDisplayName(
                getUniqueEntryId(
                    "INJECT",
                    SppLayer1.createSettingsPage(),
                    SppHome.createSettingsPage(),
                    SppLayer1.createSettingsPage(),
                )
            )
        ).containsExactly("INJECT_SppLayer1", "ROOT_SppHome").inOrder()

        assertThat(
            entryRepository.getEntryPathWithTitle(
                getUniqueEntryId(
                    "INJECT",
                    SppLayer2.createSettingsPage(),
                    SppLayer1.createSettingsPage(),
                    SppLayer2.createSettingsPage(),
                ),
                "defaultTitle"
            )
        ).containsExactly("SppLayer2", "TitleLayer1", "TitleHome").inOrder()
    }
}
+160 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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.settingslib.spa.framework.common

import androidx.compose.runtime.Composable
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.core.os.bundleOf
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith

const val INJECT_ENTRY_NAME = "INJECT"
const val ROOT_ENTRY_NAME = "ROOT"

class MacroForTest(private val pageId: String, private val entryId: String) : EntryMacro {
    @Composable
    override fun UiLayout() {
        val entryData = LocalEntryDataProvider.current
        assertThat(entryData.isHighlighted).isFalse()
        assertThat(entryData.pageId).isEqualTo(pageId)
        assertThat(entryData.entryId).isEqualTo(entryId)
    }

    override fun getSearchData(): EntrySearchData {
        return EntrySearchData("myTitle")
    }

    override fun getStatusData(): EntryStatusData {
        return EntryStatusData(isDisabled = true, isSwitchOff = true)
    }
}

@RunWith(AndroidJUnit4::class)
class SettingsEntryTest {
    @get:Rule
    val composeTestRule = createComposeRule()

    @Test
    fun testBuildBasic() {
        val owner = SettingsPage.create("mySpp")
        val entry = SettingsEntryBuilder.create(owner, "myEntry").build()
        assertThat(entry.id).isEqualTo(getUniqueEntryId("myEntry", owner))
        assertThat(entry.displayName).isEqualTo("myEntry")
        assertThat(entry.owner.sppName).isEqualTo("mySpp")
        assertThat(entry.owner.displayName).isEqualTo("mySpp")
        assertThat(entry.fromPage).isNull()
        assertThat(entry.toPage).isNull()
        assertThat(entry.isAllowSearch).isFalse()
        assertThat(entry.isSearchDataDynamic).isFalse()
        assertThat(entry.mutableStatus).isFalse()
    }

    @Test
    fun testBuildWithLink() {
        val owner = SettingsPage.create("mySpp")
        val fromPage = SettingsPage.create("fromSpp")
        val toPage = SettingsPage.create("toSpp")
        val entryFrom = SettingsEntryBuilder.createLinkFrom("myEntry", owner)
            .setLink(toPage = toPage).build()
        assertThat(entryFrom.id).isEqualTo(getUniqueEntryId("myEntry", owner, owner, toPage))
        assertThat(entryFrom.displayName).isEqualTo("myEntry")
        assertThat(entryFrom.fromPage!!.sppName).isEqualTo("mySpp")
        assertThat(entryFrom.toPage!!.sppName).isEqualTo("toSpp")

        val entryTo = SettingsEntryBuilder.createLinkTo("myEntry", owner)
            .setLink(fromPage = fromPage).build()
        assertThat(entryTo.id).isEqualTo(getUniqueEntryId("myEntry", owner, fromPage, owner))
        assertThat(entryTo.displayName).isEqualTo("myEntry")
        assertThat(entryTo.fromPage!!.sppName).isEqualTo("fromSpp")
        assertThat(entryTo.toPage!!.sppName).isEqualTo("mySpp")
    }

    @Test
    fun testBuildInject() {
        val owner = SettingsPage.create("mySpp")
        val entryInject = SettingsEntryBuilder.createInject(owner).build()
        assertThat(entryInject.id).isEqualTo(
            getUniqueEntryId(
                INJECT_ENTRY_NAME,
                owner,
                toPage = owner
            )
        )
        assertThat(entryInject.displayName).isEqualTo("${INJECT_ENTRY_NAME}_mySpp")
        assertThat(entryInject.fromPage).isNull()
        assertThat(entryInject.toPage).isNotNull()
    }

    @Test
    fun testBuildRoot() {
        val owner = SettingsPage.create("mySpp")
        val entryInject = SettingsEntryBuilder.createRoot(owner, "myRootEntry").build()
        assertThat(entryInject.id).isEqualTo(
            getUniqueEntryId(
                ROOT_ENTRY_NAME,
                owner,
                toPage = owner
            )
        )
        assertThat(entryInject.displayName).isEqualTo("myRootEntry")
        assertThat(entryInject.fromPage).isNull()
        assertThat(entryInject.toPage).isNotNull()
    }

    @Test
    fun testSetAttributes() {
        val owner = SettingsPage.create("mySpp")
        val entry = SettingsEntryBuilder.create(owner, "myEntry")
            .setDisplayName("myEntryDisplay")
            .setIsAllowSearch(true)
            .setIsSearchDataDynamic(false)
            .setHasMutableStatus(true)
            .build()
        assertThat(entry.id).isEqualTo(getUniqueEntryId("myEntry", owner))
        assertThat(entry.displayName).isEqualTo("myEntryDisplay")
        assertThat(entry.fromPage).isNull()
        assertThat(entry.toPage).isNull()
        assertThat(entry.isAllowSearch).isTrue()
        assertThat(entry.isSearchDataDynamic).isFalse()
        assertThat(entry.mutableStatus).isTrue()
    }

    @Test
    fun testSetMarco() {
        val owner = SettingsPage.create("mySpp", arguments = bundleOf("param" to "v1"))
        val entry = SettingsEntryBuilder.create(owner, "myEntry")
            .setMacro {
                assertThat(it?.getString("param")).isEqualTo("v1")
                assertThat(it?.getString("rtParam")).isEqualTo("v2")
                assertThat(it?.getString("unknown")).isNull()
                MacroForTest(getUniquePageId("mySpp"), getUniqueEntryId("myEntry", owner))
            }
            .build()

        val rtArguments = bundleOf("rtParam" to "v2")
        composeTestRule.setContent { entry.UiLayout(rtArguments) }
        val searchData = entry.getSearchData(rtArguments)
        val statusData = entry.getStatusData(rtArguments)
        assertThat(searchData?.title).isEqualTo("myTitle")
        assertThat(searchData?.keyword).isEmpty()
        assertThat(statusData?.isDisabled).isTrue()
        assertThat(statusData?.isSwitchOff).isTrue()
    }
}
+62 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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.settingslib.spa.framework.common

import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class SettingsPageProviderRepositoryTest {
    @Test
    fun getStartPageTest() {
        val sppRepoEmpty = SettingsPageProviderRepository(emptyList(), emptyList())
        assertThat(sppRepoEmpty.getDefaultStartPage()).isEqualTo("")
        assertThat(sppRepoEmpty.getAllRootPages()).isEmpty()

        val sppRepoNull =
            SettingsPageProviderRepository(emptyList(), listOf(SettingsPage.createNull()))
        assertThat(sppRepoNull.getDefaultStartPage()).isEqualTo("NULL")
        assertThat(sppRepoNull.getAllRootPages()).contains(SettingsPage.createNull())

        val rootPage1 = SettingsPage.create(name = "Spp1", displayName = "Spp1")
        val rootPage2 = SettingsPage.create(name = "Spp2", displayName = "Spp2")
        val sppRepo = SettingsPageProviderRepository(emptyList(), listOf(rootPage1, rootPage2))
        val allRoots = sppRepo.getAllRootPages()
        assertThat(sppRepo.getDefaultStartPage()).isEqualTo("Spp1")
        assertThat(allRoots.size).isEqualTo(2)
        assertThat(allRoots).contains(rootPage1)
        assertThat(allRoots).contains(rootPage2)
    }

    @Test
    fun getProviderTest() {
        val sppRepoEmpty = SettingsPageProviderRepository(emptyList(), emptyList())
        assertThat(sppRepoEmpty.getAllProviders()).isEmpty()
        assertThat(sppRepoEmpty.getProviderOrNull("Spp")).isNull()

        val sppRepo = SettingsPageProviderRepository(listOf(
            object : SettingsPageProvider {
                override val name = "Spp"
            }
        ), emptyList())
        assertThat(sppRepo.getAllProviders().size).isEqualTo(1)
        assertThat(sppRepo.getProviderOrNull("Spp")).isNotNull()
        assertThat(sppRepo.getProviderOrNull("SppUnknown")).isNull()
    }
}
Loading