/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.renderers; import static org.junit.Assert.assertEquals; import org.junit.Test; import net.sourceforge.pmd.FooRule; import net.sourceforge.pmd.Report; import net.sourceforge.pmd.Report.ProcessingError; import net.sourceforge.pmd.ReportTest; import net.sourceforge.pmd.RuleContext; import net.sourceforge.pmd.RuleViolation; import net.sourceforge.pmd.RuleWithProperties; import net.sourceforge.pmd.lang.ast.DummyNode; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.rule.ParametricRuleViolation; public abstract class AbstractRendererTst { public abstract Renderer getRenderer(); public abstract String getExpected(); public String getExpectedWithProperties() { return getExpected(); } public abstract String getExpectedEmpty(); public abstract String getExpectedMultiple(); public String getExpectedError(ProcessingError error) { return ""; } public String filter(String expected) { return expected; } protected String getSourceCodeFilename() { return "n/a"; } @Test(expected = NullPointerException.class) public void testNullPassedIn() throws Exception { getRenderer().renderFileReport(null); } private Report reportOneViolation() { Report report = new Report(); report.addRuleViolation(newRuleViolation(1)); return report; } private Report reportTwoViolations() { Report report = new Report(); report.addRuleViolation(newRuleViolation(1)); report.addRuleViolation(newRuleViolation(2)); return report; } private RuleViolation newRuleViolation(int endColumn) { DummyNode node = createNode(endColumn); RuleContext ctx = new RuleContext(); ctx.setSourceCodeFilename(getSourceCodeFilename()); return new ParametricRuleViolation<Node>(new FooRule(), ctx, node, "blah"); } private static DummyNode createNode(int endColumn) { DummyNode node = new DummyNode(1); node.testingOnlySetBeginLine(1); node.testingOnlySetBeginColumn(1); node.testingOnlySetEndLine(1); node.testingOnlySetEndColumn(endColumn); return node; } @Test public void testRuleWithProperties() throws Exception { DummyNode node = createNode(1); RuleContext ctx = new RuleContext(); ctx.setSourceCodeFilename(getSourceCodeFilename()); Report report = new Report(); RuleWithProperties theRule = new RuleWithProperties(); theRule.setProperty(RuleWithProperties.STRING_PROPERTY_DESCRIPTOR, "the string value\nsecond line with \"quotes\""); report.addRuleViolation(new ParametricRuleViolation<Node>(theRule, ctx, node, "blah")); String rendered = ReportTest.render(getRenderer(), report); assertEquals(filter(getExpectedWithProperties()), filter(rendered)); } @Test public void testRenderer() throws Exception { Report rep = reportOneViolation(); String actual = ReportTest.render(getRenderer(), rep); assertEquals(filter(getExpected()), filter(actual)); } @Test public void testRendererEmpty() throws Exception { Report rep = new Report(); String actual = ReportTest.render(getRenderer(), rep); assertEquals(filter(getExpectedEmpty()), filter(actual)); } @Test public void testRendererMultiple() throws Exception { Report rep = reportTwoViolations(); String actual = ReportTest.render(getRenderer(), rep); assertEquals(filter(getExpectedMultiple()), filter(actual)); } @Test public void testError() throws Exception { Report rep = new Report(); Report.ProcessingError err = new Report.ProcessingError("Error", "file"); rep.addError(err); String actual = ReportTest.render(getRenderer(), rep); assertEquals(filter(getExpectedError(err)), filter(actual)); } }