/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.properties;
import net.sourceforge.pmd.PropertyDescriptor;
import net.sourceforge.pmd.lang.rule.properties.DoubleMultiProperty;
import net.sourceforge.pmd.lang.rule.properties.DoubleProperty;
/**
* Evaluates the functionality of the DoubleProperty descriptor by testing its
* ability to catch creation errors (illegal args), flag out-of-range test
* values, and serialize/deserialize groups of double values onto/from a string
* buffer.
*
* @author Brian Remedios
*/
public class DoublePropertyTest extends AbstractPropertyDescriptorTester {
private static final double MIN = -10.0;
private static final double MAX = 100.0;
private static final double SHIFT = 5.0;
public DoublePropertyTest() {
super("Double");
}
/**
* Creates and returns (count) number of legal Double values
*
* @param count
* int
* @return Object
*/
@Override
protected Object createValue(int count) {
if (count == 1) {
return Double.valueOf(randomDouble(MIN, MAX));
}
Double[] values = new Double[count];
for (int i = 0; i < values.length; i++) {
values[i] = (Double) createValue(1);
}
return values;
}
/**
* Creates and returns (count) number of out-of-range values
*
* @param count
* int
* @return Object
*/
@Override
protected Object createBadValue(int count) {
if (count == 1) {
return Double.valueOf(
randomBool() ? randomDouble(MIN - SHIFT, MIN - 0.01) : randomDouble(MAX + 0.01, MAX + SHIFT));
}
Double[] values = new Double[count];
for (int i = 0; i < values.length; i++) {
values[i] = (Double) createBadValue(1);
}
return values;
}
/**
* Creates and returns a property with a (maxCount) value cardinality.
*
* @param multiValue
* boolean
* @return PropertyDescriptor
*/
@Override
protected PropertyDescriptor createProperty(boolean multiValue) {
return multiValue
? new DoubleMultiProperty("testDouble", "Test double property", MIN, MAX,
new Double[] { -1d, 0d, 1d, 2d }, 1.0f)
: new DoubleProperty("testDouble", "Test double property", MIN, MAX, 9.0, 1.0f);
}
/**
* Attempts to create a property with invalid constructor arguments.
*
* @param multiValue
* boolean
* @return PropertyDescriptor
*/
@Override
protected PropertyDescriptor createBadProperty(boolean multiValue) {
return multiValue
? new DoubleMultiProperty("testDouble", "Test double property", MIN, MAX,
new Double[] { MIN - SHIFT, MIN, MIN + SHIFT, MAX + SHIFT }, 1.0f)
: new DoubleProperty("testDouble", "Test double property", MAX, MIN, 9.0, 1.0f);
}
}