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