import java.math.BigDecimal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author ekuns */ public class TestClassDecimal extends TestClassBase { private static final Log LOG = LogFactory.getLog(TestClassDecimal.class); // Restriction facets from the schema: // <xsd:pattern value=".*23.*"/> // <xsd:totalDigits value="5"/> // <xsd:fractionDigits value="3"/> // <xsd:whiteSpace value="collapse"/> private String[] goodValues = { "23232", "232.22", "23.232", "-23232", "-232.22", "-23.232", "0000000023", // leading zeros are not counted "0000023.23300", }; // trailing zeros are not counted private String[] badValues = { "100.005", // doesn't match pattern "230000", // too many digits (make sure zeros here are counted) "223232", // too many digits "22323.2", // too many digits "2232.32", // too many digits "223.232", // too many digits "0.2322", // too many fraction digits "2.3232", }; // too many fraction digits // Restriction facets from the schema: // <xsd:minInclusive value="-12345.5"/> // <xsd:maxInclusive value="54321.25"/> // <xsd:pattern value=".*23.*"/> // <xsd:whiteSpace value="collapse"/> private String[] goodValuesMinMax = { "-12345.5", "54321.23", "0.23" }; private String[] badValuesMinMax = { "55555", // too large "54321.2523", // too large "-22222", // too small "-12345.723", // too small "33", }; // doesn't match pattern public void testAddGoodValues() throws Exception { NumberTests instance = new NumberTests(); for (int i = 0; i < goodValues.length; i++) { instance.addMydecimal(new BigDecimal(goodValues[i].trim())); } for (int i = 0; i < goodValuesMinMax.length; i++) { instance.addMydecimalMinMax(new BigDecimal(goodValuesMinMax[i].trim())); } instance.validate(); } public boolean testUnmarshalGoodValues() throws Exception { return testUnmarshalGoodInstances("mydecimal", goodValues) && testUnmarshalGoodInstances("mydecimalMinMax", goodValuesMinMax); } public boolean testAddBadValues() { NumberTests instance = new NumberTests(); for (int i = 0; i < badValues.length; i++) { try { instance.addMydecimal(new BigDecimal(badValues[i].trim())); instance.validate(); } catch (org.exolab.castor.xml.ValidationException e) { // Good, we caught the exception continue; } catch (java.lang.IllegalArgumentException e) { // Good, we caught the exception continue; } LOG.error("Bad value " + badValues[i] + " did not fail the test"); return false; } for (int i = 0; i < badValuesMinMax.length; i++) { try { instance.addMydecimalMinMax(new BigDecimal(badValuesMinMax[i].trim())); instance.validate(); } catch (org.exolab.castor.xml.ValidationException e) { // Good, we caught the exception continue; } catch (java.lang.IllegalArgumentException e) { // Good, we caught the exception continue; } LOG.error("Bad value " + badValuesMinMax[i] + " did not fail the test"); return false; } // If every test threw an expected exception, we're good. return true; } public boolean testUnmarshalBadValues() throws Exception { return testUnmarshalBadInstances("mydecimal", badValues) && testUnmarshalBadInstances("mydecimalMinMax", badValuesMinMax); } }