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 { - + 1 diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedPrivateMethod.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedPrivateMethod.xml index 219557b00f..2a7e09a935 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedPrivateMethod.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedPrivateMethod.xml @@ -285,7 +285,7 @@ public class Foo { ]]> - + #46 False +: Unused private field: call to instance of self, received from another class 0 - + [java] InvalidLogMessageFormat false-negative for a lambda argument #2255 3 11,13,16 diff --git a/pmd-modelica/src/test/resources/net/sourceforge/pmd/lang/modelica/rule/bestpractices/xml/AmbiguousResolution.xml b/pmd-modelica/src/test/resources/net/sourceforge/pmd/lang/modelica/rule/bestpractices/xml/AmbiguousResolution.xml index b038ce6acd..b2fba5eb90 100644 --- a/pmd-modelica/src/test/resources/net/sourceforge/pmd/lang/modelica/rule/bestpractices/xml/AmbiguousResolution.xml +++ b/pmd-modelica/src/test/resources/net/sourceforge/pmd/lang/modelica/rule/bestpractices/xml/AmbiguousResolution.xml @@ -68,7 +68,7 @@ end Test; ]]> - + Invalid example: suspicious reference to X 1 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 7713d5a6fe..7b18e62500 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; @@ -86,6 +87,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());