[Practicalxml-commits] SF.net SVN: practicalxml:[98] branches/dev-1.1/src
Brought to you by:
kdgregory
|
From: Auto-Generated S. C. M. <pra...@li...> - 2009-08-12 20:35:45
|
Revision: 98
http://practicalxml.svn.sourceforge.net/practicalxml/?rev=98&view=rev
Author: kdgregory
Date: 2009-08-12 20:35:22 +0000 (Wed, 12 Aug 2009)
Log Message:
-----------
checkpoint - flesh out parsing options, move primitive conversion to own class
Modified Paths:
--------------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Bean2XmlHandler.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Xml2BeanHandler.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Xml2BeanOptions.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanHandler.java
Added Paths:
-----------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/PrimitiveConversionHelper.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestPrimitiveConversionHelper.java
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Bean2XmlHandler.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Bean2XmlHandler.java 2009-08-10 22:30:50 UTC (rev 97)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Bean2XmlHandler.java 2009-08-12 20:35:22 UTC (rev 98)
@@ -17,6 +17,7 @@
import net.sf.practicalxml.DomUtil;
import net.sf.practicalxml.XmlUtil;
+import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.EnumSet;
@@ -46,6 +47,7 @@
{
private EnumSet<Bean2XmlOptions> _options;
private Appender _appender;
+ private PrimitiveConversionHelper _primitiveHelper;
/**
@@ -54,10 +56,13 @@
*/
public Bean2XmlHandler(Element appendTo, Bean2XmlOptions... options)
{
- _appender = new Appender(appendTo);
_options = EnumSet.noneOf(Bean2XmlOptions.class);
for (Bean2XmlOptions option : options)
_options.add(option);
+
+ _appender = new Appender(appendTo);
+
+ _primitiveHelper = new PrimitiveConversionHelper(shouldFormatAsXsd());
}
@@ -68,6 +73,7 @@
{
_appender = appender;
_options = parent._options;
+ _primitiveHelper = parent._primitiveHelper;
}
@@ -77,83 +83,69 @@
public void convert(String name, Boolean value)
{
- Object formatted = value;
- if (shouldFormatAsXsd())
- formatted = value.booleanValue() ? "true" : "false";
-
- _appender.append(name, "xsd:boolean", formatted);
+ appendPrimitive(name, Boolean.class, value);
}
public void convert(String name, Byte value)
{
- _appender.append(name, "xsd:byte", value);
+ appendPrimitive(name, Byte.class, value);
}
public void convert(String name, Character value)
{
- _appender.append(name, "xsd:string", value);
+ appendPrimitive(name, Character.class, value);
}
public void convert(String name, Date value)
{
- Object formatted = value;
- if (shouldFormatAsXsd())
- formatted = XmlUtil.formatXsdDatetime(value);
-
- _appender.append(name, "xsd:dateTime", formatted);
+ appendPrimitive(name, Date.class, value);
}
public void convert(String name, Double value)
{
- Object formatted = value;
- if (shouldFormatAsXsd())
- formatted = XmlUtil.formatXsdDecimal(value);
-
- _appender.append(name, "xsd:decimal", formatted);
+ appendPrimitive(name, Double.class, value);
}
public void convert(String name, Float value)
{
- Object formatted = value;
- if (shouldFormatAsXsd())
- formatted = XmlUtil.formatXsdDecimal(value);
-
- _appender.append(name, "xsd:decimal", formatted);
+ appendPrimitive(name, Float.class, value);
}
public void convert(String name, Integer value)
{
- _appender.append(name, "xsd:int", value);
+ appendPrimitive(name, Integer.class, value);
}
public void convert(String name, Long value)
{
- _appender.append(name, "xsd:long", value);
+ appendPrimitive(name, Long.class, value);
}
+ // FIXME - passes tests but not pretty ...
+ // the multitude of convert methods will go away, however
public void convert(String name, Number value)
{
- _appender.append(name, "xsd:decimal", value);
+ appendPrimitive(name, BigDecimal.class, value);
}
public void convert(String name, Short value)
{
- _appender.append(name, "xsd:short", value);
+ appendPrimitive(name, Short.class, value);
}
public void convert(String name, String value)
{
- _appender.append(name, "xsd:string", value);
+ appendPrimitive(name, String.class, value);
}
@@ -229,6 +221,19 @@
/**
+ * Common code for primitive objects.
+ */
+ public void appendPrimitive(String name, Class<?> klass, Object value)
+ {
+ String xsdType = _primitiveHelper.getXsdType(klass);
+ if (xsdType == null)
+ throw new ConversionException("internal error: " + klass.getName()
+ + " passed as primitive");
+ _appender.append(name, xsdType, _primitiveHelper.stringify(value));
+ }
+
+
+ /**
* Common code for sequenced objects -- arrays, lists, and sets.
*/
private void appendSequence(Element parent, Iterator<?> itx, boolean isIndexed)
Added: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/PrimitiveConversionHelper.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/PrimitiveConversionHelper.java (rev 0)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/PrimitiveConversionHelper.java 2009-08-12 20:35:22 UTC (rev 98)
@@ -0,0 +1,446 @@
+// Copyright 2008-2009 severally by the contributors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package net.sf.practicalxml.converter;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.sf.practicalxml.XmlUtil;
+
+
+/**
+ * Responsible for converting "primitive" types -- those with unambiguous
+ * string representations -- to/from such a representation.
+ */
+public class PrimitiveConversionHelper
+{
+ // this is not static because the helpers are inner classes
+ private Map<Class<?>,ConversionHandler<?>> _helpers
+ = new HashMap<Class<?>,ConversionHandler<?>>();
+ {
+ _helpers.put(String.class, new StringConversionHandler());
+ _helpers.put(Character.class, new CharacterConversionHandler());
+ _helpers.put(Boolean.class, new BooleanConversionHandler());
+ _helpers.put(Byte.class, new ByteConversionHandler());
+ _helpers.put(Short.class, new ShortConversionHandler());
+ _helpers.put(Integer.class, new IntegerConversionHandler());
+ _helpers.put(Long.class, new LongConversionHandler());
+ _helpers.put(Float.class, new FloatConversionHandler());
+ _helpers.put(Double.class, new DoubleConversionHandler());
+ _helpers.put(BigInteger.class, new BigIntegerConversionHandler());
+ _helpers.put(BigDecimal.class, new BigDecimalConversionHandler());
+ _helpers.put(Date.class, new DateConversionHandler());
+ }
+
+ private boolean _useXsdFormatting;
+
+
+ /**
+ * Default constructor, which uses Java formatting.
+ */
+ public PrimitiveConversionHelper()
+ {
+ // nothing to see here
+ }
+
+
+ /**
+ * Constructor that allows selection of Java or XSD formatting.
+ */
+ public PrimitiveConversionHelper(boolean useXsdFormatting)
+ {
+ _useXsdFormatting = useXsdFormatting;
+ }
+
+
+//----------------------------------------------------------------------------
+// Public Methods
+//----------------------------------------------------------------------------
+
+ /**
+ * Returns the XSD type name to use for stringified objects of the
+ * specified class, <code>null</code> if this converter can't convert
+ * instances of the class.
+ */
+ public String getXsdType(Class<?> klass)
+ {
+ ConversionHandler<?> helper = _helpers.get(klass);
+ return (helper == null) ? null : helper.getXsdType();
+ }
+
+
+ /**
+ * Converts the passed object into its string representation, according
+ * to the options currently in effect. Passing <code>null</code> will
+ * return <code>null</code>. Throws {@link ConversionException} if
+ * unable to convert the passed object.
+ */
+ public String stringify(Object obj)
+ {
+ if (obj == null)
+ return null;
+
+ try
+ {
+ return getHelper(obj.getClass()).stringify(obj);
+ }
+ catch (Exception ee)
+ {
+ if (ee instanceof ConversionException)
+ throw (ConversionException)ee;
+ throw new ConversionException("unable to convert: " + obj, ee);
+ }
+ }
+
+
+ /**
+ * Parses the passed string into an object of the desired class. Passing
+ * <code>null</code> will return <code>null</code>, passing an empty
+ * string will typically throw a {@link ConversionException}.
+ */
+ public Object parse(String str, Class<?> klass)
+ {
+ if (str == null)
+ return null;
+
+ try
+ {
+ return getHelper(klass).parse(str);
+ }
+ catch (Exception ee)
+ {
+ if (ee instanceof ConversionException)
+ throw (ConversionException)ee;
+ throw new ConversionException("unable to parse: " + str, ee);
+ }
+ }
+
+
+//----------------------------------------------------------------------------
+// Internals
+//----------------------------------------------------------------------------
+
+ /**
+ * Returns the appropriate conversion helper or throws.
+ */
+ @SuppressWarnings(value="unchecked")
+ private ConversionHandler getHelper(Class<?> klass)
+ {
+ ConversionHandler<?> helper = _helpers.get(klass);
+ if (helper == null)
+ throw new ConversionException("unable to get helper: " + klass.getName());
+ return helper;
+ }
+
+
+ /**
+ * Each primitive class has its own conversion handler that is responsible
+ * for converting to/from a string representation. Handlers are guaranteed
+ * to receive non-null objects/strings.
+ * <p>
+ * This interface is parameterized so that the compiler will generate
+ * bridge methods for implementation classes. Elsewhere, we don't care
+ * about parameterization, so wildcard or drop it (see {@link #getHelper}).
+ * <p>
+ * Implementation classes are expected to be inner classes, so that they
+ * have access to configuration information (such as formatting rules).
+ * <p>
+ * Implementation classes are permitted to throw any exception; caller is
+ * expected to catch them and translate to a {@link ConversionException}.
+ */
+ private static interface ConversionHandler<T>
+ {
+ public String getXsdType();
+ public String stringify(T obj) throws Exception;
+ public T parse(String str) throws Exception;
+ }
+
+
+ private class StringConversionHandler
+ implements ConversionHandler<String>
+ {
+ public String getXsdType()
+ {
+ return "xsd:string";
+ }
+
+ public String stringify(String obj)
+ {
+ return String.valueOf(obj);
+ }
+
+ public String parse(String str)
+ {
+ return str;
+ }
+ }
+
+
+ private class CharacterConversionHandler
+ implements ConversionHandler<Character>
+ {
+ private final Character NUL = Character.valueOf('\0');
+
+ public String getXsdType()
+ {
+ return "xsd:string";
+ }
+
+ public String stringify(Character obj)
+ {
+ if (obj.equals(NUL))
+ return "";
+ return obj.toString();
+ }
+
+ public Character parse(String str)
+ {
+ if (str.length() == 0)
+ return NUL;
+ if (str.length() > 1)
+ throw new ConversionException(
+ "attempted to convert multi-character string: \"" + str + "\"");
+ return Character.valueOf(str.charAt(0));
+ }
+ }
+
+
+ private class BooleanConversionHandler
+ implements ConversionHandler<Boolean>
+ {
+ public String getXsdType()
+ {
+ return "xsd:boolean";
+ }
+
+ public String stringify(Boolean obj)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.formatXsdBoolean(obj.booleanValue())
+ : obj.toString();
+ }
+
+ public Boolean parse(String str)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.parseXsdBoolean(str)
+ : Boolean.parseBoolean(str);
+ }
+ }
+
+
+ private class ByteConversionHandler
+ implements ConversionHandler<Byte>
+ {
+ public String getXsdType()
+ {
+ return "xsd:byte";
+ }
+
+ public String stringify(Byte obj)
+ {
+ return obj.toString();
+ }
+
+ public Byte parse(String str)
+ {
+ return Byte.valueOf(str.trim());
+ }
+ }
+
+
+ private class ShortConversionHandler
+ implements ConversionHandler<Short>
+ {
+ public String getXsdType()
+ {
+ return "xsd:short";
+ }
+
+ public String stringify(Short obj)
+ {
+ return obj.toString();
+ }
+
+ public Short parse(String str)
+ {
+ return Short.valueOf(str.trim());
+ }
+ }
+
+
+ private class IntegerConversionHandler
+ implements ConversionHandler<Integer>
+ {
+ public String getXsdType()
+ {
+ return "xsd:int";
+ }
+
+ public String stringify(Integer obj)
+ {
+ return obj.toString();
+ }
+
+ public Integer parse(String str)
+ {
+ return Integer.valueOf(str.trim());
+ }
+ }
+
+
+ private class LongConversionHandler
+ implements ConversionHandler<Long>
+ {
+ public String getXsdType()
+ {
+ return "xsd:long";
+ }
+
+ public String stringify(Long obj)
+ {
+ return obj.toString();
+ }
+
+ public Long parse(String str)
+ {
+ return Long.valueOf(str.trim());
+ }
+ }
+
+
+ private class FloatConversionHandler
+ implements ConversionHandler<Float>
+ {
+ public String getXsdType()
+ {
+ return "xsd:decimal";
+ }
+
+ public String stringify(Float obj)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.formatXsdDecimal(obj)
+ : obj.toString();
+ }
+
+ public Float parse(String str)
+ {
+ return Float.valueOf(str.trim());
+ }
+ }
+
+
+ private class DoubleConversionHandler
+ implements ConversionHandler<Double>
+ {
+ public String getXsdType()
+ {
+ return "xsd:decimal";
+ }
+
+ public String stringify(Double obj)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.formatXsdDecimal(obj)
+ : obj.toString();
+ }
+
+ public Double parse(String str)
+ {
+ return Double.valueOf(str.trim());
+ }
+ }
+
+
+ private class BigIntegerConversionHandler
+ implements ConversionHandler<BigInteger>
+ {
+ public String getXsdType()
+ {
+ return "xsd:decimal";
+ }
+
+ public String stringify(BigInteger obj)
+ {
+ return obj.toString();
+ }
+
+ public BigInteger parse(String str)
+ {
+ return new BigInteger(str.trim());
+ }
+ }
+
+
+ private class BigDecimalConversionHandler
+ implements ConversionHandler<BigDecimal>
+ {
+ public String getXsdType()
+ {
+ return "xsd:decimal";
+ }
+
+ public String stringify(BigDecimal obj)
+ {
+ return obj.toString();
+ }
+
+ public BigDecimal parse(String str)
+ {
+ return new BigDecimal(str.trim());
+ }
+ }
+
+
+ private class DateConversionHandler
+ implements ConversionHandler<Date>
+ {
+ // format as specified by Date.toString() JavaDoc
+ private DateFormat _defaultFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
+
+ public String getXsdType()
+ {
+ return "xsd:dateTime";
+ }
+
+ public String stringify(Date obj)
+ {
+ return _useXsdFormatting
+ ? XmlUtil.formatXsdDatetime(obj)
+ : obj.toString();
+ }
+
+ public Date parse(String str)
+ throws ParseException
+ {
+ if (_useXsdFormatting)
+ return XmlUtil.parseXsdDatetime(str);
+ else
+ {
+ synchronized (_defaultFormat)
+ {
+ return _defaultFormat.parse(str);
+ }
+ }
+ }
+ }
+}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Xml2BeanHandler.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Xml2BeanHandler.java 2009-08-10 22:30:50 UTC (rev 97)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Xml2BeanHandler.java 2009-08-12 20:35:22 UTC (rev 98)
@@ -15,7 +15,9 @@
package net.sf.practicalxml.converter;
import net.sf.practicalxml.DomUtil;
+import net.sf.practicalxml.XmlException;
import net.sf.practicalxml.XmlUtil;
+import net.sf.practicalxml.internal.StringUtils;
import java.util.Arrays;
import java.util.Date;
@@ -38,6 +40,7 @@
public class Xml2BeanHandler
{
private EnumSet<Xml2BeanOptions> _options;
+ private PrimitiveConversionHelper _primitiveHelper;
/**
@@ -48,6 +51,8 @@
_options = EnumSet.noneOf(Xml2BeanOptions.class);
for (Xml2BeanOptions option : options)
_options.add(option);
+
+ _primitiveHelper = new PrimitiveConversionHelper(true);
}
@@ -55,27 +60,21 @@
// Public Methods
//----------------------------------------------------------------------------
-
public Boolean convertBoolean(Element elem)
{
- String text = DomUtil.getText(elem);
- return Boolean.valueOf(XmlUtil.parseXsdBoolean(text));
+ return (Boolean)_primitiveHelper.parse(getText(elem), Boolean.class);
}
public Byte convertByte(Element elem)
{
- String text = DomUtil.getText(elem);
- return Byte.valueOf(text);
+ return (Byte)_primitiveHelper.parse(getText(elem), Byte.class);
}
public Character convertCharacter(Element elem)
{
- String text = DomUtil.getText(elem);
- if (text.length() == 0)
- return '\0';
- return Character.valueOf(text.charAt(0));
+ return (Character)_primitiveHelper.parse(getText(elem), Character.class);
}
@@ -87,29 +86,25 @@
public Double convertDouble(Element elem)
{
- String text = DomUtil.getText(elem);
- return Double.valueOf(text);
+ return (Double)_primitiveHelper.parse(getText(elem), Double.class);
}
public Float convertFloat(Element elem)
{
- String text = DomUtil.getText(elem);
- return Float.valueOf(text);
+ return (Float)_primitiveHelper.parse(getText(elem), Float.class);
}
public Integer convertInteger(Element elem)
{
- String text = DomUtil.getText(elem);
- return Integer.valueOf(text);
+ return (Integer)_primitiveHelper.parse(getText(elem), Integer.class);
}
public Long convertLong(Element elem)
{
- String text = DomUtil.getText(elem);
- return Long.valueOf(text);
+ return (Long)_primitiveHelper.parse(getText(elem), Long.class);
}
@@ -121,15 +116,13 @@
public Short convertShort(Element elem)
{
- String text = DomUtil.getText(elem);
- return Short.valueOf(text);
+ return (Short)_primitiveHelper.parse(getText(elem), Short.class);
}
public String convertString(Element elem)
{
- String text = DomUtil.getText(elem);
- return text;
+ return (String)_primitiveHelper.parse(getText(elem), String.class);
}
@@ -167,5 +160,33 @@
// Internals
//----------------------------------------------------------------------------
+ /**
+ * Returns the text from a passed element, applying any low-level options
+ * along the way.
+ */
+ private String getText(Element elem)
+ {
+ String text = DomUtil.getText(elem);
+ if (_options.contains(Xml2BeanOptions.CONVERT_BLANK_AS_NULL) && StringUtils.isBlank(text))
+ text = null;
+ validateXsiNil(elem, text);
+ return text;
+ }
+
+ /**
+ * Checks for elements that require <code>xsi:nil</code>, and throws if missing.
+ */
+ private void validateXsiNil(Element elem, String text)
+ {
+ if (text != null)
+ return;
+ if (!_options.contains(Xml2BeanOptions.REQUIRE_XSI_NIL))
+ return;
+
+ String attr = elem.getAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil");
+ if ((attr == null) || !attr.equals("true"))
+ throw new ConversionException("empty element without required xsi:nil");
+ }
+
}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Xml2BeanOptions.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Xml2BeanOptions.java 2009-08-10 22:30:50 UTC (rev 97)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/Xml2BeanOptions.java 2009-08-12 20:35:22 UTC (rev 98)
@@ -22,6 +22,14 @@
public enum Xml2BeanOptions
{
/**
+ * If present, the converter will treat all elements with empty text nodes
+ * as if they were empty elements -- in other words, <code>null</code>.
+ * Note that this flag will interact with <code>REQUIRE_XSI_NIL</code>.
+ */
+ CONVERT_BLANK_AS_NULL,
+
+
+ /**
* If present, the converter ignores elements that don't correspond to
* settable properties of the bean.
*/
@@ -37,19 +45,27 @@
/**
+ * If present, the converter will use a setter method taking a String, in
+ * preference to any other type. Default behavior is to pick the method
+ * with the most restrictive type (and considering numeric types as more
+ * restrictive than <code>String</code>).
+ */
+ PREFER_STRING_SETTER,
+
+
+ /**
+ * If present, the converter requires an <code>xsi:nil</code> attribute
+ * on any empty nodes, and will throw if it's not present. Default is to
+ * treat empty nodes as <code>null</code>.
+ */
+ REQUIRE_XSI_NIL,
+
+
+ /**
* If present, the converter requires an <code>xsi:type</code> attribute
* on each element, and will throw if it's not present. Default behavior
* uses the <code>xsi:type</code> value to choose between different setter
* methods, but otherwise ignores it.
*/
- REQUIRE_XSI_TYPE,
-
-
- /**
- * If present, the converter will use a setter method taking a String, in
- * preference to any other type. Default behavior is to pick the method
- * with the most restrictive type (and considering numeric types as more
- * restrictive than <code>String</code>).
- */
- PREFER_STRING_SETTER
+ REQUIRE_XSI_TYPE
}
Added: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestPrimitiveConversionHelper.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestPrimitiveConversionHelper.java (rev 0)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestPrimitiveConversionHelper.java 2009-08-12 20:35:22 UTC (rev 98)
@@ -0,0 +1,510 @@
+// Copyright (c) Keith D Gregory, all rights reserved
+package net.sf.practicalxml.converter;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+public class TestPrimitiveConversionHelper extends TestCase
+{
+//----------------------------------------------------------------------------
+// Support Code
+//----------------------------------------------------------------------------
+
+ private void assertFailsConversionToObject(
+ String message,
+ PrimitiveConversionHelper helper,
+ String str,
+ Class<?> klass)
+ {
+ try
+ {
+ helper.parse(str, klass);
+ fail(message);
+ }
+ catch (ConversionException ee)
+ {
+ // success!
+ }
+ }
+
+
+//----------------------------------------------------------------------------
+// Test Cases
+//----------------------------------------------------------------------------
+
+ public void testUnknownClass() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertNull(helper.getXsdType(Class.class));
+ }
+
+
+ public void testConvertNull() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertNull(helper.stringify(null));
+ assertNull(helper.parse(null, Object.class));
+ }
+
+
+ public void testConvertString() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertEquals("xsd:string", helper.getXsdType(String.class));
+
+ assertEquals("foo", helper.stringify("foo"));
+ assertEquals("foo", helper.parse("foo", String.class));
+
+ assertEquals("", helper.stringify(""));
+ assertEquals("", helper.parse("", String.class));
+ }
+
+
+ public void testConvertCharacter() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertEquals("xsd:string", helper.getXsdType(Character.class));
+
+ Character simple = Character.valueOf('A');
+ assertEquals("A", helper.stringify(simple));
+ assertEquals(simple, helper.parse("A", Character.class));
+
+ Character nul = Character.valueOf('\0');
+ assertEquals("", helper.stringify(nul));
+ assertEquals(nul, helper.parse("", Character.class));
+
+ assertFailsConversionToObject(
+ "converted multi-character string",
+ helper, "ix", Character.class);
+ }
+
+
+ public void testConvertBooleanDefault() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ // default boolean conversion is compatible with XSD type def
+ assertEquals("xsd:boolean", helper.getXsdType(Boolean.class));
+
+ String sTrue = Boolean.TRUE.toString();
+ assertEquals(sTrue, helper.stringify(Boolean.TRUE));
+ assertEquals(Boolean.TRUE, helper.parse(sTrue, Boolean.class));
+
+ String sFalse = Boolean.FALSE.toString();
+ assertEquals(sFalse, helper.stringify(Boolean.FALSE));
+ assertEquals(Boolean.FALSE, helper.parse(sFalse, Boolean.class));
+
+ assertEquals(Boolean.FALSE, helper.parse("ix", Boolean.class));
+ assertEquals(Boolean.FALSE, helper.parse("", Boolean.class));
+ }
+
+
+ public void testConvertBooleanXsd() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper(true);
+
+ assertEquals("xsd:boolean", helper.getXsdType(Boolean.class));
+
+ assertEquals("true", helper.stringify(Boolean.TRUE));
+ assertEquals(Boolean.TRUE, helper.parse("true", Boolean.class));
+ assertEquals(Boolean.TRUE, helper.parse("1", Boolean.class));
+
+ assertEquals("false", helper.stringify(Boolean.FALSE));
+ assertEquals(Boolean.FALSE, helper.parse("false", Boolean.class));
+ assertEquals(Boolean.FALSE, helper.parse("0", Boolean.class));
+
+ assertFailsConversionToObject(
+ "converted multi-character string",
+ helper, "ix", Boolean.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Boolean.class);
+ }
+
+
+ public void testConvertByte() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertEquals("xsd:byte", helper.getXsdType(Byte.class));
+
+ String str1 = "123";
+ Byte val1 = Byte.valueOf((byte)123);
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Byte.class));
+
+ String str2 = "-123";
+ Byte val2 = Byte.valueOf((byte)-123);
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, Byte.class));
+
+ String str3 = " -123 ";
+ Byte val3 = Byte.valueOf((byte)-123);
+ assertEquals(val3, helper.parse(str3, Byte.class));
+
+ assertFailsConversionToObject(
+ "converted too-large value",
+ helper, "1234567", Byte.class);
+
+ assertFailsConversionToObject(
+ "converted non-integer value",
+ helper, "1.23", Byte.class);
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", Byte.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Byte.class);
+ }
+
+
+ public void testConvertShort() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertEquals("xsd:short", helper.getXsdType(Short.class));
+
+ String str1 = "12345";
+ Short val1 = Short.valueOf((short)12345);
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Short.class));
+
+ String str2 = "-12345";
+ Short val2 = Short.valueOf((short)-12345);
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, Short.class));
+
+ String str3 = " -12345 ";
+ Short val3 = Short.valueOf((short)-12345);
+ assertEquals(val3, helper.parse(str3, Short.class));
+
+ assertFailsConversionToObject(
+ "converted too-large value",
+ helper, "1234567", Short.class);
+
+ assertFailsConversionToObject(
+ "converted non-integer value",
+ helper, "123.45", Short.class);
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", Short.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Short.class);
+ }
+
+
+ public void testConvertInteger() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertEquals("xsd:int", helper.getXsdType(Integer.class));
+
+ String str1 = "1234567";
+ Integer val1 = Integer.valueOf(1234567);
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Integer.class));
+
+ String str2 = "-1234567";
+ Integer val2 = Integer.valueOf(-1234567);
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, Integer.class));
+
+ String str3 = " -1234567 ";
+ Integer val3 = Integer.valueOf(-1234567);
+ assertEquals(val3, helper.parse(str3, Integer.class));
+
+ assertFailsConversionToObject(
+ "converted too-large value",
+ helper, "123456789012345", Integer.class);
+
+ assertFailsConversionToObject(
+ "converted non-integer value",
+ helper, "123.45", Integer.class);
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", Integer.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Integer.class);
+ }
+
+
+ public void testConvertLong() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertEquals("xsd:long", helper.getXsdType(Long.class));
+
+ String str1 = "1234567890";
+ Long val1 = Long.valueOf(1234567890L);
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Long.class));
+
+ String str2 = "-1234567890";
+ Long val2 = Long.valueOf(-1234567890L);
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, Long.class));
+
+ String str3 = " -1234567890 ";
+ Long val3 = Long.valueOf(-1234567890L);
+ assertEquals(val3, helper.parse(str3, Long.class));
+
+ assertFailsConversionToObject(
+ "converted too-large value",
+ helper, "123456789012345678901234567890", Long.class);
+
+ assertFailsConversionToObject(
+ "converted non-integer value",
+ helper, "123.45", Long.class);
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", Long.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Long.class);
+ }
+
+
+ public void testConvertFloatDefault() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ // default float conversion is compatible with XSD type def
+ assertEquals("xsd:decimal", helper.getXsdType(Float.class));
+
+ // note: for default-format tests, strings are generated from values
+ Float val1 = Float.valueOf(1234f);
+ String str1 = val1.toString();
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Float.class));
+
+ Float val2 = Float.valueOf(-1234f);
+ String str2 = val2.toString();
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, Float.class));
+
+ String str3 = " -1234.5 ";
+ Float val3 = Float.valueOf(-1234.5f);
+ assertEquals(val3, helper.parse(str3, Float.class));
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", Float.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Float.class);
+ }
+
+
+ public void testConvertFloatXsd() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper(true);
+
+ assertEquals("xsd:decimal", helper.getXsdType(Float.class));
+
+ String str1 = "1234.0";
+ Float val1 = Float.valueOf(1234f);
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Float.class));
+
+ String str2 = "-1234.0";
+ Float val2 = Float.valueOf(-1234f);
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, Float.class));
+
+ String str3 = " -1234.5 ";
+ Float val3 = Float.valueOf(-1234.5f);
+ assertEquals(val3, helper.parse(str3, Float.class));
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", Float.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Float.class);
+ }
+
+
+ public void testConvertDoubleDefault() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ // default double conversion is compatible with XSD type def
+ assertEquals("xsd:decimal", helper.getXsdType(Double.class));
+
+ // note: for default-format tests, strings are generated from values
+ Double val1 = Double.valueOf(1234567890.5);
+ String str1 = val1.toString();
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Double.class));
+
+ Double val2 = Double.valueOf(-1234567890.1);
+ String str2 = val2.toString();
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, Double.class));
+
+ String str3 = " -1234.5 ";
+ Double val3 = Double.valueOf(-1234.5);
+ assertEquals(val3, helper.parse(str3, Double.class));
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", Double.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Double.class);
+ }
+
+
+ public void testConvertDoubleXsd() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper(true);
+
+ assertEquals("xsd:decimal", helper.getXsdType(Double.class));
+
+ // while for XSD-format tests, we want to verify the strings
+ String str1 = "1234567890.5";
+ Double val1 = Double.valueOf(1234567890.5);
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Double.class));
+
+ String str2 = "-1234567890.1";
+ Double val2 = Double.valueOf(-1234567890.1);
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, Double.class));
+
+ String str3 = " -1234.5 ";
+ Double val3 = Double.valueOf(-1234.5);
+ assertEquals(val3, helper.parse(str3, Double.class));
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", Double.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Double.class);
+ }
+
+
+ public void testConvertBigInteger() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertEquals("xsd:decimal", helper.getXsdType(BigInteger.class));
+
+ String str1 = "123456789012345678901234567890";
+ BigInteger val1 = new BigInteger(str1);
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, BigInteger.class));
+
+ String str2 = "-123456789012345678901234567890";
+ BigInteger val2 = new BigInteger(str2);
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, BigInteger.class));
+
+ assertFailsConversionToObject(
+ "converted non-integer value",
+ helper, "123.45", BigInteger.class);
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", BigInteger.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", BigInteger.class);
+ }
+
+
+ public void testConvertBigDecimal() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ assertEquals("xsd:decimal", helper.getXsdType(BigDecimal.class));
+
+ String str1 = "12345678901234567890.123456789";
+ BigDecimal val1 = new BigDecimal(str1);
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, BigDecimal.class));
+
+ String str2 = "-12345678901234567890.123456789";
+ BigDecimal val2 = new BigDecimal(str2);
+ assertEquals(str2, helper.stringify(val2));
+ assertEquals(val2, helper.parse(str2, BigDecimal.class));
+
+ assertFailsConversionToObject(
+ "converted non-numeric value",
+ helper, "ix", BigDecimal.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", BigDecimal.class);
+ }
+
+
+ public void testConvertDateDefault() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper();
+
+ // default date conversion is NOT compatible with XSD type def,
+ // so this is misleading
+ assertEquals("xsd:dateTime", helper.getXsdType(Date.class));
+
+ // for default conversion, we create string from value
+ Date val1 = new Date(1247551703000L);
+ String str1 = val1.toString();
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Date.class));
+
+
+ assertFailsConversionToObject(
+ "converted non-date value",
+ helper, "ix", Date.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Date.class);
+ }
+
+
+ public void testConvertDateXsd() throws Exception
+ {
+ PrimitiveConversionHelper helper = new PrimitiveConversionHelper(true);
+
+ assertEquals("xsd:dateTime", helper.getXsdType(Date.class));
+
+ Date val1 = new Date(1247551703000L);
+ String str1 = "2009-07-14T06:08:23";
+ assertEquals(str1, helper.stringify(val1));
+ assertEquals(val1, helper.parse(str1, Date.class));
+
+ assertFailsConversionToObject(
+ "converted non-date value",
+ helper, "ix", Date.class);
+
+ assertFailsConversionToObject(
+ "converted empty string",
+ helper, "", Date.class);
+ }
+}
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanHandler.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanHandler.java 2009-08-10 22:30:50 UTC (rev 97)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanHandler.java 2009-08-12 20:35:22 UTC (rev 98)
@@ -14,9 +14,13 @@
package net.sf.practicalxml.converter;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.xml.XMLConstants;
import org.w3c.dom.Element;
-
+import net.sf.practicalxml.DomUtil;
import net.sf.practicalxml.builder.XmlBuilder;
@@ -40,16 +44,72 @@
*/
private Element createElement(String data)
{
- return XmlBuilder.element("data", XmlBuilder.text(data))
- .toDOM().getDocumentElement();
+ Element elem = XmlBuilder.element("data").toDOM().getDocumentElement();
+ if (data != null)
+ DomUtil.appendText(elem, data);
+ return elem;
}
+ /**
+ * Reflectively executes the named method, and asserts that it throws
+ * a conversion exception. This method exists to keep clutter out of
+ * the test methods.
+ */
+ private void assertConversionFailure(
+ Xml2BeanHandler handler, String methodName,
+ Element elem, String failureText)
+ throws Exception
+ {
+ Method method = handler.getClass().getMethod(methodName, Element.class);
+ try
+ {
+ method.invoke(handler, elem);
+ fail(methodName + ": " + failureText);
+ }
+ catch (InvocationTargetException ee)
+ {
+ if (ee.getCause().getClass() != ConversionException.class)
+ fail(methodName + "threw unexpected exception: " + ee.getCause());
+ // otherwise, we're successful
+ }
+ }
+
+
//----------------------------------------------------------------------------
// Test Cases
//----------------------------------------------------------------------------
+ public void testConvertString() throws Exception
+ {
+ Xml2BeanHandler handler = new Xml2BeanHandler();
+ Element data1 = createElement("foo");
+ assertEquals("foo", handler.convertString(data1));
+
+ Element data2 = createElement("");
+ assertEquals("", handler.convertString(data2));
+ }
+
+
+ public void testConvertCharacter() throws Exception
+ {
+ Xml2BeanHandler handler = new Xml2BeanHandler();
+
+ Element data1 = createElement("A");
+ assertEquals(Character.valueOf('A'), handler.convertCharacter(data1));
+
+ Element data2 = createElement("\uFB01");
+ assertEquals(Character.valueOf('\uFB01'), handler.convertCharacter(data2));
+
+ Element data3 = createElement("");
+ assertEquals(Character.valueOf('\0'), handler.convertCharacter(data3));
+
+ Element data4 = createElement("ix");
+ assertConversionFailure(handler, "convertCharacter", data4, "converted invalid value");
+ }
+
+
public void testConvertBoolean() throws Exception
{
Xml2BeanHandler handler = new Xml2BeanHandler();
@@ -66,7 +126,11 @@
Element data4 = createElement("0");
assertEquals(Boolean.FALSE, handler.convertBoolean(data4));
- // FIXME - test failure
+ Element data5 = createElement("ix");
+ assertConversionFailure(handler, "convertBoolean", data5, "converted invalid value");
+
+ Element data6 = createElement("");
+ assertConversionFailure(handler, "convertBoolean", data6, "converted empty value");
}
@@ -80,73 +144,116 @@
Element data2 = createElement("-123");
assertEquals(Byte.valueOf((byte)-123), handler.convertByte(data2));
- // FIXME - test failure
+ Element data3 = createElement("ix");
+ assertConversionFailure(handler, "convertByte", data3, "converted invalid value");
+
+ Element data4 = createElement("1234567");
+ assertConversionFailure(handler, "convertByte", data4, "converted too-large value");
+
+ Element data5 = createElement("");
+ assertConversionFailure(handler, "convertByte", data5, "converted empty value");
}
- public void testConvertCharacter() throws Exception
+ public void testConvertShort() throws Exception
{
Xml2BeanHandler handler = new Xml2BeanHandler();
- Element data1 = createElement("A");
- assertEquals(Character.valueOf('A'), handler.convertCharacter(data1));
+ Element data1 = createElement("12345");
+ assertEquals(Short.valueOf((short)12345), handler.convertShort(data1));
- Element data2 = createElement("\uFB01");
- assertEquals(Character.valueOf('\uFB01'), handler.convertCharacter(data2));
+ Element data2 = createElement("-12345");
+ assertEquals(Short.valueOf((short)-12345), handler.convertShort(data2));
- Element data3 = createElement("");
- assertEquals(Character.valueOf('\0'), handler.convertCharacter(data3));
+ Element data3 = createElement("ix");
+ assertConversionFailure(handler, "convertShort", data3, "converted non-numeric value");
- // FIXME - test failure -- multi-character?
- }
+ Element data4 = createElement("1234567");
+ assertConversionFailure(handler, "convertShort", data4, "converted too-large value");
+ Element data5 = createElement("123.45");
+ assertConversionFailure(handler, "convertShort", data5, "converted non-integer value");
-// public void testConvertDate() throws Exception
-// {
-// }
+ Element data6 = createElement("");
+ assertConversionFailure(handler, "convertShort", data6, "converted empty value");
+ }
- public void testConvertDouble() throws Exception
+ public void testConvertInteger() throws Exception
{
Xml2BeanHandler handler = new Xml2BeanHandler();
- Element data = createElement("1234567890.125");
- assertEquals(Double.valueOf(1234567890.125), handler.convertDouble(data));
+ Element data1 = createElement("123456789");
+ assertEquals(Integer.valueOf(123456789), handler.convertInteger(data1));
- // FIXME - test failure
+ Element data2 = createElement("-123456789");
+ assertEquals(Integer.valueOf(-123456789), handler.convertInteger(data2));
+
+ Element data3 = createElement("ix");
+ assertConversionFailure(handler, "convertInteger", data3, "converted non-numeric value");
+
+ Element data4 = createElement("123456789012345");
+ assertConversionFailure(handler, "convertInteger", data4, "converted too-large value");
+
+ Element data5 = createElement("123.45");
+ assertConversionFailure(handler, "convertInteger", data5, "converted non-integer value");
+
+ Element data6 = createElement("");
+ assertConversionFailure(handler, "convertInteger", data6, "converted empty value");
}
- public void testConvertFloat() throws Exception
+ public void testConvertLong() throws Exception
{
Xml2BeanHandler handler = new Xml2BeanHandler();
- Element data = createElement("1234.5");
- assertEquals(Float.valueOf((float)1234.5), handler.convertFloat(data));
+ Element data1 = createElement("1234567890123456");
+ assertEquals(Long.valueOf(1234567890123456L), handler.convertLong(data1));
- // FIXME - test failure
+ Element data2 = createElement("-1234567890123456");
+ assertEquals(Long.valueOf(-1234567890123456L), handler.convertLong(data2));
+
+ Element data3 = createElement("ix");
+ assertConversionFailure(handler, "convertLong", data3, "converted non-numeric value");
+
+ Element data4 = createElement("123456789012345123456789012345");
+ assertConversionFailure(handler, "convertLong", data4, "converted too-large value");
+
+ Element data5 = createElement("123.45");
+ assertConversionFailure(handler, "convertLong", data5, "converted non-integer value");
+
+ Element data6 = createElement("");
+ assertConversionFailure(handler, "convertLong", data6, "converted empty value");
}
- public void testConvertInteger() throws Exception
+ public void testConvertFloat() throws Exception
{
Xml2BeanHandler handler = new Xml2BeanHandler();
- Element data = createElement("123456789");
- assertEquals(Integer.valueOf(123456789), handler.convertInteger(data));
+ Element data1 = createElement("1234.5");
+ assertEquals(Float.valueOf((float)1234.5), handler.convertFloat(data1));
- // FIXME - test failure
+ Element data2 = createElement("ix");
+ assertConversionFailure(handler, "convertFloat", data2, "converted non-numeric value");
+
+ Element data3 = createElement("");
+ assertConversionFailure(handler, "convertFloat", data3, "converted empty value");
}
- public void testConvertLong() throws Exception
+ public void testConvertDouble() throws Exception
{
Xml2BeanHandler handler = new Xml2BeanHandler();
- Element data = createElement("1234567890123456");
- assertEquals(Long.valueOf(1234567890123456L), handler.convertLong(data));
+ Element data1 = createElement("1234567890.125");
+ assertEquals(Double.valueOf(1234567890.125), handler.convertDouble(data1));
- // FIXME - test failure
+ Element data2 = createElement("ix");
+ assertConversionFailure(handler, "convertDouble", data2, "converted non-numeric value");
+
+ Element data3 = createElement("");
+ assertConversionFailure(handler, "convertDouble", data3, "converted empty value");
}
@@ -155,25 +262,11 @@
// }
- public void testConvertShort() throws Exception
- {
- Xml2BeanHandler handler = new Xml2BeanHandler();
+// public void testConvertDate() throws Exception
+// {
+// }
- Element data = createElement("12345");
- assertEquals(Short.valueOf((short)12345), handler.convertShort(data));
- // FIXME - test failure
- }
-
-
- public void testConvertString() throws Exception
- {
- Xml2BeanHandler handler = new Xml2BeanHandler();
-
- Element data = createElement("foo");
- assertEquals("foo", handler.convertString(data));
- }
-
// public void testConvertList() throws Exception
// {
// }
@@ -197,4 +290,118 @@
// public void testConvertObjectArray() throws Exception
// {
// }
+
+
+ public void testConvertNull() throws Exception
+ {
+ Xml2BeanHandler handler = new Xml2BeanHandler();
+
+ Element nullData = createElement(null);
+
+ assertNull(handler.convertString(nullData));
+ assertNull(handler.convertCharacter(nullData));
+ assertNull(handler.convertBoolean(nullData));
+ assertNull(handler.convertByte(nullData));
+ assertNull(handler.convertShort(nullData));
+ assertNull(handler.convertInteger(nullData));
+ assertNull(handler.convertLong(nullData));
+ assertNull(handler.convertFloat(nullData));
+ assertNull(handler.convertDouble(nullData));
+// assertNull(handler.convertNumber(nullData)); FIXME
+// assertNull(handler.convertDate(nullData)); FIXME
+// assertNull(handler.convertList(nullData)); FIXME
+// assertNull(handler.convertMap(nullData)); FIXME
+// assertNull(handler.convertSet(nullData)); FIXME
+// assertNull(handler.convertObject(nullData)); FIXME
+// assertNull(handler.convertObjectArray(nullData)); FIXME
+ }
+
+
+ public void testConvertEmptyAsNull() throws Exception
+ {
+ Xml2BeanHandler handler = new Xml2BeanHandler(Xml2BeanOptions.CONVERT_BLANK_AS_NULL);
+
+ Element empty = createElement(null);
+
+ assertNull(handler.convertString(empty));
+ assertNull(handler.convertCharacter(empty));
+ assertNull(handler.convertBoolean(empty));
+ assertNull(handler.convertByte(empty));
+ assertNull(handler.convertShort(empty));
+ assertNull(handler.convertInteger(empty));
+ assertNull(handler.convertLong(empty));
+ assertNull(handler.convertFloat(empty));
+ assertNull(handler.convertDouble(empty));
+// assertNull(handler.convertNumber(empty)); FIXME
+// assertNull(handler.convertDate(empty)); FIXME
+// assertNull(handler.convertList(empty)); FIXME
+// assertNull(handler.convertMap(empty)); FIXME
+// assertNull(handler.convertSet(empty)); FIXME
+// assertNull(handler.convertObject(empty)); FIXME
+// assertNull(handler.convertObjectArray(empty)); FIXME
+
+ Element blank = createElement(" \t\n ");
+
+ assertNull(handler.convertString(blank));
+ assertNull(handler.convertCharacter(blank));
+ assertNull(handler.convertBoolean(blank));
+ assertNull(handler.convertByte(blank));
+ assertNull(handler.convertShort(blank));
+ assertNull(handler.convertInteger(blank));
+ assertNull(handler.convertLong(blank));
+ assertNull(handler.convertFloat(blank));
+ assertNull(handler.convertDouble(blank));
+// assertNull(handler.convertNumber(blank)); FIXME
+// assertNull(handler.convertDate(blank)); FIXME
+// assertNull(handler.convertList(blank)); FIXME
+// assertNull(handler.convertMap(blank)); FIXME
+// assertNull(handler.convertSet(blank)); FIXME
+// assertNull(handler.convertObject(blank)); FIXME
+// assertNull(handler.convertObjectArray(blank)); FIXME
+ }
+
+
+ public void testRequireXsiNil() throws Exception
+ {
+ Xml2BeanHandler handler = new Xml2BeanHandler(Xml2BeanOptions.REQUIRE_XSI_NIL);
+
+ Element badData = createElement(null);
+
+ assertConversionFailure(handler, "convertString", badData, "converted empty without xsi:nil");
+ assertConversionFailure(handler, "convertCharacter", badData, "converted empty without xsi:nil");
+ assertConversionFailure(handler, "convertBoolean", badData, "converted empty without xsi:nil");
+ assertConversionFailure(handler, "convertByte", badData, "converted empty without xsi:nil");
+ assertConversionFailure(handler, "convertShort", badData, "converted empty without xsi:nil");
+ assertConversionFailure(handler, "convertInteger", badData, "converted empty without xsi:nil");
+ assertConversionFailure(handler, "convertLong", badData, "converted empty without xsi:nil");
+ assertConversionFailure(handler, "convertFloat", badData, "converted empty without xsi:nil");
+ assertConversionFailure(handler, "convertDouble", badData, "converted empty without xsi:nil");
+// assertConversionFailure(handler, "convertNumber", badData, "converted empty without xsi:nil"); FIXME
+// assertConversionFailure(handler, "convertDate", badData, "converted empty without xsi:nil"); FIXME
+// assertConversionFailure(handler, "convertList", badData, "converted empty without xsi:nil"); FIXME
+// assertConversionFailure(handler, "convertMap", badData, "converted empty without xsi:nil"); FIXME
+// assertConversionFailure(handler, "convertSet", badData, "converted empty without xsi:nil"); FIXME
+// assertConversionFailure(handler, "convertObject", badData, "converted empty without xsi:nil"); FIXME
+// assertConversionFailure(handler, "convertObjectArray", badData, "converted empty without xsi:nil"); FIXME
+
+ Element goodData = createElement(null);
+ goodData.setAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil", "true");
+
+ assertNull(handler.convertString(goodData));
+ assertNull(handler.convertCharacter(goodData));
+ assertNull(handler.convertBoolean(goodData));
+ assertNull(handler.convertByte(goodData));
+ assertNull(handler.convertShort(goodData));
+ assertNull(handler.convertInteger(goodData));
+ assertNull(handler.convertLong(goodData));
+ assertNull(handler.convertFloat(goodData));
+ assertNull(handler.convertDouble(goodData));
+// assertNull(handler.convertNumber(goodData)); FIXME
+// assertNull(handler.convertDate(goodData)); FIXME
+// assertNull(handler.convertList(goodData)); FIXME
+// assertNull(handler.convertMap(goodData)); FIXME
+// assertNull(handler.convertSet(goodData)); FIXME
+// assertNull(handler.convertObject(goodData)); FIXME
+// assertNull(handler.convertObjectArray(goodData)); FIXME
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|