/
EndOfSentenceFormatSpec.kt
254 lines (230 loc) · 6.39 KB
/
EndOfSentenceFormatSpec.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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
package io.gitlab.arturbosch.detekt.rules.documentation
import io.gitlab.arturbosch.detekt.test.assertThat
import io.gitlab.arturbosch.detekt.test.compileAndLint
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
class EndOfSentenceFormatSpec {
val subject = EndOfSentenceFormat()
@Test
fun `reports invalid KDoc endings on classes`() {
val code = """
/** Some doc */
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
}
@Test
fun `reports invalid KDoc endings on function with expression body`() {
val code = """
/** Some doc */
fun f(x: Int, y: Int, z: Int) =
if (x == 0) y + z else x + y
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
}
@Test
fun `reports invalid KDoc endings on properties`() {
val code = """
class Test {
/** Some doc */
val test = 3
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
}
@Test
fun `reports invalid KDoc endings on top-level functions`() {
val code = """
/** Some doc */
fun test() = 3
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
}
@Test
fun `reports invalid KDoc endings on functions`() {
val code = """
class Test {
/** Some doc */
fun test() = 3
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
}
@Test
fun `reports invalid KDoc endings`() {
val code = """
class Test {
/** Some doc-- */
fun test() = 3
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
}
@Test
fun `reports invalid KDoc endings in block`() {
val code = """
/**
* Something off abc@@
*/
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
}
@Test
fun `does not validate first sentence KDoc endings in a multi sentence comment`() {
val code = """
/**
* This sentence is correct.
*
* This sentence doesn't matter
*/
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
@Test
fun `does not report KDoc which doesn't contain any real sentence`() {
val code = """
/**
*/
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
@Test
fun `does not report KDoc which doesn't contain any real sentence but many tags`() {
val code = """
/**
* @configuration this - just an example (default: `150`)
*
* @active since v1.0.0
*/
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
@Test
fun `does not report KDoc which doesn't contain any real sentence but html tags`() {
val code = """
/**
*
* <noncompliant>
* fun foo(): Unit { }
* </noncompliant>
*
* <compliant>
* fun foo() { }
* </compliant>
*
*/
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
@Test
fun `does not report KDoc ending with periods`() {
val code = """
/**
* Something correct.
*/
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
@Test
fun `does not report KDoc ending with questionmarks`() {
val code = """
/**
* Something correct?
*/
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
@Test
fun `does not report KDoc ending with exclamation marks`() {
val code = """
/**
* Something correct!
*/
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
@Test
fun `does not report KDoc ending with colon`() {
val code = """
/**
* Something correct:
*/
class Test {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
@Test
fun `does not report URLs in comments`() {
val code = """
/** http://www.google.com */
class Test1 {
}
/** Look here
http://google.com */
class Test2 {
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).isEmpty()
}
@Nested
inner class `highlights only the relevant part of the comment - #5310` {
@Test
fun function() {
val code = """
/**
* This sentence is correct invalid
*
* This sentence counts too, because it doesn't know where the other ends */
fun test() = 3
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
.hasStartSourceLocation(2, 2)
.hasEndSourceLocation(4, 75)
}
@Test
fun property() {
val code = """
class Test {
/** This sentence is correct invalid
This sentence counts too, because it doesn't know where the other ends */
val test = 3
}
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
.hasStartSourceLocation(2, 8)
.hasEndSourceLocation(3, 80)
}
@Test
fun `class`() {
val code = """
/**
* This sentence is correct invalid
*
* This sentence counts too, because it doesn't know where the other ends
*/
class Test
""".trimIndent()
assertThat(subject.compileAndLint(code)).hasSize(1)
.hasStartSourceLocation(2, 2)
.hasEndSourceLocation(4, 74)
}
}
}