/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd; import java.io.ByteArrayOutputStream; import java.util.Random; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import net.sourceforge.pmd.RuleSet.RuleSetBuilder; import net.sourceforge.pmd.lang.rule.RuleReference; /** * Unit test for {@link RuleSetWriter}. * */ public class RuleSetWriterTest { private ByteArrayOutputStream out; private RuleSetWriter writer; /** * Prepare the output stream. */ @Before public void setupOutputStream() { out = new ByteArrayOutputStream(); writer = new RuleSetWriter(out); } /** * Closes the output stream at the end. */ @After public void cleanupStream() { if (writer != null) { writer.close(); } } /** * Tests the exclude rule behavior. See bug #945. * * @throws Exception * any error */ @Test public void testWrite() throws Exception { RuleSet braces = new RuleSetFactory().createRuleSet("net/sourceforge/pmd/TestRuleset1.xml"); RuleSet ruleSet = new RuleSetBuilder(new Random().nextLong()) .addRuleSetByReference(braces, true, "MockRule2") .build(); writer.write(ruleSet); String written = out.toString("UTF-8"); Assert.assertTrue(written.contains("<exclude name=\"MockRule2\"")); } /** * Unit test for #1312 see https://sourceforge.net/p/pmd/bugs/1312/ * * @throws Exception * any error */ @Test public void testRuleReferenceOverriddenName() throws Exception { RuleSetFactory ruleSetFactory = new RuleSetFactory(); RuleSet rs = ruleSetFactory.createRuleSet("dummy-basic"); RuleSetReference ruleSetReference = new RuleSetReference("rulesets/dummy/basic.xml"); RuleReference ruleRef = new RuleReference(); ruleRef.setRule(rs.getRuleByName("DummyBasicMockRule")); ruleRef.setRuleSetReference(ruleSetReference); ruleRef.setName("Foo"); // override the name RuleSet ruleSet = ruleSetFactory.createSingleRuleRuleSet(ruleRef); writer.write(ruleSet); String written = out.toString("UTF-8"); Assert.assertTrue(written.contains("ref=\"rulesets/dummy/basic.xml/DummyBasicMockRule\"")); } }