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 static org.junit.Assert.assertEquals;
7   import static org.junit.Assert.assertFalse;
8   import static org.junit.Assert.assertNull;
9   import static org.junit.Assert.assertTrue;
10  import junit.framework.JUnit4TestAdapter;
11  import net.sourceforge.pmd.lang.Dummy2LanguageModule;
12  import net.sourceforge.pmd.lang.DummyLanguageModule;
13  import net.sourceforge.pmd.lang.LanguageRegistry;
14  import net.sourceforge.pmd.lang.rule.MockRule;
15  import net.sourceforge.pmd.lang.rule.RuleReference;
16  import net.sourceforge.pmd.lang.rule.properties.StringProperty;
17  
18  import org.junit.Test;
19  
20  public class RuleReferenceTest {
21  
22  	@Test
23  	public void testRuleSetReference() {
24  		RuleReference ruleReference = new RuleReference();
25  		RuleSetReference ruleSetReference = new RuleSetReference();
26  		ruleReference.setRuleSetReference(ruleSetReference);
27  		assertEquals("Not same rule set reference", ruleSetReference, ruleReference.getRuleSetReference());
28  	}
29  
30  	@Test
31  	public void testOverride() {
32  	    StringProperty PROPERTY1_DESCRIPTOR = new StringProperty("property1", "Test property", null, 0f);
33  		MockRule rule = new MockRule();
34  		rule.definePropertyDescriptor(PROPERTY1_DESCRIPTOR);
35  		rule.setLanguage(LanguageRegistry.getLanguage(Dummy2LanguageModule.NAME));
36  		rule.setName("name1");
37  		rule.setProperty(PROPERTY1_DESCRIPTOR, "value1");
38  		rule.setMessage("message1");
39  		rule.setDescription("description1");
40  		rule.addExample("example1");
41  		rule.setExternalInfoUrl("externalInfoUrl1");
42  		rule.setPriority(RulePriority.HIGH);
43  
44  		StringProperty PROPERTY2_DESCRIPTOR = new StringProperty("property2", "Test property", null, 0f);
45  		RuleReference ruleReference = new RuleReference();
46  		ruleReference.setRule(rule);
47  		ruleReference.definePropertyDescriptor(PROPERTY2_DESCRIPTOR);
48  		ruleReference.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
49  		ruleReference.setMinimumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.3"));
50  		ruleReference.setMaximumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.7"));
51  		ruleReference.setDeprecated(true);
52  		ruleReference.setName("name2");
53  		ruleReference.setProperty(PROPERTY1_DESCRIPTOR, "value2");
54  		ruleReference.setProperty(PROPERTY2_DESCRIPTOR, "value3");
55  		ruleReference.setMessage("message2");
56  		ruleReference.setDescription("description2");
57  		ruleReference.addExample("example2");
58  		ruleReference.setExternalInfoUrl("externalInfoUrl2");
59  		ruleReference.setPriority(RulePriority.MEDIUM_HIGH);
60  
61  		assertEquals("Override failed", LanguageRegistry.getLanguage(DummyLanguageModule.NAME), ruleReference.getLanguage());
62  		assertEquals("Override failed", LanguageRegistry.getLanguage(DummyLanguageModule.NAME), ruleReference.getOverriddenLanguage());
63  
64  		assertEquals("Override failed", LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.3"), ruleReference.getMinimumLanguageVersion());
65  		assertEquals("Override failed", LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.3"), ruleReference.getOverriddenMinimumLanguageVersion());
66  
67  		assertEquals("Override failed", LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.7"), ruleReference.getMaximumLanguageVersion());
68  		assertEquals("Override failed", LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.7"), ruleReference.getOverriddenMaximumLanguageVersion());
69  
70  		assertEquals("Override failed", false, ruleReference.getRule().isDeprecated());
71  		assertEquals("Override failed", true, ruleReference.isDeprecated());
72  		assertEquals("Override failed", true, ruleReference.isOverriddenDeprecated());
73  
74  		assertEquals("Override failed", "name2", ruleReference.getName());
75  		assertEquals("Override failed", "name2", ruleReference.getOverriddenName());
76  
77  		assertEquals("Override failed", "value2", ruleReference.getProperty(PROPERTY1_DESCRIPTOR));
78  		assertEquals("Override failed", "value3", ruleReference.getProperty(PROPERTY2_DESCRIPTOR));
79  		assertTrue("Override failed", ruleReference.getPropertyDescriptors().contains(PROPERTY1_DESCRIPTOR));
80  		assertTrue("Override failed", ruleReference.getPropertyDescriptors().contains(PROPERTY2_DESCRIPTOR));
81  		assertFalse("Override failed", ruleReference.getOverriddenPropertyDescriptors().contains(PROPERTY1_DESCRIPTOR));
82  		assertTrue("Override failed", ruleReference.getOverriddenPropertyDescriptors().contains(PROPERTY2_DESCRIPTOR));
83  		assertTrue("Override failed", ruleReference.getPropertiesByPropertyDescriptor().containsKey(PROPERTY1_DESCRIPTOR));
84  		assertTrue("Override failed", ruleReference.getPropertiesByPropertyDescriptor().containsKey(PROPERTY2_DESCRIPTOR));
85  		assertTrue("Override failed", ruleReference.getOverriddenPropertiesByPropertyDescriptor().containsKey(PROPERTY1_DESCRIPTOR));
86  		assertTrue("Override failed", ruleReference.getOverriddenPropertiesByPropertyDescriptor().containsKey(PROPERTY2_DESCRIPTOR));
87  
88  		assertEquals("Override failed", "message2", ruleReference.getMessage());
89  		assertEquals("Override failed", "message2", ruleReference.getOverriddenMessage());
90  
91  		assertEquals("Override failed", "description2", ruleReference.getDescription());
92  		assertEquals("Override failed", "description2", ruleReference.getOverriddenDescription());
93  
94  		assertEquals("Override failed", 2, ruleReference.getExamples().size());
95  		assertEquals("Override failed", "example1", ruleReference.getExamples().get(0));
96  		assertEquals("Override failed", "example2", ruleReference.getExamples().get(1));
97  		assertEquals("Override failed", "example2", ruleReference.getOverriddenExamples().get(0));
98  
99  		assertEquals("Override failed", "externalInfoUrl2", ruleReference.getExternalInfoUrl());
100 		assertEquals("Override failed", "externalInfoUrl2", ruleReference.getOverriddenExternalInfoUrl());
101 
102 		assertEquals("Override failed", RulePriority.MEDIUM_HIGH, ruleReference.getPriority());
103 		assertEquals("Override failed", RulePriority.MEDIUM_HIGH, ruleReference.getOverriddenPriority());
104 	}
105 
106 	@Test
107 	public void testNotOverride() {
108 	    StringProperty PROPERTY1_DESCRIPTOR = new StringProperty("property1", "Test property", null, 0f);
109 		MockRule rule = new MockRule();
110 		rule.definePropertyDescriptor(PROPERTY1_DESCRIPTOR);
111 		rule.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
112 		rule.setMinimumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.3"));
113 		rule.setMaximumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.7"));
114 		rule.setName("name1");
115 		rule.setProperty(PROPERTY1_DESCRIPTOR, "value1");
116 		rule.setMessage("message1");
117 		rule.setDescription("description1");
118 		rule.addExample("example1");
119 		rule.setExternalInfoUrl("externalInfoUrl1");
120 		rule.setPriority(RulePriority.HIGH);
121 
122 		RuleReference ruleReference = new RuleReference();
123 		ruleReference.setRule(rule);
124 		ruleReference.setLanguage(LanguageRegistry.getLanguage(DummyLanguageModule.NAME));
125 		ruleReference.setMinimumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.3"));
126 		ruleReference.setMaximumLanguageVersion(LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.7"));
127 		ruleReference.setDeprecated(false);
128 		ruleReference.setName("name1");
129 		ruleReference.setProperty(PROPERTY1_DESCRIPTOR, "value1");
130 		ruleReference.setMessage("message1");
131 		ruleReference.setDescription("description1");
132 		ruleReference.addExample("example1");
133 		ruleReference.setExternalInfoUrl("externalInfoUrl1");
134 		ruleReference.setPriority(RulePriority.HIGH);
135 
136 		assertEquals("Override failed", LanguageRegistry.getLanguage(DummyLanguageModule.NAME), ruleReference.getLanguage());
137 		assertNull("Override failed", ruleReference.getOverriddenLanguage());
138 
139 		assertEquals("Override failed", LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.3"), ruleReference.getMinimumLanguageVersion());
140 		assertNull("Override failed", ruleReference.getOverriddenMinimumLanguageVersion());
141 
142 		assertEquals("Override failed", LanguageRegistry.getLanguage(DummyLanguageModule.NAME).getVersion("1.7"), ruleReference.getMaximumLanguageVersion());
143 		assertNull("Override failed", ruleReference.getOverriddenMaximumLanguageVersion());
144 
145 		assertEquals("Override failed", false, ruleReference.isDeprecated());
146 		assertNull("Override failed", ruleReference.isOverriddenDeprecated());
147 
148 		assertEquals("Override failed", "name1", ruleReference.getName());
149 		assertNull("Override failed", ruleReference.getOverriddenName());
150 
151 		assertEquals("Override failed", "value1", ruleReference.getProperty(PROPERTY1_DESCRIPTOR));
152 
153 		assertEquals("Override failed", "message1", ruleReference.getMessage());
154 		assertNull("Override failed", ruleReference.getOverriddenMessage());
155 
156 		assertEquals("Override failed", "description1", ruleReference.getDescription());
157 		assertNull("Override failed", ruleReference.getOverriddenDescription());
158 
159 		assertEquals("Override failed", 1, ruleReference.getExamples().size());
160 		assertEquals("Override failed", "example1", ruleReference.getExamples().get(0));
161 		assertNull("Override failed", ruleReference.getOverriddenExamples());
162 
163 		assertEquals("Override failed", "externalInfoUrl1", ruleReference.getExternalInfoUrl());
164 		assertNull("Override failed", ruleReference.getOverriddenExternalInfoUrl());
165 
166 		assertEquals("Override failed", RulePriority.HIGH, ruleReference.getPriority());
167 		assertNull("Override failed", ruleReference.getOverriddenPriority());
168 	}
169 
170 	public static junit.framework.Test suite() {
171 		return new JUnit4TestAdapter(RuleReferenceTest.class);
172 	}
173 }