1   package test.net.sourceforge.pmd.properties;
2   
3   import net.sourceforge.pmd.AbstractRule;
4   import net.sourceforge.pmd.cpd.ReportException;
5   import net.sourceforge.pmd.util.CollectionUtil;
6   import test.net.sourceforge.pmd.testframework.SimpleAggregatorTst;
7   
8   public class PropertyAccessorTest extends SimpleAggregatorTst {
9   
10      private AbstractRule rule;
11  
12      public void setUp() {
13          rule = new NonRuleWithAllPropertyTypes();
14      }
15  
16      public static boolean areEqual(int[] a, int[] b) {
17      	if (a.length != b.length) return false;
18      	for (int i=0; i<a.length; i++) {
19      		if (a[i] != b[i]) return false;
20      	}
21      	return true;
22      }
23     
24      public static boolean areEqual(boolean[] a, boolean[] b) {
25      	if (a.length != b.length) return false;
26      	for (int i=0; i<a.length; i++) {
27      		if (a[i] != b[i]) return false;
28      	}
29      	return true;
30      }
31      
32      public void testIntegers() throws ReportException {
33  
34      	rule.setProperty(NonRuleWithAllPropertyTypes.singleInt, new Integer(0));
35          assertTrue(rule.getIntProperty(NonRuleWithAllPropertyTypes.singleInt) == 0);
36          
37      	rule.setProperties(NonRuleWithAllPropertyTypes.multiInt, new Object[] {new Integer(0), new Integer(1)});
38          assertTrue(areEqual(rule.getIntProperties(NonRuleWithAllPropertyTypes.multiInt), new int[]{0, 1}));
39          
40          boolean exceptionOccurred = false;
41          try {
42          	rule.setProperties(NonRuleWithAllPropertyTypes.singleInt, new Object[] {new Integer(0), new Integer(1)});
43          	} catch (Exception ex) {
44          		exceptionOccurred = true;
45          	}
46          assertTrue(exceptionOccurred);
47          
48          exceptionOccurred = false;
49          try {
50          	rule.setProperty(NonRuleWithAllPropertyTypes.multiInt, new Integer(0));
51          	} catch (Exception ex) {
52          		exceptionOccurred = true;
53          	}
54          assertTrue(exceptionOccurred);
55      }
56       
57      public void testBooleans() throws ReportException {
58  
59      	rule.setProperty(NonRuleWithAllPropertyTypes.singleBool, Boolean.FALSE);
60          assertFalse(rule.getBooleanProperty(NonRuleWithAllPropertyTypes.singleBool));
61          
62      	rule.setProperties(NonRuleWithAllPropertyTypes.multiBool, new Boolean[] {Boolean.TRUE, Boolean.FALSE});
63          assertTrue(areEqual(rule.getBooleanProperties(NonRuleWithAllPropertyTypes.multiBool), new boolean[]{true, false}));
64          
65          boolean exceptionOccurred = false;
66          try {
67          	rule.setProperties(NonRuleWithAllPropertyTypes.singleBool, new Boolean[] {Boolean.TRUE, Boolean.FALSE});
68          	} catch (Exception ex) {
69          		exceptionOccurred = true;
70          	}
71          assertTrue(exceptionOccurred);
72          
73          exceptionOccurred = false;
74          try {
75          	rule.setProperty(NonRuleWithAllPropertyTypes.multiBool, Boolean.TRUE);
76          	} catch (Exception ex) {
77          		exceptionOccurred = true;
78          	}
79          assertTrue(exceptionOccurred);
80      }
81      
82  //    public void testFloats() throws ReportException {
83  //
84  //    	rule.setProperty("singleFloat", new Float(0));
85  //        assertTrue(rule.getFloatProperty("singleFloat") == 0f);
86  //        
87  //    	rule.setProperties("multiBool", new Boolean[] {Boolean.TRUE, Boolean.FALSE});
88  //        assertTrue(areEqual(rule.getBooleanProperties("multiBool"), new boolean[]{true, false}));
89  //        
90  //        boolean exceptionOccurred = false;
91  //        try {
92  //        	rule.setProperties("singleBool", new Boolean[] {Boolean.TRUE, Boolean.FALSE});
93  //        	} catch (Exception ex) {
94  //        		exceptionOccurred = true;
95  //        	}
96  //        assertTrue(exceptionOccurred);
97  //        
98  //        exceptionOccurred = false;
99  //        try {
100 //        	rule.setProperty("multiBool", Boolean.TRUE);
101 //        	} catch (Exception ex) {
102 //        		exceptionOccurred = true;
103 //        	}
104 //        assertTrue(exceptionOccurred);
105 //    }
106     
107     public void testStrings() throws ReportException {
108 
109     	rule.setProperty(NonRuleWithAllPropertyTypes.singleStr, "brian");
110         assertEquals(rule.getStringProperty(NonRuleWithAllPropertyTypes.singleStr), "brian");
111         
112     	rule.setProperties(NonRuleWithAllPropertyTypes.multiStr, new String[] {"hello", "world"});
113     	assertTrue(CollectionUtil.arraysAreEqual(rule.getStringProperties(NonRuleWithAllPropertyTypes.multiStr),  new String[] {"hello", "world"}));
114         
115         boolean exceptionOccurred = false;
116         try {
117         	rule.setProperties(NonRuleWithAllPropertyTypes.singleStr, new String[] {"hello", "world"});
118         	} catch (Exception ex) {
119         		exceptionOccurred = true;
120         	}
121         assertTrue(exceptionOccurred);
122         
123         exceptionOccurred = false;
124         try {
125         	rule.setProperty(NonRuleWithAllPropertyTypes.multiStr, "brian");
126         	} catch (Exception ex) {
127         		exceptionOccurred = true;
128         	}
129         assertTrue(exceptionOccurred);
130     }
131 }