View Javadoc
1   ///////////////////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3   // Copyright (C) 2001-2025 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  
30  public class JavadocVariableCheckTest
31      extends AbstractModuleTestSupport {
32  
33      @Override
34      protected String getPackageLocation() {
35          return "com/puppycrawl/tools/checkstyle/checks/javadoc/javadocvariable";
36      }
37  
38      @Test
39      public void testGetRequiredTokens() {
40          final JavadocVariableCheck javadocVariableCheck = new JavadocVariableCheck();
41          final int[] actual = javadocVariableCheck.getRequiredTokens();
42          final int[] expected = {
43              TokenTypes.VARIABLE_DEF,
44          };
45          assertWithMessage("Default required tokens are invalid")
46              .that(actual)
47              .isEqualTo(expected);
48      }
49  
50      @Test
51      public void testGetAcceptableTokens() {
52          final JavadocVariableCheck javadocVariableCheck = new JavadocVariableCheck();
53  
54          final int[] actual = javadocVariableCheck.getAcceptableTokens();
55          final int[] expected = {
56              TokenTypes.VARIABLE_DEF,
57              TokenTypes.ENUM_CONSTANT_DEF,
58          };
59  
60          assertWithMessage("Default acceptable tokens are invalid")
61              .that(actual)
62              .isEqualTo(expected);
63      }
64  
65      @Test
66      public void testDefault()
67              throws Exception {
68          final String[] expected = {
69              "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
70              "309:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
71              "316:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
72              "335:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
73  
74          };
75          verifyWithInlineConfigParser(
76                  getPath("InputJavadocVariableTags.java"), expected);
77      }
78  
79      @Test
80      public void testAnother()
81              throws Exception {
82          final String[] expected = {
83              "21:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
84              "28:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
85              "34:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
86          };
87          verifyWithInlineConfigParser(
88                  getPath("InputJavadocVariableInner.java"), expected);
89      }
90  
91      @Test
92      public void testAnother2()
93              throws Exception {
94          final String[] expected = {
95              "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
96          };
97          verifyWithInlineConfigParser(
98                  getPath("InputJavadocVariableInner2.java"), expected);
99      }
100 
101     @Test
102     public void testAnother3()
103             throws Exception {
104         final String[] expected = {
105             "15:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
106             "20:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
107             "40:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
108             "47:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
109             "48:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
110             "49:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
111             "50:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
112         };
113         verifyWithInlineConfigParser(
114                 getPath("InputJavadocVariablePublicOnly.java"), expected);
115     }
116 
117     @Test
118     public void testAnother4()
119             throws Exception {
120         final String[] expected = {
121             "15:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
122             "50:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
123         };
124         verifyWithInlineConfigParser(
125                 getPath("InputJavadocVariablePublicOnly2.java"), expected);
126     }
127 
128     @Test
129     public void testJavadocVariableOnInnerClassFields() throws Exception {
130         final String[] expected = {
131             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
132             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
133             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
134             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
135             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
136             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
137             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
138             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
139             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
140             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
141             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
142             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
143             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
144             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
145             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
146             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
147         };
148         verifyWithInlineConfigParser(
149                 getPath("InputJavadocVariableOnInnerClassFields.java"),
150                expected);
151     }
152 
153     @Test
154     public void testJavadocVariableOnPublicInnerClassFields() throws Exception {
155         final String[] expected = {
156             "12:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
157             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
158             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
159             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
160             "23:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
161             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
162             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
163             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
164             "35:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
165             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
166             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
167             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
168             "47:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
169             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
170             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
171             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
172             "59:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
173             "60:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
174             "61:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
175             "62:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
176             "72:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
177         };
178         verifyWithInlineConfigParser(
179                 getPath("InputJavadocVariableOnPublicInnerClassFields.java"),
180                expected);
181     }
182 
183     @Test
184     public void testAccessModifiersPublicProtected() throws Exception {
185         final String[] expected = {
186             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
187             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
188             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
189             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
190             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
191             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
192             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
193             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
194             "61:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
195             "62:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
196             "72:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
197             "73:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
198             "84:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
199             "85:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
200             "96:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
201             "97:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
202             "108:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
203             "109:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
204         };
205         verifyWithInlineConfigParser(
206                 getPath("InputJavadocVariableNoJavadoc2.java"),
207                expected);
208     }
209 
210     @Test
211     public void testAccessModifiersPackagePrivate() throws Exception {
212         final String[] expected = {
213             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
214             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
215             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
216             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
217             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
218             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
219             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
220             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
221             "63:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
222             "64:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
223             "74:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
224             "75:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
225             "86:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
226             "87:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
227             "98:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
228             "99:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
229             "110:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
230             "111:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
231             "121:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
232         };
233         verifyWithInlineConfigParser(
234                 getPath("InputJavadocVariableNoJavadoc3.java"),
235                expected);
236     }
237 
238     @Test
239     public void testIgnoredVariableNames()
240             throws Exception {
241         final String[] expected = {
242             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
243             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
244             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
245             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
246             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
247             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
248             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
249             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
250             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
251             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
252             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
253             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
254             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
255             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
256             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
257             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
258         };
259         verifyWithInlineConfigParser(
260                 getPath("InputJavadocVariableOnIgnoredVariableNames.java"),
261                 expected);
262     }
263 
264     @Test
265     public void testIgnoredVariableNames2()
266             throws Exception {
267         final String[] expected = {
268             "14:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
269             "15:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
270             "16:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
271             "17:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
272             "25:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
273             "26:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
274             "27:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
275             "28:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
276             "37:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
277             "38:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
278             "39:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
279             "40:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
280             "49:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
281             "50:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
282             "51:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
283             "52:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
284             "61:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
285             "62:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
286             "63:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
287             "64:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
288         };
289         verifyWithInlineConfigParser(
290                 getPath("InputJavadocVariableOnIgnoredVariableNames2.java"),
291                 expected);
292     }
293 
294     @Test
295     public void testDoNotIgnoreAnythingWhenIgnoreNamePatternIsEmpty()
296             throws Exception {
297         final String[] expected = {
298             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
299             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
300             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
301             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
302             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
303             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
304             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
305             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
306             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
307             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
308             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
309             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
310             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
311             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
312             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
313             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
314             "61:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
315             "62:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
316             "63:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
317             "64:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
318             "72:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
319             "73:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
320             "74:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
321             "75:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
322             "84:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
323             "85:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
324             "86:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
325             "87:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
326             "96:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
327             "97:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
328             "98:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
329             "99:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
330             "108:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
331             "109:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
332             "110:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
333             "111:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
334             "121:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
335         };
336         verifyWithInlineConfigParser(
337                 getPath("InputJavadocVariableNoJavadoc5.java"),
338                 expected);
339     }
340 
341     @Test
342     public void testLambdaLocalVariablesDoNotNeedJavadoc() throws Exception {
343         final String[] expected = {
344             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
345         };
346         verifyWithInlineConfigParser(
347                 getPath("InputJavadocVariableNoJavadocNeededInLambda.java"),
348                 expected);
349     }
350 
351     @Test
352     public void testInterfaceMemberScopeIsPublic() throws Exception {
353         final String[] expected = {
354             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
355             "18:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
356             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
357         };
358         verifyWithInlineConfigParser(
359                 getPath("InputJavadocVariableInterfaceMemberScopeIsPublic.java"),
360                 expected);
361     }
362 
363     @Test
364     public void testMethodInnerClass() throws Exception {
365         final String[] expected = {
366             "9:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
367             "10:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
368             "11:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
369             "12:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
370         };
371         verifyWithInlineConfigParser(
372             getPath("InputJavadocVariableMethodInnerClass.java"),
373             expected);
374     }
375 
376     @Test
377     public void testJavadocVariableAboveComment() throws Exception {
378         final String[] expected = {
379             "23:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
380         };
381         verifyWithInlineConfigParser(
382             getPath("InputJavadocVariableAboveComment.java"),
383             expected);
384     }
385 }