Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
package mozilla.components.tooling.detekt
import io.gitlab.arturbosch.detekt.test.lint
import mozilla.components.tooling.detekt.acorn.MaterialTextButtonUsageRule
import org.junit.Test
import kotlin.test.assertEquals
class MaterialTextButtonUsageRuleTest {
@Test
fun `WHEN the M3 TextButton is imported THEN it is flagged`() {
val code = """
package com.example
import androidx.compose.material3.TextButton
""".trimIndent()
val findings = MaterialTextButtonUsageRule().lint(code)
assertEquals(1, findings.size)
assertEquals(
MaterialTextButtonUsageRule.MESSAGE,
findings.first().message,
)
}
@Test
fun `WHEN the M3 TextButton is imported with an alias THEN it is flagged`() {
val code = """
package com.example
import androidx.compose.material3.TextButton as M3TextButton
""".trimIndent()
val findings = MaterialTextButtonUsageRule().lint(code)
assertEquals(1, findings.size)
}
@Test
fun `WHEN the fully qualified M3 TextButton is referenced THEN it is flagged`() {
val code = """
package com.example
@Composable
fun TextButton() {
androidx.compose.material3.TextButton(onClick = {}) {}
}
""".trimIndent()
val findings = MaterialTextButtonUsageRule().lint(code)
assertEquals(1, findings.size)
assertEquals(
MaterialTextButtonUsageRule.MESSAGE,
findings.first().message,
)
}
@Test
fun `WHEN the compose-base TextButton, ButtonDefaults and ButtonColors are imported THEN they are not flagged`() {
val code = """
package com.example
import mozilla.components.compose.base.button.TextButton
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ButtonColors
val colors = androidx.compose.material3.ButtonDefaults.textButtonColors()
""".trimIndent()
val findings = MaterialTextButtonUsageRule().lint(code)
assertEquals(0, findings.size)
}
@Test
fun `WHEN the M3 TextButton is used multiple times THEN each usage is flagged`() {
val code = """
package com.example
import androidx.compose.material3.TextButton
@Composable
fun Content() {
androidx.compose.material3.TextButton(onClick = {}) {}
}
""".trimIndent()
val findings = MaterialTextButtonUsageRule().lint(code)
assertEquals(2, findings.size)
}
}