1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.puppycrawl.tools.checkstyle.xpath;
21
22 import static com.google.common.truth.Truth.assertWithMessage;
23
24 import java.io.File;
25 import java.nio.charset.StandardCharsets;
26 import java.util.Arrays;
27 import java.util.Collections;
28 import java.util.List;
29
30 import org.junit.jupiter.api.BeforeEach;
31 import org.junit.jupiter.api.Test;
32
33 import com.puppycrawl.tools.checkstyle.AbstractModuleTestSupport;
34 import com.puppycrawl.tools.checkstyle.JavaParser;
35 import com.puppycrawl.tools.checkstyle.TreeWalkerAuditEvent;
36 import com.puppycrawl.tools.checkstyle.api.DetailAST;
37 import com.puppycrawl.tools.checkstyle.api.FileContents;
38 import com.puppycrawl.tools.checkstyle.api.FileText;
39 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
40 import com.puppycrawl.tools.checkstyle.api.Violation;
41
42 public class XpathQueryGeneratorTest extends AbstractModuleTestSupport {
43
44 private static final int DEFAULT_TAB_WIDTH = 4;
45
46 private static DetailAST rootAst;
47
48 private static FileText fileText;
49
50 @Override
51 protected String getPackageLocation() {
52 return "com/puppycrawl/tools/checkstyle/xpath/xpathquerygenerator";
53 }
54
55 @BeforeEach
56 public void init() throws Exception {
57 final File file = new File(getPath("InputXpathQueryGenerator.java"));
58 fileText = new FileText(file,
59 StandardCharsets.UTF_8.name());
60 rootAst = JavaParser.parseFile(file, JavaParser.Options.WITH_COMMENTS);
61 }
62
63 @Test
64 public void testClassDef() {
65 final int lineNumber = 12;
66 final int columnNumber = 1;
67 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
68 columnNumber, fileText, DEFAULT_TAB_WIDTH);
69 final List<String> actual = queryGenerator.generate();
70 final List<String> expected = Arrays.asList(
71 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]",
72 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]/MODIFIERS",
73 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]"
74 + "/MODIFIERS/LITERAL_PUBLIC");
75 assertWithMessage("Generated queries do not match expected ones")
76 .that(actual)
77 .isEqualTo(expected);
78 }
79
80 @Test
81 public void testMethodDef() {
82 final int lineNumber = 45;
83 final int columnNumber = 5;
84 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
85 columnNumber, fileText, DEFAULT_TAB_WIDTH);
86 final List<String> actual = queryGenerator.generate();
87 final List<String> expected = Arrays.asList(
88 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK"
89 + "/METHOD_DEF[./IDENT[@text='callSomeMethod']]",
90 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK"
91 + "/METHOD_DEF[./IDENT[@text='callSomeMethod']]/MODIFIERS",
92 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK"
93 + "/METHOD_DEF[./IDENT[@text='callSomeMethod']]/MODIFIERS/LITERAL_PUBLIC");
94 assertWithMessage("Generated queries do not match expected ones")
95 .that(actual)
96 .isEqualTo(expected);
97 }
98
99 @Test
100 public void testVariableDef() {
101 final int lineNumber = 53;
102 final int columnNumber = 13;
103 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
104 columnNumber, fileText, DEFAULT_TAB_WIDTH);
105 final List<String> actual = queryGenerator.generate();
106 final List<String> expected = Arrays.asList(
107 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
108 + "[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
109 + "./IDENT[@text='callSomeMethod']]/SLIST/LITERAL_FOR/SLIST"
110 + "/VARIABLE_DEF[./IDENT[@text='d']]",
111 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
112 + "[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
113 + "./IDENT[@text='callSomeMethod']]/SLIST/LITERAL_FOR/SLIST"
114 + "/VARIABLE_DEF[./IDENT[@text='d']]/MODIFIERS",
115 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
116 + "[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
117 + "./IDENT[@text='callSomeMethod']]/SLIST/LITERAL_FOR/SLIST"
118 + "/VARIABLE_DEF[./IDENT[@text='d']]/TYPE",
119 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
120 + "[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
121 + "./IDENT[@text='callSomeMethod']]/SLIST/LITERAL_FOR/SLIST"
122 + "/VARIABLE_DEF[./IDENT[@text='d']]/TYPE/LITERAL_SHORT");
123 assertWithMessage("Generated queries do not match expected ones")
124 .that(actual)
125 .isEqualTo(expected);
126 }
127
128 @Test
129 public void testLcurly() {
130 final int lineNumber = 37;
131 final int columnNumber = 20;
132 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
133 columnNumber, fileText, DEFAULT_TAB_WIDTH);
134 final List<String> actual = queryGenerator.generate();
135 final List<String> expected = Collections.singletonList(
136 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]"
137 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='Label']]/SLIST/LITERAL_SWITCH/LCURLY");
138 assertWithMessage("Generated queries do not match expected ones")
139 .that(actual)
140 .isEqualTo(expected);
141 }
142
143 @Test
144 public void testRcurly() {
145 final int lineNumber = 25;
146 final int columnNumber = 5;
147 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
148 columnNumber, fileText, DEFAULT_TAB_WIDTH);
149 final List<String> actual = queryGenerator.generate();
150 final List<String> expected = Collections.singletonList(
151 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK"
152 + "/INSTANCE_INIT/SLIST/RCURLY");
153 assertWithMessage("Generated queries do not match expected ones")
154 .that(actual)
155 .isEqualTo(expected);
156 }
157
158 @Test
159 public void testExpr() {
160 final int lineNumber = 17;
161 final int columnNumber = 50;
162 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
163 columnNumber, fileText, DEFAULT_TAB_WIDTH);
164 final List<String> actual = queryGenerator.generate();
165 final List<String> expected = Arrays.asList(
166 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]"
167 + "/OBJBLOCK/VARIABLE_DEF[./IDENT[@text='mUse4']]/ASSIGN/EXPR",
168 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]"
169 + "/OBJBLOCK/VARIABLE_DEF[./IDENT[@text='mUse4']]/ASSIGN/EXPR/DOT");
170 assertWithMessage("Generated queries do not match expected ones")
171 .that(actual)
172 .isEqualTo(expected);
173 }
174
175 @Test
176 public void testLparen() {
177 final int lineNumber = 45;
178 final int columnNumber = 31;
179 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
180 columnNumber, fileText, DEFAULT_TAB_WIDTH);
181 final List<String> actual = queryGenerator.generate();
182 final List<String> expected = Collections.singletonList(
183 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK"
184 + "/METHOD_DEF[./IDENT[@text='callSomeMethod']]/LPAREN");
185 assertWithMessage("Generated queries do not match expected ones")
186 .that(actual)
187 .isEqualTo(expected);
188 }
189
190 @Test
191 public void testEmpty() {
192 final int lineNumber = 300;
193 final int columnNumber = 300;
194 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
195 columnNumber, fileText, DEFAULT_TAB_WIDTH);
196 final List<String> actual = queryGenerator.generate();
197 assertWithMessage("Result should be empty")
198 .that(actual)
199 .isEmpty();
200 }
201
202 @Test
203 public void testPackage() {
204 final int lineNumber = 2;
205 final int columnNumber = 1;
206 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
207 columnNumber, fileText, DEFAULT_TAB_WIDTH);
208 final List<String> actual = queryGenerator.generate();
209 final List<String> expected = Arrays.asList(
210 "/COMPILATION_UNIT",
211 "/COMPILATION_UNIT/PACKAGE_DEF");
212 assertWithMessage("Generated queries do not match expected ones")
213 .that(actual)
214 .isEqualTo(expected);
215 }
216
217 @Test
218 public void testImport() {
219 final int lineNumber = 5;
220 final int columnNumber = 1;
221 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
222 columnNumber, fileText, DEFAULT_TAB_WIDTH);
223 final List<String> actual = queryGenerator.generate();
224 final List<String> expected = Collections.singletonList(
225 "/COMPILATION_UNIT/IMPORT[./DOT/IDENT[@text='File']]");
226 assertWithMessage("Generated queries do not match expected ones")
227 .that(actual)
228 .isEqualTo(expected);
229 }
230
231 @Test
232 public void testMethodParams() {
233 final int lineNumber = 72;
234 final int columnNumber = 30;
235 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
236 columnNumber, fileText, DEFAULT_TAB_WIDTH);
237 final List<String> actual = queryGenerator.generate();
238 final List<String> expected = Arrays.asList(
239 "/COMPILATION_UNIT/CLASS_DEF"
240 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
241 + "./IDENT[@text='saveUser']]/PARAMETERS",
242 "/COMPILATION_UNIT/CLASS_DEF"
243 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
244 + "./IDENT[@text='saveUser']]/PARAMETERS/PARAMETER_DEF[./IDENT[@text='name']]",
245 "/COMPILATION_UNIT/CLASS_DEF"
246 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
247 + "./IDENT[@text='saveUser']]/PARAMETERS/PARAMETER_DEF[./IDENT[@text='name']]"
248 + "/MODIFIERS",
249 "/COMPILATION_UNIT/CLASS_DEF"
250 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
251 + "./IDENT[@text='saveUser']]/PARAMETERS/PARAMETER_DEF[./IDENT[@text='name']]"
252 + "/TYPE[./IDENT[@text='String']]",
253 "/COMPILATION_UNIT/CLASS_DEF"
254 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
255 + "./IDENT[@text='saveUser']]/PARAMETERS/PARAMETER_DEF[./IDENT[@text='name']]"
256 + "/TYPE/IDENT[@text='String']");
257 assertWithMessage("Generated queries do not match expected ones")
258 .that(actual)
259 .isEqualTo(expected);
260 }
261
262 @Test
263 public void testSwitch() {
264 final int lineNumber = 37;
265 final int columnNumber = 9;
266 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
267 columnNumber, fileText, DEFAULT_TAB_WIDTH);
268 final List<String> actual = queryGenerator.generate();
269 final List<String> expected = Collections.singletonList(
270 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]"
271 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='Label']]/SLIST/LITERAL_SWITCH");
272 assertWithMessage("Generated queries do not match expected ones")
273 .that(actual)
274 .isEqualTo(expected);
275 }
276
277 @Test
278 public void testSwitchCase() {
279 final int lineNumber = 38;
280 final int columnNumber = 13;
281 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
282 columnNumber, fileText, DEFAULT_TAB_WIDTH);
283 final List<String> actual = queryGenerator.generate();
284 final List<String> expected = Arrays.asList(
285 "/COMPILATION_UNIT/CLASS_DEF"
286 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
287 + "./IDENT[@text='Label']]/SLIST/LITERAL_SWITCH/CASE_GROUP[1]",
288 "/COMPILATION_UNIT/CLASS_DEF"
289 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
290 + "./IDENT[@text='Label']]/SLIST/LITERAL_SWITCH/CASE_GROUP/LITERAL_DEFAULT");
291 assertWithMessage("Generated queries do not match expected ones")
292 .that(actual)
293 .isEqualTo(expected);
294 }
295
296 @Test
297 public void testVariableStringLiteral() {
298 final int lineNumber = 47;
299 final int columnNumber = 26;
300 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
301 columnNumber, fileText, DEFAULT_TAB_WIDTH);
302 final List<String> actual = queryGenerator.generate();
303 final List<String> expected = Arrays.asList(
304 "/COMPILATION_UNIT/CLASS_DEF"
305 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
306 + "./IDENT[@text='callSomeMethod']]/SLIST/VARIABLE_DEF[./IDENT[@text='another']]"
307 + "/ASSIGN/EXPR[./STRING_LITERAL[@text='HelloWorld']]",
308 "/COMPILATION_UNIT/CLASS_DEF"
309 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
310 + "./IDENT[@text='callSomeMethod']]/SLIST/VARIABLE_DEF[./IDENT[@text='another']]"
311 + "/ASSIGN/EXPR/STRING_LITERAL[@text='HelloWorld']");
312 assertWithMessage("Generated queries do not match expected ones")
313 .that(actual)
314 .isEqualTo(expected);
315 }
316
317 @Test
318 public void testComma() {
319 final int lineNumber = 66;
320 final int columnNumber = 36;
321 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
322 columnNumber, fileText, DEFAULT_TAB_WIDTH);
323 final List<String> actual = queryGenerator.generate();
324 final List<String> expected = Collections.singletonList(
325 "/COMPILATION_UNIT/CLASS_DEF"
326 + "[./IDENT[@text='InputXpathQueryGenerator']]/OBJBLOCK/METHOD_DEF["
327 + "./IDENT[@text='foo']]/SLIST/LITERAL_FOR/FOR_ITERATOR/ELIST/COMMA");
328 assertWithMessage("Generated queries do not match expected ones")
329 .that(actual)
330 .isEqualTo(expected);
331 }
332
333 @Test
334 public void testLiteralVoid() {
335 final int lineNumber = 65;
336 final int columnNumber = 12;
337 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
338 columnNumber, fileText, DEFAULT_TAB_WIDTH);
339 final List<String> actual = queryGenerator.generate();
340 final List<String> expected = Arrays.asList(
341 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]"
342 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='foo']]/TYPE",
343 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]"
344 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='foo']]/TYPE/LITERAL_VOID");
345 assertWithMessage("Generated queries do not match expected ones")
346 .that(actual)
347 .isEqualTo(expected);
348 }
349
350 @Test
351 public void testFirstImport() {
352 final int lineNumber = 4;
353 final int columnNumber = 1;
354 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
355 columnNumber, fileText, DEFAULT_TAB_WIDTH);
356 final List<String> actual = queryGenerator.generate();
357 final List<String> expected = Collections.singletonList(
358 "/COMPILATION_UNIT/IMPORT[./DOT/IDENT[@text='JToolBar']]");
359 assertWithMessage("Generated queries do not match expected ones")
360 .that(actual)
361 .isEqualTo(expected);
362 }
363
364 @Test
365 public void testLastImport() {
366 final int lineNumber = 8;
367 final int columnNumber = 1;
368 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
369 columnNumber, fileText, DEFAULT_TAB_WIDTH);
370 final List<String> actual = queryGenerator.generate();
371 final List<String> expected = Collections.singletonList(
372 "/COMPILATION_UNIT/IMPORT[./DOT/IDENT[@text='Iterator']]");
373 assertWithMessage("Generated queries do not match expected ones")
374 .that(actual)
375 .isEqualTo(expected);
376 }
377
378 @Test
379 public void testImportByText() {
380 final int lineNumber = 4;
381 final int columnNumber = 8;
382 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
383 columnNumber, fileText, DEFAULT_TAB_WIDTH);
384 final List<String> actual = queryGenerator.generate();
385 final List<String> expected = Collections.singletonList(
386 "/COMPILATION_UNIT/IMPORT/DOT[./IDENT[@text='JToolBar']]/DOT/IDENT[@text='javax']");
387 assertWithMessage("Generated queries do not match expected ones")
388 .that(actual)
389 .isEqualTo(expected);
390 }
391
392 @Test
393 public void testIdent() {
394 final int lineNumber = 12;
395 final int columnNumber = 14;
396 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
397 columnNumber, fileText, DEFAULT_TAB_WIDTH);
398 final List<String> actual = queryGenerator.generate();
399 final List<String> expected = Collections.singletonList(
400 "/COMPILATION_UNIT/CLASS_DEF/IDENT[@text='InputXpathQueryGenerator']");
401 assertWithMessage("Generated queries do not match expected ones")
402 .that(actual)
403 .isEqualTo(expected);
404 }
405
406 @Test
407 public void testTabWidthBeforeMethodDef() throws Exception {
408 final File testFile = new File(getPath(
409 "InputXpathQueryGeneratorTabWidth.java"));
410 final FileText testFileText = new FileText(testFile,
411 StandardCharsets.UTF_8.name());
412 final DetailAST detailAst =
413 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
414 final int lineNumber = 4;
415 final int columnNumber = 13;
416 final int tabWidth = 4;
417 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst, lineNumber,
418 columnNumber, testFileText, tabWidth);
419 final List<String> actual = queryGenerator.generate();
420 final List<String> expected = Arrays.asList(
421 "/COMPILATION_UNIT/CLASS_DEF"
422 + "[./IDENT[@text='InputXpathQueryGeneratorTabWidth']]/OBJBLOCK"
423 + "/METHOD_DEF[./IDENT[@text='toString']]",
424 "/COMPILATION_UNIT/CLASS_DEF"
425 + "[./IDENT[@text='InputXpathQueryGeneratorTabWidth']]/OBJBLOCK"
426 + "/METHOD_DEF[./IDENT[@text='toString']]/MODIFIERS",
427 "/COMPILATION_UNIT/CLASS_DEF"
428 + "[./IDENT[@text='InputXpathQueryGeneratorTabWidth']]/OBJBLOCK"
429 + "/METHOD_DEF[./IDENT[@text='toString']]/MODIFIERS/LITERAL_PUBLIC");
430 assertWithMessage("Generated queries do not match expected ones")
431 .that(actual)
432 .isEqualTo(expected);
433 }
434
435 @Test
436 public void testTabWidthAfterVoidLiteral() throws Exception {
437 final File testFile = new File(getPath(
438 "InputXpathQueryGeneratorTabWidth.java"));
439 final FileText testFileText = new FileText(testFile,
440 StandardCharsets.UTF_8.name());
441 final DetailAST detailAst =
442 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
443 final int lineNumber = 8;
444 final int columnNumber = 41;
445 final int tabWidth = 8;
446 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst, lineNumber,
447 columnNumber, testFileText, tabWidth);
448 final List<String> actual = queryGenerator.generate();
449 final List<String> expected = Arrays.asList(
450 "/COMPILATION_UNIT/CLASS_DEF"
451 + "[./IDENT[@text='InputXpathQueryGeneratorTabWidth']]/OBJBLOCK"
452 + "/METHOD_DEF[./IDENT[@text='getName']]/TYPE",
453 "/COMPILATION_UNIT/CLASS_DEF"
454 + "[./IDENT[@text='InputXpathQueryGeneratorTabWidth']]/OBJBLOCK"
455 + "/METHOD_DEF[./IDENT[@text='getName']]/TYPE/LITERAL_VOID");
456 assertWithMessage("Generated queries do not match expected ones")
457 .that(actual)
458 .isEqualTo(expected);
459 }
460
461 @Test
462 public void testTabWidthBeforeSlist() throws Exception {
463 final File testFile = new File(getPath("InputXpathQueryGeneratorTabWidth.java"));
464 final FileText testFileText = new FileText(testFile,
465 StandardCharsets.UTF_8.name());
466 final DetailAST detailAst =
467 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
468 final int lineNumber = 12;
469 final int columnNumber = 57;
470 final int tabWidth = 8;
471 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst, lineNumber,
472 columnNumber, testFileText, tabWidth);
473 final List<String> actual = queryGenerator.generate();
474 final List<String> expected = Collections.singletonList(
475 "/COMPILATION_UNIT/CLASS_DEF"
476 + "[./IDENT[@text='InputXpathQueryGeneratorTabWidth']]/OBJBLOCK"
477 + "/METHOD_DEF[./IDENT[@text='tabAfterMe']]/SLIST");
478 assertWithMessage("Generated queries do not match expected ones")
479 .that(actual)
480 .isEqualTo(expected);
481 }
482
483 @Test
484 public void testTabWidthEndOfLine() throws Exception {
485 final File testFile = new File(getPath("InputXpathQueryGeneratorTabWidth.java"));
486 final FileText testFileText = new FileText(testFile,
487 StandardCharsets.UTF_8.name());
488 final DetailAST detailAst =
489 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
490 final int lineNumber = 16;
491 final int columnNumber = 58;
492 final int tabWidth = 8;
493 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst, lineNumber,
494 columnNumber, testFileText, tabWidth);
495 final List<String> actual = queryGenerator.generate();
496 final List<String> expected = Collections.singletonList(
497 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGeneratorTabWidth']]"
498 + "/OBJBLOCK/VARIABLE_DEF[./IDENT[@text='endLineTab']]/SEMI");
499 assertWithMessage("Generated queries do not match expected ones")
500 .that(actual)
501 .isEqualTo(expected);
502 }
503
504 @Test
505 public void testClassDefWithTokenType() {
506 final int lineNumber = 12;
507 final int columnNumber = 1;
508 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(rootAst, lineNumber,
509 columnNumber, TokenTypes.CLASS_DEF, fileText, DEFAULT_TAB_WIDTH);
510 final List<String> actual = queryGenerator.generate();
511 final List<String> expected = Collections.singletonList(
512 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]");
513 assertWithMessage("Generated queries do not match expected ones")
514 .that(actual)
515 .isEqualTo(expected);
516 }
517
518 @Test
519 public void testConstructorWithTreeWalkerAuditEvent() {
520 final Violation violation = new Violation(12, 1, "messages.properties", null,
521 null, null, null, null, null);
522 final TreeWalkerAuditEvent event = new TreeWalkerAuditEvent(new FileContents(fileText),
523 "InputXpathQueryGenerator", violation, rootAst);
524 final XpathQueryGenerator queryGenerator =
525 new XpathQueryGenerator(event, DEFAULT_TAB_WIDTH);
526 final List<String> actual = queryGenerator.generate();
527 final List<String> expected = Arrays.asList(
528 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]",
529 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]/MODIFIERS",
530 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator']]/MODIFIERS"
531 + "/LITERAL_PUBLIC");
532 assertWithMessage("Generated queries do not match expected ones")
533 .that(actual)
534 .isEqualTo(expected);
535 }
536
537 @Test
538 public void testEscapeCharacters() throws Exception {
539 final File testFile = new File(getPath("InputXpathQueryGeneratorEscapeCharacters.java"));
540 final FileText testFileText = new FileText(testFile,
541 StandardCharsets.UTF_8.name());
542 final DetailAST detailAst =
543 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
544 final int tabWidth = 8;
545
546 final int lineNumberOne = 4;
547 final int columnNumberOne = 22;
548 final XpathQueryGenerator queryGeneratorOne = new XpathQueryGenerator(detailAst,
549 lineNumberOne, columnNumberOne, testFileText, tabWidth);
550 final List<String> actualTestOne = queryGeneratorOne.generate();
551 final List<String> expectedTestOne = Arrays.asList(
552 "/COMPILATION_UNIT/CLASS_DEF"
553 + "[./IDENT[@text='InputXpathQueryGeneratorEscapeCharacters']]/"
554 + "OBJBLOCK/VARIABLE_DEF[./IDENT[@text='testOne']]/ASSIGN/EXPR[./"
555 + "STRING_LITERAL[@text='<>''\\"&abc;&lt;"
556 + "\\u0080\\n']]",
557 "/COMPILATION_UNIT/CLASS_DEF"
558 + "[./IDENT[@text='InputXpathQueryGeneratorEscapeCharacters']]/"
559 + "OBJBLOCK/VARIABLE_DEF[./IDENT[@text='testOne']]/ASSIGN/EXPR/"
560 + "STRING_LITERAL[@text='<>''\\"&abc;&lt;"
561 + "\\u0080\\n']"
562 );
563 assertWithMessage("Generated queries do not match expected ones")
564 .that(actualTestOne)
565 .isEqualTo(expectedTestOne);
566
567 final int lineNumberTwo = 6;
568 final int columnNumberTwo = 22;
569 final XpathQueryGenerator queryGeneratorTwo = new XpathQueryGenerator(detailAst,
570 lineNumberTwo, columnNumberTwo, testFileText, tabWidth);
571 final List<String> actualTestTwo = queryGeneratorTwo.generate();
572 final List<String> expectedTestTwo = Arrays.asList(
573 "/COMPILATION_UNIT/CLASS_DEF[./IDENT"
574 + "[@text='InputXpathQueryGeneratorEscapeCharacters']]/"
575 + "OBJBLOCK/VARIABLE_DEF[./IDENT[@text='testTwo']]/ASSIGN/EXPR[./"
576 + "STRING_LITERAL[@text='&#0;&#X0\\u0001\\r']]",
577 "/COMPILATION_UNIT/CLASS_DEF"
578 + "[./IDENT[@text='InputXpathQueryGeneratorEscapeCharacters']]/"
579 + "OBJBLOCK/VARIABLE_DEF[./IDENT[@text='testTwo']]/ASSIGN/EXPR/"
580 + "STRING_LITERAL[@text='&#0;&#X0\\u0001\\r']"
581 );
582 assertWithMessage("Generated queries do not match expected ones")
583 .that(actualTestTwo)
584 .isEqualTo(expectedTestTwo);
585 }
586
587 @Test
588 public void testTextBlocks() throws Exception {
589 final File testFile = new File(getNonCompilablePath(
590 "InputXpathQueryGeneratorTextBlock.java"));
591 final FileText testFileText = new FileText(testFile,
592 StandardCharsets.UTF_8.name());
593 final DetailAST detailAst =
594 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
595 final int tabWidth = 8;
596
597 final int lineNumber = 6;
598 final int columnNumber = 25;
599 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst,
600 lineNumber, columnNumber, testFileText, tabWidth);
601 final List<String> actual = queryGenerator.generate();
602 final List<String> expected = Collections.singletonList(
603 "/COMPILATION_UNIT/CLASS_DEF"
604 + "[./IDENT[@text='InputXpathQueryGeneratorTextBlock']]/OBJBLOCK/"
605 + "VARIABLE_DEF[./IDENT[@text='testOne']]/ASSIGN/EXPR/"
606 + "TEXT_BLOCK_LITERAL_BEGIN/TEXT_BLOCK_CONTENT[@text='\\n "
607 + "&1line\\n >2line\\n <3line\\n ']"
608 );
609 assertWithMessage("Generated queries do not match expected ones")
610 .that(expected)
611 .isEqualTo(actual);
612 }
613
614 @Test
615 public void testTextBlocksWithNewLine() throws Exception {
616 final File testFile = new File(getNonCompilablePath(
617 "InputXpathQueryGeneratorTextBlockNewLine.java"));
618 final FileText testFileText = new FileText(testFile,
619 StandardCharsets.UTF_8.name());
620 final DetailAST detailAst =
621 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
622 final int tabWidth = 8;
623
624 final int lineNumber = 6;
625 final int columnNumber = 25;
626 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst,
627 lineNumber, columnNumber, testFileText, tabWidth);
628 final List<String> actual = queryGenerator.generate();
629 final List<String> expected = Collections.singletonList(
630 "/COMPILATION_UNIT/CLASS_DEF"
631 + "[./IDENT[@text='InputXpathQueryGeneratorTextBlockNewLine']]/OBJBLOCK/"
632 + "VARIABLE_DEF[./IDENT[@text='testOne']]/ASSIGN/EXPR/"
633 + "TEXT_BLOCK_LITERAL_BEGIN/TEXT_BLOCK_CONTENT[@text='\\n "
634 + "&1line\\n\\n >2line\\n <3line\\n ']"
635 );
636 assertWithMessage("Generated queries do not match expected ones")
637 .that(expected)
638 .isEqualTo(actual);
639 }
640
641 @Test
642 public void testTextBlocksWithNewCrlf() throws Exception {
643 final File testFile = new File(getNonCompilablePath(
644 "InputXpathQueryGeneratorTextBlockCrlf.java"));
645 final FileText testFileText = new FileText(testFile,
646 StandardCharsets.UTF_8.name());
647 final DetailAST detailAst =
648 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
649 final int tabWidth = 8;
650
651 final int lineNumber = 6;
652 final int columnNumber = 25;
653 final XpathQueryGenerator queryGenerator = new XpathQueryGenerator(detailAst,
654 lineNumber, columnNumber, testFileText, tabWidth);
655 final List<String> actual = queryGenerator.generate();
656 final List<String> expected = Collections.singletonList(
657 "/COMPILATION_UNIT/CLASS_DEF"
658 + "[./IDENT[@text='InputXpathQueryGeneratorTextBlockCrlf']]/OBJBLOCK/"
659 + "VARIABLE_DEF[./IDENT[@text='testOne']]/ASSIGN/EXPR/"
660 + "TEXT_BLOCK_LITERAL_BEGIN/TEXT_BLOCK_CONTENT[@text='\\r\\n "
661 + "&1line\\r\\n\\r\\n >2line\\r\\n <3line\\r\\n"
662 + " ']"
663 );
664 assertWithMessage("Generated queries do not match expected ones")
665 .that(expected)
666 .isEqualTo(actual);
667 }
668
669 @Test
670 public void testXpath() throws Exception {
671 final File testFile =
672 new File(getPath("InputXpathQueryGenerator2.java"));
673 final FileText testFileText = new FileText(testFile,
674 StandardCharsets.UTF_8.name());
675 final DetailAST detailAst =
676 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
677 final int tabWidth = 8;
678
679 final int lineNumberOne = 7;
680 final int columnNumberOne = 12;
681 final XpathQueryGenerator queryGeneratorOne = new XpathQueryGenerator(detailAst,
682 lineNumberOne, columnNumberOne, testFileText, tabWidth);
683 final List<String> actualTestOne = queryGeneratorOne.generate();
684 final List<String> expectedTestOne = List.of(
685 "/COMPILATION_UNIT/CLASS_DEF"
686 + "[./IDENT[@text='InputXpathQueryGenerator2']]"
687 + "/OBJBLOCK/ENUM_DEF[./IDENT[@text='Foo3']]/OBJBLOCK/COMMA[2]"
688 );
689 assertWithMessage("Generated queries do not match expected ones")
690 .that(actualTestOne)
691 .isEqualTo(expectedTestOne);
692 }
693
694 @Test
695 public void testXpath2() throws Exception {
696 final File testFile =
697 new File(getPath("InputXpathQueryGenerator3.java"));
698 final FileText testFileText = new FileText(testFile,
699 StandardCharsets.UTF_8.name());
700 final DetailAST detailAst =
701 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
702 final int tabWidth = 8;
703
704 final int lineNumber3 = 13;
705 final int columnNumber3 = 21;
706 final XpathQueryGenerator queryGenerator3 = new XpathQueryGenerator(detailAst,
707 lineNumber3, columnNumber3, testFileText, tabWidth);
708 final List<String> actualTest3 = queryGenerator3.generate();
709 final List<String> expectedTest3 = List.of(
710 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator3']]"
711 + "/OBJBLOCK/SEMI[1]"
712 );
713 assertWithMessage("Generated queries do not match expected ones")
714 .that(actualTest3)
715 .isEqualTo(expectedTest3);
716 }
717
718 @Test
719 public void testXpath3() throws Exception {
720 final File testFile =
721 new File(getPath("InputXpathQueryGenerator4.java"));
722 final FileText testFileText = new FileText(testFile,
723 StandardCharsets.UTF_8.name());
724 final DetailAST detailAst =
725 JavaParser.parseFile(testFile, JavaParser.Options.WITHOUT_COMMENTS);
726 final int tabWidth = 8;
727
728 final int lineNumber2 = 10;
729 final int columnNumber2 = 17;
730 final XpathQueryGenerator queryGenerator2 = new XpathQueryGenerator(detailAst,
731 lineNumber2, columnNumber2, testFileText, tabWidth);
732 final List<String> actualTest = queryGenerator2.generate();
733 final List<String> expectedXpathQueries = Arrays.asList(
734 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator4']]"
735 + "/OBJBLOCK/METHOD_DEF["
736 + "./IDENT[@text='methodFallThruCustomWords']]/SLIST/LITERAL_WHILE/SLIST"
737 + "/LITERAL_SWITCH/CASE_GROUP[./SLIST/EXPR/POST_INC/IDENT[@text='i']]",
738 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text='InputXpathQueryGenerator4']]"
739 + "/OBJBLOCK/METHOD_DEF["
740 + "./IDENT[@text='methodFallThruCustomWords']]/SLIST/LITERAL_WHILE/SLIST"
741 + "/LITERAL_SWITCH/CASE_GROUP/LITERAL_DEFAULT"
742 );
743 assertWithMessage("Generated queries do not match expected ones")
744 .that(actualTest)
745 .isEqualTo(expectedXpathQueries);
746 }
747 }