View Javadoc
1   package net.sourceforge.pmd.properties;
2   
3   import java.util.ArrayList;
4   import java.util.HashMap;
5   
6   import net.sourceforge.pmd.PropertyDescriptor;
7   import net.sourceforge.pmd.lang.rule.properties.EnumeratedMultiProperty;
8   import net.sourceforge.pmd.lang.rule.properties.EnumeratedProperty;
9   
10  import org.junit.Assume;
11  import org.junit.Test;
12  
13  /**
14   * Evaluates the functionality of the EnumeratedProperty descriptor by testing
15   * its ability to catch creation errors (illegal args), flag invalid selections,
16   * and serialize/deserialize selection options.
17   * 
18   * @author Brian Remedios
19   */
20  public class EnumeratedPropertyTest extends AbstractPropertyDescriptorTester {
21  
22      private static final String[] keys = new String[] { "map", "emptyArray", "list", "string", };
23  
24      private static final Object[] values = new Object[] { new HashMap(), new Object[0], new ArrayList(),
25              "Hello World!", };
26  
27      public EnumeratedPropertyTest() {
28          super("Enum");
29      }
30  
31      /**
32       * Method createValue.
33       * 
34       * @param count int
35       * @return Object
36       */
37      protected Object createValue(int count) {
38  
39          if (count == 1)
40              return randomChoice(values);
41  
42          Object[] values = new Object[count];
43          for (int i = 0; i < values.length; i++)
44              values[i] = createValue(1);
45          return values;
46      }
47  
48      /**
49       * Returns a (count) number of values that are not in the set of legal
50       * values.
51       * 
52       * @param count int
53       * @return Object
54       */
55      protected Object createBadValue(int count) {
56  
57          if (count == 1)
58              return Integer.toString(randomInt()); // not in the set of values
59  
60          Object[] values = new Object[count];
61          for (int i = 0; i < values.length; i++)
62              values[i] = createBadValue(1);
63          return values;
64      }
65  
66      /**
67       * Method createProperty.
68       * 
69       * @param multiValue boolean
70       * @return PropertyDescriptor
71       */
72      protected PropertyDescriptor createProperty(boolean multiValue) {
73  
74          return multiValue ? new EnumeratedMultiProperty<Object>("testEnumerations",
75                  "Test enumerations with complex types", keys, values, new int[] { 0, 1 }, 1.0f)
76                  : new EnumeratedProperty<Object>("testEnumerations", "Test enumerations with complex types", keys,
77                          values, 0, 1.0f);
78      }
79  
80      /**
81       * Method createBadProperty.
82       * 
83       * @param multiValue boolean
84       * @return PropertyDescriptor
85       */
86      protected PropertyDescriptor createBadProperty(boolean multiValue) {
87  
88          return multiValue ? new EnumeratedMultiProperty<Object>("testEnumerations",
89                  "Test enumerations with complex types", keys, new Object[0], new int[] { 99 }, 1.0f)
90                  : new EnumeratedProperty<Object>("testEnumerations", "Test enumerations with complex types",
91                          new String[0], values, -1, 1.0f);
92      }
93  
94      @Test
95      public void testFactorySingleValue() {
96          Assume.assumeTrue("The EnumeratedProperty is not implemented completely yet", false);
97      }
98  
99      @Test
100     public void testFactoryMultiValueCustomDelimiter() {
101         Assume.assumeTrue("The EnumeratedProperty is not implemented completely yet", false);
102     }
103 
104     @Test
105     public void testFactoryMultiValueDefaultDelimiter() {
106         Assume.assumeTrue("The EnumeratedProperty is not implemented completely yet", false);
107     }
108 }