From 12516ff035cbace996a9bee6299dca9bf24e4d1f Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 21 Jul 2022 21:25:33 +0200 Subject: [PATCH 1/2] Fix deprecated attribute usage "regressionTest" --- .../pmd/lang/apex/rule/security/xml/ApexCRUDViolation.xml | 2 +- .../net/sourceforge/pmd/lang/java/metrics/impl/xml/AtfdTest.xml | 2 +- .../lang/java/rule/bestpractices/xml/UnusedPrivateMethod.xml | 2 +- .../xml/ClassWithOnlyPrivateConstructorsShouldBeFinal.xml | 2 +- .../java/rule/errorprone/xml/AvoidAccessibilityAlteration.xml | 2 +- .../lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml | 2 +- .../lang/java/rule/errorprone/xml/InvalidLogMessageFormat.xml | 2 +- .../java/rule/performance/xml/ConsecutiveLiteralAppends.xml | 2 +- .../modelica/rule/bestpractices/xml/AmbiguousResolution.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/security/xml/ApexCRUDViolation.xml b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/security/xml/ApexCRUDViolation.xml index 5d5234e28a..fbf529e30f 100644 --- a/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/security/xml/ApexCRUDViolation.xml +++ b/pmd-apex/src/test/resources/net/sourceforge/pmd/lang/apex/rule/security/xml/ApexCRUDViolation.xml @@ -1501,7 +1501,7 @@ public class Foo { - + Make sure to detect method call chains diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml index 1eea2ba7db..7789509532 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/DataflowAnomalyAnalysis.xml @@ -170,7 +170,7 @@ class Test{ ]]> - + #1905 [java] DataflowAnomalyAnalysis Rule in right order : Case 3. DU-Anomaly(a) 1 5 diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/InvalidLogMessageFormat.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/InvalidLogMessageFormat.xml index 8649759cb2..e4c09ae77f 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/InvalidLogMessageFormat.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/InvalidLogMessageFormat.xml @@ -864,7 +864,7 @@ class InvalidLogMessageFormatTest { ]]> - + [java] InvalidLogMessageFormat false-negative for a lambda argument #2255 3 11,13,16 diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/performance/xml/ConsecutiveLiteralAppends.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/performance/xml/ConsecutiveLiteralAppends.xml index b123e40767..dde0ed64a2 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/performance/xml/ConsecutiveLiteralAppends.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/performance/xml/ConsecutiveLiteralAppends.xml @@ -1130,7 +1130,7 @@ public class Foo { ]]> - + 43, Using variable char array 0 - + Invalid example: suspicious reference to X 1 Date: Thu, 21 Jul 2022 21:55:07 +0200 Subject: [PATCH 2/2] [test] Correctly report available property names --- .../pmd/test/schema/BaseTestParserImpl.java | 5 ++-- .../pmd/test/schema/TestSchemaParser.java | 5 +++- .../pmd/test/schema/TestSchemaParserTest.java | 26 +++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/pmd-test-schema/src/main/java/net/sourceforge/pmd/test/schema/BaseTestParserImpl.java b/pmd-test-schema/src/main/java/net/sourceforge/pmd/test/schema/BaseTestParserImpl.java index 7a7b92b285..845625c93e 100644 --- a/pmd-test-schema/src/main/java/net/sourceforge/pmd/test/schema/BaseTestParserImpl.java +++ b/pmd-test-schema/src/main/java/net/sourceforge/pmd/test/schema/BaseTestParserImpl.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.stream.Stream; +import java.util.stream.Collectors; import org.w3c.dom.Attr; import org.w3c.dom.Document; @@ -216,7 +216,8 @@ class BaseTestParserImpl { } String propertyName = nameAttr.getNodeValue(); if (knownProps.getPropertyDescriptor(propertyName) == null) { - Stream knownNames = knownProps.getPropertyDescriptors().stream().map(PropertyDescriptor::name); + String knownNames = knownProps.getPropertyDescriptors().stream().map(PropertyDescriptor::name) + .collect(Collectors.joining(", ")); err.at(nameAttr).error("Unknown property, known property names are {0}", knownNames); continue; } diff --git a/pmd-test-schema/src/main/java/net/sourceforge/pmd/test/schema/TestSchemaParser.java b/pmd-test-schema/src/main/java/net/sourceforge/pmd/test/schema/TestSchemaParser.java index 777d9e3560..56df86f143 100644 --- a/pmd-test-schema/src/main/java/net/sourceforge/pmd/test/schema/TestSchemaParser.java +++ b/pmd-test-schema/src/main/java/net/sourceforge/pmd/test/schema/TestSchemaParser.java @@ -19,6 +19,7 @@ import net.sourceforge.pmd.annotation.Experimental; import com.github.oowekyala.ooxml.messages.NiceXmlMessageSpec; import com.github.oowekyala.ooxml.messages.OoxmlFacade; import com.github.oowekyala.ooxml.messages.PositionedXmlDoc; +import com.github.oowekyala.ooxml.messages.PrintStreamMessageHandler; import com.github.oowekyala.ooxml.messages.XmlException; import com.github.oowekyala.ooxml.messages.XmlMessageReporter; import com.github.oowekyala.ooxml.messages.XmlMessageReporterBase; @@ -57,7 +58,9 @@ public class TestSchemaParser { * @throws XmlException If parsing throws this */ public RuleTestCollection parse(Rule rule, InputSource inputSource) throws IOException, XmlException { - OoxmlFacade ooxml = new OoxmlFacade(); + // note: need to explicitly specify the writer here, so that in unit tests + // System.err can be swapped out and in + OoxmlFacade ooxml = new OoxmlFacade().withPrinter(new PrintStreamMessageHandler(System.err)); PositionedXmlDoc doc = ooxml.parse(newDocumentBuilder(), inputSource); try (PmdXmlReporterImpl err = new PmdXmlReporterImpl(ooxml, doc.getPositioner())) { diff --git a/pmd-test-schema/src/test/java/net/sourceforge/pmd/test/schema/TestSchemaParserTest.java b/pmd-test-schema/src/test/java/net/sourceforge/pmd/test/schema/TestSchemaParserTest.java index 9428d31053..1b38d243f6 100644 --- a/pmd-test-schema/src/test/java/net/sourceforge/pmd/test/schema/TestSchemaParserTest.java +++ b/pmd-test-schema/src/test/java/net/sourceforge/pmd/test/schema/TestSchemaParserTest.java @@ -6,6 +6,7 @@ package net.sourceforge.pmd.test.schema; import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; import java.io.IOException; import java.io.StringReader; @@ -84,6 +85,31 @@ public class TestSchemaParserTest { + " ^^^^^^^^^^^^^^ Attribute 'regressionTest' is deprecated, use 'ignored' with inverted value\n")); } + @Test + public void testUnknownProperty() throws IOException { + String file = "\n" + + "\n" + + " \n" + + " equality operators with Double.NaN\n" + + " foo\n" + + " 0\n" + + " \n" + + " \n" + + "\n"; + + errStreamCaptor.enableLog(); + assertThrows(IllegalStateException.class, () -> parseFile(file)); + + MatcherAssert.assertThat(errStreamCaptor.getLog(), containsString(" 8| foo\n" + + " ^^^^ Unknown property, known property names are violationSuppressRegex, violationSuppressXPath, testIntProperty\n")); + } + private RuleTestCollection parseFile(String file) throws IOException { MockRule mockRule = new MockRule(); mockRule.setLanguage(PlainTextLanguage.getInstance());