View Javadoc
1   ///////////////////////////////////////////////////////////////////////////////////////////////
2   // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3   // Copyright (C) 2001-2024 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.blocks;
21  
22  import static com.puppycrawl.tools.checkstyle.checks.blocks.NeedBracesCheck.MSG_KEY_NEED_BRACES;
23  
24  import org.junit.jupiter.api.Test;
25  
26  import com.puppycrawl.tools.checkstyle.AbstractModuleTestSupport;
27  import com.puppycrawl.tools.checkstyle.utils.CommonUtil;
28  
29  public class NeedBracesCheckTest extends AbstractModuleTestSupport {
30  
31      @Override
32      protected String getPackageLocation() {
33          return "com/puppycrawl/tools/checkstyle/checks/blocks/needbraces";
34      }
35  
36      @Test
37      public void testIt() throws Exception {
38          final String[] expected = {
39              "30:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "do"),
40              "42:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
41              "43:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
42              "45:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
43              "46:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
44              "59:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
45              "60:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
46              "62:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
47              "64:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
48              "83:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
49              "84:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
50              "86:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
51              "88:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "else"),
52              "90:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
53              "98:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "else"),
54              "100:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
55              "101:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
56              "104:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
57              "105:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
58              "106:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
59              "107:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "do"),
60              "108:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
61              "109:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
62          };
63          verifyWithInlineConfigParser(
64                  getPath("InputNeedBracesTestIt.java"), expected);
65      }
66  
67      @Test
68      public void testItWithAllowsOn() throws Exception {
69          final String[] expected = {
70              "44:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
71              "47:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
72              "61:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
73              "63:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
74              "65:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
75              "85:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
76              "87:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
77              "89:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "else"),
78              "91:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
79              "99:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "else"),
80              "101:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
81              "102:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
82              "105:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
83              "106:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
84              "107:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
85              "108:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "do"),
86              "109:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
87              "110:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
88          };
89          verifyWithInlineConfigParser(
90                  getPath("InputNeedBracesTestItWithAllowsOn.java"), expected);
91      }
92  
93      @Test
94      public void testSingleLineStatements() throws Exception {
95          final String[] expected = {
96              "32:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
97              "38:43: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
98              "47:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
99              "55:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
100             "62:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "do"),
101             "65:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
102             "71:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
103             "100:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
104             "104:11: " + getCheckMessage(MSG_KEY_NEED_BRACES, "else"),
105             "116:47: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
106             "123:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
107         };
108         verifyWithInlineConfigParser(
109                 getPath("InputNeedBracesSingleLineStatements.java"), expected);
110     }
111 
112     @Test
113     public void testSingleLineLambda() throws Exception {
114         final String[] expected = {
115             "16:29: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
116             "19:22: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
117             "24:60: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
118             "25:27: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
119         };
120         verifyWithInlineConfigParser(
121                 getPath("InputNeedBracesTestSingleLineLambda.java"), expected);
122     }
123 
124     @Test
125     public void testDoNotAllowSingleLineLambda() throws Exception {
126         final String[] expected = {
127             "14:28: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
128             "15:29: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
129             "16:29: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
130             "19:22: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
131             "24:60: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
132             "25:27: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
133         };
134         verifyWithInlineConfigParser(
135                 getPath("InputNeedBracesTestNotAllowSingleLineLambda.java"), expected);
136     }
137 
138     @Test
139     public void testSingleLineCaseDefault() throws Exception {
140         final String[] expected = {
141             "81:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
142             "84:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
143             "131:17: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
144             "133:17: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
145         };
146         verifyWithInlineConfigParser(
147                 getPath("InputNeedBracesTestSingleLineCaseDefault.java"), expected);
148     }
149 
150     @Test
151     public void testSingleLineCaseDefault2() throws Exception {
152         final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
153         verifyWithInlineConfigParser(
154                 getPath("InputNeedBracesTestSingleLineCaseDefault2.java"), expected);
155     }
156 
157     @Test
158     public void testSingleLineCaseDefaultNoSingleLine() throws Exception {
159         final String[] expected = {
160             "18:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
161             "19:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
162             "22:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
163             "25:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
164             "33:17: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
165             "34:17: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
166         };
167         verifyWithInlineConfigParser(
168                 getPath("InputNeedBracesTestCaseDefaultNoSingleLine.java"), expected);
169     }
170 
171     @Test
172     public void testCycles() throws Exception {
173         final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
174         verifyWithInlineConfigParser(
175                 getPath("InputNeedBracesTestCycles.java"), expected);
176     }
177 
178     @Test
179     public void testConditions() throws Exception {
180         final String[] expected = {
181             "50:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
182             "53:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
183             "65:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
184         };
185         verifyWithInlineConfigParser(
186                 getPath("InputNeedBracesTestConditions.java"), expected);
187     }
188 
189     @Test
190     public void testAllowEmptyLoopBodyTrue() throws Exception {
191         final String[] expected = {
192             "106:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
193         };
194         verifyWithInlineConfigParser(
195                 getPath("InputNeedBracesLoopBodyTrue.java"), expected);
196     }
197 
198     @Test
199     public void testAllowEmptyLoopBodyFalse() throws Exception {
200         final String[] expected = {
201             "19:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
202             "23:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
203             "27:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
204             "28:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
205             "32:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
206             "37:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
207             "42:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
208             "48:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
209             "54:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
210             "59:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
211             "63:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
212             "69:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
213             "76:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
214             "98:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
215             "102:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "for"),
216             "106:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "if"),
217             "117:9: " + getCheckMessage(MSG_KEY_NEED_BRACES, "while"),
218         };
219         verifyWithInlineConfigParser(
220                 getPath("InputNeedBracesLoopBodyFalse.java"), expected);
221     }
222 
223     @Test
224     public void testEmptySingleLineDefaultStmt() throws Exception {
225         final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
226         verifyWithInlineConfigParser(
227                 getPath("InputNeedBracesEmptySingleLineDefaultStmt.java"), expected);
228     }
229 
230     @Test
231     public void testNeedBracesSwitchExpressionNoSingleLine() throws Exception {
232         final String[] expected = {
233             "16:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
234             "18:47: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
235             "20:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
236             "23:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
237             "26:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
238             "33:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
239             "36:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
240             "39:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
241             "42:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
242             "49:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
243             "50:47: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
244             "53:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
245             "56:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
246             "59:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
247             "73:47: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
248             "80:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
249             };
250         verifyWithInlineConfigParser(
251                 getNonCompilablePath("InputNeedBracesTestSwitchExpressionNoSingleLine.java"),
252             expected);
253     }
254 
255     @Test
256     public void testNeedBracesSwitchExpression() throws Exception {
257         final String[] expected = {
258             "16:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
259             "18:47: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
260             "20:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
261             "23:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
262             "26:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
263             "33:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
264             "36:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
265             "39:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
266             "42:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
267             "49:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
268             "50:47: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
269             "53:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
270             "56:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "case"),
271             "59:13: " + getCheckMessage(MSG_KEY_NEED_BRACES, "default"),
272             "73:47: " + getCheckMessage(MSG_KEY_NEED_BRACES, "->"),
273         };
274         verifyWithInlineConfigParser(
275                 getNonCompilablePath("InputNeedBracesTestSwitchExpression.java"),
276             expected);
277     }
278 
279 }