-
Notifications
You must be signed in to change notification settings - Fork 90
/
ComposeModifierWithoutDefaultCheckTest.kt
94 lines (84 loc) · 3.18 KB
/
ComposeModifierWithoutDefaultCheckTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// Copyright 2022 Twitter, Inc.
// SPDX-License-Identifier: Apache-2.0
package com.twitter.compose.rules.detekt
import com.twitter.compose.rules.ComposeModifierWithoutDefault
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.SourceLocation
import io.gitlab.arturbosch.detekt.test.assertThat
import io.gitlab.arturbosch.detekt.test.lint
import org.intellij.lang.annotations.Language
import org.junit.jupiter.api.Test
class ComposeModifierWithoutDefaultCheckTest {
private val rule = ComposeModifierWithoutDefaultCheck(Config.empty)
@Test
fun `errors when a Composable has modifiers but without default values`() {
@Language("kotlin")
val composableCode = """
@Composable
fun Something(modifier: Modifier) { }
@Composable
fun Something(modifier: Modifier = Modifier, modifier2: Modifier) { }
""".trimIndent()
val errors = rule.lint(composableCode)
assertThat(errors).hasStartSourceLocations(
SourceLocation(2, 15),
SourceLocation(4, 46)
)
assertThat(errors[0]).hasMessage(ComposeModifierWithoutDefault.MissingModifierDefaultParam)
assertThat(errors[1]).hasMessage(ComposeModifierWithoutDefault.MissingModifierDefaultParam)
}
@Test
fun `passes when a Composable inside of an interface has modifiers but without default values`() {
@Language("kotlin")
val composableCode = """
interface Bleh {
@Composable
fun Something(modifier: Modifier)
}
class BlehImpl : Bleh {
@Composable
override fun Something(modifier: Modifier) {}
}
@Composable
actual fun Something(modifier: Modifier) {}
""".trimIndent()
val errors = rule.lint(composableCode)
assertThat(errors).isEmpty()
}
@Test
fun `passes when a Composable is an abstract function but without default values`() {
@Language("kotlin")
val composableCode = """
abstract class Bleh {
@Composable
abstract fun Something(modifier: Modifier)
}
""".trimIndent()
val errors = rule.lint(composableCode)
assertThat(errors).isEmpty()
}
@Test
fun `passes when a Composable has modifiers with defaults`() {
@Language("kotlin")
val code =
"""
@Composable
fun Something(modifier: Modifier = Modifier) {
Row(modifier = modifier) {
}
}
@Composable
fun Something(modifier: Modifier = Modifier.fillMaxSize()) {
Row(modifier = modifier) {
}
}
@Composable
fun Something(modifier: Modifier = SomeOtherValueFromSomeConstant) {
Row(modifier = modifier) {
}
}
""".trimIndent()
val errors = rule.lint(code)
assertThat(errors).isEmpty()
}
}