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             "130:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
205         };
206         verifyWithInlineConfigParser(
207                 getPath("InputJavadocVariableNoJavadoc2.java"),
208                expected);
209     }
210 
211     @Test
212     public void testAccessModifiersPackagePrivate() throws Exception {
213         final String[] expected = {
214             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
215             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
216             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
217             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
218             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
219             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
220             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
221             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
222             "63:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
223             "64:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
224             "74:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
225             "75:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
226             "86:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
227             "87:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
228             "98:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
229             "99:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
230             "110:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
231             "111:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
232             "121:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
233         };
234         verifyWithInlineConfigParser(
235                 getPath("InputJavadocVariableNoJavadoc3.java"),
236                expected);
237     }
238 
239     @Test
240     public void testIgnoredVariableNames()
241             throws Exception {
242         final String[] expected = {
243             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
244             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
245             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
246             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
247             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
248             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
249             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
250             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
251             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
252             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
253             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
254             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
255             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
256             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
257             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
258             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
259         };
260         verifyWithInlineConfigParser(
261                 getPath("InputJavadocVariableOnIgnoredVariableNames.java"),
262                 expected);
263     }
264 
265     @Test
266     public void testIgnoredVariableNames2()
267             throws Exception {
268         final String[] expected = {
269             "14:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
270             "15:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
271             "16:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
272             "17:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
273             "25:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
274             "26:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
275             "27:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
276             "28:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
277             "37:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
278             "38:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
279             "39:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
280             "40:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
281             "49:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
282             "50:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
283             "51:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
284             "52:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
285             "61:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
286             "62:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
287             "63:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
288             "64:13: " + getCheckMessage(MSG_JAVADOC_MISSING),
289         };
290         verifyWithInlineConfigParser(
291                 getPath("InputJavadocVariableOnIgnoredVariableNames2.java"),
292                 expected);
293     }
294 
295     @Test
296     public void testDoNotIgnoreAnythingWhenIgnoreNamePatternIsEmpty()
297             throws Exception {
298         final String[] expected = {
299             "13:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
300             "14:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
301             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
302             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
303             "24:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
304             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
305             "26:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
306             "27:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
307             "36:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
308             "37:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
309             "38:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
310             "39:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
311             "48:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
312             "49:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
313             "50:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
314             "51:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
315             "61:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
316             "62:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
317             "63:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
318             "64:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
319             "72:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
320             "73:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
321             "74:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
322             "75:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
323             "84:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
324             "85:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
325             "86:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
326             "87:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
327             "96:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
328             "97:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
329             "98:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
330             "99:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
331             "108:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
332             "109:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
333             "110:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
334             "111:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
335             "121:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
336         };
337         verifyWithInlineConfigParser(
338                 getPath("InputJavadocVariableNoJavadoc5.java"),
339                 expected);
340     }
341 
342     @Test
343     public void testLambdaLocalVariablesDoNotNeedJavadoc() throws Exception {
344         final String[] expected = {
345             "15:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
346         };
347         verifyWithInlineConfigParser(
348                 getPath("InputJavadocVariableNoJavadocNeededInLambda.java"),
349                 expected);
350     }
351 
352     @Test
353     public void testInterfaceMemberScopeIsPublic() throws Exception {
354         final String[] expected = {
355             "16:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
356             "18:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
357             "25:9: " + getCheckMessage(MSG_JAVADOC_MISSING),
358         };
359         verifyWithInlineConfigParser(
360                 getPath("InputJavadocVariableInterfaceMemberScopeIsPublic.java"),
361                 expected);
362     }
363 
364     @Test
365     public void testMethodInnerClass() throws Exception {
366         final String[] expected = {
367             "9:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
368             "10:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
369             "11:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
370             "12:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
371         };
372         verifyWithInlineConfigParser(
373             getPath("InputJavadocVariableMethodInnerClass.java"),
374             expected);
375     }
376 
377     @Test
378     public void testJavadocVariableAboveComment() throws Exception {
379         final String[] expected = {
380             "23:5: " + getCheckMessage(MSG_JAVADOC_MISSING),
381         };
382         verifyWithInlineConfigParser(
383             getPath("InputJavadocVariableAboveComment.java"),
384             expected);
385     }
386 }