diff --git a/pmd/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java similarity index 91% rename from pmd/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java rename to pmd-java/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java index a2ce661637..7526e7807c 100644 --- a/pmd/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java @@ -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); diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/FooRule.java b/pmd-java/src/test/java/net/sourceforge/pmd/FooRule.java new file mode 100644 index 0000000000..b771674f96 --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/FooRule.java @@ -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"; + } +} diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/ReportTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/ReportTest.java new file mode 100644 index 0000000000..4bccd0043a --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/ReportTest.java @@ -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"; +} diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/SuppressWarningsTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/SuppressWarningsTest.java index bc0895f79d..4fc31eb373 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/SuppressWarningsTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/SuppressWarningsTest.java @@ -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) { diff --git a/pmd-javascript/src/test/java/net/sourceforge/pmd/ReportTest.java b/pmd-javascript/src/test/java/net/sourceforge/pmd/ReportTest.java new file mode 100644 index 0000000000..0e6531a08a --- /dev/null +++ b/pmd-javascript/src/test/java/net/sourceforge/pmd/ReportTest.java @@ -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()); + } +} diff --git a/pmd/src/test/java/net/sourceforge/pmd/ReportTest.java b/pmd/src/test/java/net/sourceforge/pmd/ReportTest.java index 0d00dbc611..e71b7423f0 100644 --- a/pmd/src/test/java/net/sourceforge/pmd/ReportTest.java +++ b/pmd/src/test/java/net/sourceforge/pmd/ReportTest.java @@ -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(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(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(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(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(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(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(mr, ctx, s1, mr.getMessage())); r.addRuleViolation(new ParametricRuleViolation(mr, ctx, s2, mr.getMessage())); Map 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(rule, ctx, node1, rule.getMessage())); - Node node2 = getNode(5, 6, ctx.getSourceCodeFilename(), true); + Node node2 = getNode(5, 6, true); r.addRuleViolation(new ParametricRuleViolation(rule, ctx, node2, rule.getMessage())); Iterator 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); - } - } diff --git a/pmd/src/test/java/net/sourceforge/pmd/RuleSetTest.java b/pmd/src/test/java/net/sourceforge/pmd/RuleSetTest.java index 307ce59a28..3832367e9f 100644 --- a/pmd/src/test/java/net/sourceforge/pmd/RuleSetTest.java +++ b/pmd/src/test/java/net/sourceforge/pmd/RuleSetTest.java @@ -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 reportedValues = new HashSet(); @@ -420,22 +424,13 @@ public class RuleSetTest extends RuleTst { } } - protected List makeCompilationUnits() throws Throwable { - List RC = new ArrayList(); - 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 makeCompilationUnits() { + List RC = new ArrayList(); + DummyNode node = new DummyNode(1); + node.testingOnly__setBeginLine(1); + node.testingOnly__setBeginColumn(1); + node.setImage("Foo"); + RC.add(node); + return RC; } } diff --git a/pmd/src/test/java/net/sourceforge/pmd/lang/DummyLanguageModule.java b/pmd/src/test/java/net/sourceforge/pmd/lang/DummyLanguageModule.java index be4e6f72f5..10ed64da6d 100644 --- a/pmd/src/test/java/net/sourceforge/pmd/lang/DummyLanguageModule.java +++ b/pmd/src/test/java/net/sourceforge/pmd/lang/DummyLanguageModule.java @@ -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 nodes, RuleContext ctx) { + for (Node n : nodes) { + indexNode(n); + List childs = new ArrayList(); + 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() {