1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.checkstyle.suppressionxpathfilter.coding;
21
22 import java.io.File;
23 import java.util.Arrays;
24 import java.util.List;
25
26 import org.checkstyle.suppressionxpathfilter.AbstractXpathTestSupport;
27 import org.junit.jupiter.api.Test;
28
29 import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
30 import com.puppycrawl.tools.checkstyle.checks.coding.AvoidDoubleBraceInitializationCheck;
31
32 public class XpathRegressionAvoidDoubleBraceInitializationTest extends AbstractXpathTestSupport {
33
34 private static final Class<AvoidDoubleBraceInitializationCheck> CLAZZ =
35 AvoidDoubleBraceInitializationCheck.class;
36
37 @Override
38 protected String getCheckName() {
39 return CLAZZ.getSimpleName();
40 }
41
42 @Override
43 public String getPackageLocation() {
44 return "org/checkstyle/suppressionxpathfilter/coding/avoiddoublebraceinitialization";
45 }
46
47 @Test
48 public void testClassFields() throws Exception {
49 final File fileToProcess = new File(
50 getPath("InputXpathAvoidDoubleBraceInitializationClassFields.java"));
51
52 final DefaultConfiguration moduleConfig = createModuleConfig(CLAZZ);
53
54 final String[] expectedViolation = {
55 "6:41: " + getCheckMessage(CLAZZ, AvoidDoubleBraceInitializationCheck.MSG_KEY),
56 };
57
58 final List<String> expectedXpathQueries = Arrays.asList(
59 "/COMPILATION_UNIT/CLASS_DEF"
60 + "[./IDENT[@text='InputXpathAvoidDoubleBraceInitializationClassFields']]"
61 + "/OBJBLOCK/VARIABLE_DEF[./IDENT[@text='list']]/ASSIGN/EXPR/"
62 + "LITERAL_NEW[./IDENT[@text='ArrayList']]/OBJBLOCK",
63 "/COMPILATION_UNIT/CLASS_DEF"
64 + "[./IDENT[@text='InputXpathAvoidDoubleBraceInitializationClassFields']]"
65 + "/OBJBLOCK/VARIABLE_DEF[./IDENT[@text='list']]/ASSIGN/EXPR/"
66 + "LITERAL_NEW[./IDENT[@text='ArrayList']]/OBJBLOCK/LCURLY"
67 );
68
69 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
70 }
71
72 @Test
73 public void testMethodDef() throws Exception {
74 final File fileToProcess = new File(
75 getPath("InputXpathAvoidDoubleBraceInitializationMethodDef.java"));
76
77 final DefaultConfiguration moduleConfig = createModuleConfig(CLAZZ);
78
79 final String[] expectedViolation = {
80 "7:31: " + getCheckMessage(CLAZZ, AvoidDoubleBraceInitializationCheck.MSG_KEY),
81 };
82
83 final List<String> expectedXpathQueries = Arrays.asList(
84 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text="
85 + "'InputXpathAvoidDoubleBraceInitializationMethodDef']]"
86 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='test']]"
87 + "/SLIST/EXPR/LITERAL_NEW[./IDENT[@text='HashSet']]"
88 + "/OBJBLOCK",
89 "/COMPILATION_UNIT/CLASS_DEF[./IDENT[@text="
90 + "'InputXpathAvoidDoubleBraceInitializationMethodDef']]"
91 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='test']]"
92 + "/SLIST/EXPR/LITERAL_NEW[./IDENT[@text='HashSet']]"
93 + "/OBJBLOCK/LCURLY"
94 );
95
96 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
97 }
98
99 @Test
100 public void testInnerClassFields() throws Exception {
101 final File fileToProcess = new File(
102 getPath("InputXpathAvoidDoubleBraceInitializationInnerClassFields.java"));
103
104 final DefaultConfiguration moduleConfig = createModuleConfig(CLAZZ);
105
106 final String[] expectedViolation = {
107 "9:76: " + getCheckMessage(CLAZZ, AvoidDoubleBraceInitializationCheck.MSG_KEY),
108 };
109
110 final List<String> expectedXpathQueries = Arrays.asList(
111 "/COMPILATION_UNIT/CLASS_DEF"
112 + "[./IDENT[@text='InputXpathAvoidDoubleBraceInitializationInnerClassFields']]/"
113 + "OBJBLOCK/CLASS_DEF[./IDENT[@text='InnerClass']]/OBJBLOCK/METHOD_DEF"
114 + "[./IDENT[@text='doInitialize']]/SLIST/EXPR/LITERAL_NEW[./IDENT"
115 + "[@text='InputXpathAvoidDoubleBraceInitializationInnerClassFields']]/OBJBLOCK",
116 "/COMPILATION_UNIT/CLASS_DEF"
117 + "[./IDENT[@text='InputXpathAvoidDoubleBraceInitializationInnerClassFields']]/"
118 + "OBJBLOCK/CLASS_DEF[./IDENT[@text='InnerClass']]/OBJBLOCK/"
119 + "METHOD_DEF[./IDENT[@text='doInitialize']]/SLIST/EXPR/LITERAL_NEW"
120 + "[./IDENT[@text='InputXpathAvoidDoubleBraceInitializationInnerClassFields']]"
121 + "/OBJBLOCK/LCURLY"
122 );
123
124 runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries);
125 }
126
127 }