1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.puppycrawl.tools.checkstyle.checks.javadoc;
21
22 import static com.google.common.truth.Truth.assertWithMessage;
23 import static com.puppycrawl.tools.checkstyle.checks.javadoc.MissingJavadocTypeCheck.MSG_JAVADOC_MISSING;
24
25 import org.junit.jupiter.api.Test;
26
27 import com.puppycrawl.tools.checkstyle.AbstractModuleTestSupport;
28 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
29 import com.puppycrawl.tools.checkstyle.utils.CommonUtil;
30
31 public class MissingJavadocTypeCheckTest extends AbstractModuleTestSupport {
32
33 @Override
34 protected String getPackageLocation() {
35 return "com/puppycrawl/tools/checkstyle/checks/javadoc/missingjavadoctype";
36 }
37
38 @Test
39 public void testGetRequiredTokens() {
40 final MissingJavadocTypeCheck missingJavadocTypeCheck = new MissingJavadocTypeCheck();
41 assertWithMessage(
42 "MissingJavadocTypeCheck#getRequiredTokens should return empty array by default")
43 .that(missingJavadocTypeCheck.getRequiredTokens())
44 .isEmpty();
45 }
46
47 @Test
48 public void testGetAcceptableTokens() {
49 final MissingJavadocTypeCheck missingJavadocTypeCheck = new MissingJavadocTypeCheck();
50
51 final int[] actual = missingJavadocTypeCheck.getAcceptableTokens();
52 final int[] expected = {
53 TokenTypes.INTERFACE_DEF,
54 TokenTypes.CLASS_DEF,
55 TokenTypes.ENUM_DEF,
56 TokenTypes.ANNOTATION_DEF,
57 TokenTypes.RECORD_DEF,
58 };
59
60 assertWithMessage("Default acceptable tokens are invalid")
61 .that(actual)
62 .isEqualTo(expected);
63 }
64
65 @Test
66 public void testTagsOne() throws Exception {
67 final String[] expected = {
68 "14:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
69 "44:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
70 "69:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
71 };
72 verifyWithInlineConfigParser(
73 getPath("InputMissingJavadocTypeTagsOne.java"), expected);
74 }
75
76 @Test
77 public void testTagsTwo() throws Exception {
78 final String[] expected = {
79 "20:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
80 };
81 verifyWithInlineConfigParser(
82 getPath("InputMissingJavadocTypeTagsTwo.java"), expected);
83 }
84
85 @Test
86 public void testTagsThree() throws Exception {
87 final String[] expected = {
88 "20:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
89 };
90 verifyWithInlineConfigParser(
91 getPath("InputMissingJavadocTypeTagsThree.java"), expected);
92 }
93
94 @Test
95 public void testTagsFour() throws Exception {
96 final String[] expected = {
97 "20:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
98 };
99 verifyWithInlineConfigParser(
100 getPath("InputMissingJavadocTypeTagsFour.java"), expected);
101 }
102
103 @Test
104 public void testInner() throws Exception {
105 final String[] expected = {
106 "19:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
107 "26:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
108 "32:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
109 };
110 verifyWithInlineConfigParser(
111 getPath("InputMissingJavadocTypeInner.java"), expected);
112 }
113
114 @Test
115 public void testMissingJavadocTypePublicOnly1One() throws Exception {
116 final String[] expected = {
117 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
118 "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
119 "20:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
120 "40:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
121 };
122 verifyWithInlineConfigParser(
123 getPath("InputMissingJavadocTypePublicOnly1One.java"), expected);
124 }
125
126 @Test
127 public void testMissingJavadocTypePublicOnly1Two() throws Exception {
128 final String[] expected = {
129 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
130 };
131 verifyWithInlineConfigParser(
132 getPath("InputMissingJavadocTypePublicOnly1Two.java"), expected);
133 }
134
135 @Test
136 public void testMissingJavadocTypePublicOnly2One() throws Exception {
137 final String[] expected = {
138 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
139 };
140 verifyWithInlineConfigParser(
141 getPath("InputMissingJavadocTypePublicOnly2One.java"), expected);
142 }
143
144 @Test
145 public void testMissingJavadocTypePublicOnly2Two() throws Exception {
146 final String[] expected = {
147 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
148 };
149 verifyWithInlineConfigParser(
150 getPath("InputMissingJavadocTypePublicOnly2Two.java"), expected);
151 }
152
153 @Test
154 public void testPublic() throws Exception {
155 final String[] expected = {
156 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
157 "44:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
158 };
159 verifyWithInlineConfigParser(
160 getPath("InputMissingJavadocTypeScopeInnerInterfaces1.java"),
161 expected);
162 }
163
164 @Test
165 public void testProtest() throws Exception {
166 final String[] expected = {
167 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
168 "35:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
169 "44:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
170 "71:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
171 };
172 verifyWithInlineConfigParser(
173 getPath("InputMissingJavadocTypeScopeInnerInterfaces2.java"),
174 expected);
175 }
176
177 @Test
178 public void testPkg() throws Exception {
179 final String[] expected = {
180 "22:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
181 "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
182 "26:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
183 };
184 verifyWithInlineConfigParser(
185 getPath("InputMissingJavadocTypeScopeInnerClasses1.java"), expected);
186 }
187
188 @Test
189 public void testEclipse() throws Exception {
190 final String[] expected = {
191 "22:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
192 };
193 verifyWithInlineConfigParser(
194 getPath("InputMissingJavadocTypeScopeInnerClasses2.java"), expected);
195 }
196
197 @Test
198 public void testScopesOne() throws Exception {
199 final String[] expected = {
200 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
201 "25:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
202 "37:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
203 "49:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
204 };
205 verifyWithInlineConfigParser(
206 getPath("InputMissingJavadocTypeNoJavadoc1One.java"),
207 expected);
208 }
209
210 @Test
211 public void testScopesTwo() throws Exception {
212 final String[] expected = {
213 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
214 "15:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
215 "26:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
216 "38:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
217 "50:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
218 "62:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
219 "74:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
220 };
221 verifyWithInlineConfigParser(
222 getPath("InputMissingJavadocTypeNoJavadoc1Two.java"),
223 expected);
224 }
225
226 @Test
227 public void testLimitViolationsBySpecifyingTokens() throws Exception {
228 final String[] expected = {
229 "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
230 };
231 verifyWithInlineConfigParser(
232 getPath("InputMissingJavadocTypeNoJavadocOnInterface.java"),
233 expected);
234 }
235
236 @Test
237 public void testMissingJavadocTypeNoJavadoc2One() throws Exception {
238 final String[] expected = {
239 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
240 "25:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
241 };
242 verifyWithInlineConfigParser(
243 getPath("InputMissingJavadocTypeNoJavadoc2One.java"),
244 expected);
245 }
246
247 @Test
248 public void testMissingJavadocTypeNoJavadoc2Two() throws Exception {
249 final String[] expected = {
250 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
251 };
252 verifyWithInlineConfigParser(
253 getPath("InputMissingJavadocTypeNoJavadoc2Two.java"),
254 expected);
255 }
256
257 @Test
258 public void testMissingJavadocTypeNoJavadoc3One() throws Exception {
259 final String[] expected = {
260 "37:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
261 "49:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
262 };
263 verifyWithInlineConfigParser(
264 getPath("InputMissingJavadocTypeNoJavadoc3One.java"),
265 expected);
266 }
267
268 @Test
269 public void testMissingJavadocTypeNoJavadoc3Two() throws Exception {
270 final String[] expected = {
271 "15:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
272 "26:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
273 "38:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
274 "50:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
275 "62:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
276 "74:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
277 };
278 verifyWithInlineConfigParser(
279 getPath("InputMissingJavadocTypeNoJavadoc3Two.java"),
280 expected);
281 }
282
283 @Test
284 public void testDontAllowUnusedParameterTag() throws Exception {
285 final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
286 verifyWithInlineConfigParser(
287 getPath("InputMissingJavadocTypeUnusedParamInJavadocForClass.java"),
288 expected);
289 }
290
291 @Test
292 public void testSkipAnnotationsDefault() throws Exception {
293
294 final String[] expected = {
295 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
296 "17:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
297 "21:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
298 };
299 verifyWithInlineConfigParser(
300 getPath("InputMissingJavadocTypeSkipAnnotations1.java"),
301 expected);
302 }
303
304 @Test
305 public void testSkipAnnotationsWithFullyQualifiedName() throws Exception {
306 final String[] expected = {
307 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
308 "17:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
309 "21:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
310 };
311 verifyWithInlineConfigParser(
312 getPath("InputMissingJavadocTypeSkipAnnotations2.java"),
313 expected);
314 }
315
316 @Test
317 public void testSkipAnnotationsAllowed() throws Exception {
318
319 final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
320 verifyWithInlineConfigParser(
321 getPath("InputMissingJavadocTypeSkipAnnotations3.java"),
322 expected);
323 }
324
325 @Test
326 public void testSkipAnnotationsNotAllowed() throws Exception {
327
328 final String[] expected = {
329 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
330 "17:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
331 "21:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
332 };
333 verifyWithInlineConfigParser(
334 getPath("InputMissingJavadocTypeSkipAnnotations4.java"),
335 expected);
336 }
337
338 @Test
339 public void testMissingJavadocTypeCheckRecords() throws Exception {
340
341 final String[] expected = {
342 "14:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
343 "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
344 "19:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
345 "23:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
346 "31:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
347 "32:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
348 "41:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
349 };
350 verifyWithInlineConfigParser(
351 getNonCompilablePath("InputMissingJavadocTypeRecords.java"),
352 expected);
353 }
354
355 @Test
356 public void testInterfaceMemberScopeIsPublic() throws Exception {
357
358 final String[] expected = {
359 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
360 "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
361 "19:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
362 };
363 verifyWithInlineConfigParser(
364 getPath("InputMissingJavadocTypeInterfaceMemberScopeIsPublic.java"),
365 expected);
366 }
367
368 @Test
369 public void testQualifiedAnnotation1() throws Exception {
370 final String[] expected = {
371 "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
372 "20:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
373 "23:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
374 };
375 verifyWithInlineConfigParser(
376 getPath("InputMissingJavadocTypeQualifiedAnnotation1.java"), expected);
377 }
378
379 @Test
380 public void testQualifiedAnnotation2() throws Exception {
381 final String[] expected = {
382 "20:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
383 "23:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
384 };
385 verifyWithInlineConfigParser(
386 getPath("InputMissingJavadocTypeQualifiedAnnotation2.java"), expected);
387 }
388
389 @Test
390 public void testQualifiedAnnotation3() throws Exception {
391 final String[] expected = {
392 "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
393 "22:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
394 };
395 verifyWithInlineConfigParser(
396 getPath("InputMissingJavadocTypeQualifiedAnnotation3.java"), expected);
397 }
398
399 @Test
400 public void testQualifiedAnnotation4() throws Exception {
401 final String[] expected = {
402 "17:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
403 "21:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
404 };
405 verifyWithInlineConfigParser(
406 getPath("InputMissingJavadocTypeQualifiedAnnotation4.java"), expected);
407 }
408
409 @Test
410 public void testQualifiedAnnotation5() throws Exception {
411 final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
412 verifyWithInlineConfigParser(
413 getPath("InputMissingJavadocTypeQualifiedAnnotation5.java"), expected);
414 }
415
416 @Test
417 public void testMultipleQualifiedAnnotation() throws Exception {
418 final String[] expected = {
419 "29:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
420 "38:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
421 };
422 verifyWithInlineConfigParser(
423 getPath("InputMissingJavadocTypeMultipleQualifiedAnnotation.java"), expected);
424 }
425
426 @Test
427 public void testQualifiedAnnotationWithParameters() throws Exception {
428 final String[] expected = {
429 "33:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
430 "37:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
431 "42:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
432 "50:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
433 };
434 verifyWithInlineConfigParser(
435 getPath("InputMissingJavadocTypeQualifiedAnnotationWithParameters.java"),
436 expected);
437 }
438
439 @Test
440 public void testMissingJavadocTypeAboveComments() throws Exception {
441 final String[] expected = {
442 "13:1: " + getCheckMessage(MSG_JAVADOC_MISSING),
443 "27:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
444 };
445 verifyWithInlineConfigParser(
446 getPath("InputMissingJavadocTypeAboveComments.java"),
447 expected);
448 }
449
450 }