From: <lh...@us...> - 2008-11-19 13:47:50
|
Revision: 210 http://tinytim.svn.sourceforge.net/tinytim/?rev=210&view=rev Author: lheuer Date: 2008-11-19 13:47:44 +0000 (Wed, 19 Nov 2008) Log Message: ----------- - Fixed bug in LiteralNormalizer for decimals "9.3" was reported as illegal value - Added more tests for LiteralNormalizer Modified Paths: -------------- tinytim/trunk/src/main/java/org/tinytim/core/value/DecimalLiteral.java tinytim/trunk/src/main/java/org/tinytim/core/value/IntegerLiteral.java tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java tinytim/trunk/src/main/java/org/tinytim/core/value/LiteralNormalizer.java tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteralNormalizer.java Modified: tinytim/trunk/src/main/java/org/tinytim/core/value/DecimalLiteral.java =================================================================== --- tinytim/trunk/src/main/java/org/tinytim/core/value/DecimalLiteral.java 2008-11-19 13:45:23 UTC (rev 209) +++ tinytim/trunk/src/main/java/org/tinytim/core/value/DecimalLiteral.java 2008-11-19 13:47:44 UTC (rev 210) @@ -101,7 +101,7 @@ */ @Override public int hashCode() { - return _decimal.hashCode(); + return _lexicalForm.hashCode(); } /* (non-Javadoc) Modified: tinytim/trunk/src/main/java/org/tinytim/core/value/IntegerLiteral.java =================================================================== --- tinytim/trunk/src/main/java/org/tinytim/core/value/IntegerLiteral.java 2008-11-19 13:45:23 UTC (rev 209) +++ tinytim/trunk/src/main/java/org/tinytim/core/value/IntegerLiteral.java 2008-11-19 13:47:44 UTC (rev 210) @@ -105,7 +105,7 @@ */ @Override public int hashCode() { - return _integer.hashCode(); + return _lexicalForm.hashCode(); } /* (non-Javadoc) Modified: tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java =================================================================== --- tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java 2008-11-19 13:45:23 UTC (rev 209) +++ tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java 2008-11-19 13:47:44 UTC (rev 210) @@ -46,28 +46,14 @@ private final Locator _datatype; private Literal(final String value, final Locator datatype) { - if (value == null) { - throw new IllegalArgumentException("The value must not be null"); - } _value = LiteralNormalizer.normalize(value, datatype); _datatype = datatype; } - /* (non-Javadoc) - * @see org.tinytim.internal.api.ILiteral#getDatatype() - */ - public Locator getDatatype() { - return _datatype; - } - - /* (non-Javadoc) - * @see org.tinytim.internal.api.ILiteral#getValue() - */ - public String getValue() { - return _value; - } - public static synchronized ILiteral get(String value) { + if (value == null) { + throw new IllegalArgumentException("The value must not be null"); + } return _STRINGS.get(new Literal(value, XSD.STRING)); } @@ -108,7 +94,7 @@ return lit; } - public static synchronized ILiteral create(final String value, final Locator datatype) { + public static ILiteral create(final String value, final Locator datatype) { if (value == null) { throw new IllegalArgumentException("The value must not be null"); } @@ -133,7 +119,7 @@ return _registerIfAbsent(_OTHERS, new Literal(value, datatype)); } - public static synchronized ILiteral create(String value) { + public static ILiteral create(String value) { return _registerIfAbsent(_STRINGS, new Literal(value, XSD.STRING)); } @@ -164,35 +150,35 @@ return (ILocator) value; } - public static synchronized ILocator createIRI(String value) { + public static ILocator createIRI(String value) { if (value == null) { throw new IllegalArgumentException("The value must not be null"); } return _registerIfAbsent(_IRIS, new LocatorImpl(value)); } - public static synchronized ILiteral createDecimal(String value) { + public static ILiteral createDecimal(String value) { if (value == null) { throw new IllegalArgumentException("The value must not be null"); } return _registerIfAbsent(_OTHERS, new DecimalLiteral(value)); } - public static synchronized ILiteral createDecimal(BigDecimal value) { + public static ILiteral createDecimal(BigDecimal value) { if (value == null) { throw new IllegalArgumentException("The value must not be null"); } return _registerIfAbsent(_OTHERS, new DecimalLiteral(value)); } - public static synchronized ILiteral createInteger(String value) { + public static ILiteral createInteger(String value) { if (value == null) { throw new IllegalArgumentException("The value must not be null"); } return _registerIfAbsent(_OTHERS, new IntegerLiteral(value)); } - public static synchronized ILiteral createInteger(BigInteger value) { + public static ILiteral createInteger(BigInteger value) { if (value == null) { throw new IllegalArgumentException("The value must not be null"); } @@ -204,22 +190,51 @@ : BooleanLiteral.FALSE; } + /* (non-Javadoc) + * @see org.tinytim.internal.api.ILiteral#getDatatype() + */ + public Locator getDatatype() { + return _datatype; + } + + /* (non-Javadoc) + * @see org.tinytim.internal.api.ILiteral#getValue() + */ + public String getValue() { + return _value; + } + + /* (non-Javadoc) + * @see org.tinytim.internal.api.ILiteral#decimalValue() + */ public BigDecimal decimalValue() { return new BigDecimal(_value); } + /* (non-Javadoc) + * @see org.tinytim.internal.api.ILiteral#integerValue() + */ public BigInteger integerValue() { return new BigInteger(_value); } + /* (non-Javadoc) + * @see org.tinytim.internal.api.ILiteral#floatValue() + */ public float floatValue() { return Float.valueOf(_value); } + /* (non-Javadoc) + * @see org.tinytim.internal.api.ILiteral#intValue() + */ public int intValue() { return Integer.valueOf(_value); } + /* (non-Javadoc) + * @see org.tinytim.internal.api.ILiteral#longValue() + */ public long longValue() { return Long.valueOf(_value); } Modified: tinytim/trunk/src/main/java/org/tinytim/core/value/LiteralNormalizer.java =================================================================== --- tinytim/trunk/src/main/java/org/tinytim/core/value/LiteralNormalizer.java 2008-11-19 13:45:23 UTC (rev 209) +++ tinytim/trunk/src/main/java/org/tinytim/core/value/LiteralNormalizer.java 2008-11-19 13:47:44 UTC (rev 210) @@ -66,9 +66,9 @@ public static String normalizeInteger(final String value) { final String val = value.trim(); - int len = value.length(); + int len = val.length(); if (len == 0) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("Illegal integer value: " + value); } int idx = 0; boolean negative = false; @@ -93,7 +93,7 @@ // Check if everything is a digit for (int i = 0; i < len; i++) { if (!Character.isDigit(normalized.charAt(i))) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("Illegal integer value: " + value); } } return negative && normalized.charAt(0) != 0 ? '-' + normalized : normalized; @@ -101,9 +101,9 @@ public static String normalizeDecimal(final String value) { final String val = value.trim(); - int len = value.length(); + int len = val.length(); if (len == 0) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("Illegal decimal value: " + value); } int idx = 0; boolean negative = false; @@ -142,11 +142,13 @@ while (len >= idx && val.charAt(len) == '0') { len--; } - if (len == idx || len < idx) { + if (len <= idx) { normalized.append('0'); } else { - while (idx < len) { + // idx points to the '.', increment it + idx++; + while (idx <= len) { char c = val.charAt(idx); if (!Character.isDigit(c)) { throw new IllegalArgumentException("Illegal decimal value: " + value); Modified: tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteralNormalizer.java =================================================================== --- tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteralNormalizer.java 2008-11-19 13:45:23 UTC (rev 209) +++ tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteralNormalizer.java 2008-11-19 13:47:44 UTC (rev 210) @@ -46,6 +46,7 @@ assertEquals("1", LiteralNormalizer.normalizeInteger("00001")); assertEquals("-1", LiteralNormalizer.normalizeInteger("-1")); assertEquals("-1", LiteralNormalizer.normalizeInteger("-00001")); + assertEquals("-1", LiteralNormalizer.normalizeInteger(" -00001 ")); try { LiteralNormalizer.normalizeInteger("invalid"); fail("Expected an IllegalArgumentException"); @@ -57,6 +58,7 @@ public void testNormalizeDecimal() { assertEquals("0.0", LiteralNormalizer.normalizeDecimal("0")); + assertEquals("0.0", LiteralNormalizer.normalizeDecimal(" 0 ")); assertEquals("0.0", LiteralNormalizer.normalizeDecimal("-0")); assertEquals("0.0", LiteralNormalizer.normalizeDecimal("-0.0")); assertEquals("0.0", LiteralNormalizer.normalizeDecimal("+0.0")); @@ -65,6 +67,9 @@ assertEquals("10.0", LiteralNormalizer.normalizeDecimal("10")); assertEquals("-10.0", LiteralNormalizer.normalizeDecimal("-10.00")); assertEquals("10.0", LiteralNormalizer.normalizeDecimal("+10.00")); + assertEquals("9.3", LiteralNormalizer.normalizeDecimal("+9.3")); + assertEquals("9.3", LiteralNormalizer.normalizeDecimal("9.3")); + assertEquals("-9.3", LiteralNormalizer.normalizeDecimal("-9.3")); try { LiteralNormalizer.normalizeDecimal("invalid"); fail("Expected an IllegalArgumentException"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |