More fixes - some tests simply moved to java module

This commit is contained in:
Andreas Dangel
2014-10-05 18:46:34 +02:00
parent 5c548570f6
commit 563a41afd7
8 changed files with 234 additions and 175 deletions

View File

@ -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);

View 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";
}
}

View 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";
}

View File

@ -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) {

View File

@ -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());
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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() {