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.Collections;
24 import java.util.List;
25
26 import org.junit.jupiter.api.Test;
27
28 import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
29 import com.puppycrawl.tools.checkstyle.checks.naming.AbstractNameCheck;
30 import com.puppycrawl.tools.checkstyle.checks.naming.ParameterNameCheck;
31
32 public class XpathRegressionParameterNameTest extends AbstractXpathTestSupport {
33
34 private final String checkName = ParameterNameCheck.class.getSimpleName();
35
36 @Override
37 protected String getCheckName() {
38 return checkName;
39 }
40
41 @Test
42 public void testDefaultPattern() throws Exception {
43 final File fileToProcess =
44 new File(getPath("InputXpathParameterNameDefaultPattern.java"));
45
46 final String pattern = "^[a-z][a-zA-Z0-9]*$";
47 final DefaultConfiguration moduleConfig =
48 createModuleConfig(ParameterNameCheck.class);
49
50 final String[] expectedViolation = {
51 "5:22: " + getCheckMessage(ParameterNameCheck.class,
52 AbstractNameCheck.MSG_INVALID_PATTERN, "v_1", pattern),
53 };
54
55 final List<String> expectedXpathQueries = Collections.singletonList(
56 "/COMPILATION_UNIT"
57 + "/CLASS_DEF[./IDENT[@text"
58 + "='InputXpathParameterNameDefaultPattern']]"
59 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='method1']]"
60 + "/PARAMETERS/PARAMETER_DEF/IDENT[@text='v_1']"
61 );
62 runVerifications(moduleConfig, fileToProcess, expectedViolation,
63 expectedXpathQueries);
64 }
65
66 @Test
67 public void testDifferentPattern() throws Exception {
68 final File fileToProcess =
69 new File(getPath("InputXpathParameterNameDifferentPattern.java"));
70
71 final String pattern = "^[a-z][_a-zA-Z0-9]+$";
72 final DefaultConfiguration moduleConfig =
73 createModuleConfig(ParameterNameCheck.class);
74 moduleConfig.addProperty("format", "^[a-z][_a-zA-Z0-9]+$");
75
76 final String[] expectedViolation = {
77 "5:22: " + getCheckMessage(ParameterNameCheck.class,
78 AbstractNameCheck.MSG_INVALID_PATTERN, "V2", pattern),
79 };
80
81 final List<String> expectedXpathQueries = Collections.singletonList(
82 "/COMPILATION_UNIT"
83 + "/CLASS_DEF[./IDENT[@text"
84 + "='InputXpathParameterNameDifferentPattern']]"
85 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='method2']]"
86 + "/PARAMETERS/PARAMETER_DEF/IDENT[@text='V2']"
87 );
88 runVerifications(moduleConfig, fileToProcess, expectedViolation,
89 expectedXpathQueries);
90 }
91
92 @Test
93 public void testIgnoreOverridden() throws Exception {
94 final File fileToProcess =
95 new File(getPath("InputXpathParameterNameIgnoreOverridden.java"));
96
97 final String pattern = "^[a-z][a-zA-Z0-9]*$";
98 final DefaultConfiguration moduleConfig =
99 createModuleConfig(ParameterNameCheck.class);
100 moduleConfig.addProperty("ignoreOverridden", "true");
101
102 final String[] expectedViolation = {
103 "5:22: " + getCheckMessage(ParameterNameCheck.class,
104 AbstractNameCheck.MSG_INVALID_PATTERN, "V2", pattern),
105 };
106
107 final List<String> expectedXpathQueries = Collections.singletonList(
108 "/COMPILATION_UNIT"
109 + "/CLASS_DEF[./IDENT[@text"
110 + "='InputXpathParameterNameIgnoreOverridden']]"
111 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='method2']]"
112 + "/PARAMETERS/PARAMETER_DEF/IDENT[@text='V2']"
113 );
114 runVerifications(moduleConfig, fileToProcess, expectedViolation,
115 expectedXpathQueries);
116 }
117
118 @Test
119 public void testAccessModifiers() throws Exception {
120 final File fileToProcess =
121 new File(getPath("InputXpathParameterNameAccessModifier.java"));
122
123 final String pattern = "^[a-z][a-z0-9][a-zA-Z0-9]*$";
124 final DefaultConfiguration moduleConfig =
125 createModuleConfig(ParameterNameCheck.class);
126 moduleConfig.addProperty("format", "^[a-z][a-z0-9][a-zA-Z0-9]*$");
127 moduleConfig.addProperty("accessModifiers", "public");
128
129 final String[] expectedViolation = {
130 "8:29: " + getCheckMessage(ParameterNameCheck.class,
131 AbstractNameCheck.MSG_INVALID_PATTERN, "b", pattern),
132 };
133
134 final List<String> expectedXpathQueries = Collections.singletonList(
135 "/COMPILATION_UNIT"
136 + "/CLASS_DEF[./IDENT[@text"
137 + "='InputXpathParameterNameAccessModifier']]"
138 + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='method2']]"
139 + "/PARAMETERS/PARAMETER_DEF/IDENT[@text='b']"
140 );
141 runVerifications(moduleConfig, fileToProcess, expectedViolation,
142 expectedXpathQueries);
143 }
144 }