From bbb28a76eaab74b0f4c6fa51ecf9c96cad5ce087 Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Sun, 10 Mar 2024 11:01:22 -0700 Subject: [PATCH] Issue #6207: Add Xpath regression test for LocalFinalVariableName --- ...hRegressionLocalFinalVariableNameTest.java | 115 ++++++++++++++++++ ...RegressionLocalFinalVariableNameInner.java | 11 ++ ...ressionLocalFinalVariableNameResource.java | 12 ++ ...thRegressionLocalFinalVariableNameVar.java | 7 ++ .../internal/XpathRegressionTest.java | 1 - 5 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 src/it/java/org/checkstyle/suppressionxpathfilter/XpathRegressionLocalFinalVariableNameTest.java create mode 100644 src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameInner.java create mode 100644 src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameResource.java create mode 100644 src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameVar.java diff --git a/src/it/java/org/checkstyle/suppressionxpathfilter/XpathRegressionLocalFinalVariableNameTest.java b/src/it/java/org/checkstyle/suppressionxpathfilter/XpathRegressionLocalFinalVariableNameTest.java new file mode 100644 index 00000000000..5aeb01ca2dd --- /dev/null +++ b/src/it/java/org/checkstyle/suppressionxpathfilter/XpathRegressionLocalFinalVariableNameTest.java @@ -0,0 +1,115 @@ +/////////////////////////////////////////////////////////////////////////////////////////////// +// checkstyle: Checks Java source code and other text files for adherence to a set of rules. +// Copyright (C) 2001-2024 the original author or authors. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +/////////////////////////////////////////////////////////////////////////////////////////////// + +package org.checkstyle.suppressionxpathfilter; + +import static com.puppycrawl.tools.checkstyle.checks.naming.LocalFinalVariableNameCheck.MSG_INVALID_PATTERN; + +import java.io.File; +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import com.puppycrawl.tools.checkstyle.DefaultConfiguration; +import com.puppycrawl.tools.checkstyle.checks.naming.LocalFinalVariableNameCheck; + +public class XpathRegressionLocalFinalVariableNameTest extends AbstractXpathTestSupport { + + private final String checkName = LocalFinalVariableNameCheck.class.getSimpleName(); + + @Override + protected String getCheckName() { + return checkName; + } + + @Test + public void testResource() throws Exception { + final File fileToProcess = + new File(getPath("SuppressionXpathRegressionLocalFinalVariableNameResource.java")); + + final DefaultConfiguration moduleConfig = + createModuleConfig(LocalFinalVariableNameCheck.class); + moduleConfig.addProperty("format", "^[A-Z][A-Z0-9]*$"); + moduleConfig.addProperty("tokens", "PARAMETER_DEF,RESOURCE"); + + final String[] expectedViolation = { + "7:21: " + getCheckMessage(LocalFinalVariableNameCheck.class, + MSG_INVALID_PATTERN, "scanner", "^[A-Z][A-Z0-9]*$"), + }; + + final List expectedXpathQueries = Collections.singletonList( + "/COMPILATION_UNIT/CLASS_DEF[./IDENT[" + + "@text='SuppressionXpathRegressionLocalFinalVariableNameResource']]" + + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='MyMethod']]/SLIST/LITERAL_TRY" + + "/RESOURCE_SPECIFICATION/RESOURCES/RESOURCE/IDENT[@text='scanner']" + ); + + runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries); + } + + @Test + public void testVariable() throws Exception { + final File fileToProcess = + new File(getPath("SuppressionXpathRegressionLocalFinalVariableNameVar.java")); + + final DefaultConfiguration moduleConfig = + createModuleConfig(LocalFinalVariableNameCheck.class); + moduleConfig.addProperty("format", "^[A-Z][a-z0-9]*$"); + + final String[] expectedViolation = { + "5:19: " + getCheckMessage(LocalFinalVariableNameCheck.class, + MSG_INVALID_PATTERN, "VAR1", "^[A-Z][a-z0-9]*$"), + }; + + final List expectedXpathQueries = Collections.singletonList( + "/COMPILATION_UNIT/CLASS_DEF[./IDENT[" + + "@text='SuppressionXpathRegressionLocalFinalVariableNameVar']]" + + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='MyMethod']]/SLIST/VARIABLE_DEF" + + "/IDENT[@text='VAR1']" + ); + + runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries); + } + + @Test + public void testInnerClass() throws Exception { + final File fileToProcess = + new File(getPath("SuppressionXpathRegressionLocalFinalVariableNameInner.java")); + + final DefaultConfiguration moduleConfig = + createModuleConfig(LocalFinalVariableNameCheck.class); + moduleConfig.addProperty("format", "^[A-Z][a-z0-9]*$"); + + final String[] expectedViolation = { + "8:23: " + getCheckMessage(LocalFinalVariableNameCheck.class, + MSG_INVALID_PATTERN, "VAR1", "^[A-Z][a-z0-9]*$"), + }; + + final List expectedXpathQueries = Collections.singletonList( + "/COMPILATION_UNIT/CLASS_DEF[./IDENT[" + + "@text='SuppressionXpathRegressionLocalFinalVariableNameInner']]" + + "/OBJBLOCK/CLASS_DEF[./IDENT[@text='InnerClass']]/OBJBLOCK" + + "/METHOD_DEF[./IDENT[@text='MyMethod']]/SLIST/VARIABLE_DEF" + + "/IDENT[@text='VAR1']" + ); + + runVerifications(moduleConfig, fileToProcess, expectedViolation, expectedXpathQueries); + } +} diff --git a/src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameInner.java b/src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameInner.java new file mode 100644 index 00000000000..ee807bd0c28 --- /dev/null +++ b/src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameInner.java @@ -0,0 +1,11 @@ +package org.checkstyle.suppressionxpathfilter.localfinalvariablename; + +import java.util.Scanner; + +public class SuppressionXpathRegressionLocalFinalVariableNameInner { + class InnerClass { + void MyMethod() { + final int VAR1 = 10; // warn + } + } +} diff --git a/src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameResource.java b/src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameResource.java new file mode 100644 index 00000000000..550a0531587 --- /dev/null +++ b/src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameResource.java @@ -0,0 +1,12 @@ +package org.checkstyle.suppressionxpathfilter.localfinalvariablename; + +import java.util.Scanner; + +public class SuppressionXpathRegressionLocalFinalVariableNameResource { + void MyMethod() { + try(Scanner scanner = new Scanner("ABC")) { // warn + final int VAR1 = 5; + final int var1 = 10; + } + } +} diff --git a/src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameVar.java b/src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameVar.java new file mode 100644 index 00000000000..8721009f0d6 --- /dev/null +++ b/src/it/resources/org/checkstyle/suppressionxpathfilter/localfinalvariablename/SuppressionXpathRegressionLocalFinalVariableNameVar.java @@ -0,0 +1,7 @@ +package org.checkstyle.suppressionxpathfilter.localfinalvariablename; + +public class SuppressionXpathRegressionLocalFinalVariableNameVar { + void MyMethod() { + final int VAR1 = 5; // warn + } +} diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java index 854d393e831..2cb6e1a770f 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java @@ -97,7 +97,6 @@ public class XpathRegressionTest extends AbstractModuleTestSupport { "DesignForExtension", "HideUtilityClassConstructor", "InterfaceTypeParameterName", - "LocalFinalVariableName", "LocalVariableName", "MethodTypeParameterName", "ModifiedControlVariable",