More fixes - some tests simply moved to java module
This commit is contained in:
@ -9,6 +9,8 @@ import static org.junit.Assert.assertTrue;
|
||||
import java.io.StringReader;
|
||||
|
||||
import junit.framework.JUnit4TestAdapter;
|
||||
import net.sourceforge.pmd.lang.LanguageRegistry;
|
||||
import net.sourceforge.pmd.lang.java.JavaLanguageModule;
|
||||
import net.sourceforge.pmd.testframework.RuleTst;
|
||||
import net.sourceforge.pmd.testframework.TestDescriptor;
|
||||
|
||||
@ -38,7 +40,7 @@ import org.junit.Test;
|
||||
Report r = new Report();
|
||||
ctx.setReport(r);
|
||||
ctx.setSourceCodeFilename("n/a");
|
||||
ctx.setLanguageVersion(DEFAULT_LANGUAGE_VERSION);
|
||||
ctx.setLanguageVersion(LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getDefaultVersion());
|
||||
RuleSet rules = new RuleSet();
|
||||
rules.addRule(rule);
|
||||
p.getSourceCodeProcessor().processSourceCode(new StringReader(TEST3), new RuleSets(rules), ctx);
|
36
pmd-java/src/test/java/net/sourceforge/pmd/FooRule.java
Normal file
36
pmd-java/src/test/java/net/sourceforge/pmd/FooRule.java
Normal file
@ -0,0 +1,36 @@
|
||||
/**
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
package net.sourceforge.pmd;
|
||||
|
||||
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
|
||||
import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId;
|
||||
import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
|
||||
|
||||
public class FooRule extends AbstractJavaRule {
|
||||
|
||||
public FooRule() {
|
||||
setMessage("No Foo allowed");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visit(ASTClassOrInterfaceDeclaration c, Object ctx) {
|
||||
if (c.getImage().equalsIgnoreCase("Foo")) {
|
||||
addViolation(ctx, c);
|
||||
}
|
||||
return super.visit(c, ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visit(ASTVariableDeclaratorId c, Object ctx) {
|
||||
if (c.getImage().equalsIgnoreCase("Foo")) {
|
||||
addViolation(ctx, c);
|
||||
}
|
||||
return super.visit(c, ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "NoFoo";
|
||||
}
|
||||
}
|
84
pmd-java/src/test/java/net/sourceforge/pmd/ReportTest.java
Normal file
84
pmd-java/src/test/java/net/sourceforge/pmd/ReportTest.java
Normal file
@ -0,0 +1,84 @@
|
||||
/**
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
package net.sourceforge.pmd;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import net.sourceforge.pmd.lang.LanguageRegistry;
|
||||
import net.sourceforge.pmd.lang.LanguageVersion;
|
||||
import net.sourceforge.pmd.lang.java.JavaLanguageModule;
|
||||
import net.sourceforge.pmd.testframework.RuleTst;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class ReportTest extends RuleTst {
|
||||
|
||||
private LanguageVersion defaultLanguage = LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getDefaultVersion();
|
||||
|
||||
@Test
|
||||
public void testBasic() throws Throwable {
|
||||
Report r = new Report();
|
||||
runTestFromString(TEST1, new FooRule(), r, defaultLanguage);
|
||||
assertFalse(r.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithRuleViolationSuppressRegex() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
Rule rule = new FooRule();
|
||||
rule.setProperty(Rule.VIOLATION_SUPPRESS_REGEX_DESCRIPTOR, ".*No Foo.*");
|
||||
runTestFromString(TEST1, rule, rpt, defaultLanguage);
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithRuleViolationSuppressXPath() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
Rule rule = new FooRule();
|
||||
rule.setProperty(Rule.VIOLATION_SUPPRESS_XPATH_DESCRIPTOR, ".[@Image = 'Foo']");
|
||||
runTestFromString(TEST1, rule, rpt, defaultLanguage);
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithAnnotations() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
runTestFromString(TEST2, new FooRule(), rpt, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5"));
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithAnnotationsFullName() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
runTestFromString(TEST2_FULL, new FooRule(), rpt, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5"));
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithNOPMD() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
runTestFromString(TEST3, new FooRule(), rpt, defaultLanguage);
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
private static final String TEST1 =
|
||||
"public class Foo {}" + PMD.EOL;
|
||||
|
||||
private static final String TEST2 =
|
||||
"@SuppressWarnings(\"PMD\")" + PMD.EOL +
|
||||
"public class Foo {}";
|
||||
private static final String TEST2_FULL =
|
||||
"@java.lang.SuppressWarnings(\"PMD\")" + PMD.EOL +
|
||||
"public class Foo {}";
|
||||
|
||||
private static final String TEST3 =
|
||||
"public class Foo {} // NOPMD";
|
||||
}
|
@ -5,12 +5,12 @@ package net.sourceforge.pmd.lang.java;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import junit.framework.JUnit4TestAdapter;
|
||||
import net.sourceforge.pmd.FooRule;
|
||||
import net.sourceforge.pmd.PMD;
|
||||
import net.sourceforge.pmd.Report;
|
||||
import net.sourceforge.pmd.lang.LanguageRegistry;
|
||||
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
|
||||
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
|
||||
import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId;
|
||||
import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
|
||||
import net.sourceforge.pmd.testframework.RuleTst;
|
||||
|
||||
@ -19,29 +19,6 @@ import org.junit.Test;
|
||||
|
||||
public class SuppressWarningsTest extends RuleTst {
|
||||
|
||||
private static class FooRule extends AbstractJavaRule {
|
||||
@Override
|
||||
public Object visit(ASTClassOrInterfaceDeclaration c, Object ctx) {
|
||||
if (c.getImage().equalsIgnoreCase("Foo")) {
|
||||
addViolation(ctx, c);
|
||||
}
|
||||
return super.visit(c, ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visit(ASTVariableDeclaratorId c, Object ctx) {
|
||||
if (c.getImage().equalsIgnoreCase("Foo")) {
|
||||
addViolation(ctx, c);
|
||||
}
|
||||
return super.visit(c, ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "NoFoo";
|
||||
}
|
||||
}
|
||||
|
||||
private static class BarRule extends AbstractJavaRule {
|
||||
@Override
|
||||
public Object visit(ASTCompilationUnit cu, Object ctx) {
|
||||
|
@ -0,0 +1,36 @@
|
||||
/**
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
package net.sourceforge.pmd;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import net.sourceforge.pmd.lang.LanguageRegistry;
|
||||
import net.sourceforge.pmd.lang.ecmascript.EcmascriptLanguageModule;
|
||||
import net.sourceforge.pmd.lang.ecmascript.ast.ASTFunctionNode;
|
||||
import net.sourceforge.pmd.lang.ecmascript.rule.AbstractEcmascriptRule;
|
||||
import net.sourceforge.pmd.lang.ecmascript.rule.EcmascriptRuleViolationFactory;
|
||||
import net.sourceforge.pmd.testframework.RuleTst;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class ReportTest extends RuleTst {
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithNOPMDEcmascript() throws Exception {
|
||||
Report rpt = new Report();
|
||||
Rule rule = new AbstractEcmascriptRule() {
|
||||
@Override
|
||||
public Object visit(ASTFunctionNode node, Object data) {
|
||||
EcmascriptRuleViolationFactory.INSTANCE.addViolation((RuleContext)data, this, node, "Test", null);
|
||||
return super.visit(node, data);
|
||||
}
|
||||
};
|
||||
String code = "function(x) // NOPMD test suppress\n"
|
||||
+ "{ x = 1; }";
|
||||
runTestFromString(code, rule, rpt, LanguageRegistry.getLanguage(EcmascriptLanguageModule.NAME).getDefaultVersion());
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
}
|
@ -12,26 +12,18 @@ import java.io.StringWriter;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.JUnit4TestAdapter;
|
||||
import net.sourceforge.pmd.lang.LanguageRegistry;
|
||||
import net.sourceforge.pmd.lang.ast.DummyNode;
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.ecmascript.EcmascriptLanguageModule;
|
||||
import net.sourceforge.pmd.lang.ecmascript.ast.ASTFunctionNode;
|
||||
import net.sourceforge.pmd.lang.ecmascript.rule.AbstractEcmascriptRule;
|
||||
import net.sourceforge.pmd.lang.ecmascript.rule.EcmascriptRuleViolationFactory;
|
||||
import net.sourceforge.pmd.lang.java.JavaLanguageModule;
|
||||
import net.sourceforge.pmd.lang.rule.MockRule;
|
||||
import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
|
||||
import net.sourceforge.pmd.renderers.Renderer;
|
||||
import net.sourceforge.pmd.renderers.XMLRenderer;
|
||||
import net.sourceforge.pmd.stat.Metric;
|
||||
import net.sourceforge.pmd.testframework.RuleTst;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class ReportTest extends RuleTst implements ReportListener {
|
||||
public class ReportTest implements ReportListener {
|
||||
|
||||
private boolean violationSemaphore;
|
||||
private boolean metricSemaphore;
|
||||
@ -44,13 +36,6 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
metricSemaphore = true;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBasic() throws Throwable {
|
||||
Report r = new Report();
|
||||
runTestFromString(TEST1, new FooRule(), r);
|
||||
assertFalse(r.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMetric0() {
|
||||
Report r = new Report();
|
||||
@ -79,91 +64,17 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
assertEquals("wrong std dev value", 4.0, m.getStandardDeviation(), 0.05);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithRuleViolationSuppressRegex() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
Rule rule = new FooRule();
|
||||
rule.setProperty(Rule.VIOLATION_SUPPRESS_REGEX_DESCRIPTOR, ".*blah.*");
|
||||
runTestFromString(TEST1, rule, rpt);
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithRuleViolationSuppressXPath() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
Rule rule = new FooRule();
|
||||
rule.setProperty(Rule.VIOLATION_SUPPRESS_XPATH_DESCRIPTOR, ".[@Image = 'Foo']");
|
||||
runTestFromString(TEST1, rule, rpt);
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithAnnotations() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
runTestFromString(TEST2, new FooRule(), rpt, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5"));
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithAnnotationsFullName() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
runTestFromString(TEST2_FULL, new FooRule(), rpt, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5"));
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithNOPMD() throws Throwable {
|
||||
Report rpt = new Report();
|
||||
runTestFromString(TEST3, new FooRule(), rpt);
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExclusionsInReportWithNOPMDEcmascript() throws Exception {
|
||||
Report rpt = new Report();
|
||||
Rule rule = new AbstractEcmascriptRule() {
|
||||
@Override
|
||||
public Object visit(ASTFunctionNode node, Object data) {
|
||||
EcmascriptRuleViolationFactory.INSTANCE.addViolation((RuleContext)data, this, node, "Test", null);
|
||||
return super.visit(node, data);
|
||||
}
|
||||
};
|
||||
String code = "function(x) // NOPMD test suppress\n"
|
||||
+ "{ x = 1; }";
|
||||
runTestFromString(code, rule, rpt, LanguageRegistry.getLanguage(EcmascriptLanguageModule.NAME).getDefaultVersion());
|
||||
assertTrue(rpt.isEmpty());
|
||||
assertEquals(1, rpt.getSuppressedRuleViolations().size());
|
||||
}
|
||||
|
||||
private static final String TEST1 =
|
||||
"public class Foo {}" + PMD.EOL;
|
||||
|
||||
private static final String TEST2 =
|
||||
"@SuppressWarnings(\"PMD\")" + PMD.EOL +
|
||||
"public class Foo {}";
|
||||
private static final String TEST2_FULL =
|
||||
"@java.lang.SuppressWarnings(\"PMD\")" + PMD.EOL +
|
||||
"public class Foo {}";
|
||||
|
||||
private static final String TEST3 =
|
||||
"public class Foo {} // NOPMD";
|
||||
|
||||
// Files are grouped together now.
|
||||
@Test
|
||||
public void testSortedReport_File() throws IOException {
|
||||
Report r = new Report();
|
||||
RuleContext ctx = new RuleContext();
|
||||
ctx.setSourceCodeFilename("foo");
|
||||
Node s = getNode(10, 5, ctx.getSourceCodeFilename());
|
||||
Node s = getNode(10, 5);
|
||||
Rule rule1 = new MockRule("name", "desc", "msg", "rulesetname");
|
||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule1, ctx, s, rule1.getMessage()));
|
||||
ctx.setSourceCodeFilename("bar");
|
||||
Node s1 = getNode(10, 5, ctx.getSourceCodeFilename());
|
||||
Node s1 = getNode(10, 5);
|
||||
Rule rule2 = new MockRule("name", "desc", "msg", "rulesetname");
|
||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule2, ctx, s1, rule2.getMessage()));
|
||||
Renderer rend = new XMLRenderer();
|
||||
@ -176,11 +87,11 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
Report r = new Report();
|
||||
RuleContext ctx = new RuleContext();
|
||||
ctx.setSourceCodeFilename("foo1");
|
||||
Node s = getNode(10, 5, ctx.getSourceCodeFilename());
|
||||
Node s = getNode(10, 5);
|
||||
Rule rule1 = new MockRule("rule2", "rule2", "msg", "rulesetname");
|
||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule1, ctx, s, rule1.getMessage()));
|
||||
ctx.setSourceCodeFilename("foo2");
|
||||
Node s1 = getNode(20, 5, ctx.getSourceCodeFilename());
|
||||
Node s1 = getNode(20, 5);
|
||||
Rule rule2 = new MockRule("rule1", "rule1", "msg", "rulesetname");
|
||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule2, ctx, s1, rule2.getMessage()));
|
||||
Renderer rend = new XMLRenderer();
|
||||
@ -195,7 +106,7 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
violationSemaphore = false;
|
||||
RuleContext ctx = new RuleContext();
|
||||
ctx.setSourceCodeFilename("file");
|
||||
Node s = getNode(5, 5, ctx.getSourceCodeFilename());
|
||||
Node s = getNode(5, 5);
|
||||
Rule rule1 = new MockRule("name", "desc", "msg", "rulesetname");
|
||||
rpt.addRuleViolation(new ParametricRuleViolation<Node>(rule1, ctx, s, rule1.getMessage()));
|
||||
assertTrue(violationSemaphore);
|
||||
@ -211,13 +122,13 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
Report r = new Report();
|
||||
RuleContext ctx = new RuleContext();
|
||||
ctx.setSourceCodeFilename("foo1");
|
||||
Node s = getNode(5, 5, ctx.getSourceCodeFilename());
|
||||
Node s = getNode(5, 5);
|
||||
Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
|
||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule, ctx, s, rule.getMessage()));
|
||||
ctx.setSourceCodeFilename("foo2");
|
||||
Rule mr = new MockRule("rule1", "rule1", "msg", "rulesetname");
|
||||
Node s1 = getNode(20, 5, ctx.getSourceCodeFilename());
|
||||
Node s2 = getNode(30, 5, ctx.getSourceCodeFilename());
|
||||
Node s1 = getNode(20, 5);
|
||||
Node s2 = getNode(30, 5);
|
||||
r.addRuleViolation(new ParametricRuleViolation<Node>(mr, ctx, s1, mr.getMessage()));
|
||||
r.addRuleViolation(new ParametricRuleViolation<Node>(mr, ctx, s2, mr.getMessage()));
|
||||
Map<String, Integer> summary = r.getSummary();
|
||||
@ -231,9 +142,9 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
Report r = new Report();
|
||||
RuleContext ctx = new RuleContext();
|
||||
Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
|
||||
Node node1 = getNode(5, 5, ctx.getSourceCodeFilename(), true);
|
||||
Node node1 = getNode(5, 5, true);
|
||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule, ctx, node1, rule.getMessage()));
|
||||
Node node2 = getNode(5, 6, ctx.getSourceCodeFilename(), true);
|
||||
Node node2 = getNode(5, 6, true);
|
||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule, ctx, node2, rule.getMessage()));
|
||||
|
||||
Iterator<RuleViolation> violations = r.iterator();
|
||||
@ -253,7 +164,7 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
assertEquals(2, treeCount);
|
||||
}
|
||||
|
||||
public static Node getNode(int line, int column, String scopeName){
|
||||
private static Node getNode(int line, int column){
|
||||
DummyNode s = new DummyNode(2);
|
||||
DummyNode parent = new DummyNode(1);
|
||||
parent.testingOnly__setBeginLine(line);
|
||||
@ -264,8 +175,8 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
return s;
|
||||
}
|
||||
|
||||
public static Node getNode(int line, int column, String scopeName, boolean nextLine) {
|
||||
DummyNode s = (DummyNode)getNode(line, column, scopeName);
|
||||
private static Node getNode(int line, int column, boolean nextLine) {
|
||||
DummyNode s = (DummyNode)getNode(line, column);
|
||||
if (nextLine) {
|
||||
s.testingOnly__setBeginLine(line + 1);
|
||||
s.testingOnly__setBeginColumn(column + 4);
|
||||
@ -273,7 +184,7 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
return s;
|
||||
}
|
||||
|
||||
public static String render(Renderer renderer, Report report) throws IOException {
|
||||
private static String render(Renderer renderer, Report report) throws IOException {
|
||||
StringWriter writer = new StringWriter();
|
||||
renderer.setWriter(writer);
|
||||
renderer.start();
|
||||
@ -281,9 +192,4 @@ public class ReportTest extends RuleTst implements ReportListener {
|
||||
renderer.end();
|
||||
return writer.toString();
|
||||
}
|
||||
|
||||
public static junit.framework.Test suite() {
|
||||
return new JUnit4TestAdapter(ReportTest.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,7 +10,6 @@ import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
@ -18,19 +17,18 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.pmd.lang.Dummy2LanguageModule;
|
||||
import net.sourceforge.pmd.lang.DummyLanguageModule;
|
||||
import net.sourceforge.pmd.lang.LanguageRegistry;
|
||||
import net.sourceforge.pmd.lang.LanguageVersionHandler;
|
||||
import net.sourceforge.pmd.lang.ecmascript.EcmascriptLanguageModule;
|
||||
import net.sourceforge.pmd.lang.java.JavaLanguageModule;
|
||||
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
|
||||
import net.sourceforge.pmd.lang.ast.DummyNode;
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.rule.MockRule;
|
||||
import net.sourceforge.pmd.lang.rule.RuleReference;
|
||||
import net.sourceforge.pmd.testframework.RuleTst;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class RuleSetTest extends RuleTst {
|
||||
public class RuleSetTest {
|
||||
|
||||
private String javaCode = "public class Test { }";
|
||||
|
||||
@ -38,17 +36,19 @@ public class RuleSetTest extends RuleTst {
|
||||
public void testNoDFA() {
|
||||
RuleSet rs = new RuleSet();
|
||||
MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
|
||||
mock.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||
rs.addRule(mock);
|
||||
assertFalse(rs.usesDFA(LanguageRegistry.getLanguage(JavaLanguageModule.NAME)));
|
||||
assertFalse(rs.usesDFA(LanguageRegistry.getLanguage(DummyLanguageModule.NAME)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIncludesRuleWithDFA() {
|
||||
RuleSet rs = new RuleSet();
|
||||
MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
|
||||
mock.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||
mock.setUsesDFA();
|
||||
rs.addRule(mock);
|
||||
assertTrue(rs.usesDFA(LanguageRegistry.getLanguage(JavaLanguageModule.NAME)));
|
||||
assertTrue(rs.usesDFA(LanguageRegistry.getLanguage(DummyLanguageModule.NAME)));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -221,19 +221,19 @@ public class RuleSetTest extends RuleTst {
|
||||
|
||||
Rule rule = new MockRule();
|
||||
|
||||
rule.setLanguage(LanguageRegistry.getLanguage(EcmascriptLanguageModule.NAME));
|
||||
assertFalse("Different languages should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5")));
|
||||
rule.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||
assertFalse("Different languages should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(Dummy2LanguageModule.NAME).getDefaultVersion()));
|
||||
|
||||
rule.setLanguage(LanguageRegistry.getLanguage(JavaLanguageModule.NAME));
|
||||
assertTrue("Same language with no min/max should apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5")));
|
||||
rule.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||
assertTrue("Same language with no min/max should apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.5")));
|
||||
|
||||
rule.setMinimumLanguageVersion(LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5"));
|
||||
assertTrue("Same language with valid min only should apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5")));
|
||||
rule.setMinimumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.5"));
|
||||
assertTrue("Same language with valid min only should apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.5")));
|
||||
|
||||
rule.setMaximumLanguageVersion(LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.6"));
|
||||
assertTrue("Same language with valid min and max should apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5")));
|
||||
assertFalse("Same language with outside range of min/max should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.4")));
|
||||
assertFalse("Same language with outside range of min/max should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.7")));
|
||||
rule.setMaximumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.6"));
|
||||
assertTrue("Same language with valid min and max should apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.5")));
|
||||
assertFalse("Same language with outside range of min/max should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.4")));
|
||||
assertFalse("Same language with outside range of min/max should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.7")));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -358,7 +358,10 @@ public class RuleSetTest extends RuleTst {
|
||||
|
||||
RuleSet ruleSet1 = new RuleSet();
|
||||
ruleSet1.setName("RuleSet1");
|
||||
Rule rule = findRule("java-empty", "EmptyIfStmt");
|
||||
Rule rule = new FooRule();
|
||||
rule.setName("FooRule1");
|
||||
rule.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||
rule.addRuleChainVisit("dummy node");
|
||||
assertTrue("RuleChain rule", rule.usesRuleChain());
|
||||
ruleSet1.addRule(rule);
|
||||
|
||||
@ -377,7 +380,8 @@ public class RuleSetTest extends RuleTst {
|
||||
ctx.setReport(r);
|
||||
ctx.setSourceCodeFilename(file.getName());
|
||||
ctx.setSourceCodeFile(file);
|
||||
p.getSourceCodeProcessor().processSourceCode(new StringReader(TEST1), ruleSets, ctx);
|
||||
ctx.setLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getDefaultVersion());
|
||||
ruleSets.apply(makeCompilationUnits(), ctx, LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||
assertEquals("Violations", 2, r.size());
|
||||
|
||||
// One violation
|
||||
@ -392,11 +396,11 @@ public class RuleSetTest extends RuleTst {
|
||||
|
||||
r = new Report();
|
||||
ctx.setReport(r);
|
||||
p.getSourceCodeProcessor().processSourceCode(new StringReader(TEST1), ruleSets, ctx);
|
||||
ruleSets.apply(makeCompilationUnits(), ctx, LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||
assertEquals("Violations", 1, r.size());
|
||||
}
|
||||
|
||||
protected void verifyRuleSet(RuleSet IUT, int size, Set values) throws Throwable {
|
||||
private void verifyRuleSet(RuleSet IUT, int size, Set values) throws Throwable {
|
||||
|
||||
RuleContext context = new RuleContext();
|
||||
Set<RuleViolation> reportedValues = new HashSet<RuleViolation>();
|
||||
@ -420,22 +424,13 @@ public class RuleSetTest extends RuleTst {
|
||||
}
|
||||
}
|
||||
|
||||
protected List<ASTCompilationUnit> makeCompilationUnits() throws Throwable {
|
||||
List<ASTCompilationUnit> RC = new ArrayList<ASTCompilationUnit>();
|
||||
LanguageVersionHandler languageVersionHandler = LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getDefaultVersion().getLanguageVersionHandler();
|
||||
ASTCompilationUnit cu = (ASTCompilationUnit) languageVersionHandler.getParser(
|
||||
languageVersionHandler.getDefaultParserOptions()).parse(null, new StringReader(javaCode));
|
||||
RC.add(cu);
|
||||
return RC;
|
||||
}
|
||||
|
||||
private static final String TEST1 = "public class Foo {" + PMD.EOL +
|
||||
" public void foo() {" + PMD.EOL +
|
||||
" if (true) { }" + PMD.EOL +
|
||||
" }" + PMD.EOL +
|
||||
"}" + PMD.EOL;
|
||||
|
||||
public static junit.framework.Test suite() {
|
||||
return new junit.framework.JUnit4TestAdapter(RuleSetTest.class);
|
||||
private List<Node> makeCompilationUnits() {
|
||||
List<Node> RC = new ArrayList<Node>();
|
||||
DummyNode node = new DummyNode(1);
|
||||
node.testingOnly__setBeginLine(1);
|
||||
node.testingOnly__setBeginColumn(1);
|
||||
node.setImage("Foo");
|
||||
RC.add(node);
|
||||
return RC;
|
||||
}
|
||||
}
|
||||
|
@ -3,10 +3,15 @@
|
||||
*/
|
||||
package net.sourceforge.pmd.lang;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.pmd.Rule;
|
||||
import net.sourceforge.pmd.RuleContext;
|
||||
import net.sourceforge.pmd.RuleViolation;
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor;
|
||||
import net.sourceforge.pmd.lang.rule.AbstractRuleViolationFactory;
|
||||
import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
|
||||
|
||||
@ -20,7 +25,7 @@ public class DummyLanguageModule extends BaseLanguageModule {
|
||||
public static final String TERSE_NAME = "dummy";
|
||||
|
||||
public DummyLanguageModule() {
|
||||
super(NAME, null, TERSE_NAME, null, "dummy");
|
||||
super(NAME, null, TERSE_NAME, DummyRuleChainVisitor.class, "dummy");
|
||||
addVersion("1.0", new Handler(), true);
|
||||
addVersion("1.1", new Handler(), false);
|
||||
addVersion("1.2", new Handler(), false);
|
||||
@ -32,6 +37,24 @@ public class DummyLanguageModule extends BaseLanguageModule {
|
||||
addVersion("1.8", new Handler(), false);
|
||||
}
|
||||
|
||||
public static class DummyRuleChainVisitor extends AbstractRuleChainVisitor {
|
||||
@Override
|
||||
protected void visit(Rule rule, Node node, RuleContext ctx) {
|
||||
rule.apply(Arrays.asList(node), ctx);
|
||||
}
|
||||
@Override
|
||||
protected void indexNodes(List<Node> nodes, RuleContext ctx) {
|
||||
for (Node n : nodes) {
|
||||
indexNode(n);
|
||||
List<Node> childs = new ArrayList<Node>();
|
||||
for (int i = 0; i < n.jjtGetNumChildren(); i++) {
|
||||
childs.add(n.jjtGetChild(i));
|
||||
}
|
||||
indexNodes(childs, ctx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class Handler extends AbstractLanguageVersionHandler {
|
||||
@Override
|
||||
public RuleViolationFactory getRuleViolationFactory() {
|
||||
|
Reference in New Issue
Block a user