From 0010bb8209bf0003bb198b6b989ca5564e9d0184 Mon Sep 17 00:00:00 2001
From: Aayush <kumaraayush9810@gmail.com>
Date: Thu, 30 Nov 2023 13:04:27 +0530
Subject: [PATCH] Issue #6207: Added Xpath IT regression test for
 StaticVariableName

---
 ...XpathRegressionStaticVariableNameTest.java | 117 ++++++++++++++++++
 ...ionXpathRegressionStaticVariableName2.java |  18 +++
 ...ionXpathRegressionStaticVariableName3.java |   8 ++
 ...ionXpathRegressionStaticVariableName1.java |   7 ++
 .../internal/XpathRegressionTest.java         |   1 -
 5 files changed, 150 insertions(+), 1 deletion(-)
 create mode 100644 src/it/java/org/checkstyle/suppressionxpathfilter/XpathRegressionStaticVariableNameTest.java
 create mode 100644 src/it/resources-noncompilable/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName2.java
 create mode 100644 src/it/resources-noncompilable/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName3.java
 create mode 100644 src/it/resources/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName1.java

diff --git a/src/it/java/org/checkstyle/suppressionxpathfilter/XpathRegressionStaticVariableNameTest.java b/src/it/java/org/checkstyle/suppressionxpathfilter/XpathRegressionStaticVariableNameTest.java
new file mode 100644
index 00000000000..21af685d65b
--- /dev/null
+++ b/src/it/java/org/checkstyle/suppressionxpathfilter/XpathRegressionStaticVariableNameTest.java
@@ -0,0 +1,117 @@
+///////////////////////////////////////////////////////////////////////////////////////////////
+// checkstyle: Checks Java source code and other text files for adherence to a set of rules.
+// Copyright (C) 2001-2023 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 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.AbstractNameCheck;
+import com.puppycrawl.tools.checkstyle.checks.naming.StaticVariableNameCheck;
+
+public class XpathRegressionStaticVariableNameTest extends AbstractXpathTestSupport {
+
+    private final String checkName = StaticVariableNameCheck.class.getSimpleName();
+
+    @Override
+    protected String getCheckName() {
+        return checkName;
+    }
+
+    @Test
+    public void test1() throws Exception {
+        final File fileToProcess =
+                new File(getPath("SuppressionXpathRegressionStaticVariableName1.java"));
+
+        final String pattern = "^[a-z][a-zA-Z0-9]*$";
+        final DefaultConfiguration moduleConfig =
+                createModuleConfig(StaticVariableNameCheck.class);
+
+        final String[] expectedViolation = {
+            "6:24: " + getCheckMessage(StaticVariableNameCheck.class,
+                        AbstractNameCheck.MSG_INVALID_PATTERN, "NUM2", pattern),
+        };
+
+        final List<String> expectedXpathQueries = Collections.singletonList(
+                "/COMPILATION_UNIT"
+                        + "/CLASS_DEF[./IDENT[@text"
+                        + "='SuppressionXpathRegressionStaticVariableName1']]"
+                        + "/OBJBLOCK/VARIABLE_DEF/IDENT[@text='NUM2']"
+
+        );
+        runVerifications(moduleConfig, fileToProcess, expectedViolation,
+                expectedXpathQueries);
+    }
+
+    @Test
+    public void test2() throws Exception {
+        final File fileToProcess =
+                new File(getNonCompilablePath(
+                        "SuppressionXpathRegressionStaticVariableName2.java"));
+
+        final String pattern = "^[a-z][a-zA-Z0-9]*$";
+        final DefaultConfiguration moduleConfig =
+                createModuleConfig(StaticVariableNameCheck.class);
+
+        final String[] expectedViolation = {
+            "14:24: " + getCheckMessage(StaticVariableNameCheck.class,
+                        AbstractNameCheck.MSG_INVALID_PATTERN, "NUM3", pattern),
+        };
+
+        final List<String> expectedXpathQueries = Collections.singletonList(
+                "/COMPILATION_UNIT"
+                        + "/CLASS_DEF[./IDENT[@text"
+                        + "='SuppressionXpathRegressionStaticVariableName2']]"
+                        + "/OBJBLOCK/METHOD_DEF[./IDENT[@text='outerMethod']]"
+                        + "/SLIST/CLASS_DEF[./IDENT[@text='MyLocalClass']]"
+                        + "/OBJBLOCK/VARIABLE_DEF/IDENT[@text='NUM3']"
+        );
+        runVerifications(moduleConfig, fileToProcess, expectedViolation,
+                expectedXpathQueries);
+    }
+
+    @Test
+    public void test3() throws Exception {
+        final File fileToProcess =
+                new File(getNonCompilablePath(
+                        "SuppressionXpathRegressionStaticVariableName3.java"));
+
+        final String pattern = "^[a-z][a-zA-Z0-9]*$";
+        final DefaultConfiguration moduleConfig =
+                createModuleConfig(StaticVariableNameCheck.class);
+
+        final String[] expectedViolation = {
+            "6:19: " + getCheckMessage(StaticVariableNameCheck.class,
+                        AbstractNameCheck.MSG_INVALID_PATTERN, "NUM3", pattern),
+        };
+
+        final List<String> expectedXpathQueries = Collections.singletonList(
+                "/COMPILATION_UNIT"
+                        + "/CLASS_DEF[./IDENT[@text"
+                        + "='SuppressionXpathRegressionStaticVariableName2']]"
+                        + "/OBJBLOCK/INSTANCE_INIT/SLIST/VARIABLE_DEF/IDENT[@text='NUM3']"
+        );
+        runVerifications(moduleConfig, fileToProcess, expectedViolation,
+                expectedXpathQueries);
+    }
+}
diff --git a/src/it/resources-noncompilable/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName2.java b/src/it/resources-noncompilable/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName2.java
new file mode 100644
index 00000000000..2e03f53264f
--- /dev/null
+++ b/src/it/resources-noncompilable/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName2.java
@@ -0,0 +1,18 @@
+//non-compiled with javac: Compilable with Java14
+package org.checkstyle.suppressionxpathfilter.staticvariablename;
+
+public class SuppressionXpathRegressionStaticVariableName2 {
+
+     public int num1;
+
+     protected int NUM2;
+
+     public void outerMethod() {
+
+         class MyLocalClass {
+
+            static int NUM3; //warn
+
+        }
+    }
+ }
diff --git a/src/it/resources-noncompilable/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName3.java b/src/it/resources-noncompilable/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName3.java
new file mode 100644
index 00000000000..31ba38eaf0e
--- /dev/null
+++ b/src/it/resources-noncompilable/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName3.java
@@ -0,0 +1,8 @@
+//non-compiled with javac: Compilable with Java14
+package org.checkstyle.suppressionxpathfilter.staticvariablename;
+
+public class SuppressionXpathRegressionStaticVariableName2 {
+    {
+       static int NUM3; //warn
+    }
+ }
diff --git a/src/it/resources/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName1.java b/src/it/resources/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName1.java
new file mode 100644
index 00000000000..df47703cc31
--- /dev/null
+++ b/src/it/resources/org/checkstyle/suppressionxpathfilter/staticvariablename/SuppressionXpathRegressionStaticVariableName1.java
@@ -0,0 +1,7 @@
+package org.checkstyle.suppressionxpathfilter.staticvariablename;
+
+public class SuppressionXpathRegressionStaticVariableName1 {
+
+     public int num1; // OK
+     public static int NUM2; // 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 91baf4de126..050b7860f9f 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java
@@ -118,7 +118,6 @@ public class XpathRegressionTest extends AbstractModuleTestSupport {
             "RedundantModifier",
             "SeparatorWrap",
             "SimplifyBooleanExpression",
-            "StaticVariableName",
             "SuperFinalize",
             "SuppressWarnings",
             "VisibilityModifier"