/
MaxChainedCallsOnSameLineSpec.kt
153 lines (126 loc) · 5.2 KB
/
MaxChainedCallsOnSameLineSpec.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package io.gitlab.arturbosch.detekt.rules.style
import io.gitlab.arturbosch.detekt.rules.KotlinCoreEnvironmentTest
import io.gitlab.arturbosch.detekt.test.TestConfig
import io.gitlab.arturbosch.detekt.test.assertThat
import io.gitlab.arturbosch.detekt.test.compileAndLintWithContext
import io.gitlab.arturbosch.detekt.test.lint
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.junit.jupiter.api.Test
@KotlinCoreEnvironmentTest
class MaxChainedCallsOnSameLineSpec(private val env: KotlinCoreEnvironment) {
@Test
fun `does not report 2 calls on a single line with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = "val a = 0.plus(0)"
assertThat(rule.compileAndLintWithContext(env, code)).isEmpty()
}
@Test
fun `does not report 3 calls on a single line with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = "val a = 0.plus(0).plus(0)"
assertThat(rule.compileAndLintWithContext(env, code)).isEmpty()
}
@Test
fun `reports 4 calls on a single line with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = "val a = 0.plus(0).plus(0).plus(0)"
assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1)
}
@Test
fun `reports 4 safe qualified calls on a single line with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = "val a = 0?.plus(0)?.plus(0)?.plus(0)"
assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1)
}
@Test
fun `reports 4 non-null asserted calls on a single line with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = "val a = 0!!.plus(0)!!.plus(0)!!.plus(0)"
assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1)
}
@Test
fun `reports once for 7 calls on a single line with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = "val a = 0.plus(0).plus(0).plus(0).plus(0).plus(0).plus(0)"
assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1)
}
@Test
fun `does not report 5 calls on separate lines with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = """
val a = 0
.plus(0)
.plus(0)
.plus(0)
.plus(0)
"""
assertThat(rule.compileAndLintWithContext(env, code)).isEmpty()
}
@Test
fun `does not report 3 calls on same line with wrapped calls with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = """
val a = 0.plus(0).plus(0)
.plus(0).plus(0).plus(0)
.plus(0).plus(0).plus(0)
"""
assertThat(rule.compileAndLintWithContext(env, code)).isEmpty()
}
@Test
fun `reports 4 calls on same line with wrapped calls with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = """
val a = 0.plus(0).plus(0).plus(0)
.plus(0)
.plus(0)
"""
assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1)
}
@Test
fun `reports 4 calls on wrapped line with with a max of 3`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = """
val a = 0
.plus(0)
.plus(0).plus(0).plus(0).plus(0)
.plus(0)
"""
assertThat(rule.compileAndLintWithContext(env, code)).hasSize(1)
}
@Test
fun `does not report long imports`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = "import a.b.c.d.e"
assertThat(rule.lint(code)).isEmpty()
}
@Test
fun `does not report long package declarations`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = "package a.b.c.d.e"
assertThat(rule.compileAndLintWithContext(env, code)).isEmpty()
}
@Test
fun `does not count package references as chained calls`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = """
package a.b.c
fun foo() = 1
fun test() {
a.b.c.foo().plus(0).plus(0)
}
"""
assertThat(rule.compileAndLintWithContext(env, code)).isEmpty()
}
@Test
fun `does not count a package reference as chained calls`() {
val rule = MaxChainedCallsOnSameLine(TestConfig(mapOf("maxChainedCalls" to 3)))
val code = """
package a
fun foo() = 1
fun test() {
a.foo().plus(0).plus(0)
}
"""
assertThat(rule.compileAndLintWithContext(env, code)).isEmpty()
}
}