/*
* Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see http://www.gnu.org/licenses/
*/
package com.bc.ceres.binding.validators;
import junit.framework.TestCase;
import com.bc.ceres.binding.*;
public class TypeValidatorTest extends TestCase {
private boolean booleanValue;
private char charValue;
private byte byteValue;
private short shortValue;
private int intValue;
private long longValue;
private float floatValue;
private double doubleValue;
private String stringValue;
private TestCase baseValue;
private TypeValidatorTest derivedValue;
public void testValidation() throws ValidationException {
final TypeValidator typeValidator = new TypeValidator();
final PropertyContainer propertyContainer = PropertyContainer.createObjectBacked(this);
String s;
s = "booleanValue";
testValid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testInvalid(typeValidator, propertyContainer, s, (byte)123);
testInvalid(typeValidator, propertyContainer, s, (short)123);
testInvalid(typeValidator, propertyContainer, s, 123);
testInvalid(typeValidator, propertyContainer, s, 123L);
testInvalid(typeValidator, propertyContainer, s, 123.0F);
testInvalid(typeValidator, propertyContainer, s, 123.0);
testInvalid(typeValidator, propertyContainer, s, null);
testInvalid(typeValidator, propertyContainer, s, "xyz");
testInvalid(typeValidator, propertyContainer, s, new TestCase(){});
testInvalid(typeValidator, propertyContainer, s, this);
s = "byteValue";
testInvalid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testValid(typeValidator, propertyContainer, s, (byte)123);
testInvalid(typeValidator, propertyContainer, s, (short)123);
testInvalid(typeValidator, propertyContainer, s, 123);
testInvalid(typeValidator, propertyContainer, s, 123L);
testInvalid(typeValidator, propertyContainer, s, 123.0F);
testInvalid(typeValidator, propertyContainer, s, 123.0);
testInvalid(typeValidator, propertyContainer, s, null);
testInvalid(typeValidator, propertyContainer, s, "xyz");
testInvalid(typeValidator, propertyContainer, s, new TestCase(){});
testInvalid(typeValidator, propertyContainer, s, this);
s = "shortValue";
testInvalid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testInvalid(typeValidator, propertyContainer, s, (byte)123);
testValid(typeValidator, propertyContainer, s, (short)123);
testInvalid(typeValidator, propertyContainer, s, 123);
testInvalid(typeValidator, propertyContainer, s, 123L);
testInvalid(typeValidator, propertyContainer, s, 123.0F);
testInvalid(typeValidator, propertyContainer, s, 123.0);
testInvalid(typeValidator, propertyContainer, s, null);
testInvalid(typeValidator, propertyContainer, s, "xyz");
testInvalid(typeValidator, propertyContainer, s, new TestCase(){});
testInvalid(typeValidator, propertyContainer, s, this);
s = "intValue";
testInvalid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testInvalid(typeValidator, propertyContainer, s, (byte)123);
testInvalid(typeValidator, propertyContainer, s, (short)123);
testValid(typeValidator, propertyContainer, s, 123);
testInvalid(typeValidator, propertyContainer, s, 123L);
testInvalid(typeValidator, propertyContainer, s, 123.0F);
testInvalid(typeValidator, propertyContainer, s, 123.0);
testInvalid(typeValidator, propertyContainer, s, null);
testInvalid(typeValidator, propertyContainer, s, "xyz");
testInvalid(typeValidator, propertyContainer, s, new TestCase(){});
testInvalid(typeValidator, propertyContainer, s, this);
s = "longValue";
testInvalid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testInvalid(typeValidator, propertyContainer, s, (byte)123);
testInvalid(typeValidator, propertyContainer, s, (short)123);
testInvalid(typeValidator, propertyContainer, s, 123);
testValid(typeValidator, propertyContainer, s, 123L);
testInvalid(typeValidator, propertyContainer, s, 123.0F);
testInvalid(typeValidator, propertyContainer, s, 123.0);
testInvalid(typeValidator, propertyContainer, s, null);
testInvalid(typeValidator, propertyContainer, s, "xyz");
testInvalid(typeValidator, propertyContainer, s, new TestCase(){});
testInvalid(typeValidator, propertyContainer, s, this);
s = "floatValue";
testInvalid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testInvalid(typeValidator, propertyContainer, s, (byte)123);
testInvalid(typeValidator, propertyContainer, s, (short)123);
testInvalid(typeValidator, propertyContainer, s, 123);
testInvalid(typeValidator, propertyContainer, s, 123L);
testValid(typeValidator, propertyContainer, s, 123.0F);
testInvalid(typeValidator, propertyContainer, s, 123.0);
testInvalid(typeValidator, propertyContainer, s, null);
testInvalid(typeValidator, propertyContainer, s, "xyz");
testInvalid(typeValidator, propertyContainer, s, new TestCase(){});
testInvalid(typeValidator, propertyContainer, s, this);
s = "doubleValue";
testInvalid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testInvalid(typeValidator, propertyContainer, s, (byte)123);
testInvalid(typeValidator, propertyContainer, s, (short)123);
testInvalid(typeValidator, propertyContainer, s, 123);
testInvalid(typeValidator, propertyContainer, s, 123L);
testInvalid(typeValidator, propertyContainer, s, 123.0F);
testValid(typeValidator, propertyContainer, s, 123.0);
testInvalid(typeValidator, propertyContainer, s, null);
testInvalid(typeValidator, propertyContainer, s, "xyz");
testInvalid(typeValidator, propertyContainer, s, new TestCase(){});
testInvalid(typeValidator, propertyContainer, s, this);
s = "stringValue";
testInvalid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testInvalid(typeValidator, propertyContainer, s, (byte)123);
testInvalid(typeValidator, propertyContainer, s, (short)123);
testInvalid(typeValidator, propertyContainer, s, 123);
testInvalid(typeValidator, propertyContainer, s, 123L);
testInvalid(typeValidator, propertyContainer, s, 123.0F);
testInvalid(typeValidator, propertyContainer, s, 123.0);
testValid(typeValidator, propertyContainer, s, null);
testValid(typeValidator, propertyContainer, s, "xyz");
testInvalid(typeValidator, propertyContainer, s, new TestCase(){});
testInvalid(typeValidator, propertyContainer, s, this);
s = "baseValue";
testInvalid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testInvalid(typeValidator, propertyContainer, s, (byte)123);
testInvalid(typeValidator, propertyContainer, s, (short)123);
testInvalid(typeValidator, propertyContainer, s, 123);
testInvalid(typeValidator, propertyContainer, s, 123L);
testInvalid(typeValidator, propertyContainer, s, 123.0F);
testInvalid(typeValidator, propertyContainer, s, 123.0);
testValid(typeValidator, propertyContainer, s, null);
testInvalid(typeValidator, propertyContainer, s, "xyz");
testValid(typeValidator, propertyContainer, s, new TestCase(){});
testValid(typeValidator, propertyContainer, s, this);
s = "derivedValue";
testInvalid(typeValidator, propertyContainer, s, true);
testInvalid(typeValidator, propertyContainer, s, (char)123);
testInvalid(typeValidator, propertyContainer, s, (byte)123);
testInvalid(typeValidator, propertyContainer, s, (short)123);
testInvalid(typeValidator, propertyContainer, s, 123);
testInvalid(typeValidator, propertyContainer, s, 123L);
testInvalid(typeValidator, propertyContainer, s, 123.0F);
testInvalid(typeValidator, propertyContainer, s, 123.0);
testValid(typeValidator, propertyContainer, s, null);
testInvalid(typeValidator, propertyContainer, s, "xyz");
testInvalid(typeValidator, propertyContainer, s, new TestCase(){});
testValid(typeValidator, propertyContainer, s, this);
}
private void testInvalid(TypeValidator typeValidator, PropertyContainer propertyContainer, String name, Object invalidValue){
final Property property = propertyContainer.getProperty(name);
try {
typeValidator.validateValue(property, invalidValue);
fail("ValidationException expected");
} catch (ValidationException e) {
// expected
try {
property.setValue(invalidValue);
fail("ValidationException expected");
} catch (ValidationException e1) {
// expected
}
}
}
private void testValid(TypeValidator typeValidator, PropertyContainer propertyContainer, String name, Object validValue) {
final Property property = propertyContainer.getProperty(name);
try {
typeValidator.validateValue(property, validValue);
try {
property.setValue(validValue);
} catch (ValidationException e) {
fail("ValidationException not expected");
e.printStackTrace();
}
} catch (ValidationException e) {
fail("ValidationException not expected");
e.printStackTrace();
}
}
}