diff --git a/pmd-xml/src/test/java/net/sourceforge/pmd/lang/xml/XmlCliTest.java b/pmd-xml/src/test/java/net/sourceforge/pmd/lang/xml/XmlCliTest.java new file mode 100644 index 0000000000..a3c0412a83 --- /dev/null +++ b/pmd-xml/src/test/java/net/sourceforge/pmd/lang/xml/XmlCliTest.java @@ -0,0 +1,66 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.xml; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.junit.Assert; +import org.junit.Test; + +import net.sourceforge.pmd.cli.BaseCLITest; + +public class XmlCliTest extends BaseCLITest { + private static final String BASE_DIR = "src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject"; + private static final String RULE_MESSAGE = "A tags are not allowed"; + + private String[] createArgs(String directory, String ... args) { + List arguments = new ArrayList<>(); + arguments.add("-f"); + arguments.add("text"); + arguments.add("-no-cache"); + arguments.add("-R"); + arguments.add(BASE_DIR + "/ruleset.xml"); + arguments.add("-d"); + arguments.add(BASE_DIR + directory); + arguments.addAll(Arrays.asList(args)); + return arguments.toArray(new String[0]); + } + + @Test + public void analyzeSingleXmlWithoutForceLanguage() { + String resultFilename = runTest(createArgs("/src/file1.ext"), "analyzeSingleXmlWithoutForceLanguage", 0); + assertRuleMessage(0, resultFilename); + } + + @Test + public void analyzeSingleXmlWithForceLanguage() { + String resultFilename = runTest(createArgs("/src/file1.ext", "-force-language", "xml"), + "analyzeSingleXmlWithForceLanguage", 4); + assertRuleMessage(1, resultFilename); + } + + @Test + public void analyzeDirectoryWithForceLanguage() { + String resultFilename = runTest(createArgs("/src/", "-force-language", "xml"), + "analyzeDirectoryWithForceLanguage", 4); + assertRuleMessage(3, resultFilename); + } + + private void assertRuleMessage(int expectedCount, String resultFilename) { + try { + String result = FileUtils.readFileToString(new File(resultFilename), StandardCharsets.UTF_8); + Assert.assertEquals(expectedCount, StringUtils.countMatches(result, RULE_MESSAGE)); + } catch (IOException e) { + throw new AssertionError(e); + } + } +} diff --git a/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/ruleset.xml b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/ruleset.xml new file mode 100644 index 0000000000..4f3cdbfd95 --- /dev/null +++ b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/ruleset.xml @@ -0,0 +1,31 @@ + + + + + +Sample + + + + +A tags are not allowed + + 3 + + + + + + + + + + diff --git a/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file1.ext b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file1.ext new file mode 100644 index 0000000000..70c5b81e76 --- /dev/null +++ b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file1.ext @@ -0,0 +1,5 @@ + + + + + diff --git a/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file2.ext b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file2.ext new file mode 100644 index 0000000000..1e53662113 --- /dev/null +++ b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file2.ext @@ -0,0 +1,6 @@ + + + + + + diff --git a/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file3.txt b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file3.txt new file mode 100644 index 0000000000..f9b28b06e9 --- /dev/null +++ b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file3.txt @@ -0,0 +1,3 @@ +BSD-style license; for more info see http://pmd.sourceforge.net/license.html + +Other file that is not a xml file. diff --git a/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file4.ext b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file4.ext new file mode 100644 index 0000000000..bab5e698dc --- /dev/null +++ b/pmd-xml/src/test/resources/net/sourceforge/pmd/lang/xml/cli-tests/sampleproject/src/file4.ext @@ -0,0 +1,4 @@ + + + +