1   package test.net.sourceforge.pmd.properties;
2   
3   import junit.framework.TestCase;
4   import net.sourceforge.pmd.PropertyDescriptor;
5   import net.sourceforge.pmd.util.CollectionUtil;
6   
7   /***
8    * 
9    * @author Brian Remedios
10   */
11  public abstract class AbstractPropertyDescriptorTester extends TestCase {
12  
13  	private static final int maxCardinality = 10;
14  	
15  	public static final String punctuationChars  = "!@#$%^&*()_-+=[]{}//|;:'\",.<>/?`~";
16  	public static final String whitespaceChars   = " \t\n";
17  	public static final String digitChars 		 = "0123456789";
18  	public static final String alphaChars 		 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmniopqrstuvwxyz";
19  	public static final String alphaNumericChars = digitChars + alphaChars;
20  	public static final String allChars			 = punctuationChars + whitespaceChars + alphaNumericChars;
21  
22  	
23  	protected AbstractPropertyDescriptorTester() { }
24  	
25  	/***
26  	 * Method createValue.
27  	 * @param count int
28  	 * @return Object
29  	 */
30  	protected abstract Object createValue(int count);
31  	/***
32  	 * Method createProperty.
33  	 * @param maxCount int
34  	 * @return PropertyDescriptor
35  	 */
36  	protected abstract PropertyDescriptor createProperty(int maxCount);
37  	
38  	public void testAsDelimitedString() {
39  		
40  		Object testValue = createValue(maxCardinality);
41  		PropertyDescriptor pmdProp = createProperty(maxCardinality);
42  		
43  		String storeValue = pmdProp.asDelimitedString(testValue);
44  		
45  		Object returnedValue = pmdProp.valueFrom(storeValue);
46  		
47  		assertTrue(CollectionUtil.areEqual(returnedValue, testValue));
48  	}
49  	
50  	public void testValueFrom() {
51  		
52  		Object testValue = createValue(1);
53  		PropertyDescriptor pmdProp = createProperty(1);
54  		
55  		String storeValue = pmdProp.asDelimitedString(testValue);
56  		
57  		Object returnedValue = pmdProp.valueFrom(storeValue);
58  		
59  		assertTrue(CollectionUtil.areEqual(returnedValue, testValue));
60  	}
61  	
62  	
63  	public void testErrorFor() {
64  		
65  		Object testValue = createValue(1);
66  		PropertyDescriptor pmdProp = createProperty(1);
67  		String errorMsg = pmdProp.errorFor(testValue);
68  		assertTrue(errorMsg == null);
69  		
70  		testValue = createValue(maxCardinality);
71  		pmdProp = createProperty(maxCardinality);
72  		errorMsg = pmdProp.errorFor(testValue);
73  		assertTrue(errorMsg == null);
74  	}
75  	
76  	public void testType() {
77  		
78  		PropertyDescriptor pmdProp = createProperty(1);
79  
80  		assertTrue(pmdProp.type() != null);
81  	}
82  	
83  	/***
84  	 * Method randomInt.
85  	 * @return int
86  	 */
87  	public static int randomInt() {
88  		
89  		int randomVal = (int) (Math.random() * 100 + 1D);
90  		return randomVal + (int) (Math.random() * 100000D);
91  	}
92  	
93  	/***
94  	 * Method randomInt.
95  	 * @param min int
96  	 * @param max int
97  	 * @return int
98  	 */
99  	public static int randomInt(int min, int max) {
100 		if (max < min) max = min;
101 		int range = Math.abs(max - min);
102 		int x = (int) ((range * Math.random()) + .5);
103 		return x + min;
104 	}
105 	
106 	/***
107 	 * Method randomChar.
108 	 * @param characters char[]
109 	 * @return char
110 	 */
111 	public static char randomChar(char[] characters) {
112 		return characters[randomInt(0, characters.length-1)];
113 	}
114 	
115 	/***
116 	 * Method randomChoice.
117 	 * @param items Object[]
118 	 * @return Object
119 	 */
120 	public static Object randomChoice(Object[] items) {
121 		return items[randomInt(0, items.length-1)];
122 	}
123 	
124 	/***
125 	 * Method filter.
126 	 * @param chars char[]
127 	 * @param removeChar char
128 	 * @return char[]
129 	 */
130 	protected static final char[] filter(char[] chars, char removeChar) {
131 		int count = 0;
132 		for (int i=0; i<chars.length; i++) if (chars[i] == removeChar) count++;
133 		char[] results = new char[chars.length - count];
134 		
135 		int index = 0;
136 		for (int i=0; i<chars.length; i++) {
137 			if (chars[i] != removeChar) results[index++] = chars[i];		
138 		}
139 		return results;
140 	}
141 }