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 java.io.StringReader;
|
||||||
|
|
||||||
import junit.framework.JUnit4TestAdapter;
|
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.RuleTst;
|
||||||
import net.sourceforge.pmd.testframework.TestDescriptor;
|
import net.sourceforge.pmd.testframework.TestDescriptor;
|
||||||
|
|
||||||
@ -38,7 +40,7 @@ import org.junit.Test;
|
|||||||
Report r = new Report();
|
Report r = new Report();
|
||||||
ctx.setReport(r);
|
ctx.setReport(r);
|
||||||
ctx.setSourceCodeFilename("n/a");
|
ctx.setSourceCodeFilename("n/a");
|
||||||
ctx.setLanguageVersion(DEFAULT_LANGUAGE_VERSION);
|
ctx.setLanguageVersion(LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getDefaultVersion());
|
||||||
RuleSet rules = new RuleSet();
|
RuleSet rules = new RuleSet();
|
||||||
rules.addRule(rule);
|
rules.addRule(rule);
|
||||||
p.getSourceCodeProcessor().processSourceCode(new StringReader(TEST3), new RuleSets(rules), ctx);
|
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 static org.junit.Assert.assertEquals;
|
||||||
import junit.framework.JUnit4TestAdapter;
|
import junit.framework.JUnit4TestAdapter;
|
||||||
|
import net.sourceforge.pmd.FooRule;
|
||||||
import net.sourceforge.pmd.PMD;
|
import net.sourceforge.pmd.PMD;
|
||||||
import net.sourceforge.pmd.Report;
|
import net.sourceforge.pmd.Report;
|
||||||
import net.sourceforge.pmd.lang.LanguageRegistry;
|
import net.sourceforge.pmd.lang.LanguageRegistry;
|
||||||
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
|
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
|
||||||
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
|
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.lang.java.rule.AbstractJavaRule;
|
||||||
import net.sourceforge.pmd.testframework.RuleTst;
|
import net.sourceforge.pmd.testframework.RuleTst;
|
||||||
|
|
||||||
@ -19,29 +19,6 @@ import org.junit.Test;
|
|||||||
|
|
||||||
public class SuppressWarningsTest extends RuleTst {
|
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 {
|
private static class BarRule extends AbstractJavaRule {
|
||||||
@Override
|
@Override
|
||||||
public Object visit(ASTCompilationUnit cu, Object ctx) {
|
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.Iterator;
|
||||||
import java.util.Map;
|
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.DummyNode;
|
||||||
import net.sourceforge.pmd.lang.ast.Node;
|
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.MockRule;
|
||||||
import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
|
import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
|
||||||
import net.sourceforge.pmd.renderers.Renderer;
|
import net.sourceforge.pmd.renderers.Renderer;
|
||||||
import net.sourceforge.pmd.renderers.XMLRenderer;
|
import net.sourceforge.pmd.renderers.XMLRenderer;
|
||||||
import net.sourceforge.pmd.stat.Metric;
|
import net.sourceforge.pmd.stat.Metric;
|
||||||
import net.sourceforge.pmd.testframework.RuleTst;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
|
||||||
public class ReportTest extends RuleTst implements ReportListener {
|
public class ReportTest implements ReportListener {
|
||||||
|
|
||||||
private boolean violationSemaphore;
|
private boolean violationSemaphore;
|
||||||
private boolean metricSemaphore;
|
private boolean metricSemaphore;
|
||||||
@ -44,13 +36,6 @@ public class ReportTest extends RuleTst implements ReportListener {
|
|||||||
metricSemaphore = true;
|
metricSemaphore = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testBasic() throws Throwable {
|
|
||||||
Report r = new Report();
|
|
||||||
runTestFromString(TEST1, new FooRule(), r);
|
|
||||||
assertFalse(r.isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMetric0() {
|
public void testMetric0() {
|
||||||
Report r = new Report();
|
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);
|
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.
|
// Files are grouped together now.
|
||||||
@Test
|
@Test
|
||||||
public void testSortedReport_File() throws IOException {
|
public void testSortedReport_File() throws IOException {
|
||||||
Report r = new Report();
|
Report r = new Report();
|
||||||
RuleContext ctx = new RuleContext();
|
RuleContext ctx = new RuleContext();
|
||||||
ctx.setSourceCodeFilename("foo");
|
ctx.setSourceCodeFilename("foo");
|
||||||
Node s = getNode(10, 5, ctx.getSourceCodeFilename());
|
Node s = getNode(10, 5);
|
||||||
Rule rule1 = new MockRule("name", "desc", "msg", "rulesetname");
|
Rule rule1 = new MockRule("name", "desc", "msg", "rulesetname");
|
||||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule1, ctx, s, rule1.getMessage()));
|
r.addRuleViolation(new ParametricRuleViolation<Node>(rule1, ctx, s, rule1.getMessage()));
|
||||||
ctx.setSourceCodeFilename("bar");
|
ctx.setSourceCodeFilename("bar");
|
||||||
Node s1 = getNode(10, 5, ctx.getSourceCodeFilename());
|
Node s1 = getNode(10, 5);
|
||||||
Rule rule2 = new MockRule("name", "desc", "msg", "rulesetname");
|
Rule rule2 = new MockRule("name", "desc", "msg", "rulesetname");
|
||||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule2, ctx, s1, rule2.getMessage()));
|
r.addRuleViolation(new ParametricRuleViolation<Node>(rule2, ctx, s1, rule2.getMessage()));
|
||||||
Renderer rend = new XMLRenderer();
|
Renderer rend = new XMLRenderer();
|
||||||
@ -176,11 +87,11 @@ public class ReportTest extends RuleTst implements ReportListener {
|
|||||||
Report r = new Report();
|
Report r = new Report();
|
||||||
RuleContext ctx = new RuleContext();
|
RuleContext ctx = new RuleContext();
|
||||||
ctx.setSourceCodeFilename("foo1");
|
ctx.setSourceCodeFilename("foo1");
|
||||||
Node s = getNode(10, 5, ctx.getSourceCodeFilename());
|
Node s = getNode(10, 5);
|
||||||
Rule rule1 = new MockRule("rule2", "rule2", "msg", "rulesetname");
|
Rule rule1 = new MockRule("rule2", "rule2", "msg", "rulesetname");
|
||||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule1, ctx, s, rule1.getMessage()));
|
r.addRuleViolation(new ParametricRuleViolation<Node>(rule1, ctx, s, rule1.getMessage()));
|
||||||
ctx.setSourceCodeFilename("foo2");
|
ctx.setSourceCodeFilename("foo2");
|
||||||
Node s1 = getNode(20, 5, ctx.getSourceCodeFilename());
|
Node s1 = getNode(20, 5);
|
||||||
Rule rule2 = new MockRule("rule1", "rule1", "msg", "rulesetname");
|
Rule rule2 = new MockRule("rule1", "rule1", "msg", "rulesetname");
|
||||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule2, ctx, s1, rule2.getMessage()));
|
r.addRuleViolation(new ParametricRuleViolation<Node>(rule2, ctx, s1, rule2.getMessage()));
|
||||||
Renderer rend = new XMLRenderer();
|
Renderer rend = new XMLRenderer();
|
||||||
@ -195,7 +106,7 @@ public class ReportTest extends RuleTst implements ReportListener {
|
|||||||
violationSemaphore = false;
|
violationSemaphore = false;
|
||||||
RuleContext ctx = new RuleContext();
|
RuleContext ctx = new RuleContext();
|
||||||
ctx.setSourceCodeFilename("file");
|
ctx.setSourceCodeFilename("file");
|
||||||
Node s = getNode(5, 5, ctx.getSourceCodeFilename());
|
Node s = getNode(5, 5);
|
||||||
Rule rule1 = new MockRule("name", "desc", "msg", "rulesetname");
|
Rule rule1 = new MockRule("name", "desc", "msg", "rulesetname");
|
||||||
rpt.addRuleViolation(new ParametricRuleViolation<Node>(rule1, ctx, s, rule1.getMessage()));
|
rpt.addRuleViolation(new ParametricRuleViolation<Node>(rule1, ctx, s, rule1.getMessage()));
|
||||||
assertTrue(violationSemaphore);
|
assertTrue(violationSemaphore);
|
||||||
@ -211,13 +122,13 @@ public class ReportTest extends RuleTst implements ReportListener {
|
|||||||
Report r = new Report();
|
Report r = new Report();
|
||||||
RuleContext ctx = new RuleContext();
|
RuleContext ctx = new RuleContext();
|
||||||
ctx.setSourceCodeFilename("foo1");
|
ctx.setSourceCodeFilename("foo1");
|
||||||
Node s = getNode(5, 5, ctx.getSourceCodeFilename());
|
Node s = getNode(5, 5);
|
||||||
Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
|
Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
|
||||||
r.addRuleViolation(new ParametricRuleViolation<Node>(rule, ctx, s, rule.getMessage()));
|
r.addRuleViolation(new ParametricRuleViolation<Node>(rule, ctx, s, rule.getMessage()));
|
||||||
ctx.setSourceCodeFilename("foo2");
|
ctx.setSourceCodeFilename("foo2");
|
||||||
Rule mr = new MockRule("rule1", "rule1", "msg", "rulesetname");
|
Rule mr = new MockRule("rule1", "rule1", "msg", "rulesetname");
|
||||||
Node s1 = getNode(20, 5, ctx.getSourceCodeFilename());
|
Node s1 = getNode(20, 5);
|
||||||
Node s2 = getNode(30, 5, ctx.getSourceCodeFilename());
|
Node s2 = getNode(30, 5);
|
||||||
r.addRuleViolation(new ParametricRuleViolation<Node>(mr, ctx, s1, mr.getMessage()));
|
r.addRuleViolation(new ParametricRuleViolation<Node>(mr, ctx, s1, mr.getMessage()));
|
||||||
r.addRuleViolation(new ParametricRuleViolation<Node>(mr, ctx, s2, mr.getMessage()));
|
r.addRuleViolation(new ParametricRuleViolation<Node>(mr, ctx, s2, mr.getMessage()));
|
||||||
Map<String, Integer> summary = r.getSummary();
|
Map<String, Integer> summary = r.getSummary();
|
||||||
@ -231,9 +142,9 @@ public class ReportTest extends RuleTst implements ReportListener {
|
|||||||
Report r = new Report();
|
Report r = new Report();
|
||||||
RuleContext ctx = new RuleContext();
|
RuleContext ctx = new RuleContext();
|
||||||
Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
|
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()));
|
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()));
|
r.addRuleViolation(new ParametricRuleViolation<Node>(rule, ctx, node2, rule.getMessage()));
|
||||||
|
|
||||||
Iterator<RuleViolation> violations = r.iterator();
|
Iterator<RuleViolation> violations = r.iterator();
|
||||||
@ -253,7 +164,7 @@ public class ReportTest extends RuleTst implements ReportListener {
|
|||||||
assertEquals(2, treeCount);
|
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 s = new DummyNode(2);
|
||||||
DummyNode parent = new DummyNode(1);
|
DummyNode parent = new DummyNode(1);
|
||||||
parent.testingOnly__setBeginLine(line);
|
parent.testingOnly__setBeginLine(line);
|
||||||
@ -264,8 +175,8 @@ public class ReportTest extends RuleTst implements ReportListener {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Node getNode(int line, int column, String scopeName, boolean nextLine) {
|
private static Node getNode(int line, int column, boolean nextLine) {
|
||||||
DummyNode s = (DummyNode)getNode(line, column, scopeName);
|
DummyNode s = (DummyNode)getNode(line, column);
|
||||||
if (nextLine) {
|
if (nextLine) {
|
||||||
s.testingOnly__setBeginLine(line + 1);
|
s.testingOnly__setBeginLine(line + 1);
|
||||||
s.testingOnly__setBeginColumn(column + 4);
|
s.testingOnly__setBeginColumn(column + 4);
|
||||||
@ -273,7 +184,7 @@ public class ReportTest extends RuleTst implements ReportListener {
|
|||||||
return s;
|
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();
|
StringWriter writer = new StringWriter();
|
||||||
renderer.setWriter(writer);
|
renderer.setWriter(writer);
|
||||||
renderer.start();
|
renderer.start();
|
||||||
@ -281,9 +192,4 @@ public class ReportTest extends RuleTst implements ReportListener {
|
|||||||
renderer.end();
|
renderer.end();
|
||||||
return writer.toString();
|
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 static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.StringReader;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -18,19 +17,18 @@ import java.util.Iterator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
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.LanguageRegistry;
|
||||||
import net.sourceforge.pmd.lang.LanguageVersionHandler;
|
import net.sourceforge.pmd.lang.ast.DummyNode;
|
||||||
import net.sourceforge.pmd.lang.ecmascript.EcmascriptLanguageModule;
|
import net.sourceforge.pmd.lang.ast.Node;
|
||||||
import net.sourceforge.pmd.lang.java.JavaLanguageModule;
|
|
||||||
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
|
|
||||||
import net.sourceforge.pmd.lang.rule.MockRule;
|
import net.sourceforge.pmd.lang.rule.MockRule;
|
||||||
import net.sourceforge.pmd.lang.rule.RuleReference;
|
import net.sourceforge.pmd.lang.rule.RuleReference;
|
||||||
import net.sourceforge.pmd.testframework.RuleTst;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
|
||||||
public class RuleSetTest extends RuleTst {
|
public class RuleSetTest {
|
||||||
|
|
||||||
private String javaCode = "public class Test { }";
|
private String javaCode = "public class Test { }";
|
||||||
|
|
||||||
@ -38,17 +36,19 @@ public class RuleSetTest extends RuleTst {
|
|||||||
public void testNoDFA() {
|
public void testNoDFA() {
|
||||||
RuleSet rs = new RuleSet();
|
RuleSet rs = new RuleSet();
|
||||||
MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
|
MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
|
||||||
|
mock.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||||
rs.addRule(mock);
|
rs.addRule(mock);
|
||||||
assertFalse(rs.usesDFA(LanguageRegistry.getLanguage(JavaLanguageModule.NAME)));
|
assertFalse(rs.usesDFA(LanguageRegistry.getLanguage(DummyLanguageModule.NAME)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIncludesRuleWithDFA() {
|
public void testIncludesRuleWithDFA() {
|
||||||
RuleSet rs = new RuleSet();
|
RuleSet rs = new RuleSet();
|
||||||
MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
|
MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
|
||||||
|
mock.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||||
mock.setUsesDFA();
|
mock.setUsesDFA();
|
||||||
rs.addRule(mock);
|
rs.addRule(mock);
|
||||||
assertTrue(rs.usesDFA(LanguageRegistry.getLanguage(JavaLanguageModule.NAME)));
|
assertTrue(rs.usesDFA(LanguageRegistry.getLanguage(DummyLanguageModule.NAME)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -221,19 +221,19 @@ public class RuleSetTest extends RuleTst {
|
|||||||
|
|
||||||
Rule rule = new MockRule();
|
Rule rule = new MockRule();
|
||||||
|
|
||||||
rule.setLanguage(LanguageRegistry.getLanguage(EcmascriptLanguageModule.NAME));
|
rule.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||||
assertFalse("Different languages should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5")));
|
assertFalse("Different languages should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(Dummy2LanguageModule.NAME).getDefaultVersion()));
|
||||||
|
|
||||||
rule.setLanguage(LanguageRegistry.getLanguage(JavaLanguageModule.NAME));
|
rule.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||||
assertTrue("Same language with no min/max should apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5")));
|
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"));
|
rule.setMinimumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.5"));
|
||||||
assertTrue("Same language with valid min only should apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.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"));
|
rule.setMaximumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.6"));
|
||||||
assertTrue("Same language with valid min and max should apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5")));
|
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(JavaLanguageModule.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.4")));
|
||||||
assertFalse("Same language with outside range of min/max should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.7")));
|
assertFalse("Same language with outside range of min/max should not apply", RuleSet.applies(rule, LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.7")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -358,7 +358,10 @@ public class RuleSetTest extends RuleTst {
|
|||||||
|
|
||||||
RuleSet ruleSet1 = new RuleSet();
|
RuleSet ruleSet1 = new RuleSet();
|
||||||
ruleSet1.setName("RuleSet1");
|
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());
|
assertTrue("RuleChain rule", rule.usesRuleChain());
|
||||||
ruleSet1.addRule(rule);
|
ruleSet1.addRule(rule);
|
||||||
|
|
||||||
@ -377,7 +380,8 @@ public class RuleSetTest extends RuleTst {
|
|||||||
ctx.setReport(r);
|
ctx.setReport(r);
|
||||||
ctx.setSourceCodeFilename(file.getName());
|
ctx.setSourceCodeFilename(file.getName());
|
||||||
ctx.setSourceCodeFile(file);
|
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());
|
assertEquals("Violations", 2, r.size());
|
||||||
|
|
||||||
// One violation
|
// One violation
|
||||||
@ -392,11 +396,11 @@ public class RuleSetTest extends RuleTst {
|
|||||||
|
|
||||||
r = new Report();
|
r = new Report();
|
||||||
ctx.setReport(r);
|
ctx.setReport(r);
|
||||||
p.getSourceCodeProcessor().processSourceCode(new StringReader(TEST1), ruleSets, ctx);
|
ruleSets.apply(makeCompilationUnits(), ctx, LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
|
||||||
assertEquals("Violations", 1, r.size());
|
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();
|
RuleContext context = new RuleContext();
|
||||||
Set<RuleViolation> reportedValues = new HashSet<RuleViolation>();
|
Set<RuleViolation> reportedValues = new HashSet<RuleViolation>();
|
||||||
@ -420,22 +424,13 @@ public class RuleSetTest extends RuleTst {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<ASTCompilationUnit> makeCompilationUnits() throws Throwable {
|
private List<Node> makeCompilationUnits() {
|
||||||
List<ASTCompilationUnit> RC = new ArrayList<ASTCompilationUnit>();
|
List<Node> RC = new ArrayList<Node>();
|
||||||
LanguageVersionHandler languageVersionHandler = LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getDefaultVersion().getLanguageVersionHandler();
|
DummyNode node = new DummyNode(1);
|
||||||
ASTCompilationUnit cu = (ASTCompilationUnit) languageVersionHandler.getParser(
|
node.testingOnly__setBeginLine(1);
|
||||||
languageVersionHandler.getDefaultParserOptions()).parse(null, new StringReader(javaCode));
|
node.testingOnly__setBeginColumn(1);
|
||||||
RC.add(cu);
|
node.setImage("Foo");
|
||||||
return RC;
|
RC.add(node);
|
||||||
}
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,15 @@
|
|||||||
*/
|
*/
|
||||||
package net.sourceforge.pmd.lang;
|
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.Rule;
|
||||||
import net.sourceforge.pmd.RuleContext;
|
import net.sourceforge.pmd.RuleContext;
|
||||||
import net.sourceforge.pmd.RuleViolation;
|
import net.sourceforge.pmd.RuleViolation;
|
||||||
import net.sourceforge.pmd.lang.ast.Node;
|
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.AbstractRuleViolationFactory;
|
||||||
import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
|
import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
|
||||||
|
|
||||||
@ -20,7 +25,7 @@ public class DummyLanguageModule extends BaseLanguageModule {
|
|||||||
public static final String TERSE_NAME = "dummy";
|
public static final String TERSE_NAME = "dummy";
|
||||||
|
|
||||||
public DummyLanguageModule() {
|
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.0", new Handler(), true);
|
||||||
addVersion("1.1", new Handler(), false);
|
addVersion("1.1", new Handler(), false);
|
||||||
addVersion("1.2", new Handler(), false);
|
addVersion("1.2", new Handler(), false);
|
||||||
@ -32,6 +37,24 @@ public class DummyLanguageModule extends BaseLanguageModule {
|
|||||||
addVersion("1.8", new Handler(), false);
|
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 {
|
public static class Handler extends AbstractLanguageVersionHandler {
|
||||||
@Override
|
@Override
|
||||||
public RuleViolationFactory getRuleViolationFactory() {
|
public RuleViolationFactory getRuleViolationFactory() {
|
||||||
|
Reference in New Issue
Block a user