/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.properties; import java.util.ArrayList; import java.util.HashMap; import org.junit.Assume; import org.junit.Test; import net.sourceforge.pmd.PropertyDescriptor; import net.sourceforge.pmd.lang.rule.properties.EnumeratedMultiProperty; import net.sourceforge.pmd.lang.rule.properties.EnumeratedProperty; /** * Evaluates the functionality of the EnumeratedProperty descriptor by testing * its ability to catch creation errors (illegal args), flag invalid selections, * and serialize/deserialize selection options. * * @author Brian Remedios */ public class EnumeratedPropertyTest extends AbstractPropertyDescriptorTester { private static final String[] KEYS = new String[] { "map", "emptyArray", "list", "string", }; private static final Object[] VALUES = new Object[] { new HashMap(), new Object[0], new ArrayList(), "Hello World!", }; public EnumeratedPropertyTest() { super("Enum"); } /** * Method createValue. * * @param count * int * @return Object */ @Override protected Object createValue(int count) { if (count == 1) { return randomChoice(VALUES); } Object[] values = new Object[count]; for (int i = 0; i < values.length; i++) { values[i] = createValue(1); } return values; } /** * Returns a (count) number of values that are not in the set of legal * values. * * @param count * int * @return Object */ @Override protected Object createBadValue(int count) { if (count == 1) { return Integer.toString(randomInt()); // not in the set of values } Object[] values = new Object[count]; for (int i = 0; i < values.length; i++) { values[i] = createBadValue(1); } return values; } /** * Method createProperty. * * @param multiValue * boolean * @return PropertyDescriptor */ @Override protected PropertyDescriptor createProperty(boolean multiValue) { return multiValue ? new EnumeratedMultiProperty<>("testEnumerations", "Test enumerations with complex types", KEYS, VALUES, new int[] { 0, 1 }, 1.0f) : new EnumeratedProperty<>("testEnumerations", "Test enumerations with complex types", KEYS, VALUES, 0, 1.0f); } /** * Method createBadProperty. * * @param multiValue * boolean * @return PropertyDescriptor */ @Override protected PropertyDescriptor createBadProperty(boolean multiValue) { return multiValue ? new EnumeratedMultiProperty<>("testEnumerations", "Test enumerations with complex types", KEYS, new Object[0], new int[] { 99 }, 1.0f) : new EnumeratedProperty<>("testEnumerations", "Test enumerations with complex types", new String[0], VALUES, -1, 1.0f); } @Override @Test public void testFactorySingleValue() { Assume.assumeTrue("The EnumeratedProperty is not implemented completely yet", false); } @Override @Test public void testFactoryMultiValueCustomDelimiter() { Assume.assumeTrue("The EnumeratedProperty is not implemented completely yet", false); } @Override @Test public void testFactoryMultiValueDefaultDelimiter() { Assume.assumeTrue("The EnumeratedProperty is not implemented completely yet", false); } }