/
TrimMultilineRawStringSpec.kt
180 lines (163 loc) · 4.85 KB
/
TrimMultilineRawStringSpec.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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
@file:Suppress("StringTemplate")
package io.gitlab.arturbosch.detekt.rules.style
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.test.compileAndLint
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
class TrimMultilineRawStringSpec {
val subject = TrimMultilineRawString(Config.empty)
@Test
fun `raises multiline raw strings without trim`() {
val code = """
val a = ${TQ}
Hello world!
${TQ}
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).hasSize(1)
}
@Test
fun `raises multiline raw strings with lenght`() {
val code = """
val a = ${TQ}
Hello world!
${TQ}.length
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).hasSize(1)
}
@Test
fun `doesn't raise multiline raw strings without trimIndent`() {
val code = """
val a = ${TQ}
Hello world!
${TQ}.trimIndent()
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).isEmpty()
}
@Test
fun `doesn't raise multiline raw strings without trimMargin`() {
val code = """
val a = ${TQ}
|Hello world!
${TQ}.trimMargin()
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).isEmpty()
}
@Test
fun `doesn't raise multiline raw strings without trimMargin with parameter`() {
val code = """
val a = ${TQ}
>Hello world!
${TQ}.trimMargin(">")
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).isEmpty()
}
@Test
fun `don't raise one line raw strings`() {
val code = """
val a = ${TQ}Hello world!${TQ}
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).isEmpty()
}
@Test
fun `doesn't raise if it is not a raw string`() {
val code = """
val a = "Hello world!"
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).isEmpty()
}
@Test
fun `doesn't raise if it is not a raw string - multiline`() {
val code = """
val a = "Hello ${'$'}{
"cruel"
} world!"
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).isEmpty()
}
@Test
fun `doesn't raise on constant`() {
val code = """
object O {
const val s =
${TQ}
Given something
When something
Then something
${TQ}
}
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).isEmpty()
}
@Test
fun `doesn't raise on annotation entry arguments`() {
val code = """
annotation class DisplayName(val s: String)
@DisplayName(
${TQ}
Given something
When something
Then something
${TQ}
)
class Foo
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).isEmpty()
}
@Test
fun `doesn't raise on annotation constructor parameters`() {
val code = """
annotation class DisplayName(
val s: String =
${TQ}
Given something
When something
Then something
${TQ}
)
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).isEmpty()
}
@Test
fun `raises on function arguments`() {
val code = """
fun foo(s: String) {}
val bar = foo(
${TQ}
Given something
When something
Then something
${TQ}
)
class Foo
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).hasSize(1)
}
@Test
fun `raises on class constructor parameters`() {
val code = """
class Foo(
val s: String =
${TQ}
Given something
When something
Then something
${TQ}
)
""".trimIndent()
subject.compileAndLint(code)
assertThat(subject.findings).hasSize(1)
}
}
private const val TQ = "\"\"\""