/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*/
package org.geotools.xs.bindings;
import junit.framework.TestCase;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDMaxExclusiveFacet;
import org.eclipse.xsd.XSDMaxInclusiveFacet;
import org.eclipse.xsd.XSDMinExclusiveFacet;
import org.eclipse.xsd.XSDMinInclusiveFacet;
import org.eclipse.xsd.XSDTotalDigitsFacet;
import org.eclipse.xsd.XSDTypeDefinition;
import org.eclipse.xsd.impl.XSDElementDeclarationImpl;
import org.eclipse.xsd.impl.XSDMaxExclusiveFacetImpl;
import org.eclipse.xsd.impl.XSDMaxInclusiveFacetImpl;
import org.eclipse.xsd.impl.XSDMinExclusiveFacetImpl;
import org.eclipse.xsd.impl.XSDMinInclusiveFacetImpl;
import org.eclipse.xsd.impl.XSDSimpleTypeDefinitionImpl;
import org.eclipse.xsd.impl.XSDTotalDigitsFacetImpl;
import java.math.BigDecimal;
import org.geotools.xml.ElementInstance;
import org.geotools.xml.Node;
import org.geotools.xml.impl.ElementImpl;
public class XSDecimalStrategyTest extends TestCase {
/*
* Test method for 'org.geotools.xml.strategies.xs.XSDecimalStrategy.parse(Element, Node[], Object)'
*/
public void testParse() throws Exception {
//Valid values
validateValues("50", 5, 0, 0, 100, 100);
validateValues("50", 3, 49, 50, 50, 51);
validateValues("50.0", 3, 49, 50, 51, 52);
validateValues("50.8", 4, 49, 50, 51, 52);
validateValues("51.0", 4, 49, 50, 51, 52);
//Invalid values
//TODO: enable these test when facets have been properly implemented
// try {
// validateValues("50", 1, 49, 50, 51, 52);
// assertTrue("Exception should have been thrown.", false);
// } catch (ValidationException e) {
//
// }
//
// try {
// validateValues("48", 2, 49, 50, 51, 52);
// assertTrue("Exception should have been thrown.", false);
// } catch (ValidationException e) {
//
// }
//
// try {
// validateValues("49", 2, 49, 50, 51, 52);
// assertTrue("Exception should have been thrown.", false);
// } catch (ValidationException e) {
//
// }
//
// try {
// validateValues("52", 2, 49, 50, 51, 52);
// assertTrue("Exception should have been thrown.", false);
// } catch (ValidationException e) {
//
// }
//
// try {
// validateValues("53", 2, 49, 50, 51, 52);
// assertTrue("Exception should have been thrown.", false);
// } catch (ValidationException e) {
//
// }
}
public void validateValues(String elementText, int totalDigits, double minExc, double minInc,
double maxInc, double maxExc) throws Exception {
XSDecimalBinding strat = new XSDecimalBinding();
XSDElementDeclaration declaration = makeDeclaration(totalDigits, new BigDecimal(minExc),
new BigDecimal(minInc), new BigDecimal(maxInc), new BigDecimal(maxExc));
ElementInstance element = new ElementImpl(declaration);
element.setText(elementText);
Node[] children = new Node[] { };
Object value = null;
BigDecimal decimal = (BigDecimal) strat.parse(element, element.getText().trim());
assertNotNull(decimal);
}
private XSDElementDeclaration makeDeclaration(final int digits, final BigDecimal minExc,
final BigDecimal minInc, final BigDecimal maxInc, final BigDecimal maxExc) {
return new XSDElementDeclarationImpl() {
public XSDTypeDefinition getTypeDefinition() {
return new XSDSimpleTypeDefinitionImpl() {
public XSDTotalDigitsFacet getTotalDigitsFacet() {
return new XSDTotalDigitsFacetImpl() {
public int getValue() {
return digits;
}
};
}
public XSDMinInclusiveFacet getMinInclusiveFacet() {
return new XSDMinInclusiveFacetImpl() {
public Object getValue() {
return minInc;
}
};
}
public XSDMinExclusiveFacet getMinExclusiveFacet() {
return new XSDMinExclusiveFacetImpl() {
public Object getValue() {
return minExc;
}
};
}
public XSDMaxInclusiveFacet getMaxInclusiveFacet() {
return new XSDMaxInclusiveFacetImpl() {
public Object getValue() {
return maxInc;
}
};
}
public XSDMaxExclusiveFacet getMaxExclusiveFacet() {
return new XSDMaxExclusiveFacetImpl() {
public Object getValue() {
return maxExc;
}
};
}
};
}
};
}
}