View Javadoc
1   ///////////////////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3   // Copyright (C) 2001-2026 the original author or authors.
4   //
5   // This library is free software; you can redistribute it and/or
6   // modify it under the terms of the GNU Lesser General Public
7   // License as published by the Free Software Foundation; either
8   // version 2.1 of the License, or (at your option) any later version.
9   //
10  // This library is distributed in the hope that it will be useful,
11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  // Lesser General Public License for more details.
14  //
15  // You should have received a copy of the GNU Lesser General Public
16  // License along with this library; if not, write to the Free Software
17  // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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.JavadocVariableCheck.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 JavadocVariableCheckTest
32      extends AbstractModuleTestSupport {
33  
34      @Override
35      public String getPackageLocation() {
36          return "com/puppycrawl/tools/checkstyle/checks/javadoc/javadocvariable";
37      }
38  
39      @Test
40      public void testGetRequiredTokens() {
41          final JavadocVariableCheck javadocVariableCheck = new JavadocVariableCheck();
42          final int[] actual = javadocVariableCheck.getRequiredTokens();
43          final int[] expected = {
44              TokenTypes.VARIABLE_DEF,
45          };
46          assertWithMessage("Default required tokens are invalid")
47              .that(actual)
48              .isEqualTo(expected);
49      }
50  
51      @Test
52      public void testGetAcceptableTokens() {
53          final JavadocVariableCheck javadocVariableCheck = new JavadocVariableCheck();
54  
55          final int[] actual = javadocVariableCheck.getAcceptableTokens();
56          final int[] expected = {
57              TokenTypes.VARIABLE_DEF,
58              TokenTypes.ENUM_CONSTANT_DEF,
59          };
60  
61          assertWithMessage("Default acceptable tokens are invalid")
62              .that(actual)
63              .isEqualTo(expected);
64      }
65  
66      @Test
67      public void testMethods1() throws
68              Exception {
69          final String[] expected = {
70              "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
71          };
72          verifyWithInlineConfigParser(
73                  getPath("InputJavadocVariableTagsMethods1.java"), expected);
74      }
75  
76      @Test
77      public void testMethods2()
78              throws Exception {
79          final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
80          verifyWithInlineConfigParser(
81                  getPath("InputJavadocVariableTagsMethods2.java"), expected);
82      }
83  
84      @Test
85      public void testMethods3()
86              throws Exception {
87          final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
88          verifyWithInlineConfigParser(
89                  getPath("InputJavadocVariableTagsMethods3.java"), expected);
90      }
91  
92      @Test
93      public void testEnums()
94              throws Exception {
95          final String[] expected = {
96              "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
97              "22:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
98              "41:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
99          };
100         verifyWithInlineConfigParser(
101                 getPath("InputJavadocVariableTagsEnums.java"), expected);
102     }
103 
104     @Test
105     public void testAnother()
106             throws Exception {
107         final String[] expected = {
108             "21:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
109             "28:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
110             "34:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
111         };
112         verifyWithInlineConfigParser(
113                 getPath("InputJavadocVariableInner.java"), expected);
114     }
115 
116     @Test
117     public void testAnother2()
118             throws Exception {
119         final String[] expected = {
120             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
121         };
122         verifyWithInlineConfigParser(
123                 getPath("InputJavadocVariableInner2.java"), expected);
124     }
125 
126     @Test
127     public void testAnother3()
128             throws Exception {
129         final String[] expected = {
130             "15:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
131             "20:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
132             "40:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
133             "47:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
134             "48:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
135             "49:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
136             "50:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
137         };
138         verifyWithInlineConfigParser(
139                 getPath("InputJavadocVariablePublicOnly.java"), expected);
140     }
141 
142     @Test
143     public void testAnother4()
144             throws Exception {
145         final String[] expected = {
146             "15:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
147             "50:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
148         };
149         verifyWithInlineConfigParser(
150                 getPath("InputJavadocVariablePublicOnly2.java"), expected);
151     }
152 
153     @Test
154     public void testJavadocVariableOnInnerClassFields() throws Exception {
155         final String[] expected = {
156             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
157             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
158             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
159             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
160             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
161             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
162             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
163             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
164             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
165             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
166             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
167             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
168             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
169             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
170             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
171             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
172         };
173         verifyWithInlineConfigParser(
174                 getPath("InputJavadocVariableOnInnerClassFields.java"),
175                expected);
176     }
177 
178     @Test
179     public void testJavadocVariableOnPublicInnerClassFields() throws Exception {
180         final String[] expected = {
181             "12:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
182             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
183             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
184             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
185             "23:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
186             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
187             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
188             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
189             "35:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
190             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
191             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
192             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
193             "47:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
194             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
195             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
196             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
197             "59:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
198             "60:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
199             "61:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
200             "62:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
201             "72:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
202         };
203         verifyWithInlineConfigParser(
204                 getPath("InputJavadocVariableOnPublicInnerClassFields.java"),
205                expected);
206     }
207 
208     @Test
209     public void testAccessModifiersPublicProtectedPublic() throws Exception {
210         final String[] expected = {
211             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
212             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
213             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
214             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
215             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
216             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
217             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
218             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
219         };
220         verifyWithInlineConfigParser(
221                 getPath("InputJavadocVariableNoJavadoc2Public.java"), expected);
222     }
223 
224     @Test
225     public void testAccessModifiersPublicProtectedPackage() throws Exception {
226         final String[] expected = {
227             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
228             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
229             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
230             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
231             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
232             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
233             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
234             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
235             "60:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
236             "61:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
237             "82:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
238         };
239         verifyWithInlineConfigParser(
240                 getPath("InputJavadocVariableNoJavadoc2Package.java"), expected);
241     }
242 
243     @Test
244     public void testAccessModifiersPackagePrivatePublic() throws Exception {
245         final String[] expected = {
246             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
247             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
248             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
249             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
250             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
251             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
252             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
253             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
254         };
255         verifyWithInlineConfigParser(
256                 getPath("InputJavadocVariableNoJavadoc3Public.java"), expected);
257     }
258 
259     @Test
260     public void testAccessModifiersPackagePrivatePackage() throws Exception {
261         final String[] expected = {
262             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
263             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
264             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
265             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
266             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
267             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
268             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
269             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
270             "62:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
271             "63:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
272             "73:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
273         };
274         verifyWithInlineConfigParser(
275                 getPath("InputJavadocVariableNoJavadoc3Package.java"), expected);
276     }
277 
278     @Test
279     public void testIgnoredVariableNames()
280             throws Exception {
281         final String[] expected = {
282             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
283             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
284             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
285             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
286             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
287             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
288             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
289             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
290             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
291             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
292             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
293             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
294             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
295             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
296             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
297             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
298         };
299         verifyWithInlineConfigParser(
300                 getPath("InputJavadocVariableOnIgnoredVariableNames.java"),
301                 expected);
302     }
303 
304     @Test
305     public void testIgnoredVariableNames2()
306             throws Exception {
307         final String[] expected = {
308             "14:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
309             "15:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
310             "16:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
311             "17:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
312             "25:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
313             "26:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
314             "27:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
315             "28:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
316             "37:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
317             "38:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
318             "39:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
319             "40:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
320             "49:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
321             "50:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
322             "51:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
323             "52:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
324             "61:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
325             "62:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
326             "63:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
327             "64:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
328         };
329         verifyWithInlineConfigParser(
330                 getPath("InputJavadocVariableOnIgnoredVariableNames2.java"),
331                 expected);
332     }
333 
334     @Test
335     public void testDoNotIgnoreAnythingWhenIgnoreNamePatternIsEmptyPublic() throws Exception {
336         final String[] expected = {
337             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
338             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
339             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
340             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
341             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
342             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
343             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
344             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
345             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
346             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
347             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
348             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
349             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
350             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
351             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
352             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
353         };
354         verifyWithInlineConfigParser(
355                 getPath("InputJavadocVariableNoJavadoc5Public.java"), expected);
356     }
357 
358     @Test
359     public void testDoNotIgnoreAnythingWhenIgnoreNamePatternIsEmptyPackage() throws Exception {
360         final String[] expected = {
361             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
362             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
363             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
364             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
365             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
366             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
367             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
368             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
369             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
370             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
371             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
372             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
373             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
374             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
375             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
376             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
377             "60:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
378             "61:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
379             "62:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
380             "63:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
381             "73:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
382         };
383         verifyWithInlineConfigParser(
384                 getPath("InputJavadocVariableNoJavadoc5Package.java"), expected);
385     }
386 
387     @Test
388     public void testLambdaLocalVariablesDoNotNeedJavadoc() throws Exception {
389         final String[] expected = {
390             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
391         };
392         verifyWithInlineConfigParser(
393                 getPath("InputJavadocVariableNoJavadocNeededInLambda.java"),
394                 expected);
395     }
396 
397     @Test
398     public void testInterfaceMemberScopeIsPublic() throws Exception {
399         final String[] expected = {
400             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
401             "18:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
402             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
403         };
404         verifyWithInlineConfigParser(
405                 getPath("InputJavadocVariableInterfaceMemberScopeIsPublic.java"),
406                 expected);
407     }
408 
409     @Test
410     public void testMethodInnerClass() throws Exception {
411         final String[] expected = {
412             "9:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
413             "10:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
414             "11:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
415             "12:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
416         };
417         verifyWithInlineConfigParser(
418             getPath("InputJavadocVariableMethodInnerClass.java"),
419             expected);
420     }
421 
422     @Test
423     public void testJavadocVariableAboveComment() throws Exception {
424         final String[] expected = {
425             "23:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
426         };
427         verifyWithInlineConfigParser(
428             getPath("InputJavadocVariableAboveComment.java"),
429             expected);
430     }
431 }