1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.checkstyle.suppressionxpathfilter;
21
22 import java.io.File;
23 import java.util.List;
24
25 import org.junit.jupiter.api.Test;
26
27 import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
28 import com.puppycrawl.tools.checkstyle.checks.coding.FinalLocalVariableCheck;
29
30 public class XpathRegressionFinalLocalVariableTest extends AbstractXpathTestSupport {
31
32 private final String checkName = FinalLocalVariableCheck.class.getSimpleName();
33
34 @Override
35 protected String getCheckName() {
36 return checkName;
37 }
38
39 @Test
40 public void testMethodDef() throws Exception {
41 final File fileToProcess = new
42 File(getPath("InputXpathFinalLocalVariableMethodDef.java"));
43
44 final DefaultConfiguration moduleConfig = createModuleConfig(FinalLocalVariableCheck.class);
45
46 final String[] expectedViolation = {
47 "5:13: " + getCheckMessage(FinalLocalVariableCheck.class,
48 FinalLocalVariableCheck.MSG_KEY, "x"),
49 };
50
51 final List<String> expectedXpathQueries = List.of(
52 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
53 + "[@text='InputXpathFinalLocalVariableMethodDef']]"
54 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='testMethod']]"
55 + "/SLIST/VARIABLE_DEF/IDENT[@text='x']"
56 );
57
58 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
59 }
60
61 @Test
62 public void testForLoop() throws Exception {
63 final File fileToProcess = new
64 File(getPath("InputXpathFinalLocalVariableForLoop.java"));
65
66 final DefaultConfiguration moduleConfig = createModuleConfig(FinalLocalVariableCheck.class);
67
68 final String[] expectedViolation = {
69 "6:17: " + getCheckMessage(FinalLocalVariableCheck.class,
70 FinalLocalVariableCheck.MSG_KEY, "x"),
71 };
72
73 final List<String> expectedXpathQueries = List.of(
74 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
75 + "[@text='InputXpathFinalLocalVariableForLoop']]"
76 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='method2']]/SLIST/"
77 + "LITERAL_FOR/SLIST/VARIABLE_DEF/IDENT[@text='x']"
78 );
79
80 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
81 }
82
83 @Test
84 public void testSwitchCase() throws Exception {
85 final File fileToProcess = new
86 File(getPath("InputXpathFinalLocalVariableSwitchCase.java"));
87
88 final DefaultConfiguration moduleConfig = createModuleConfig(FinalLocalVariableCheck.class);
89
90 final String[] expectedViolation = {
91 "8:25: " + getCheckMessage(FinalLocalVariableCheck.class,
92 FinalLocalVariableCheck.MSG_KEY, "foo"),
93 };
94
95 final List<String> expectedXpathQueries = List.of(
96 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
97 + "[@text='InputXpathFinalLocalVariableSwitchCase']]"
98 + "/OBJBLOCK/CLASS_DEF[./IDENT[@text='InnerClass']]"
99 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='method']]/SLIST/"
100 + "LITERAL_SWITCH/CASE_GROUP/SLIST/VARIABLE_DEF/IDENT[@text='foo']"
101 );
102
103 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
104 }
105
106 @Test
107 public void testInnerClass() throws Exception {
108 final File fileToProcess = new
109 File(getPath("InputXpathFinalLocalVariableInnerClass.java"));
110
111 final DefaultConfiguration moduleConfig = createModuleConfig(FinalLocalVariableCheck.class);
112
113 final String[] expectedViolation = {
114 "7:17: " + getCheckMessage(FinalLocalVariableCheck.class,
115 FinalLocalVariableCheck.MSG_KEY, "shouldBeFinal"),
116 };
117
118 final List<String> expectedXpathQueries = List.of(
119 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
120 + "[@text='InputXpathFinalLocalVariableInnerClass']]"
121 + "/OBJBLOCK/CLASS_DEF[./IDENT[@text='InnerClass']]"
122 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='test1']]"
123 + "/SLIST/VARIABLE_DEF/IDENT[@text='shouldBeFinal']"
124 );
125
126 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
127 }
128
129 @Test
130 public void testParameterDef() throws Exception {
131 final File fileToProcess = new
132 File(getPath("InputXpathFinalLocalVariableParameterDef.java"));
133
134 final DefaultConfiguration moduleConfig = createModuleConfig(FinalLocalVariableCheck.class);
135 moduleConfig.addProperty("tokens", "PARAMETER_DEF");
136
137 final String[] expectedViolation = {
138 "4:28: " + getCheckMessage(FinalLocalVariableCheck.class,
139 FinalLocalVariableCheck.MSG_KEY, "aArg"),
140 };
141
142 final List<String> expectedXpathQueries = List.of(
143 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
144 + "[@text='InputXpathFinalLocalVariableParameterDef']]"
145 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='method']]"
146 + "/PARAMETERS/PARAMETER_DEF/IDENT[@text='aArg']"
147 );
148
149 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
150 }
151
152 @Test
153 public void testEnhancedFor() throws Exception {
154 final File fileToProcess = new
155 File(getPath("InputXpathFinalLocalVariableEnhancedFor.java"));
156
157 final DefaultConfiguration moduleConfig = createModuleConfig(FinalLocalVariableCheck.class);
158 moduleConfig.addProperty("validateEnhancedForLoopVariable", "true");
159
160 final String[] expectedViolation = {
161 "8:20: " + getCheckMessage(FinalLocalVariableCheck.class,
162 FinalLocalVariableCheck.MSG_KEY, "a"),
163 };
164
165 final List<String> expectedXpathQueries = List.of(
166 "/COMPILATION_UNIT/CLASS_DEF"
167 + "[./IDENT[@text='InputXpathFinalLocalVariableEnhancedFor']]"
168 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='method1']]"
169 + "/SLIST/LITERAL_FOR/FOR_EACH_CLAUSE/VARIABLE_DEF/IDENT[@text='a']"
170 );
171
172 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
173 }
174
175 @Test
176 public void testCtor() throws Exception {
177 final File fileToProcess = new
178 File(getPath("InputXpathFinalLocalVariableCtor.java"));
179
180 final DefaultConfiguration moduleConfig = createModuleConfig(FinalLocalVariableCheck.class);
181 moduleConfig.addProperty("tokens", "PARAMETER_DEF");
182
183 final String[] expectedViolation = {
184 "4:42: " + getCheckMessage(FinalLocalVariableCheck.class,
185 FinalLocalVariableCheck.MSG_KEY, "a"),
186 };
187
188 final List<String> expectedXpathQueries = List.of(
189 "/COMPILATION_UNIT/CLASS_DEF"
190 + "[./IDENT[@text='InputXpathFinalLocalVariableCtor']]"
191 + "/OBJBLOCK/CTOR_DEF[./IDENT"
192 + "[@text='InputXpathFinalLocalVariableCtor']]"
193 + "/PARAMETERS/PARAMETER_DEF/IDENT[@text='a']"
194 );
195
196 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
197 }
198
199 @Test
200 public void testTryBlock() throws Exception {
201 final File fileToProcess = new
202 File(getPath("InputXpathFinalLocalVariableTryBlock.java"));
203
204 final DefaultConfiguration moduleConfig = createModuleConfig(FinalLocalVariableCheck.class);
205
206 final String[] expectedViolation = {
207 "6:17: " + getCheckMessage(FinalLocalVariableCheck.class,
208 FinalLocalVariableCheck.MSG_KEY, "start"),
209 };
210
211 final List<String> expectedXpathQueries = List.of(
212 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
213 + "[@text='InputXpathFinalLocalVariableTryBlock']]"
214 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='checkCodeBlock']]"
215 + "/SLIST/LITERAL_TRY/SLIST/VARIABLE_DEF/IDENT[@text='start']"
216 );
217
218 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
219 }
220
221 @Test
222 public void testConditionals() throws Exception {
223 final File fileToProcess = new
224 File(getPath("InputXpathFinalLocalVariableConditionals.java"));
225
226 final DefaultConfiguration moduleConfig = createModuleConfig(FinalLocalVariableCheck.class);
227
228 final String[] expectedViolation = {
229 "11:25: " + getCheckMessage(FinalLocalVariableCheck.class,
230 FinalLocalVariableCheck.MSG_KEY, "body"),
231 };
232
233 final List<String> expectedXpathQueries = List.of(
234 "/COMPILATION_UNIT/CLASS_DEF"
235 + "[./IDENT[@text='InputXpathFinalLocalVariableConditionals']]"
236 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='checkCodeBlock']]/SLIST/LITERAL_TRY"
237 + "/SLIST/LITERAL_IF/LITERAL_ELSE/LITERAL_IF"
238 + "/SLIST/VARIABLE_DEF/IDENT[@text='body']"
239 );
240
241 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
242 }
243 }