View Javadoc

1   package net.sourceforge.pmd.properties;
2   
3   import net.sourceforge.pmd.PropertyDescriptor;
4   import net.sourceforge.pmd.lang.rule.properties.StringMultiProperty;
5   import net.sourceforge.pmd.lang.rule.properties.StringProperty;
6   
7   /**
8    * Evaluates the functionality of the StringProperty descriptor by testing its ability to catch creation
9    * errors (illegal args), flag invalid strings per any specified expressions, and serialize/deserialize
10   * groups of strings onto/from a string buffer.
11   * 
12   * @author Brian Remedios
13   */
14  public class StringPropertyTest extends AbstractPropertyDescriptorTester {
15  
16  	private static final int maxStringLength = 52;
17  	private static final char delimiter = '|';
18  	private static final char[] charSet = filter(allChars.toCharArray(), delimiter);
19  	
20  	public StringPropertyTest() {
21  		super();
22  	}
23  	
24  	/**
25  	 * Method createValue.
26  	 * @param count int
27  	 * @return Object
28  	 */
29  	protected Object createValue(int count) {
30  
31  		if (count == 1) return newString();
32  		
33  		String[] values = new String[count];
34  		for (int i=0; i<count; i++) values[i] = (String)createValue(1);
35  		return values;
36  	}
37  
38  	/**
39  	 * Method createBadValue.
40  	 * @param count int
41  	 * @return Object
42  	 */
43  	protected Object createBadValue(int count) {
44  
45  		if (count == 1) return null;
46  		
47  		Object[] values = new Object[count];
48  		for (int i=0; i<count; i++) values[i] = createBadValue(1);
49  		return values;
50  	}
51  	
52  	/**
53  	 * Method newString.
54  	 * @return String
55  	 */
56  	private String newString() {
57  		
58  		int strLength = randomInt(0, maxStringLength);
59  		
60  		char[] chars = new char[strLength];
61  		for (int i=0; i<chars.length; i++) chars[i] = randomCharIn(charSet);
62  		return new String(chars);
63  	}
64  	
65  	/**
66  	 * Method randomCharIn.
67  	 * @param chars char[]
68  	 * @return char
69  	 */
70  	private char randomCharIn(char[] chars) {
71  		return randomChar(chars);
72  	}
73  	
74  	/**
75  	 * Method createProperty.
76  	 * @param multiValue boolean
77  	 * @return PropertyDescriptor
78  	 */
79  	protected PropertyDescriptor createProperty(boolean multiValue) {
80  		return multiValue ?
81  			new StringMultiProperty("testString", "Test string property", new String[] {"hello", "world"}, 1.0f, delimiter) :
82  			new StringProperty("testString", "Test string property", "brian", 1.0f);			
83  		}
84  
85  	/**
86  	 * Method createBadProperty.
87  	 * @param multiValue boolean
88  	 * @return PropertyDescriptor
89  	 */
90  	protected PropertyDescriptor createBadProperty(boolean multiValue) {
91  		return multiValue ?
92  			new StringMultiProperty("testString", "Test string property", new String[] {"hello", "world", "a"+delimiter+"b"}, 1.0f, delimiter) :
93  			new StringProperty("", "Test string property", "brian", 1.0f);			
94  		}
95  
96      public static junit.framework.Test suite() {
97          return new junit.framework.JUnit4TestAdapter(StringPropertyTest.class);
98      }
99  }