MainActivityManifestTest.kt

1.9 KB · raw

1package com.peachpasswords23import java.io.File4import javax.xml.parsers.DocumentBuilderFactory5import org.junit.Assert.assertEquals6import org.junit.Assert.assertTrue7import org.junit.Test8import org.w3c.dom.Element910class MainActivityManifestTest {11    @Test12    fun main_activity_declares_only_the_launcher_filter() {13        val manifest = manifestFile()14        val document = DocumentBuilderFactory.newInstance().apply {15            isNamespaceAware = true16        }.newDocumentBuilder().parse(manifest)17        val activities = document.getElementsByTagName("activity")18        val mainActivity = (0 until activities.length)19            .mapNotNull { activities.item(it) as? Element }20            .single { it.getAttributeNS(ANDROID_NAMESPACE, "name") == ".MainActivity" }2122        val filters = mainActivity.getElementsByTagName("intent-filter")23        assertEquals("MainActivity must have only its launcher filter", 1, filters.length)24        val filter = filters.item(0) as Element25        val actions = filter.getElementsByTagName("action")26        val categories = filter.getElementsByTagName("category")27        assertEquals(1, actions.length)28        assertEquals(29            "android.intent.action.MAIN",30            (actions.item(0) as Element).getAttributeNS(ANDROID_NAMESPACE, "name"),31        )32        assertEquals(1, categories.length)33        assertEquals(34            "android.intent.category.LAUNCHER",35            (categories.item(0) as Element).getAttributeNS(ANDROID_NAMESPACE, "name"),36        )37        assertTrue(38            "MainActivity must not declare a custom peach URI handler",39            filter.getElementsByTagName("data").length == 0,40        )41    }4243    private fun manifestFile(): File = File("src/main/AndroidManifest.xml")44        .takeIf { it.isFile }45        ?: File("app/src/main/AndroidManifest.xml")4647    private companion object {48        const val ANDROID_NAMESPACE = "http://schemas.android.com/apk/res/android"49    }50}