View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd;
5   
6   import java.io.ByteArrayOutputStream;
7   
8   import net.sourceforge.pmd.lang.rule.RuleReference;
9   
10  import org.junit.After;
11  import org.junit.Assert;
12  import org.junit.Before;
13  import org.junit.Test;
14  
15  /**
16   * Unit test for {@link RuleSetWriter}.
17   *
18   */
19  public class RuleSetWriterTest {
20  
21      private ByteArrayOutputStream out;
22      private RuleSetWriter writer;
23  
24      /**
25       * Prepare the output stream.
26       */
27      @Before
28      public void setupOutputStream() {
29          out = new ByteArrayOutputStream();
30          writer = new RuleSetWriter(out);
31      }
32  
33      /**
34       * Closes the output stream at the end.
35       */
36      @After
37      public void cleanupStream() {
38          if (writer != null) {
39              writer.close();
40          }
41      }
42      /**
43       * Tests the exclude rule behavior.
44       * See bug #945.
45       * @throws Exception any error
46       */
47      @Test
48      public void testWrite() throws Exception {
49          RuleSet ruleSet = new RuleSet();
50          RuleSet braces = new RuleSetFactory().createRuleSet("net/sourceforge/pmd/TestRuleset1.xml");
51          ruleSet.addRuleSetByReference(braces, true, "MockRule2");
52  
53          writer.write(ruleSet);
54  
55          String written = out.toString("UTF-8");
56          Assert.assertTrue(written.contains("<exclude name=\"MockRule2\""));
57      }
58  
59      /**
60       * Unit test for #1312
61       * see https://sourceforge.net/p/pmd/bugs/1312/
62       * @throws Exception any error
63       */
64      @Test
65      public void testRuleReferenceOverriddenName() throws Exception {
66          RuleSetFactory ruleSetFactory = new RuleSetFactory();
67          RuleSet rs = ruleSetFactory.createRuleSet("dummy-basic");
68          RuleSetReference ruleSetReference = new RuleSetReference("rulesets/dummy/basic.xml");
69  
70          RuleReference ruleRef = new RuleReference();
71          ruleRef.setRule(rs.getRuleByName("DummyBasicMockRule"));
72          ruleRef.setRuleSetReference(ruleSetReference);
73          ruleRef.setName("Foo"); // override the name
74  
75          RuleSet ruleSet = new RuleSet();
76          ruleSet.addRule(ruleRef);
77  
78          writer.write(ruleSet);
79  
80          String written = out.toString("UTF-8");
81          Assert.assertTrue(written.contains("ref=\"rulesets/dummy/basic.xml/DummyBasicMockRule\""));
82      }
83  }