1   ////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code for adherence to a set of rules.
3   // Copyright (C) 2001-2019 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.naming;
21  
22  import static com.puppycrawl.tools.checkstyle.checks.naming.AbbreviationAsWordInNameCheck.MSG_KEY;
23  
24  import org.junit.Test;
25  
26  import com.puppycrawl.tools.checkstyle.AbstractModuleTestSupport;
27  import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
28  import com.puppycrawl.tools.checkstyle.utils.CommonUtil;
29  
30  public class AbbreviationAsWordInNameCheckTest extends AbstractModuleTestSupport {
31  
32      @Override
33      protected String getPackageLocation() {
34          return "com/puppycrawl/tools/checkstyle/checks/naming/abbreviationaswordinname";
35      }
36  
37      @Test
38      public void testDefault() throws Exception {
39          final DefaultConfiguration checkConfig =
40              createModuleConfig(AbbreviationAsWordInNameCheck.class);
41          final int expectedCapitalCount = 4;
42  
43          final String[] expected = {
44              "9: " + getWarningMessage("FactoryWithBADNAme", expectedCapitalCount),
45              "12: " + getWarningMessage("AbstractCLASSName", expectedCapitalCount),
46              "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
47              "37: " + getWarningMessage("WellNamedFACTORY", expectedCapitalCount),
48              "38: " + getWarningMessage("marazmaticMETHODName", expectedCapitalCount),
49              "39: " + getWarningMessage("marazmaticVARIABLEName", expectedCapitalCount),
50              "40: " + getWarningMessage("MARAZMATICVariableName", expectedCapitalCount),
51              "58: " + getWarningMessage("serialNUMBER", expectedCapitalCount),
52          };
53  
54          verify(checkConfig, getPath("InputAbbreviationAsWordInNameType.java"), expected);
55      }
56  
57      @Test
58      public void testTypeNamesForThreePermittedCapitalLetters() throws Exception {
59          final DefaultConfiguration checkConfig =
60              createModuleConfig(AbbreviationAsWordInNameCheck.class);
61          checkConfig.addAttribute("allowedAbbreviationLength", "3");
62          checkConfig.addAttribute("allowedAbbreviations", "III");
63          checkConfig.addAttribute("tokens", "CLASS_DEF");
64          checkConfig.addAttribute("ignoreOverriddenMethods", "true");
65          final int expectedCapitalCount = 4;
66  
67          final String[] expected = {
68              "9: " + getWarningMessage("FactoryWithBADNAme", expectedCapitalCount),
69              "12: " + getWarningMessage("AbstractCLASSName", expectedCapitalCount),
70              "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
71              "37: " + getWarningMessage("WellNamedFACTORY", expectedCapitalCount),
72          };
73  
74          verify(checkConfig, getPath("InputAbbreviationAsWordInNameType.java"), expected);
75      }
76  
77      @Test
78      public void testTypeNamesForFourPermittedCapitalLetters() throws Exception {
79          final DefaultConfiguration checkConfig =
80              createModuleConfig(AbbreviationAsWordInNameCheck.class);
81          checkConfig.addAttribute("allowedAbbreviationLength", "4");
82          checkConfig.addAttribute("allowedAbbreviations", "CLASS,FACTORY");
83          checkConfig.addAttribute("tokens", "CLASS_DEF");
84          checkConfig.addAttribute("ignoreOverriddenMethods", "true");
85          final int expectedCapitalCount = 5;
86  
87          final String[] expected = {
88              "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
89          };
90  
91          verify(checkConfig, getPath("InputAbbreviationAsWordInNameType.java"), expected);
92      }
93  
94      @Test
95      public void testTypeNamesForFivePermittedCapitalLetters() throws Exception {
96          final DefaultConfiguration checkConfig =
97              createModuleConfig(AbbreviationAsWordInNameCheck.class);
98          checkConfig.addAttribute("allowedAbbreviationLength", "5");
99          checkConfig.addAttribute("allowedAbbreviations", "CLASS");
100         checkConfig.addAttribute("tokens", "CLASS_DEF");
101         checkConfig.addAttribute("ignoreOverriddenMethods", "true");
102         final int expectedCapitalCount = 6;
103         final String[] expected = {
104             "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
105             "37: " + getWarningMessage("WellNamedFACTORY", expectedCapitalCount),
106         };
107 
108         verify(checkConfig, getPath("InputAbbreviationAsWordInNameType.java"), expected);
109     }
110 
111     @Test
112     public void testTypeAndVariablesAndMethodNames() throws Exception {
113         final DefaultConfiguration checkConfig =
114             createModuleConfig(AbbreviationAsWordInNameCheck.class);
115         checkConfig.addAttribute("allowedAbbreviationLength", "5");
116         checkConfig.addAttribute("allowedAbbreviations", "CLASS");
117         checkConfig.addAttribute("tokens", "CLASS_DEF"
118             + ",VARIABLE_DEF"
119             + ",METHOD_DEF,ENUM_DEF,ENUM_CONSTANT_DEF"
120             + ",PARAMETER_DEF,INTERFACE_DEF,ANNOTATION_DEF");
121         checkConfig.addAttribute("ignoreOverriddenMethods", "true");
122         final int expectedCapitalCount = 6;
123 
124         final String[] expected = {
125             "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
126             "37: " + getWarningMessage("WellNamedFACTORY", expectedCapitalCount),
127             "38: " + getWarningMessage("marazmaticMETHODName", expectedCapitalCount),
128             "39: " + getWarningMessage("marazmaticVARIABLEName", expectedCapitalCount),
129             "40: " + getWarningMessage("MARAZMATICVariableName", expectedCapitalCount),
130         };
131 
132         verify(checkConfig, getPath("InputAbbreviationAsWordInNameType.java"), expected);
133     }
134 
135     @Test
136     public void testTypeAndVariablesAndMethodNamesWithNoIgnores() throws Exception {
137         final DefaultConfiguration checkConfig =
138             createModuleConfig(AbbreviationAsWordInNameCheck.class);
139         checkConfig.addAttribute("allowedAbbreviationLength", "5");
140         checkConfig.addAttribute("allowedAbbreviations", "NUMBER,MARAZMATIC,VARIABLE");
141         checkConfig.addAttribute("ignoreStatic", "false");
142         checkConfig.addAttribute("ignoreFinal", "false");
143         checkConfig.addAttribute("tokens", "CLASS_DEF"
144             + ",VARIABLE_DEF"
145             + ",METHOD_DEF,ENUM_DEF,ENUM_CONSTANT_DEF"
146             + ",PARAMETER_DEF,INTERFACE_DEF,ANNOTATION_DEF");
147         checkConfig.addAttribute("ignoreOverriddenMethods", "true");
148         final int expectedCapitalCount = 6;
149 
150         final String[] expected = {
151             "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
152             "37: " + getWarningMessage("WellNamedFACTORY", expectedCapitalCount),
153             "38: " + getWarningMessage("marazmaticMETHODName", expectedCapitalCount),
154             "66: " + getWarningMessage("VALUEEEE", expectedCapitalCount),
155             "72: " + getWarningMessage("VALUEEEE", expectedCapitalCount),
156             "78: " + getWarningMessage("VALUEEEE", expectedCapitalCount),
157             "84: " + getWarningMessage("VALUEEEE", expectedCapitalCount),
158         };
159 
160         verify(checkConfig, getPath("InputAbbreviationAsWordInNameType.java"), expected);
161     }
162 
163     @Test
164     public void testTypeAndVariablesAndMethodNamesWithIgnores() throws Exception {
165         final DefaultConfiguration checkConfig =
166             createModuleConfig(AbbreviationAsWordInNameCheck.class);
167         checkConfig.addAttribute("allowedAbbreviationLength", "5");
168         checkConfig.addAttribute("allowedAbbreviations", "NUMBER,MARAZMATIC,VARIABLE");
169         checkConfig.addAttribute("ignoreStatic", "true");
170         checkConfig.addAttribute("ignoreFinal", "true");
171         checkConfig.addAttribute("tokens", "CLASS_DEF"
172             + ",VARIABLE_DEF"
173             + ",METHOD_DEF,ENUM_DEF,ENUM_CONSTANT_DEF"
174             + ",PARAMETER_DEF,INTERFACE_DEF,ANNOTATION_DEF");
175         checkConfig.addAttribute("ignoreOverriddenMethods", "true");
176         final int expectedCapitalCount = 6;
177 
178         final String[] expected = {
179             "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
180             "37: " + getWarningMessage("WellNamedFACTORY", expectedCapitalCount),
181             "38: " + getWarningMessage("marazmaticMETHODName", expectedCapitalCount),
182         };
183 
184         verify(checkConfig, getPath("InputAbbreviationAsWordInNameType.java"), expected);
185     }
186 
187     @Test
188     public void testTypeAndVariablesAndMethodNamesWithIgnoresFinal() throws Exception {
189         final DefaultConfiguration checkConfig =
190             createModuleConfig(AbbreviationAsWordInNameCheck.class);
191         checkConfig.addAttribute("allowedAbbreviationLength", "4");
192         checkConfig.addAttribute("allowedAbbreviations", "MARAZMATIC,VARIABLE");
193         checkConfig.addAttribute("ignoreStatic", "false");
194         checkConfig.addAttribute("ignoreFinal", "true");
195         checkConfig.addAttribute("tokens", "CLASS_DEF"
196             + ",VARIABLE_DEF"
197             + ",METHOD_DEF,ENUM_DEF,ENUM_CONSTANT_DEF"
198             + ",PARAMETER_DEF,INTERFACE_DEF,ANNOTATION_DEF");
199         checkConfig.addAttribute("ignoreOverriddenMethods", "true");
200         final int expectedCapitalCount = 5;
201 
202         final String[] expected = {
203             "12: " + getWarningMessage("AbstractCLASSName", expectedCapitalCount),
204             "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
205             "37: " + getWarningMessage("WellNamedFACTORY", expectedCapitalCount),
206             "38: " + getWarningMessage("marazmaticMETHODName", expectedCapitalCount),
207             "58: " + getWarningMessage("serialNUMBER", expectedCapitalCount), // not in ignore list
208             "60: "
209                 + getWarningMessage("s2erialNUMBER", expectedCapitalCount), // no ignore for static
210         };
211 
212         verify(checkConfig, getPath("InputAbbreviationAsWordInNameType.java"), expected);
213     }
214 
215     @Test
216     public void testTypeAndVariablesAndMethodNamesWithIgnoresStatic() throws Exception {
217         final DefaultConfiguration checkConfig =
218             createModuleConfig(AbbreviationAsWordInNameCheck.class);
219         checkConfig.addAttribute("allowedAbbreviationLength", "5");
220         checkConfig.addAttribute("allowedAbbreviations", "MARAZMATIC,VARIABLE");
221         checkConfig.addAttribute("ignoreStatic", "true");
222         checkConfig.addAttribute("ignoreFinal", "false");
223         checkConfig.addAttribute("tokens", "CLASS_DEF"
224             + ",VARIABLE_DEF"
225             + ",METHOD_DEF,ENUM_DEF,ENUM_CONSTANT_DEF"
226             + ",PARAMETER_DEF,INTERFACE_DEF,ANNOTATION_DEF");
227         checkConfig.addAttribute("ignoreOverriddenMethods", "true");
228         final int expectedCapitalCount = 6;
229 
230         final String[] expected = {
231             "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
232             "37: " + getWarningMessage("WellNamedFACTORY", expectedCapitalCount),
233             "38: " + getWarningMessage("marazmaticMETHODName", expectedCapitalCount),
234         };
235 
236         verify(checkConfig, getPath("InputAbbreviationAsWordInNameType.java"), expected);
237     }
238 
239     @Test
240     public void testTypeNamesForThreePermittedCapitalLettersWithOverriddenMethod()
241             throws Exception {
242         final DefaultConfiguration checkConfig =
243             createModuleConfig(AbbreviationAsWordInNameCheck.class);
244         checkConfig.addAttribute("allowedAbbreviationLength", "3");
245         checkConfig.addAttribute("allowedAbbreviations", "");
246         checkConfig.addAttribute("tokens", "CLASS_DEF, METHOD_DEF");
247         checkConfig.addAttribute("ignoreOverriddenMethods", "true");
248         final int expectedCapitalCount = 4;
249 
250         final String[] expected = {
251             "22: " + getWarningMessage("oveRRRRRrriddenMethod", expectedCapitalCount),
252         };
253 
254         verify(checkConfig,
255                 getPath("InputAbbreviationAsWordInNameOverridableMethod.java"), expected);
256     }
257 
258     @Test
259     public void testOverriddenMethod()
260             throws Exception {
261         final DefaultConfiguration checkConfig =
262             createModuleConfig(AbbreviationAsWordInNameCheck.class);
263         checkConfig.addAttribute("ignoreOverriddenMethods", "false");
264         final int expectedCapitalCount = 4;
265 
266         final String[] expected = {
267             "6: " + getWarningMessage("serialNUMBER", expectedCapitalCount),
268             "14: " + getWarningMessage("oveRRRRRrriddenMethod", expectedCapitalCount),
269             "22: " + getWarningMessage("oveRRRRRrriddenMethod", expectedCapitalCount),
270             "34: " + getWarningMessage("oveRRRRRrriddenMethod", expectedCapitalCount),
271         };
272 
273         verify(checkConfig,
274                 getPath("InputAbbreviationAsWordInNameOverridableMethod.java"), expected);
275     }
276 
277     @Test
278     public void testTypeNamesForZeroPermittedCapitalLetter() throws Exception {
279         final DefaultConfiguration checkConfig =
280                 createModuleConfig(AbbreviationAsWordInNameCheck.class);
281         checkConfig.addAttribute("allowedAbbreviationLength",
282                 "0");
283         checkConfig.addAttribute("allowedAbbreviations", "");
284         checkConfig.addAttribute("ignoreStatic", "false");
285         checkConfig.addAttribute("ignoreFinal", "false");
286         checkConfig.addAttribute("ignoreOverriddenMethods", "false");
287         checkConfig.addAttribute("tokens", "CLASS_DEF,INTERFACE_DEF,ENUM_DEF,"
288             + "ANNOTATION_DEF,ANNOTATION_FIELD_DEF,ENUM_CONSTANT_DEF,"
289             + "PARAMETER_DEF,VARIABLE_DEF,METHOD_DEF");
290         final int expectedCapitalCount = 1;
291         final String[] expected = {
292             "6: " + getWarningMessage("NonAAAAbstractClassName", expectedCapitalCount),
293             "9: " + getWarningMessage("FactoryWithBADNAme", expectedCapitalCount),
294             "12: " + getWarningMessage("AbstractCLASSName", expectedCapitalCount),
295             "32: " + getWarningMessage("AbstractINNERRClass", expectedCapitalCount),
296             "37: " + getWarningMessage("WellNamedFACTORY", expectedCapitalCount),
297             "38: " + getWarningMessage("marazmaticMETHODName", expectedCapitalCount),
298             "39: " + getWarningMessage("marazmaticVARIABLEName", expectedCapitalCount),
299             "40: " + getWarningMessage("MARAZMATICVariableName", expectedCapitalCount),
300             "46: " + getWarningMessage("RIGHT", expectedCapitalCount),
301             "47: " + getWarningMessage("LEFT", expectedCapitalCount),
302             "48: " + getWarningMessage("UP", expectedCapitalCount),
303             "49: " + getWarningMessage("DOWN", expectedCapitalCount),
304             "57: " + getWarningMessage("NonAAAAbstractClassName2", expectedCapitalCount),
305             "58: " + getWarningMessage("serialNUMBER", expectedCapitalCount),
306             "59: " + getWarningMessage("s1erialNUMBER", expectedCapitalCount),
307             "60: " + getWarningMessage("s2erialNUMBER", expectedCapitalCount),
308             "61: " + getWarningMessage("s3erialNUMBER", expectedCapitalCount),
309             "66: " + getWarningMessage("VALUEEEE", expectedCapitalCount),
310             "72: " + getWarningMessage("VALUEEEE", expectedCapitalCount),
311             "78: " + getWarningMessage("VALUEEEE", expectedCapitalCount),
312             "84: " + getWarningMessage("VALUEEEE", expectedCapitalCount),
313             "88: " + getWarningMessage("FIleNameFormatException", expectedCapitalCount),
314             "90: " + getWarningMessage("serialVersionUID", expectedCapitalCount),
315             "98: " + getWarningMessage("userID", expectedCapitalCount),
316             "107: " + getWarningMessage("VALUE", expectedCapitalCount),
317             "111: " + getWarningMessage("VALUE", expectedCapitalCount),
318             "115: " + getWarningMessage("VALUE", expectedCapitalCount),
319             "119: " + getWarningMessage("VALUE", expectedCapitalCount),
320         };
321         verify(checkConfig,
322                 getPath("InputAbbreviationAsWordInNameType.java"), expected);
323     }
324 
325     @Test
326     public void testNullPointerException() throws Exception {
327         final DefaultConfiguration checkConfig =
328             createModuleConfig(AbbreviationAsWordInNameCheck.class);
329         checkConfig.addAttribute("allowedAbbreviationLength", "2");
330         checkConfig.addAttribute("ignoreFinal", "false");
331         checkConfig.addAttribute("allowedAbbreviations", null);
332 
333         final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
334 
335         verify(checkConfig,
336                 getPath("InputAbbreviationAsWordInNameAbstractMultisetSetCount.java"),
337                 expected);
338     }
339 
340     private String getWarningMessage(String typeName, int expectedCapitalCount) {
341         return getCheckMessage(MSG_KEY, typeName, expectedCapitalCount);
342     }
343 
344     @Test
345     public void testReceiver() throws Exception {
346         final DefaultConfiguration checkConfig =
347             createModuleConfig(AbbreviationAsWordInNameCheck.class);
348         final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
349 
350         verify(checkConfig, getPath("InputAbbreviationAsWordInNameReceiver.java"),
351                 expected);
352     }
353 
354 }