pmd: correct documentation for pmd's ant task to select the language

and adding more unit tests.
This commit is contained in:
Andreas Dangel
2013-04-15 21:00:14 +02:00
parent 2e85f1f935
commit 3901ad7ddb
5 changed files with 89 additions and 8 deletions

View File

@ -99,7 +99,7 @@
<p><code>auxclasspath</code> nested element - extra classpath used for Type Resolution rules.</p> <p><code>auxclasspath</code> nested element - extra classpath used for Type Resolution rules.</p>
<p><code>language</code> nested element - specify which language (Java, Ecmascript, XML,...) and the associated version (1.5, 1.6,...)</p> <p><code>sourceLanguage</code> nested element - specify which language (Java, Ecmascript, XML,...) and the associated version (1.5, 1.6,...)</p>
<p><code>ruleset</code> nested element - another way to specify rulesets. Here's an example:</p> <p><code>ruleset</code> nested element - another way to specify rulesets. Here's an example:</p>
<source> <source>
@ -107,7 +107,7 @@
<target name="pmd"> <target name="pmd">
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/> <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/>
<pmd shortFilenames="true"> <pmd shortFilenames="true">
<language name="java" versio="1.6"/> <sourceLanguage name="java" version="1.6"/>
<ruleset>rulesets/java/design.xml</ruleset> <ruleset>rulesets/java/design.xml</ruleset>
<ruleset>java-basic</ruleset> <ruleset>java-basic</ruleset>
<formatter type="html" toFile="pmd_report.html" linkPrefix="http://pmd.sourceforge.net/xref/"/> <formatter type="html" toFile="pmd_report.html" linkPrefix="http://pmd.sourceforge.net/xref/"/>
@ -122,6 +122,30 @@
</subsection> </subsection>
<subsection name="Language selection">
<p>The language to be used for parsing is selected via the <code>sourceLanguage</code> nested element.
Possible values are:</p>
<source>
<![CDATA[
<sourceLanguage name="cpp" version=""/>
<sourceLanguage name="fortran" version=""/>
<sourceLanguage name="ecmascript" version="3"/>
<sourceLanguage name="java" version="1.3"/>
<sourceLanguage name="java" version="1.4"/>
<sourceLanguage name="java" version="1.5"/>
<sourceLanguage name="java" version="1.6"/>
<sourceLanguage name="java" version="1.7"/>
<sourceLanguage name="jsp" version=""/>
<sourceLanguage name="php" version=""/>
<sourceLanguage name="ruby" version=""/>
<sourceLanguage name="xsl" version=""/>
<sourceLanguage name="xml" version=""/>
]]>
</source>
</subsection>
<subsection name="Postprocessing the report file with XSLT"> <subsection name="Postprocessing the report file with XSLT">
<p>Several folks (most recently, Wouter Zelle) have written XSLT scripts <p>Several folks (most recently, Wouter Zelle) have written XSLT scripts
which you can use to transform the XML report into nifty HTML. To do this, which you can use to transform the XML report into nifty HTML. To do this,

View File

@ -6,6 +6,7 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import junit.framework.JUnit4TestAdapter; import junit.framework.JUnit4TestAdapter;
import net.sourceforge.pmd.ant.SourceLanguage;
import net.sourceforge.pmd.lang.LanguageVersion; import net.sourceforge.pmd.lang.LanguageVersion;
import org.junit.Test; import org.junit.Test;
@ -16,20 +17,41 @@ import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class) @RunWith(Parameterized.class)
public class LanguageVersionTest { public class LanguageVersionTest {
private String language;
private String version;
private String terseName; private String terseName;
private LanguageVersion expected; private LanguageVersion expected;
public LanguageVersionTest(String terseName, LanguageVersion expected) { public LanguageVersionTest(String language, String version, LanguageVersion expected) {
this.terseName = terseName; this.language = language;
this.version = version;
this.terseName = language;
if (version != null && !version.isEmpty()) {
this.terseName += " " + version;
}
this.expected = expected; this.expected = expected;
} }
@Parameters @Parameters
public static Collection data() { public static Collection data() {
return Arrays.asList(new Object[][] { { "java 1.3", LanguageVersion.JAVA_13 }, return Arrays.asList(new Object[][] {
{ "java 1.4", LanguageVersion.JAVA_14 }, { "java 1.5", LanguageVersion.JAVA_15 }, { "java", "1.3", LanguageVersion.JAVA_13 },
{ "java 1.6", LanguageVersion.JAVA_16 }, { "java 1.7", LanguageVersion.JAVA_17 }, { "java", "1.4", LanguageVersion.JAVA_14 },
{ "jsp", LanguageVersion.JSP }, }); { "java", "1.5", LanguageVersion.JAVA_15 },
{ "java", "1.6", LanguageVersion.JAVA_16 },
{ "java", "1.7", LanguageVersion.JAVA_17 },
{ "jsp", "", LanguageVersion.JSP },
{ "xml", "", LanguageVersion.XML },
{ "xsl", "", LanguageVersion.XSL },
{ "ecmascript", "3", LanguageVersion.ECMASCRIPT },
{ "cpp", "", LanguageVersion.CPP },
{ "fortran", "", LanguageVersion.FORTRAN },
{ "php", "", LanguageVersion.PHP },
{ "ruby", "", LanguageVersion.RUBY },
// this one won't be found: case sensitive!
{ "JAVA", "1.7", null },
});
} }
@Test @Test
@ -37,6 +59,18 @@ public class LanguageVersionTest {
assertEquals(expected, LanguageVersion.findByTerseName(terseName)); assertEquals(expected, LanguageVersion.findByTerseName(terseName));
} }
@Test
public void testFindVersionsForLanguageTerseName() {
SourceLanguage sourceLanguage = new SourceLanguage();
sourceLanguage.setName(language);
sourceLanguage.setVersion(version);
LanguageVersion languageVersion = LanguageVersion.findVersionsForLanguageTerseName(sourceLanguage.getName(),
sourceLanguage.getVersion());
assertEquals(expected, languageVersion);
}
public static junit.framework.Test suite() { public static junit.framework.Test suite() {
return new JUnit4TestAdapter(LanguageVersionTest.class); return new JUnit4TestAdapter(LanguageVersionTest.class);
} }

View File

@ -111,6 +111,12 @@ public class PMDTaskTest extends BuildFileTest {
assertOutputContaining("Use ===/!== to compare with true/false or Numbers"); assertOutputContaining("Use ===/!== to compare with true/false or Numbers");
} }
@Test
public void testXML() {
executeTarget("testXML");
assertOutputContaining("Potentialy mistyped CDATA section with extra [ at beginning or ] at the end.");
}
@Test @Test
public void testClasspath() { public void testClasspath() {
executeTarget("testClasspath"); executeTarget("testClasspath");

View File

@ -0,0 +1,7 @@
<root>
<child>
<![CDATA[[
some text data
]]>
</child>
</root>

View File

@ -128,6 +128,16 @@
</pmd> </pmd>
</target> </target>
<target name="testXML">
<pmd rulesetfiles="${pmd.home}/src/main/resources/rulesets/xml/basic.xml">
<sourceLanguage name="xml" version=""/>
<formatter type="text" toConsole="true"/>
<fileset dir="${pmd.home}/src/test/resources/ant/xml/">
<include name="*.xml"/>
</fileset>
</pmd>
</target>
<target name="testClasspath"> <target name="testClasspath">
<pmd> <pmd>
<ruleset>classpathtest/ruleset.xml</ruleset> <ruleset>classpathtest/ruleset.xml</ruleset>