You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by cl...@apache.org on 2013/09/07 20:59:00 UTC

svn commit: r1520788 [4/6] - in /jena/Experimental/new-test/src/test/java/com/hp/hpl/jena: datatypes/xsd/ graph/ graph/compose/ graph/impl/ shared/ testing_framework/

Modified: jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/TestTypedLiterals.java
URL: http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/TestTypedLiterals.java?rev=1520788&r1=1520787&r2=1520788&view=diff
==============================================================================
--- jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/TestTypedLiterals.java (original)
+++ jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/TestTypedLiterals.java Sat Sep  7 18:58:59 2013
@@ -19,11 +19,9 @@
 package com.hp.hpl.jena.graph;
 
 import static org.junit.Assert.*;
-import static com.hp.hpl.jena.testing_framework.GraphTestUtils.*;
-
-import java.math.BigDecimal ;
-import java.math.BigInteger ;
-import java.text.SimpleDateFormat ;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
@@ -31,1308 +29,1469 @@ import java.util.Iterator;
 import java.util.SimpleTimeZone;
 import java.util.TimeZone;
 
-
-import junit.framework.TestCase ;
-import junit.framework.TestSuite ;
-import org.apache.xerces.impl.dv.util.HexBin ;
-import org.junit.Assert ;
+import org.apache.xerces.impl.dv.util.HexBin;
+import org.junit.Assert;
 import org.junit.Test;
 
-import com.hp.hpl.jena.datatypes.BaseDatatype ;
-import com.hp.hpl.jena.datatypes.DatatypeFormatException ;
-import com.hp.hpl.jena.datatypes.RDFDatatype ;
-import com.hp.hpl.jena.datatypes.TypeMapper ;
-import com.hp.hpl.jena.datatypes.xsd.* ;
-import com.hp.hpl.jena.datatypes.xsd.impl.XMLLiteralType ;
-import com.hp.hpl.jena.enhanced.EnhNode ;
-import com.hp.hpl.jena.graph.* ;
-import com.hp.hpl.jena.graph.impl.LiteralLabel ;
-import com.hp.hpl.jena.graph.impl.LiteralLabelFactory ;
-import com.hp.hpl.jena.rdf.model.* ;
-import com.hp.hpl.jena.shared.impl.JenaParameters ;
-import com.hp.hpl.jena.vocabulary.XSD ;
-   
+import com.hp.hpl.jena.datatypes.BaseDatatype;
+import com.hp.hpl.jena.datatypes.DatatypeFormatException;
+import com.hp.hpl.jena.datatypes.RDFDatatype;
+import com.hp.hpl.jena.datatypes.TypeMapper;
+import com.hp.hpl.jena.datatypes.xsd.*;
+import com.hp.hpl.jena.datatypes.xsd.impl.XMLLiteralType;
+import com.hp.hpl.jena.enhanced.EnhNode;
+import com.hp.hpl.jena.graph.impl.LiteralLabel;
+import com.hp.hpl.jena.graph.impl.LiteralLabelFactory;
+import com.hp.hpl.jena.rdf.model.*;
+import com.hp.hpl.jena.shared.impl.JenaParameters;
+import com.hp.hpl.jena.vocabulary.XSD;
+
 /**
- * Unit test for the typed literal machinery - including RDFDatatype,
- * TypeMapper and LiteralLabel.
+ * Unit test for the typed literal machinery - including RDFDatatype, TypeMapper
+ * and LiteralLabel.
  */
-public class TestTypedLiterals  {
-              
-    /** dummy model used as a literal factory */
-    private Model m = ModelFactory.createDefaultModel();
-    
-    // Temporary for debug
-    /*
-    static {
-        Locale.setDefault(Locale.ITALY);
-        TimeZone.setDefault(TimeZone.getTimeZone("CEST"));
-    }
-    */
-    
-    
-    /**
-     * Test the base functioning of unknown datatypes
-     */
-    @Test
-    public void testUnknown() {
-        String typeURI = "urn:x-hp-dt:unknown";
-        String typeURI2 = "urn:x-hp-dt:unknown2";
-
-        boolean originalFlag = JenaParameters.enableSilentAcceptanceOfUnknownDatatypes;
-        JenaParameters.enableSilentAcceptanceOfUnknownDatatypes = true;
-        Literal l1 = m.createTypedLiteral("foo", typeURI);
-        Literal l3 = m.createTypedLiteral("15", typeURI);
-        Literal l5 = m.createTypedLiteral("foo", typeURI2);
-        Literal l6 = m.createLiteral("foo", "lang1");
-        JenaParameters.enableSilentAcceptanceOfUnknownDatatypes = originalFlag;
-        // Check for successful creation
-        
-        assertNotNull(l1);
-        assertNotNull(l3);
-        assertNotNull(l5);
-        
-        // check equality function
-        assertDiffer("datatype sensitive", l1, l5);
-        assertDiffer("value sensitive", l1, l3);
-        assertDiffer("typed and plain differ", l1, l6);
-
-        // Check typed accessors
-        try {
-            l3.getInt();
-            assertTrue("Allowed int conversion", false);
-        } catch (DatatypeFormatException e) {}
-        assertEquals("Extract value", l1.getValue(), new BaseDatatype.TypedValue("foo", typeURI));
-        assertEquals("Extract xml tag", l1.isWellFormedXML(), false);
-        
-        JenaParameters.enableSilentAcceptanceOfUnknownDatatypes = false;
-        boolean foundException = false;
-        try {
-            m.createTypedLiteral("food", typeURI+"3");
-        } catch (DatatypeFormatException e2) {
-            foundException = true;
-        }
-        JenaParameters.enableSilentAcceptanceOfUnknownDatatypes = originalFlag;
-        assertTrue("Detected unknown datatype", foundException);
-        
-        // Check we can create a literal of an unregistered java type without anything blowing up
-        Object foo = new java.sql.Date(123456l);
-        LiteralLabel ll = LiteralLabelFactory.create(foo);
-        assertEquals(ll.getLexicalForm(), foo.toString());
-    }
-    
-    /**
-     * Tests the base functioning of a user defined datatype
-     */
-    @Test
-    public void testUserDef() {
-        // Register the user defined type for rationals
-        RDFDatatype rtype = RationalType.theRationalType;
-        TypeMapper.getInstance().registerDatatype(rtype);
-
-
-        Literal l1 = m.createTypedLiteral("3/5", rtype);
-        Literal l3 = m.createTypedLiteral("7/5", rtype);
-        
-        // Check for successful creation
-        assertNotNull(l1);
-        assertNotNull(l3);
-        
-        // check equality function
-        assertDiffer("values should be tested!", l1, l3);
-
-        // Check typed accessors
-        assertSame("Datatype incorrect", l1.getDatatype(), rtype);
-        assertEquals("Datatype uri incorrect", l1.getDatatypeURI(), RationalType.theTypeURI);
-        Object val = l1.getValue();
-        assertTrue("Value space check", val instanceof Rational);
-        assertTrue("Value check", ((Rational)val).getNumerator() == 3);
-        assertTrue("Value check", ((Rational)val).getDenominator() == 5);
-        try {
-            l1.getInt();
-            assertTrue("Allowed int conversion", false);
-        } catch (DatatypeFormatException e) {}
-        assertEquals("Extract xml tag", l1.isWellFormedXML(), false);
-    }
-
-    @Test
-    public void testXMLLiteral() {
-    	Literal ll;
-    	
-    	ll = m.createLiteral("<bad",true);
-    	
-    	assertTrue("Error checking must be off.",((EnhNode)ll).asNode().getLiteralIsXML());
-		ll = m.createTypedLiteral("<bad/>",XMLLiteralType.theXMLLiteralType);
-		assertFalse("Error checking must be on.",((EnhNode)ll).asNode().getLiteralIsXML());
-		ll = m.createTypedLiteral("<good></good>",XMLLiteralType.theXMLLiteralType);
-		assertTrue("Well-formed XMLLiteral.",((EnhNode)ll).asNode().getLiteralIsXML());
-    
-    }
-
-    /**
-     * Tests basic XSD integer types()
-     */
-    @Test
-    public void testXSDbasics() {
-        String xsdIntURI = "http://www.w3.org/2001/XMLSchema#int";
-        
-        // Check int and basic equality processing
-        Literal l1 = m.createTypedLiteral(42);  // default map
-        Literal l2 = m.createTypedLiteral("42", XSDDatatype.XSDint);
-        Literal l4 = m.createTypedLiteral("63");  // default map
-        
-        assertSameValueAs("Default map failed", l1, l2);
-        assertEquals("Value wrong", l1.getValue(), new Integer(42));
-        assertEquals("class wrong", l1.getValue().getClass(), Integer.class);
-        assertEquals("Value accessor problem", l1.getInt(), 42);
-        assertEquals("wrong type name", l2.getDatatypeURI(), xsdIntURI);
-        assertEquals("wrong type", l2.getDatatype(), XSDDatatype.XSDint);
-        assertDiffer("Not value sensitive", l1, l4);
-        checkIllegalLiteral("zap", XSDDatatype.XSDint);
-        checkIllegalLiteral("42.1", XSDDatatype.XSDint);
-        
-        Literal l5 = m.createTypedLiteral("42", XSDDatatype.XSDnonNegativeInteger);
-        assertSameValueAs("type coercion", l2, l5);
-        
-        // Check float/double
-        l1 = m.createTypedLiteral(42.42);  // default map
-        l2 = m.createTypedLiteral("42.42", XSDDatatype.XSDfloat);
-        Literal l3 = m.createTypedLiteral("42.42", XSDDatatype.XSDdouble);
-        
-        assertEquals("class wrong", l1.getValue().getClass(), Double.class);
-        assertFloatEquals("value wrong", ((Double)(l1.getValue())).floatValue(), 42.42);
-        assertEquals("class wrong", l2.getValue().getClass(), Float.class);
-        assertFloatEquals("value wrong", ((Float)(l2.getValue())).floatValue(), 42.42);
-        assertFloatEquals("Value accessor problem", l1.getFloat(), 42.42);
-        assertEquals("wrong type", l2.getDatatype(), XSDDatatype.XSDfloat);
-        assertSameValueAs("equality fn", l1, l3);
-        
-        // Minimal check on long, short, byte
-        checkLegalLiteral("12345", XSDDatatype.XSDlong, Integer.class, new Integer(12345));
-        checkLegalLiteral("-12345", XSDDatatype.XSDlong, Integer.class, new Integer(-12345));
-        checkIllegalLiteral("2.3", XSDDatatype.XSDlong);
-        
-        checkLegalLiteral("1234", XSDDatatype.XSDshort, Integer.class, new Integer((short)1234));
-        checkLegalLiteral("-1234", XSDDatatype.XSDshort, Integer.class, new Integer((short)-1234));
-        checkLegalLiteral("32767", XSDDatatype.XSDshort, Integer.class, new Integer((short)32767));
-        checkLegalLiteral("-32768", XSDDatatype.XSDshort, Integer.class, new Integer((short)-32768));
-        checkIllegalLiteral("32769", XSDDatatype.XSDshort);
-        checkIllegalLiteral("2.3", XSDDatatype.XSDshort);
-
-        checkLegalLiteral("42", XSDDatatype.XSDbyte, Integer.class, new Integer((byte)42));
-        checkLegalLiteral("-42", XSDDatatype.XSDbyte, Integer.class, new Integer((byte)-42));
-        checkLegalLiteral("127", XSDDatatype.XSDbyte, Integer.class, new Integer((byte)127));
-        checkLegalLiteral("-128", XSDDatatype.XSDbyte, Integer.class, new Integer((byte)-128));
-        checkIllegalLiteral("32769", XSDDatatype.XSDbyte);
-        checkIllegalLiteral("128", XSDDatatype.XSDbyte);
-        checkIllegalLiteral("2.3", XSDDatatype.XSDbyte);
-        
-        // Minimal check on unsigned normal types
-        checkLegalLiteral("12345", XSDDatatype.XSDunsignedLong, Integer.class, new Integer(12345));
-        checkLegalLiteral("+12345", XSDDatatype.XSDunsignedLong, Integer.class, new Integer(12345));
-        checkLegalLiteral("9223372036854775808", XSDDatatype.XSDunsignedLong, BigInteger.class, new BigInteger("9223372036854775808"));
-        checkIllegalLiteral("-12345", XSDDatatype.XSDunsignedLong);
-        
-        checkLegalLiteral("12345", XSDDatatype.XSDunsignedInt, Integer.class, new Integer(12345));
-        checkLegalLiteral("2147483648", XSDDatatype.XSDunsignedInt, Long.class, new Long(2147483648l));
-        checkIllegalLiteral("-12345", XSDDatatype.XSDunsignedInt);
-        
-        checkLegalLiteral("1234", XSDDatatype.XSDunsignedShort, Integer.class, new Integer(1234));
-        checkLegalLiteral("32679", XSDDatatype.XSDunsignedShort, Integer.class, new Integer(32679));
-        checkIllegalLiteral("-12345", XSDDatatype.XSDunsignedShort);
-        
-        checkLegalLiteral("123", XSDDatatype.XSDunsignedByte, Integer.class, new Integer((short)123));
-        checkLegalLiteral("129", XSDDatatype.XSDunsignedByte, Integer.class, new Integer((short)129));
-        checkIllegalLiteral("-123", XSDDatatype.XSDunsignedByte);
-        
-        // Minimal check on the big num types
-        checkLegalLiteral("12345", XSDDatatype.XSDinteger, Integer.class, new Integer(12345));
-        checkLegalLiteral("0", XSDDatatype.XSDinteger, Integer.class, new Integer(0));
-        checkLegalLiteral("-12345", XSDDatatype.XSDinteger, Integer.class, new Integer(-12345));
-        checkLegalLiteral("9223372036854775808", XSDDatatype.XSDinteger, BigInteger.class, new BigInteger("9223372036854775808"));
-        
-        checkLegalLiteral("12345", XSDDatatype.XSDpositiveInteger, Integer.class, new Integer(12345));
-        checkIllegalLiteral("0", XSDDatatype.XSDpositiveInteger);
-        checkIllegalLiteral("-12345", XSDDatatype.XSDpositiveInteger);
-        checkLegalLiteral("9223372036854775808", XSDDatatype.XSDpositiveInteger, BigInteger.class, new BigInteger("9223372036854775808"));
-        
-        checkLegalLiteral("12345", XSDDatatype.XSDnonNegativeInteger, Integer.class, new Integer(12345));
-        checkLegalLiteral("0", XSDDatatype.XSDnonNegativeInteger, Integer.class, new Integer(0));
-        checkIllegalLiteral("-12345", XSDDatatype.XSDnonNegativeInteger);
-        checkLegalLiteral("9223372036854775808", XSDDatatype.XSDnonNegativeInteger, BigInteger.class, new BigInteger("9223372036854775808"));
-        
-        checkLegalLiteral("-12345", XSDDatatype.XSDnegativeInteger, Integer.class, new Integer(-12345));
-        checkIllegalLiteral("0", XSDDatatype.XSDnegativeInteger);
-        checkIllegalLiteral("12345", XSDDatatype.XSDnegativeInteger);
-        checkLegalLiteral("-9223372036854775808", XSDDatatype.XSDnegativeInteger, BigInteger.class, new BigInteger("-9223372036854775808"));
-        
-        checkLegalLiteral("-12345", XSDDatatype.XSDnonPositiveInteger, Integer.class, new Integer(-12345));
-        checkLegalLiteral("0", XSDDatatype.XSDnonPositiveInteger, Integer.class, new Integer(0));
-        checkIllegalLiteral("12345", XSDDatatype.XSDnonPositiveInteger);
-        checkLegalLiteral("-9223372036854775808", XSDDatatype.XSDnonPositiveInteger, BigInteger.class, new BigInteger("-9223372036854775808"));
-        
-        checkLegalLiteral("12345", XSDDatatype.XSDdecimal, Integer.class, new Integer("12345"));
-        checkLegalLiteral("0.0", XSDDatatype.XSDdecimal, Integer.class, new Integer("0"));
-        checkLegalLiteral("42.45", XSDDatatype.XSDdecimal, BigDecimal.class, new BigDecimal("42.45"));
-        checkLegalLiteral("9223372036854775808.1234", XSDDatatype.XSDdecimal, BigDecimal.class, new BigDecimal("9223372036854775808.1234"));
-        checkLegalLiteral("123.4", XSDDatatype.XSDdecimal, BigDecimal.class, new BigDecimal("123.4"));
-        checkIllegalLiteral("123,4", XSDDatatype.XSDdecimal);
-        
-        // Booleans
-        checkLegalLiteral("true", XSDDatatype.XSDboolean, Boolean.class, new Boolean(true));
-        checkLegalLiteral("false", XSDDatatype.XSDboolean, Boolean.class, new Boolean(false));
-        l1 = m.createTypedLiteral(true);
-        assertEquals("boolean mapping", XSDDatatype.XSDboolean, l1.getDatatype());
-        
-        // String types
-        checkLegalLiteral("hello world", XSDDatatype.XSDstring, String.class, "hello world");
-        l1 = m.createTypedLiteral("foo bar");
-        assertEquals("string mapping", XSDDatatype.XSDstring, l1.getDatatype());
-        
-    }
-    
-    /**
-     * Some selected equality tests which caused problems in WG tests
-     */
-    @Test
-    public void testMiscEquality() {
-        Literal l1 = m.createTypedLiteral("10", "http://www.w3.org/2001/XMLSchema#integer");
-        Literal l3 = m.createTypedLiteral("010", "http://www.w3.org/2001/XMLSchema#integer");
-        assertSameValueAs("Int lex form", l1, l3);
-        
-        l1 = m.createTypedLiteral("1", XSDDatatype.XSDint);
-        l3 = m.createTypedLiteral("1", XSDDatatype.XSDnonNegativeInteger);
-        
-        assertSameValueAs("numeric comparisons", l1, l3);
-    }
-    
-    /**
-     * Check that creating a typed literal from an object traps the interesting 
-     * special cases of String and Calendar.
-     */
-    @Test
-    public void testOverloads() {
-        // First case string overloads an explicit type
-        boolean old = JenaParameters.enableEagerLiteralValidation;
-        try {
-            JenaParameters.enableEagerLiteralValidation = true;
-            
-            // String overloading cases
-            boolean test1 = false;
-            try {
-                m.createTypedLiteral("foo", "http://www.w3.org/2001/XMLSchema#integer");
-            } catch (DatatypeFormatException e1 ) {
-                test1 = true;
-            }
-            assertTrue("detected illegal string, direct", test1);
-            
-            boolean test2 = false;
-            try {
-                Object foo = "foo";
-                m.createTypedLiteral(foo, "http://www.w3.org/2001/XMLSchema#integer");
-            } catch (DatatypeFormatException e2 ) {
-                test2 = true;
-            }
-            assertTrue("detected illegal string, overloaded", test2);
-            
-            // Overloading of calendar convenience functions
-            Calendar testCal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-            testCal.set(1999, 4, 30, 15, 9, 32);
-            testCal.set(Calendar.MILLISECOND, 0);   // ms field can be undefined on Linux
-            Literal lc = m.createTypedLiteral((Object)testCal);
-            assertEquals("calendar overloading test", m.createTypedLiteral("1999-05-30T15:09:32Z", XSDDatatype.XSDdateTime), lc );
-            
-        } finally {
-            JenaParameters.enableEagerLiteralValidation = old;
-        }
-    }
-    
-    /**
-     * Test plain literal/xsd:string/xsd:int equality operations
-     */
-    @Test
-    public void testPlainSameValueAs() {
-        Literal lString = m.createTypedLiteral("10", XSDDatatype.XSDstring );
-        Literal lPlain = m.createTypedLiteral("10", (RDFDatatype)null );
-        Literal lPlain3 = m.createTypedLiteral("10", (String)null );
-        Literal lPlain2 = m.createLiteral("10");
-        Literal lInt =  m.createTypedLiteral("10", XSDDatatype.XSDint );
-        
-        assertSameValueAs("Null type = plain literal", lPlain, lPlain2);
-        assertSameValueAs("Null type = plain literal", lPlain, lPlain3);
-        assertSameValueAs("Null type = plain literal", lPlain2, lPlain3);
-        assertTrue("null type", lPlain3.getDatatype() == null);
-        assertDiffer("String != int", lString, lInt);
-        assertDiffer("Plain != int", lPlain, lInt);
-        assertDiffer("Plain != int", lPlain2, lInt);
-        
-        // The correct answer to this is currently up to us
-        if (JenaParameters.enablePlainLiteralSameAsString) {
-            assertSameValueAs("String != plain??", lString, lPlain);
-            assertSameValueAs("String != plain??", lString, lPlain2);
-        } else {
-            assertDiffer("String != plain??", lString, lPlain);
-            assertDiffer("String != plain??", lString, lPlain2);
-        }
-        
-    }
-    
-    /**
-     * Test cases of numeric comparison.
-     */
-    @Test
-    public void testNumberSameValueAs() {
-        Literal lDouble = m.createTypedLiteral("5", XSDDatatype.XSDdouble);
-        Literal lDouble2 = m.createTypedLiteral("5.5", XSDDatatype.XSDdouble);
-        Literal lDouble3 = m.createTypedLiteral("5.5", XSDDatatype.XSDdouble);
-        Literal lDouble4 = m.createTypedLiteral("5.6", XSDDatatype.XSDdouble);
-        Literal lFloat = m.createTypedLiteral("5", XSDDatatype.XSDfloat);
-        Literal lint = m.createTypedLiteral("5", XSDDatatype.XSDint);
-        Literal linteger = m.createTypedLiteral("5", XSDDatatype.XSDinteger);
-        Literal lbyte = m.createTypedLiteral("5", XSDDatatype.XSDbyte);
-        
-        assertSameValueAs("integer subclasses equal", lint, linteger);
-        assertSameValueAs("integer subclasses equal", lint, lbyte);
-        assertSameValueAs("integer subclasses equal", linteger, lbyte);
-        assertSameValueAs("double equality", lDouble2, lDouble3);
-        
-        assertDiffer("float/double/int distinct", lDouble, lDouble2);
-        assertDiffer("float/double/int distinct", lDouble, lFloat);
-        assertDiffer("float/double/int distinct", lDouble, lint);
-        assertDiffer("float/double/int distinct", lDouble, linteger);
-        assertDiffer("float/double/int distinct", lDouble2, lint);
-        assertDiffer("float/double/int distinct", lDouble2, lbyte);
-        assertDiffer("float/double/int distinct", lint, lDouble);
-        assertDiffer("float/double/int distinct", lbyte, lDouble);
-        assertDiffer("float/double/int distinct", lint, lDouble2);
-        assertDiffer("float/double/int distinct", lbyte, lDouble2);
-        
-        assertDiffer("double inequality", lDouble3, lDouble4);
-        assertDiffer("double inequality", lDouble2, lDouble);
-        
-        // Check decimals
-        Literal lDecimal = m.createTypedLiteral("5.5", XSDDatatype.XSDdecimal);
-        Literal lDecimal2 = m.createTypedLiteral("5.6", XSDDatatype.XSDdecimal);
-        assertDiffer("decimal inequality", lDecimal, lDecimal2);
-    }
-    
-    /**
-     * Check basic handling of big integers and decimals
-     */
-    @Test
-    public void testBigNums() {
-        Literal l1 = m.createTypedLiteral("12345678901234567890", XSDDatatype.XSDinteger);
-        Literal l2 = m.createTypedLiteral("12345678901234567891", XSDDatatype.XSDinteger);
-        assertDiffer("Big integer equality", l1, l2);
-        
-        BigInteger bigint1 = new BigInteger("12345678901234567890");
-        Literal lb1 = m.createTypedLiteral(bigint1, XSDDatatype.XSDinteger);
-        assertSameValueAs("big integer creation equality", l1, lb1);
-        
-        BigDecimal bigdec1 = new BigDecimal("12345678901234567890.00");
-        Literal ld1 = m.createTypedLiteral(bigdec1, XSDDatatype.XSDdecimal);
-        BigDecimal bigdec1b = new BigDecimal("12345678901234567890.0");
-        Literal ld1b = m.createTypedLiteral(bigdec1b, XSDDatatype.XSDdecimal);
-        BigDecimal bigdec2 = new BigDecimal("12345678901234567890.1");
-        Literal ld2 = m.createTypedLiteral(bigdec2, XSDDatatype.XSDdecimal);
-        assertSameValueAs("big decimal equality check", ld1, ld1b);
-        assertSameValueAs("big decimal equality check", ld1, lb1);
-        assertDiffer("Decimal equality", ld1, ld2);
-        
-        BigDecimal bigdecF = new BigDecimal("12345678901234567890.1");
-        Literal ldF = m.createTypedLiteral(bigdecF, XSDDatatype.XSDdecimal);
-        BigDecimal bigdecFb = new BigDecimal("12345678901234567890.10");
-        Literal ldFb = m.createTypedLiteral(bigdecFb, XSDDatatype.XSDdecimal);
-        BigDecimal bigdecF2 = new BigDecimal("12345678901234567890.2");
-        Literal ldF2 = m.createTypedLiteral(bigdecF2, XSDDatatype.XSDdecimal);
-        assertSameValueAs("big decimal equality check", ldF, ldFb);
-        assertDiffer("Decimal equality", ldF, ldF2);
-    }
-    
-    /**
-     * Test case for a bug in retrieving a value like 3.00 from
-     * a probe like 3.0
-     */
-    @Test
-    public void testDecimalFind() {
-        RDFDatatype dt = XSDDatatype.XSDdecimal;
-        Node ns = NodeFactory.createURI("x") ;
-        Node np = NodeFactory.createURI("p") ;
-        Node nx1 = NodeFactory.createLiteral("0.50", null, dt) ;
-        Node nx2 = NodeFactory.createLiteral("0.500", null, dt) ;
-        Graph graph = Factory.createDefaultGraph() ;
-        graph.add(new Triple(ns, np, nx1)) ;
-        assertTrue( graph.find(Node.ANY, Node.ANY, nx2).hasNext() );  
-    }
-    
-    /**
-     * Test the internal machinery of decimal normalization directly
-     */
-    @Test
-    public void testDecimalCanonicalize() {
-        doTestDecimalCanonicalize("0.500", "0.5", BigDecimal.class);
-        doTestDecimalCanonicalize("0.50", "0.5", BigDecimal.class);
-        doTestDecimalCanonicalize("0.5", "0.5", BigDecimal.class);
-        doTestDecimalCanonicalize("0.0", "0", Integer.class);
-        doTestDecimalCanonicalize("5.0", "5", Integer.class);
-        doTestDecimalCanonicalize("500.0", "500", Integer.class);
-        doTestDecimalCanonicalize("5.00100", "5.001", BigDecimal.class);
-    }
-    
-    /**
-     * Helper for testDecimalCannonicalize. Run a single
-     * cannonicalization test on a value specified in string form.
-     */
-    private void doTestDecimalCanonicalize(String value, String expected, Class<?> expectedClass) {
-        Object normalized = XSDDatatype.XSDdecimal.cannonicalise( new BigDecimal(value) );
-        assertEquals(expected, normalized.toString());
-        assertEquals(expectedClass, normalized.getClass());
-    }
-    
-    /**
-     * Test data/time wrappers
-     */
-    @Test
-    public void testDateTime() {
-        // Duration
-        Literal l1 = m.createTypedLiteral("P1Y2M3DT5H6M7.50S", XSDDatatype.XSDduration);
-        assertEquals("duration data type", XSDDatatype.XSDduration, l1.getDatatype());
-        assertEquals("duration java type", XSDDuration.class, l1.getValue().getClass());
-        assertEquals("duration value", 1, ((XSDDuration)l1.getValue()).getYears());
-        assertEquals("duration value", 2, ((XSDDuration)l1.getValue()).getMonths());
-        assertEquals("duration value", 3, ((XSDDuration)l1.getValue()).getDays());
-        assertEquals("duration value", 5, ((XSDDuration)l1.getValue()).getHours());
-        assertEquals("duration value", 6, ((XSDDuration)l1.getValue()).getMinutes());
-        assertEquals("duration value", 7, ((XSDDuration)l1.getValue()).getFullSeconds());
-        assertEquals("duration value", BigDecimal.valueOf(75,1), ((XSDDuration)l1.getValue()).getBigSeconds());
-        assertFloatEquals("duration value", 18367.5, ((XSDDuration)l1.getValue()).getTimePart());
-        assertEquals("serialization", "P1Y2M3DT5H6M7.5S", l1.getValue().toString());
-        assertTrue("equality test", l1.sameValueAs( m.createTypedLiteral("P1Y2M3DT5H6M7.5S", XSDDatatype.XSDduration) ) );
-        assertTrue("inequality test", l1 != m.createTypedLiteral("P1Y2M2DT5H6M7.5S", XSDDatatype.XSDduration));
-        
-        l1 = m.createTypedLiteral("P1Y2M3DT5H0M", XSDDatatype.XSDduration);
-        assertEquals("serialization", "P1Y2M3DT5H", l1.getValue().toString());
-        
-        l1 = m.createTypedLiteral("P1Y", XSDDatatype.XSDduration);
-        assertEquals("duration data type", XSDDatatype.XSDduration, l1.getDatatype());
-        assertEquals("duration java type", XSDDuration.class, l1.getValue().getClass());
-        assertEquals("duration value", 1, ((XSDDuration)l1.getValue()).getYears());
-        assertEquals("serialization", "P1Y", l1.getValue().toString());
-        assertTrue("equality test", l1.sameValueAs( m.createTypedLiteral("P1Y", XSDDatatype.XSDduration) ) );
-        assertTrue("inequality test", l1 != m.createTypedLiteral("P1Y", XSDDatatype.XSDduration));
-
-        l1 = m.createTypedLiteral("-P120D", XSDDatatype.XSDduration);
-        Literal l2 = m.createTypedLiteral( l1.getValue() );
-        assertEquals("-P120D", l2.getLexicalForm() );
-
-        // Duration equality bug
-        Literal d1 = m.createTypedLiteral("PT1H1M1S", XSDDatatype.XSDduration);
-        Literal d2 = m.createTypedLiteral("PT1H1M1.1S", XSDDatatype.XSDduration);
-        assertTrue("duration compare", !d1.sameValueAs(d2));
-        XSDDuration dur1 = (XSDDuration)d1.getValue() ;
-        XSDDuration dur2 = (XSDDuration)d2.getValue() ;
-        assertEquals("duration compare order", 1, dur2.compare(dur1)) ;
-        
-        // dateTime
-        l1 = m.createTypedLiteral("1999-05-31T02:09:32Z", XSDDatatype.XSDdateTime);
-        XSDDateTime xdt = (XSDDateTime)l1.getValue();
-        assertEquals("dateTime data type", XSDDatatype.XSDdateTime, l1.getDatatype());
-        assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
-        assertEquals("dateTime value", 1999, xdt.getYears());
-        assertEquals("dateTime value", 5, xdt.getMonths());
-        assertEquals("dateTime value", 31, xdt.getDays());
-        assertEquals("dateTime value", 2, xdt.getHours());
-        assertEquals("dateTime value", 9, xdt.getMinutes());
-        assertEquals("dateTime value", 32, xdt.getFullSeconds());
-        assertEquals("serialization", "1999-05-31T02:09:32Z", l1.getValue().toString());
-        Calendar cal = xdt.asCalendar();
-        Calendar testCal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        testCal.set(1999, 4, 31, 2, 9, 32);
-        /*
-        assertEquals("calendar value", cal.get(Calendar.YEAR), testCal.get(Calendar.YEAR) );
-        assertEquals("calendar value", cal.get(Calendar.MONTH), testCal.get(Calendar.MONTH) );
-        assertEquals("calendar value", cal.get(Calendar.DATE), testCal.get(Calendar.DATE) );
-        assertEquals("calendar value", cal.get(Calendar.HOUR), testCal.get(Calendar.HOUR) );
-        assertEquals("calendar value", cal.get(Calendar.MINUTE), testCal.get(Calendar.MINUTE) );
-        assertEquals("calendar value", cal.get(Calendar.SECOND), testCal.get(Calendar.SECOND) );
-        */
-        testCal.set(Calendar.MILLISECOND, 0);   // ms field can be undefined on Linux
-        assertEquals("calendar value", cal, testCal);
-        assertEquals("equality test", l1, m.createTypedLiteral("1999-05-31T02:09:32Z", XSDDatatype.XSDdateTime));
-        assertTrue("inequality test", l1 != m.createTypedLiteral("1999-04-31T02:09:32Z", XSDDatatype.XSDdateTime));
-        
-        Calendar testCal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        testCal2.set(1999, 4, 30, 15, 9, 32);
-        testCal2.set(Calendar.MILLISECOND, 0);   // ms field can be undefined on Linux
-        Literal lc = m.createTypedLiteral(testCal2);
-        assertEquals("calendar 24 hour test", m.createTypedLiteral("1999-05-30T15:09:32Z", XSDDatatype.XSDdateTime), lc );
-        
-        assertEquals("calendar value", cal, testCal);
-        assertEquals("equality test", l1, m.createTypedLiteral("1999-05-31T02:09:32Z", XSDDatatype.XSDdateTime));
-
-        Calendar testCal3 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        testCal3.clear();
-        testCal3.set(1999, Calendar.JANUARY, 30, 15, 9, 32);
-        lc = m.createTypedLiteral(testCal3);
-        assertEquals("1999-01-30T15:09:32Z", lc.getLexicalForm());
-        String urib="rdf://test.com#";
-        String uri1=urib+"1";
-        String urip=urib+"prop";
-        String testN3 = "<"+uri1+"> <"+urip+"> \""+lc.getLexicalForm()+"\"^^<"+lc.getDatatypeURI()+"> .";
-        java.io.StringReader sr = new java.io.StringReader(testN3);
-        m.read(sr, urib, "N3");
-        assertTrue(m.contains(m.getResource(uri1),m.getProperty(urip)));
-        Resource r1 = m.getResource(uri1);
-        Property p = m.getProperty(urip);
-        XSDDateTime returnedDateTime = (XSDDateTime) r1.getProperty(p).getLiteral().getValue();
-        assertEquals("deserialized calendar value", testCal3, returnedDateTime.asCalendar());
-
-        // dateTime to calendar with milliseconds
-        Calendar testCal4 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        testCal4.set(1999, 4, 30, 15, 9, 32);
-        testCal4.set(Calendar.MILLISECOND, 25);
-        doDateTimeTest(testCal4, "1999-05-30T15:09:32.025Z", 32.025);
-        testCal4.set(Calendar.MILLISECOND, 250);
-        doDateTimeTest(testCal4, "1999-05-30T15:09:32.25Z", 32.25);
-        testCal4.set(Calendar.MILLISECOND, 2);
-        doDateTimeTest(testCal4, "1999-05-30T15:09:32.002Z", 32.002);
-        
-        // Illegal dateTimes
-        boolean ok = false;
-        boolean old = JenaParameters.enableEagerLiteralValidation;
-        try {
-            JenaParameters.enableEagerLiteralValidation = true;
-            l1 = m.createTypedLiteral(new Date(12345656l), XSDDatatype.XSDdateTime);
-        } catch (DatatypeFormatException e) {
-            ok = true;
-        } finally {
-            JenaParameters.enableEagerLiteralValidation = old;
-        }
-        assertTrue("Early detection of invalid literals", ok);
-            
-
-        // date
-        l1 = m.createTypedLiteral("1999-05-31", XSDDatatype.XSDdate);
-        assertEquals("dateTime data type", XSDDatatype.XSDdate, l1.getDatatype());
-        assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
-        xdt = (XSDDateTime)l1.getValue();
-        assertEquals("dateTime value", 1999, xdt.getYears());
-        assertEquals("dateTime value", 5, xdt.getMonths());
-        assertEquals("dateTime value", 31, xdt.getDays());
-        try {
-            xdt.getHours();
-            assertTrue("Failed to prevent illegal access", false);
-        } catch (IllegalDateTimeFieldException e) {}
-        
-        // time
-        l1 = m.createTypedLiteral("12:56:32", XSDDatatype.XSDtime);
-        assertEquals("dateTime data type", XSDDatatype.XSDtime, l1.getDatatype());
-        assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
-        xdt = (XSDDateTime)l1.getValue();
-        assertEquals("dateTime value", 12, xdt.getHours());
-        assertEquals("dateTime value", 56, xdt.getMinutes());
-        assertEquals("dateTime value", 32, xdt.getFullSeconds());
-        try {
-            xdt.getDays();
-            assertTrue("Failed to prevent illegal access", false);
-        } catch (IllegalDateTimeFieldException e) {}
-        
-        // gYearMonth
-        l1 = m.createTypedLiteral("1999-05", XSDDatatype.XSDgYearMonth);
-        assertEquals("dateTime data type", XSDDatatype.XSDgYearMonth, l1.getDatatype());
-        assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
-        xdt = (XSDDateTime)l1.getValue();
-        assertEquals("dateTime value", 1999, xdt.getYears());
-        assertEquals("dateTime value", 5, xdt.getMonths());
-        try {
-            xdt.getDays();
-            assertTrue("Failed to prevent illegal access", false);
-        } catch (IllegalDateTimeFieldException e) {}
-        
-        // gYear
-        l1 = m.createTypedLiteral("1999", XSDDatatype.XSDgYear);
-        assertEquals("dateTime data type", XSDDatatype.XSDgYear, l1.getDatatype());
-        assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
-        xdt = (XSDDateTime)l1.getValue();
-        assertEquals("dateTime value", 1999, xdt.getYears());
-        try {
-            xdt.getMonths();
-            assertTrue("Failed to prevent illegal access", false);
-        } catch (IllegalDateTimeFieldException e) {}
-        
-        // gMonth
-        l1 = m.createTypedLiteral("--05--", XSDDatatype.XSDgMonth);
-        assertEquals("dateTime data type", XSDDatatype.XSDgMonth, l1.getDatatype());
-        assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
-        xdt = (XSDDateTime)l1.getValue();
-        assertEquals("dateTime value", 5, xdt.getMonths());
-        try {
-            xdt.getYears();
-            assertTrue("Failed to prevent illegal access", false);
-        } catch (IllegalDateTimeFieldException e) {}
-        
-        // gMonthDay
-        l1 = m.createTypedLiteral("--05-25", XSDDatatype.XSDgMonthDay);
-        assertEquals("dateTime data type", XSDDatatype.XSDgMonthDay, l1.getDatatype());
-        assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
-        xdt = (XSDDateTime)l1.getValue();
-        assertEquals("dateTime value", 5, xdt.getMonths());
-        assertEquals("dateTime value", 25, xdt.getDays());
-        try {
-            xdt.getYears();
-            assertTrue("Failed to prevent illegal access", false);
-        } catch (IllegalDateTimeFieldException e) {}
-        
-        // gDay
-        l1 = m.createTypedLiteral("---25", XSDDatatype.XSDgDay);
-        assertEquals("dateTime data type", XSDDatatype.XSDgDay, l1.getDatatype());
-        assertEquals("dateTime java type", XSDDateTime.class, l1.getValue().getClass());
-        xdt = (XSDDateTime)l1.getValue();
-        assertEquals("dateTime value", 25, xdt.getDays());
-        try {
-            xdt.getMonths();
-            assertTrue("Failed to prevent illegal access", false);
-        } catch (IllegalDateTimeFieldException e) {}
-        
-        // Creation of datetime from a date object
-        Calendar ncal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        ncal.set(2003, 11, 8, 10, 50, 42);
-        ncal.set(Calendar.MILLISECOND, 0);
-        l1 = m.createTypedLiteral(ncal);
-        assertEquals("DateTime from date", XSDDatatype.XSDdateTime, l1.getDatatype());
-        assertEquals("DateTime from date", XSDDateTime.class, l1.getValue().getClass());
-        assertEquals("DateTime from date", "2003-12-08T10:50:42Z", l1.getValue().toString());
-        
-        // Thanks to Greg Shueler for DST patch and test case
-        //////some of below code from java.util.GregorianCalendar javadoc///////
-        // create a Pacific Standard Time time zone
-        SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000,  "America/Los_Angeles");
-
-        // set up rules for daylight savings time
-        pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 *  60 * 1000);
-        pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
-
-        // create a GregorianCalendar with the Pacific Daylight time  zone
-        ncal = new GregorianCalendar(pdt);
-        ncal.set(2004, 02, 21, 12, 50, 42);//before daylight savings time
-        ncal.set(Calendar.MILLISECOND, 0);
-        //System.err.println("cal is: "+ncal);
-        l1 = m.createTypedLiteral(ncal);
-        assertEquals("DateTime from date", XSDDatatype.XSDdateTime, l1.getDatatype());
-        assertEquals("DateTime from date", XSDDateTime.class, l1.getValue().getClass());
-        assertEquals("DateTime from date", "2004-03-21T20:50:42Z", l1.getValue().toString());
-        //System.err.println("date is: "+ncal.getTime());
-        ncal = new GregorianCalendar(pdt);
-        ncal.set(2004, 03, 21, 12, 50, 42);//within daylight savings time
-        ncal.set(Calendar.MILLISECOND, 0);
-        //System.err.println("cal is: "+ncal);
-        l1 = m.createTypedLiteral(ncal);
-        assertEquals("DateTime from date", XSDDatatype.XSDdateTime, l1.getDatatype());
-        assertEquals("DateTime from date", XSDDateTime.class, l1.getValue().getClass());
-        assertEquals("DateTime from date", "2004-04-21T19:50:42Z", l1.getValue().toString());
-        //System.err.println("date is: "+ncal.getTime());
-
-    } 
-    
-    // Internal helper
-    private void doDateTimeTest(Calendar cal, String lex, double time) {
-        Literal lc4 = m.createTypedLiteral(cal);
-        assertEquals("serialization", lex, lc4.getValue().toString());
-        assertEquals("calendar ms test", m.createTypedLiteral(lex, XSDDatatype.XSDdateTime), lc4 );
-        XSDDateTime dt4 = (XSDDateTime)lc4.getValue();
-        assertTrue("Fraction time check", Math.abs(dt4.getSeconds() - time) < 0.0001);
-        assertEquals(dt4.asCalendar(), cal);
-    }
-    
-    /**
-     * Test query applied to graphs containing typed values
-     */
-    @Test
-    public void testTypedContains() {
-        Model model = ModelFactory.createDefaultModel();
-        Property p = model.createProperty("urn:x-eg/p");
-        Literal l1 = model.createTypedLiteral("10", "http://www.w3.org/2001/XMLSchema#integer");
-        Literal l2 = model.createTypedLiteral("010", "http://www.w3.org/2001/XMLSchema#integer");
-        assertSameValueAs( "sameas test", l1, l2 );
-        Resource a = model.createResource("urn:x-eg/a");
-        a.addProperty( p, l1 );
-        assertTrue( model.getGraph().contains( a.asNode(), p.asNode(), l1.asNode() ) );
-        assertTrue( model.getGraph().contains( a.asNode(), p.asNode(), l2.asNode() ) );
-    }
-      
-    /**
-     * Test the isValidLiteral machinery
-     */
-    @Test
-    public void testIsValidLiteral() {
-        Literal l = m.createTypedLiteral("1000", XSDDatatype.XSDinteger);
-        LiteralLabel ll = l.asNode().getLiteral();
-        assertTrue(XSDDatatype.XSDlong.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDint.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDshort.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDunsignedInt.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDunsignedLong.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDunsignedShort.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDpositiveInteger.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDdecimal.isValidLiteral(ll));
-        assertTrue( ! XSDDatatype.XSDstring.isValidLiteral(ll));
-        assertTrue( ! XSDDatatype.XSDbyte.isValidLiteral(ll));
-        assertTrue( ! XSDDatatype.XSDnegativeInteger.isValidLiteral(ll));
-        
-        l = m.createTypedLiteral("-2", XSDDatatype.XSDinteger);
-        ll = l.asNode().getLiteral();
-        assertTrue(XSDDatatype.XSDlong.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDint.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDshort.isValidLiteral(ll));
-        assertTrue(! XSDDatatype.XSDunsignedInt.isValidLiteral(ll));
-        assertTrue(! XSDDatatype.XSDunsignedLong.isValidLiteral(ll));
-        assertTrue(! XSDDatatype.XSDunsignedShort.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDdecimal.isValidLiteral(ll));
-        assertTrue(! XSDDatatype.XSDpositiveInteger.isValidLiteral(ll));
-        assertTrue( ! XSDDatatype.XSDstring.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDbyte.isValidLiteral(ll));
-        assertTrue(XSDDatatype.XSDnegativeInteger.isValidLiteral(ll));
-
-        l = m.createTypedLiteral("4.5", XSDDatatype.XSDfloat);
-        ll = l.asNode().getLiteral();
-        assertTrue(! XSDDatatype.XSDdouble.isValidLiteral(ll));
-        assertTrue(! XSDDatatype.XSDdecimal.isValidLiteral(ll));
-                  
-        Literal l2 = m.createTypedLiteral("foo", XSDDatatype.XSDstring);
-        assertTrue(XSDDatatype.XSDstring.isValidLiteral(l2.asNode().getLiteral()));
-        assertTrue(XSDDatatype.XSDnormalizedString.isValidLiteral(l2.asNode().getLiteral()));
-        assertTrue( ! XSDDatatype.XSDint.isValidLiteral(l2.asNode().getLiteral()));
-        
-        l = m.createTypedLiteral("foo bar");
-        ll = l.asNode().getLiteral();
-        assertTrue(XSDDatatype.XSDstring.isValidLiteral(ll));
-        assertTrue(! XSDDatatype.XSDint.isValidLiteral(ll));
-       
-        l = m.createTypedLiteral("12");
-        ll = l.asNode().getLiteral();
-        assertTrue(XSDDatatype.XSDstring.isValidLiteral(ll));
-        assertTrue(! XSDDatatype.XSDint.isValidLiteral(ll));
-       
-       // Test the isValidValue form which had a problem with numbers
-       assertTrue(XSDDatatype.XSDnonNegativeInteger.isValidValue(new Integer(10)));
-       assertTrue(XSDDatatype.XSDnonNegativeInteger.isValidValue(new Integer(10)));
-       assertTrue(!XSDDatatype.XSDnonNegativeInteger.isValidValue(new Integer(-10)));
-       assertTrue(!XSDDatatype.XSDnonNegativeInteger.isValidValue("10"));
-       
-       // The correct behaviour on float/double is unclear but will be clarified
-       // by the SWBP working group task force on XML schema.
-       // For now we leave that float, double and the decimal tree are all distinct
-       assertTrue(XSDDatatype.XSDfloat.isValidValue(new Float("2.3")));
-       assertTrue(XSDDatatype.XSDdouble.isValidValue(new Double("2.3")));
-       assertTrue( ! XSDDatatype.XSDfloat.isValidValue(new Integer("2")));
-       assertTrue( ! XSDDatatype.XSDfloat.isValidValue(new Double("2.3")));
-    }
-
-    // These should not be used in data but we test they don't crash anything.
-    @Test
-    public void testIsValidLiteral1()
-    {
-        Literal lit = m.createTypedLiteral("100", XSDDatatype.XSD+"#anyType") ;
-        assertFalse(XSDDatatype.XSDinteger.isValidLiteral(lit.asNode().getLiteral()));
-    }
-    @Test
-    public void testIsValidLiteral2()
-    {
-        Literal lit = m.createTypedLiteral("100", XSDDatatype.XSD+"#anySimpleType") ;
-        assertFalse(XSDDatatype.XSDinteger.isValidLiteral(lit.asNode().getLiteral()));
-    }
-    
-
-    private static byte[] data = new byte[]{12, 42, 99};
-    
-    /**
-     * Test binary types base64 and hexbinary
-     */
-    @Test
-    public void testBinary1() {
-        // Check byte[] maps onto a binary type  - specifically base64Binary.
-        byte[] data = new byte[]{12, 42, 99};
-        Literal l = m.createTypedLiteral(data);
-        LiteralLabel ll = l.asNode().getLiteral();
-        
-        assertTrue("binary test 1", ll.getDatatype() instanceof XSDbinary);
-        
-        // base64 is registered for byte[] 
-        // hexBinary is not registered as a type for byte[] 
-        assertTrue("binary test 1a", ll.getDatatype() instanceof XSDbase64Binary) ;
-        assertEquals("binary test 1b", "DCpj", ll.getLexicalForm());
-    }
-    
-    @Test
-     public void testBinary2() {
-        // Check round tripping from value
-        LiteralLabel l2 = m.createTypedLiteral("DCpj", XSDDatatype.XSDbase64Binary).asNode().getLiteral();
-        Object data2 = l2.getValue();
-        assertTrue("binary test 3", data2 instanceof byte[]);
-        byte[] data2b = (byte[])data2;
-        assertEquals("binary test 4", data2b[0], data[0]);
-        assertEquals("binary test 5", data2b[1], data[1]);
-        assertEquals("binary test 6", data2b[2], data[2]);
-    }
-    
-    @Test
-    public void testBinary3() {
-        // Check hexBinary
-        Literal l = m.createTypedLiteral(data, XSDDatatype.XSDhexBinary);
-        LiteralLabel ll = l.asNode().getLiteral();
-        assertEquals("binary test 1b", ll.getDatatype(), XSDDatatype.XSDhexBinary);
-        assertEquals("binary test 2b", HexBin.encode(data), ll.getLexicalForm());
-        
-        // Check round tripping from value
-        LiteralLabel l2 = m.createTypedLiteral(ll.getLexicalForm(), XSDDatatype.XSDhexBinary).asNode().getLiteral();
-        Object data2 = l2.getValue();
-        assertTrue("binary test 3b", data2 instanceof byte[]);
-        byte[] data2b = ((byte[])data2);
-        assertEquals("binary test 4b", data2b[0], data[0]);
-        assertEquals("binary test 5b", data2b[1], data[1]);
-        assertEquals("binary test 6b", data2b[2], data[2]);
-        assertEquals(l2, ll);
-    }
-        
-    @Test
-    public void testBinary4() {   
-        Literal la = m.createTypedLiteral("GpM7", XSDDatatype.XSDbase64Binary);
-        Literal lb = m.createTypedLiteral("GpM7", XSDDatatype.XSDbase64Binary);
-        assertTrue("equality test", la.sameValueAs(lb));
-        
-        data = new byte[] {15, (byte)0xB7};
-        Literal l = m.createTypedLiteral(data, XSDDatatype.XSDhexBinary);
-        assertEquals("hexBinary encoding", "0FB7", l.getLexicalForm());
-    }
-    
-    /** Test that XSD anyURI is not sameValueAs XSD string (Xerces returns a string as the value for both) */ 
-    @Test
-    public void testXSDanyURI() {
-        Node node1 = NodeFactory.createLiteral("http://example/", null, XSDDatatype.XSDanyURI) ;
-        Node node2 = NodeFactory.createLiteral("http://example/", null, XSDDatatype.XSDstring) ;
-        assertFalse(node1.sameValueAs(node2)) ;
-    }
-    
-    /**
-     * Test a user error report concerning date/time literals
-     */
-    @Test
-    public void testDateTimeBug() {
-        // Bug in serialization
-        String XSDDateURI = XSD.date.getURI(); 
-        TypeMapper typeMapper=TypeMapper.getInstance(); 
-        RDFDatatype dt = typeMapper.getSafeTypeByName(XSDDateURI); 
-        Object obj = dt.parse("2003-05-21"); 
-        Literal literal = m.createTypedLiteral(obj, dt);        
-        literal.toString();     
-        Object value2 = dt.parse(obj.toString());
-        assertEquals(obj, value2);
-        
-        // Check alternative form doesn't provoke exceptions
-        RDFDatatype dateType = XSDDatatype.XSDdate;
-        m.createTypedLiteral("2003-05-21", dateType);
-        
-        // Check alt time times
-        checkSerialization("2003-05-21", XSDDatatype.XSDdate);
-        checkSerialization("2003-05-21T12:56:10Z", XSDDatatype.XSDdateTime);
-        checkSerialization("2003-05", XSDDatatype.XSDgYearMonth);
-        checkSerialization("2003", XSDDatatype.XSDgYear);
-        checkSerialization("--05", XSDDatatype.XSDgMonth);
-        checkSerialization("--05-12", XSDDatatype.XSDgMonthDay);
-        checkSerialization("---12", XSDDatatype.XSDgDay);
-    }
-    
-    private static Date getDateFromPattern(String ts, String format, String timezoneid) throws Exception {
-        return getDateFromPattern(ts, new String[]{format}, TimeZone.getTimeZone(timezoneid));
-    }
-
-    private static Date getDateFromPattern(String ts, String[] formats, TimeZone tz) throws Exception {
-        java.util.Date date = null;
-        java.text.DateFormat sdf = java.text.DateFormat.getInstance();
-        {
-            sdf.setTimeZone(tz == null ? java.util.TimeZone.getDefault() : tz);
-            for (int i=0; date == null && i<formats.length;i++){
-                ((java.text.SimpleDateFormat)sdf).applyPattern(formats[i]);
-                try {
-                    date = sdf.parse(ts);
-                } catch (java.text.ParseException pe){} // keep trying
-            }
-        }
-        return date;
-    }
-    
-    @Test
-    public void testDateTimeBug2() throws Exception {
-        String[] timezonelist = {
-            "GMT",
-            "America/New_York",
-            "America/Chicago",
-        };
-
-        for (String timezoneid : timezonelist) {
-            TimeZone tz = TimeZone.getTimeZone(timezoneid);
-            String[] sampletimelist = {
-                "03/10/2012 01:29", 
-                // 03/11/2012 DST time change at 2 am
-                "03/11/2012 00:29",
-                "03/11/2012 01:29",
-                "03/11/2012 02:29",
-                "03/11/2012 03:29",
-                "03/11/2012 04:29",
-
-                "03/12/2012 01:29",
-                "11/03/2012 23:29",
-                // 11/04/2012 standard time change at 2 am
-                "11/04/2012 00:29",
-                "11/04/2012 01:29",
-                "11/04/2012 02:29",
-                "11/04/2012 03:29",
-            };
-
-            String format = "MM/dd/yyy HH:mm";
-            for (String tstr : sampletimelist){
-                Date dt=getDateFromPattern(tstr, format, timezoneid);
-                SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss z");
-                df.setTimeZone(tz);
-                Calendar cal = Calendar.getInstance();
-                cal.setTimeZone(tz);
-                cal.setTime(dt);
-                XSDDateTime xdt = new XSDDateTime(cal);
-                int offset = tz.getOffset(dt.getTime()) /( 60 * 60 * 1000);
-                int xhr = xdt.getHours();
-                int dhr = cal.get(Calendar.HOUR_OF_DAY);
-                int dif = (xhr -dhr + offset) % 24;
-                Assert.assertEquals("Difference between cal and xdt", 0, dif) ;
-                
-//                //System.out.println("xhr="+xhr+",dhr="+dhr+",dif="+dif);
-//                System.out.println(""
-//                    +"tstr="+tstr
-//                    +"\tdate="+df.format(dt)
-//                    +(dif==0?"\t ":"\tX")
-//                    +" xsddt="+xdt
-//                    +"\toffset="+offset);
-            }
-            //System.out.println();
-        }
-    }
-    
-    
-    /**
-     * Test global parameter flags.
-     */
-    @Test
-    public void testFlags() {
-        boolean originalFlag = JenaParameters.enableEagerLiteralValidation;
-        JenaParameters.enableEagerLiteralValidation = true;
-        boolean foundException = false;
-        try {
-            m.createTypedLiteral("fool", XSDDatatype.XSDint);
-        } catch (DatatypeFormatException e1) {
-            foundException = true;
-        }
-        JenaParameters.enableEagerLiteralValidation = originalFlag;
-        assertTrue("Early datatype format exception", foundException);
-        
-        JenaParameters.enableEagerLiteralValidation = false;
-        foundException = false;
-        Literal l = null;
-        try {
-            l = m.createTypedLiteral("fool", XSDDatatype.XSDint);
-        } catch (DatatypeFormatException e1) {
-            JenaParameters.enableEagerLiteralValidation = originalFlag;
-            assertTrue("Delayed datatype format validation", false);
-        }
-        try {
-            l.getValue();
-        } catch (DatatypeFormatException e2) {
-            foundException = true;
-        }
-        JenaParameters.enableEagerLiteralValidation = originalFlag;
-        assertTrue("Early datatype format exception", foundException);
-        
-        originalFlag = JenaParameters.enablePlainLiteralSameAsString;
-        Literal l1 = m.createLiteral("test string");
-        Literal l2 = m.createTypedLiteral("test string", XSDDatatype.XSDstring);
-        JenaParameters.enablePlainLiteralSameAsString = true;
-        boolean ok1 = l1.sameValueAs(l2); 
-        JenaParameters.enablePlainLiteralSameAsString = false;
-        boolean ok2 = ! l1.sameValueAs(l2); 
-        JenaParameters.enablePlainLiteralSameAsString = originalFlag;
-        assertTrue( ok1 );
-        assertTrue( ok2 );
-    }
-    
-    /**
-     * Test that equality function takes lexical distinction into account. 
-     */
-    @Test
-    public void testLexicalDistinction() {
-        Literal l1 = m.createTypedLiteral("3.0", XSDDatatype.XSDdecimal);
-        Literal l2 = m.createTypedLiteral("3.00", XSDDatatype.XSDdecimal);
-        Literal l3 = m.createTypedLiteral("3.0", XSDDatatype.XSDdecimal);
-        assertSameValueAs("lexical form does not affect value", l1, l2);
-        assertSameValueAs("lexical form does not affect value", l3, l2);
-        assertTrue("lexical form affects equality", ! l1.equals(l2));
-        assertTrue("lexical form affects equality",   l1.equals(l3));
-        
-        // This version will become illegal in the future and will be removed then
-        l1 = m.createTypedLiteral("3", XSDDatatype.XSDint);
-        l2 = m.createTypedLiteral(" 3 ", XSDDatatype.XSDint);
-        l3 = m.createTypedLiteral("3", XSDDatatype.XSDint);
-        assertSameValueAs("lexical form does not affect value", l1, l2);
-        assertSameValueAs("lexical form does not affect value", l3, l2);
-        assertTrue("lexical form affects equality", ! l1.equals(l2));
-        assertTrue("lexical form affects equality",   l1.equals(l3));
-    }
-    
-    /**
-     * Test parse/unparse pairing for problem datatypes
-     */
-    @Test
-    public void testRoundTrip() {
-        // Prior problem cases with unparsing
-        doTestRoundTrip("13:20:00.000", XSDDatatype.XSDtime, false);
-        doTestRoundTrip("GpM7", XSDDatatype.XSDbase64Binary, true);
-        doTestRoundTrip("0FB7", XSDDatatype.XSDhexBinary, true);
-        
-        // check value round tripping
-        doTestValueRoundTrip("2005-06-27", XSDDatatype.XSDdate, true);
-        doTestValueRoundTrip("2005", XSDDatatype.XSDgYear, true);
-        doTestValueRoundTrip("2005-06", XSDDatatype.XSDgYearMonth, true);
-        doTestValueRoundTrip("13:20:00.000", XSDDatatype.XSDtime, true);
-    }
-    
-    /**
-     * Check parse/unparse loop.
-     */
-    private void doTestRoundTrip(String lex, RDFDatatype dt, boolean testeq) {
-        LiteralLabel ll = LiteralLabelFactory.createLiteralLabel( lex, "", dt );
-        String lex2 = dt.unparse(ll.getValue());
-        if (testeq) {
-            assertEquals(lex, lex2);
-        }
-        LiteralLabel ll2 = LiteralLabelFactory.createLiteralLabel( lex2, "", dt );
-        assertTrue( ll2.isWellFormed() );
-    }
-    
-    /**
-     * Check getValue/rewrap loop.
-     */
-    private void doTestValueRoundTrip(String lex, RDFDatatype dt, boolean testType) {
-        Literal l1 = m.createTypedLiteral(lex, dt);
-        Object o1 = l1.getValue();
-        Literal l2 = m.createTypedLiteral(o1);
-        assertTrue("value round trip", l1.sameValueAs(l2));
-        Object o2 = l2.getValue();
-        assertTrue("value round trip2", o1.equals(o2));
-        if (testType) {
-            assertEquals("Datatype round trip", dt, l2.getDatatype());
-        }
-    }
-    
-    /**
-     * Test ability to override an apparent DateTime to be just a date
-     */
-    @Test
-    public void testDateOverride() {
-        Calendar date = new GregorianCalendar(2007, 3, 4);
-        date.setTimeZone( TimeZone.getTimeZone("GMT+0") );
-        XSDDateTime  xsdDate = new XSDDateTime( date );
-        Literal l1 = m.createTypedLiteral(xsdDate, XSDDatatype.XSDdate);
-        
-        assertEquals(XSDDatatype.XSDdate, l1.getDatatype());
-        assertEquals("2007-04-04Z", l1.getLexicalForm());
-    }
-    
-    /**
-     * Test that two objects are not semantically the same
-     */
-    private void assertDiffer( String title, Literal x, Literal y ) {
-        assertTrue( title, !x.sameValueAs( y ) ); 
-    }
-     
-    /**
-     * Test that two objects are semantically the same
-     */
-    private void assertSameValueAs( String title, Literal x, Literal y ) {
-        assertTrue( title, x.sameValueAs( y ) ); 
-    }
-     
-    /**
-     * Test two doubles are equal to within 0.001
-     */
-    private void assertFloatEquals(String title, double x, double y) {
-        assertTrue(title, Math.abs(x - y) < 0.001);
-    }
-
-    /**
-     * Check that constructing an illegal literal throws
-     * the right exception
-     */
-    private void checkIllegalLiteral(String lex, RDFDatatype dtype) {
-        try {
-            Literal l = m.createTypedLiteral(lex, dtype);
-            l.getValue();
-            assertTrue("Failed to catch '" + lex + "' as an illegal " + dtype, false);
-        } catch (DatatypeFormatException e1) {
-            // OK this is what we expected
-        }
-    }
-    
-    /**
-     * Check can legally construct a literal with given lex, value and dtype
-     */    
-    private void checkLegalLiteral(String lex, RDFDatatype dtype, Class<?> jtype, Object value) {
-        Literal l = m.createTypedLiteral(lex, dtype);
-        assertEquals(l.getValue().getClass(), jtype);
-        assertEquals(l.getValue(), value);
-        assertEquals(l.getDatatype(), dtype);
-    }
-    
-    /**
-     * Chek the serialization of the parse of a value.
-     */
-    private void checkSerialization(String lex, RDFDatatype dtype) {
-        Literal l = m.createTypedLiteral(lex, dtype);
-        assertEquals(l.getValue().toString(), lex);
-    }
-    
-    /** Helper function test an iterator against a list of objects - order dependent */
-    private void assertIteratorValues( Iterator<String> it, Object[] vals ) {
-        boolean[] found = new boolean[vals.length];
-        for (int i = 0; i < vals.length; i++) found[i] = false;
-        while (it.hasNext()) {
-            Object n = it.next();
-            boolean gotit = false;
-            for (int i = 0; i < vals.length; i++) {
-                if (n.equals(vals[i])) {
-                    gotit = true;
-                    found[i] = true;
-                }
-            }
-            assertTrue(gotit);
-        }
-        for (int i = 0; i < vals.length; i++) {
-            assertTrue(found[i]);
-        }
-    }
-    
-    
+public class TestTypedLiterals {
+
+	/** dummy model used as a literal factory */
+	private Model m = ModelFactory.createDefaultModel();
+
+	// Temporary for debug
+	/*
+	 * static { Locale.setDefault(Locale.ITALY);
+	 * TimeZone.setDefault(TimeZone.getTimeZone("CEST")); }
+	 */
+
+	/**
+	 * Test the base functioning of unknown datatypes
+	 */
+	@Test
+	public void testUnknown() {
+		String typeURI = "urn:x-hp-dt:unknown";
+		String typeURI2 = "urn:x-hp-dt:unknown2";
+
+		boolean originalFlag = JenaParameters.enableSilentAcceptanceOfUnknownDatatypes;
+		JenaParameters.enableSilentAcceptanceOfUnknownDatatypes = true;
+		Literal l1 = m.createTypedLiteral("foo", typeURI);
+		Literal l3 = m.createTypedLiteral("15", typeURI);
+		Literal l5 = m.createTypedLiteral("foo", typeURI2);
+		Literal l6 = m.createLiteral("foo", "lang1");
+		JenaParameters.enableSilentAcceptanceOfUnknownDatatypes = originalFlag;
+		// Check for successful creation
+
+		assertNotNull(l1);
+		assertNotNull(l3);
+		assertNotNull(l5);
+
+		// check equality function
+		assertDiffer("datatype sensitive", l1, l5);
+		assertDiffer("value sensitive", l1, l3);
+		assertDiffer("typed and plain differ", l1, l6);
+
+		// Check typed accessors
+		try {
+			l3.getInt();
+			assertTrue("Allowed int conversion", false);
+		} catch (DatatypeFormatException e) {
+		}
+		assertEquals("Extract value", l1.getValue(),
+				new BaseDatatype.TypedValue("foo", typeURI));
+		assertEquals("Extract xml tag", l1.isWellFormedXML(), false);
+
+		JenaParameters.enableSilentAcceptanceOfUnknownDatatypes = false;
+		boolean foundException = false;
+		try {
+			m.createTypedLiteral("food", typeURI + "3");
+		} catch (DatatypeFormatException e2) {
+			foundException = true;
+		}
+		JenaParameters.enableSilentAcceptanceOfUnknownDatatypes = originalFlag;
+		assertTrue("Detected unknown datatype", foundException);
+
+		// Check we can create a literal of an unregistered java type without
+		// anything blowing up
+		Object foo = new java.sql.Date(123456l);
+		LiteralLabel ll = LiteralLabelFactory.create(foo);
+		assertEquals(ll.getLexicalForm(), foo.toString());
+	}
+
+	/**
+	 * Tests the base functioning of a user defined datatype
+	 */
+	@Test
+	public void testUserDef() {
+		// Register the user defined type for rationals
+		RDFDatatype rtype = RationalType.theRationalType;
+		TypeMapper.getInstance().registerDatatype(rtype);
+
+		Literal l1 = m.createTypedLiteral("3/5", rtype);
+		Literal l3 = m.createTypedLiteral("7/5", rtype);
+
+		// Check for successful creation
+		assertNotNull(l1);
+		assertNotNull(l3);
+
+		// check equality function
+		assertDiffer("values should be tested!", l1, l3);
+
+		// Check typed accessors
+		assertSame("Datatype incorrect", l1.getDatatype(), rtype);
+		assertEquals("Datatype uri incorrect", l1.getDatatypeURI(),
+				RationalType.theTypeURI);
+		Object val = l1.getValue();
+		assertTrue("Value space check", val instanceof Rational);
+		assertTrue("Value check", ((Rational) val).getNumerator() == 3);
+		assertTrue("Value check", ((Rational) val).getDenominator() == 5);
+		try {
+			l1.getInt();
+			assertTrue("Allowed int conversion", false);
+		} catch (DatatypeFormatException e) {
+		}
+		assertEquals("Extract xml tag", l1.isWellFormedXML(), false);
+	}
+
+	@Test
+	public void testXMLLiteral() {
+		Literal ll;
+
+		ll = m.createLiteral("<bad", true);
+
+		assertTrue("Error checking must be off.", ((EnhNode) ll).asNode()
+				.getLiteralIsXML());
+		ll = m.createTypedLiteral("<bad/>", XMLLiteralType.theXMLLiteralType);
+		assertFalse("Error checking must be on.", ((EnhNode) ll).asNode()
+				.getLiteralIsXML());
+		ll = m.createTypedLiteral("<good></good>",
+				XMLLiteralType.theXMLLiteralType);
+		assertTrue("Well-formed XMLLiteral.", ((EnhNode) ll).asNode()
+				.getLiteralIsXML());
+
+	}
+
+	/**
+	 * Tests basic XSD integer types()
+	 */
+	@Test
+	public void testXSDbasics() {
+		String xsdIntURI = "http://www.w3.org/2001/XMLSchema#int";
+
+		// Check int and basic equality processing
+		Literal l1 = m.createTypedLiteral(42); // default map
+		Literal l2 = m.createTypedLiteral("42", XSDDatatype.XSDint);
+		Literal l4 = m.createTypedLiteral("63"); // default map
+
+		assertSameValueAs("Default map failed", l1, l2);
+		assertEquals("Value wrong", l1.getValue(), new Integer(42));
+		assertEquals("class wrong", l1.getValue().getClass(), Integer.class);
+		assertEquals("Value accessor problem", l1.getInt(), 42);
+		assertEquals("wrong type name", l2.getDatatypeURI(), xsdIntURI);
+		assertEquals("wrong type", l2.getDatatype(), XSDDatatype.XSDint);
+		assertDiffer("Not value sensitive", l1, l4);
+		checkIllegalLiteral("zap", XSDDatatype.XSDint);
+		checkIllegalLiteral("42.1", XSDDatatype.XSDint);
+
+		Literal l5 = m.createTypedLiteral("42",
+				XSDDatatype.XSDnonNegativeInteger);
+		assertSameValueAs("type coercion", l2, l5);
+
+		// Check float/double
+		l1 = m.createTypedLiteral(42.42); // default map
+		l2 = m.createTypedLiteral("42.42", XSDDatatype.XSDfloat);
+		Literal l3 = m.createTypedLiteral("42.42", XSDDatatype.XSDdouble);
+
+		assertEquals("class wrong", l1.getValue().getClass(), Double.class);
+		assertFloatEquals("value wrong",
+				((Double) (l1.getValue())).floatValue(), 42.42);
+		assertEquals("class wrong", l2.getValue().getClass(), Float.class);
+		assertFloatEquals("value wrong",
+				((Float) (l2.getValue())).floatValue(), 42.42);
+		assertFloatEquals("Value accessor problem", l1.getFloat(), 42.42);
+		assertEquals("wrong type", l2.getDatatype(), XSDDatatype.XSDfloat);
+		assertSameValueAs("equality fn", l1, l3);
+
+		// Minimal check on long, short, byte
+		checkLegalLiteral("12345", XSDDatatype.XSDlong, Integer.class,
+				new Integer(12345));
+		checkLegalLiteral("-12345", XSDDatatype.XSDlong, Integer.class,
+				new Integer(-12345));
+		checkIllegalLiteral("2.3", XSDDatatype.XSDlong);
+
+		checkLegalLiteral("1234", XSDDatatype.XSDshort, Integer.class,
+				new Integer((short) 1234));
+		checkLegalLiteral("-1234", XSDDatatype.XSDshort, Integer.class,
+				new Integer((short) -1234));
+		checkLegalLiteral("32767", XSDDatatype.XSDshort, Integer.class,
+				new Integer((short) 32767));
+		checkLegalLiteral("-32768", XSDDatatype.XSDshort, Integer.class,
+				new Integer((short) -32768));
+		checkIllegalLiteral("32769", XSDDatatype.XSDshort);
+		checkIllegalLiteral("2.3", XSDDatatype.XSDshort);
+
+		checkLegalLiteral("42", XSDDatatype.XSDbyte, Integer.class,
+				new Integer((byte) 42));
+		checkLegalLiteral("-42", XSDDatatype.XSDbyte, Integer.class,
+				new Integer((byte) -42));
+		checkLegalLiteral("127", XSDDatatype.XSDbyte, Integer.class,
+				new Integer((byte) 127));
+		checkLegalLiteral("-128", XSDDatatype.XSDbyte, Integer.class,
+				new Integer((byte) -128));
+		checkIllegalLiteral("32769", XSDDatatype.XSDbyte);
+		checkIllegalLiteral("128", XSDDatatype.XSDbyte);
+		checkIllegalLiteral("2.3", XSDDatatype.XSDbyte);
+
+		// Minimal check on unsigned normal types
+		checkLegalLiteral("12345", XSDDatatype.XSDunsignedLong, Integer.class,
+				new Integer(12345));
+		checkLegalLiteral("+12345", XSDDatatype.XSDunsignedLong, Integer.class,
+				new Integer(12345));
+		checkLegalLiteral("9223372036854775808", XSDDatatype.XSDunsignedLong,
+				BigInteger.class, new BigInteger("9223372036854775808"));
+		checkIllegalLiteral("-12345", XSDDatatype.XSDunsignedLong);
+
+		checkLegalLiteral("12345", XSDDatatype.XSDunsignedInt, Integer.class,
+				new Integer(12345));
+		checkLegalLiteral("2147483648", XSDDatatype.XSDunsignedInt, Long.class,
+				new Long(2147483648l));
+		checkIllegalLiteral("-12345", XSDDatatype.XSDunsignedInt);
+
+		checkLegalLiteral("1234", XSDDatatype.XSDunsignedShort, Integer.class,
+				new Integer(1234));
+		checkLegalLiteral("32679", XSDDatatype.XSDunsignedShort, Integer.class,
+				new Integer(32679));
+		checkIllegalLiteral("-12345", XSDDatatype.XSDunsignedShort);
+
+		checkLegalLiteral("123", XSDDatatype.XSDunsignedByte, Integer.class,
+				new Integer((short) 123));
+		checkLegalLiteral("129", XSDDatatype.XSDunsignedByte, Integer.class,
+				new Integer((short) 129));
+		checkIllegalLiteral("-123", XSDDatatype.XSDunsignedByte);
+
+		// Minimal check on the big num types
+		checkLegalLiteral("12345", XSDDatatype.XSDinteger, Integer.class,
+				new Integer(12345));
+		checkLegalLiteral("0", XSDDatatype.XSDinteger, Integer.class,
+				new Integer(0));
+		checkLegalLiteral("-12345", XSDDatatype.XSDinteger, Integer.class,
+				new Integer(-12345));
+		checkLegalLiteral("9223372036854775808", XSDDatatype.XSDinteger,
+				BigInteger.class, new BigInteger("9223372036854775808"));
+
+		checkLegalLiteral("12345", XSDDatatype.XSDpositiveInteger,
+				Integer.class, new Integer(12345));
+		checkIllegalLiteral("0", XSDDatatype.XSDpositiveInteger);
+		checkIllegalLiteral("-12345", XSDDatatype.XSDpositiveInteger);
+		checkLegalLiteral("9223372036854775808",
+				XSDDatatype.XSDpositiveInteger, BigInteger.class,
+				new BigInteger("9223372036854775808"));
+
+		checkLegalLiteral("12345", XSDDatatype.XSDnonNegativeInteger,
+				Integer.class, new Integer(12345));
+		checkLegalLiteral("0", XSDDatatype.XSDnonNegativeInteger,
+				Integer.class, new Integer(0));
+		checkIllegalLiteral("-12345", XSDDatatype.XSDnonNegativeInteger);
+		checkLegalLiteral("9223372036854775808",
+				XSDDatatype.XSDnonNegativeInteger, BigInteger.class,
+				new BigInteger("9223372036854775808"));
+
+		checkLegalLiteral("-12345", XSDDatatype.XSDnegativeInteger,
+				Integer.class, new Integer(-12345));
+		checkIllegalLiteral("0", XSDDatatype.XSDnegativeInteger);
+		checkIllegalLiteral("12345", XSDDatatype.XSDnegativeInteger);
+		checkLegalLiteral("-9223372036854775808",
+				XSDDatatype.XSDnegativeInteger, BigInteger.class,
+				new BigInteger("-9223372036854775808"));
+
+		checkLegalLiteral("-12345", XSDDatatype.XSDnonPositiveInteger,
+				Integer.class, new Integer(-12345));
+		checkLegalLiteral("0", XSDDatatype.XSDnonPositiveInteger,
+				Integer.class, new Integer(0));
+		checkIllegalLiteral("12345", XSDDatatype.XSDnonPositiveInteger);
+		checkLegalLiteral("-9223372036854775808",
+				XSDDatatype.XSDnonPositiveInteger, BigInteger.class,
+				new BigInteger("-9223372036854775808"));
+
+		checkLegalLiteral("12345", XSDDatatype.XSDdecimal, Integer.class,
+				new Integer("12345"));
+		checkLegalLiteral("0.0", XSDDatatype.XSDdecimal, Integer.class,
+				new Integer("0"));
+		checkLegalLiteral("42.45", XSDDatatype.XSDdecimal, BigDecimal.class,
+				new BigDecimal("42.45"));
+		checkLegalLiteral("9223372036854775808.1234", XSDDatatype.XSDdecimal,
+				BigDecimal.class, new BigDecimal("9223372036854775808.1234"));
+		checkLegalLiteral("123.4", XSDDatatype.XSDdecimal, BigDecimal.class,
+				new BigDecimal("123.4"));
+		checkIllegalLiteral("123,4", XSDDatatype.XSDdecimal);
+
+		// Booleans
+		checkLegalLiteral("true", XSDDatatype.XSDboolean, Boolean.class,
+				new Boolean(true));
+		checkLegalLiteral("false", XSDDatatype.XSDboolean, Boolean.class,
+				new Boolean(false));
+		l1 = m.createTypedLiteral(true);
+		assertEquals("boolean mapping", XSDDatatype.XSDboolean,
+				l1.getDatatype());
+
+		// String types
+		checkLegalLiteral("hello world", XSDDatatype.XSDstring, String.class,
+				"hello world");
+		l1 = m.createTypedLiteral("foo bar");
+		assertEquals("string mapping", XSDDatatype.XSDstring, l1.getDatatype());
+
+	}
+
+	/**
+	 * Some selected equality tests which caused problems in WG tests
+	 */
+	@Test
+	public void testMiscEquality() {
+		Literal l1 = m.createTypedLiteral("10",
+				"http://www.w3.org/2001/XMLSchema#integer");
+		Literal l3 = m.createTypedLiteral("010",
+				"http://www.w3.org/2001/XMLSchema#integer");
+		assertSameValueAs("Int lex form", l1, l3);
+
+		l1 = m.createTypedLiteral("1", XSDDatatype.XSDint);
+		l3 = m.createTypedLiteral("1", XSDDatatype.XSDnonNegativeInteger);
+
+		assertSameValueAs("numeric comparisons", l1, l3);
+	}
+
+	/**
+	 * Check that creating a typed literal from an object traps the interesting
+	 * special cases of String and Calendar.
+	 */
+	@Test
+	public void testOverloads() {
+		// First case string overloads an explicit type
+		boolean old = JenaParameters.enableEagerLiteralValidation;
+		try {
+			JenaParameters.enableEagerLiteralValidation = true;
+
+			// String overloading cases
+			boolean test1 = false;
+			try {
+				m.createTypedLiteral("foo",
+						"http://www.w3.org/2001/XMLSchema#integer");
+			} catch (DatatypeFormatException e1) {
+				test1 = true;
+			}
+			assertTrue("detected illegal string, direct", test1);
+
+			boolean test2 = false;
+			try {
+				Object foo = "foo";
+				m.createTypedLiteral(foo,
+						"http://www.w3.org/2001/XMLSchema#integer");
+			} catch (DatatypeFormatException e2) {
+				test2 = true;
+			}
+			assertTrue("detected illegal string, overloaded", test2);
+
+			// Overloading of calendar convenience functions
+			Calendar testCal = new GregorianCalendar(
+					TimeZone.getTimeZone("GMT"));
+			testCal.set(1999, 4, 30, 15, 9, 32);
+			testCal.set(Calendar.MILLISECOND, 0); // ms field can be undefined
+													// on Linux
+			Literal lc = m.createTypedLiteral((Object) testCal);
+			assertEquals("calendar overloading test", m.createTypedLiteral(
+					"1999-05-30T15:09:32Z", XSDDatatype.XSDdateTime), lc);
+
+		} finally {
+			JenaParameters.enableEagerLiteralValidation = old;
+		}
+	}
+
+	/**
+	 * Test plain literal/xsd:string/xsd:int equality operations
+	 */
+	@Test
+	public void testPlainSameValueAs() {
+		Literal lString = m.createTypedLiteral("10", XSDDatatype.XSDstring);
+		Literal lPlain = m.createTypedLiteral("10", (RDFDatatype) null);
+		Literal lPlain3 = m.createTypedLiteral("10", (String) null);
+		Literal lPlain2 = m.createLiteral("10");
+		Literal lInt = m.createTypedLiteral("10", XSDDatatype.XSDint);
+
+		assertSameValueAs("Null type = plain literal", lPlain, lPlain2);
+		assertSameValueAs("Null type = plain literal", lPlain, lPlain3);
+		assertSameValueAs("Null type = plain literal", lPlain2, lPlain3);
+		assertTrue("null type", lPlain3.getDatatype() == null);
+		assertDiffer("String != int", lString, lInt);
+		assertDiffer("Plain != int", lPlain, lInt);
+		assertDiffer("Plain != int", lPlain2, lInt);
+
+		// The correct answer to this is currently up to us
+		if (JenaParameters.enablePlainLiteralSameAsString) {
+			assertSameValueAs("String != plain??", lString, lPlain);
+			assertSameValueAs("String != plain??", lString, lPlain2);
+		} else {
+			assertDiffer("String != plain??", lString, lPlain);
+			assertDiffer("String != plain??", lString, lPlain2);
+		}
+
+	}
+
+	/**
+	 * Test cases of numeric comparison.
+	 */
+	@Test
+	public void testNumberSameValueAs() {
+		Literal lDouble = m.createTypedLiteral("5", XSDDatatype.XSDdouble);
+		Literal lDouble2 = m.createTypedLiteral("5.5", XSDDatatype.XSDdouble);
+		Literal lDouble3 = m.createTypedLiteral("5.5", XSDDatatype.XSDdouble);
+		Literal lDouble4 = m.createTypedLiteral("5.6", XSDDatatype.XSDdouble);
+		Literal lFloat = m.createTypedLiteral("5", XSDDatatype.XSDfloat);
+		Literal lint = m.createTypedLiteral("5", XSDDatatype.XSDint);
+		Literal linteger = m.createTypedLiteral("5", XSDDatatype.XSDinteger);
+		Literal lbyte = m.createTypedLiteral("5", XSDDatatype.XSDbyte);
+
+		assertSameValueAs("integer subclasses equal", lint, linteger);
+		assertSameValueAs("integer subclasses equal", lint, lbyte);
+		assertSameValueAs("integer subclasses equal", linteger, lbyte);
+		assertSameValueAs("double equality", lDouble2, lDouble3);
+
+		assertDiffer("float/double/int distinct", lDouble, lDouble2);
+		assertDiffer("float/double/int distinct", lDouble, lFloat);
+		assertDiffer("float/double/int distinct", lDouble, lint);
+		assertDiffer("float/double/int distinct", lDouble, linteger);
+		assertDiffer("float/double/int distinct", lDouble2, lint);
+		assertDiffer("float/double/int distinct", lDouble2, lbyte);
+		assertDiffer("float/double/int distinct", lint, lDouble);
+		assertDiffer("float/double/int distinct", lbyte, lDouble);
+		assertDiffer("float/double/int distinct", lint, lDouble2);
+		assertDiffer("float/double/int distinct", lbyte, lDouble2);
+
+		assertDiffer("double inequality", lDouble3, lDouble4);
+		assertDiffer("double inequality", lDouble2, lDouble);
+
+		// Check decimals
+		Literal lDecimal = m.createTypedLiteral("5.5", XSDDatatype.XSDdecimal);
+		Literal lDecimal2 = m.createTypedLiteral("5.6", XSDDatatype.XSDdecimal);
+		assertDiffer("decimal inequality", lDecimal, lDecimal2);
+	}
+
+	/**
+	 * Check basic handling of big integers and decimals
+	 */
+	@Test
+	public void testBigNums() {
+		Literal l1 = m.createTypedLiteral("12345678901234567890",
+				XSDDatatype.XSDinteger);
+		Literal l2 = m.createTypedLiteral("12345678901234567891",
+				XSDDatatype.XSDinteger);
+		assertDiffer("Big integer equality", l1, l2);
+
+		BigInteger bigint1 = new BigInteger("12345678901234567890");
+		Literal lb1 = m.createTypedLiteral(bigint1, XSDDatatype.XSDinteger);
+		assertSameValueAs("big integer creation equality", l1, lb1);
+
+		BigDecimal bigdec1 = new BigDecimal("12345678901234567890.00");
+		Literal ld1 = m.createTypedLiteral(bigdec1, XSDDatatype.XSDdecimal);
+		BigDecimal bigdec1b = new BigDecimal("12345678901234567890.0");
+		Literal ld1b = m.createTypedLiteral(bigdec1b, XSDDatatype.XSDdecimal);
+		BigDecimal bigdec2 = new BigDecimal("12345678901234567890.1");
+		Literal ld2 = m.createTypedLiteral(bigdec2, XSDDatatype.XSDdecimal);
+		assertSameValueAs("big decimal equality check", ld1, ld1b);
+		assertSameValueAs("big decimal equality check", ld1, lb1);
+		assertDiffer("Decimal equality", ld1, ld2);
+
+		BigDecimal bigdecF = new BigDecimal("12345678901234567890.1");
+		Literal ldF = m.createTypedLiteral(bigdecF, XSDDatatype.XSDdecimal);
+		BigDecimal bigdecFb = new BigDecimal("12345678901234567890.10");
+		Literal ldFb = m.createTypedLiteral(bigdecFb, XSDDatatype.XSDdecimal);
+		BigDecimal bigdecF2 = new BigDecimal("12345678901234567890.2");
+		Literal ldF2 = m.createTypedLiteral(bigdecF2, XSDDatatype.XSDdecimal);
+		assertSameValueAs("big decimal equality check", ldF, ldFb);
+		assertDiffer("Decimal equality", ldF, ldF2);
+	}
+
+	/**
+	 * Test case for a bug in retrieving a value like 3.00 from a probe like 3.0
+	 */
+	@Test
+	public void testDecimalFind() {
+		RDFDatatype dt = XSDDatatype.XSDdecimal;
+		Node ns = NodeFactory.createURI("x");
+		Node np = NodeFactory.createURI("p");
+		Node nx1 = NodeFactory.createLiteral("0.50", null, dt);
+		Node nx2 = NodeFactory.createLiteral("0.500", null, dt);
+		Graph graph = Factory.createDefaultGraph();
+		graph.add(new Triple(ns, np, nx1));
+		assertTrue(graph.find(Node.ANY, Node.ANY, nx2).hasNext());
+	}
+
+	/**
+	 * Test the internal machinery of decimal normalization directly
+	 */
+	@Test
+	public void testDecimalCanonicalize() {
+		doTestDecimalCanonicalize("0.500", "0.5", BigDecimal.class);
+		doTestDecimalCanonicalize("0.50", "0.5", BigDecimal.class);
+		doTestDecimalCanonicalize("0.5", "0.5", BigDecimal.class);
+		doTestDecimalCanonicalize("0.0", "0", Integer.class);
+		doTestDecimalCanonicalize("5.0", "5", Integer.class);
+		doTestDecimalCanonicalize("500.0", "500", Integer.class);
+		doTestDecimalCanonicalize("5.00100", "5.001", BigDecimal.class);
+	}
+
+	/**
+	 * Helper for testDecimalCannonicalize. Run a single cannonicalization test
+	 * on a value specified in string form.
+	 */
+	private void doTestDecimalCanonicalize(String value, String expected,
+			Class<?> expectedClass) {
+		Object normalized = XSDDatatype.XSDdecimal
+				.cannonicalise(new BigDecimal(value));
+		assertEquals(expected, normalized.toString());
+		assertEquals(expectedClass, normalized.getClass());
+	}
+
+	/**
+	 * Test data/time wrappers
+	 */
+	@Test
+	public void testDateTime() {
+		// Duration
+		Literal l1 = m.createTypedLiteral("P1Y2M3DT5H6M7.50S",
+				XSDDatatype.XSDduration);
+		assertEquals("duration data type", XSDDatatype.XSDduration,
+				l1.getDatatype());
+		assertEquals("duration java type", XSDDuration.class, l1.getValue()
+				.getClass());
+		assertEquals("duration value", 1,
+				((XSDDuration) l1.getValue()).getYears());
+		assertEquals("duration value", 2,
+				((XSDDuration) l1.getValue()).getMonths());
+		assertEquals("duration value", 3,
+				((XSDDuration) l1.getValue()).getDays());
+		assertEquals("duration value", 5,
+				((XSDDuration) l1.getValue()).getHours());
+		assertEquals("duration value", 6,
+				((XSDDuration) l1.getValue()).getMinutes());
+		assertEquals("duration value", 7,
+				((XSDDuration) l1.getValue()).getFullSeconds());
+		assertEquals("duration value", BigDecimal.valueOf(75, 1),
+				((XSDDuration) l1.getValue()).getBigSeconds());
+		assertFloatEquals("duration value", 18367.5,
+				((XSDDuration) l1.getValue()).getTimePart());
+		assertEquals("serialization", "P1Y2M3DT5H6M7.5S", l1.getValue()
+				.toString());
+		assertTrue("equality test", l1.sameValueAs(m.createTypedLiteral(
+				"P1Y2M3DT5H6M7.5S", XSDDatatype.XSDduration)));
+		assertTrue("inequality test", l1 != m.createTypedLiteral(
+				"P1Y2M2DT5H6M7.5S", XSDDatatype.XSDduration));
+
+		l1 = m.createTypedLiteral("P1Y2M3DT5H0M", XSDDatatype.XSDduration);
+		assertEquals("serialization", "P1Y2M3DT5H", l1.getValue().toString());
+
+		l1 = m.createTypedLiteral("P1Y", XSDDatatype.XSDduration);
+		assertEquals("duration data type", XSDDatatype.XSDduration,
+				l1.getDatatype());
+		assertEquals("duration java type", XSDDuration.class, l1.getValue()
+				.getClass());
+		assertEquals("duration value", 1,
+				((XSDDuration) l1.getValue()).getYears());
+		assertEquals("serialization", "P1Y", l1.getValue().toString());
+		assertTrue("equality test", l1.sameValueAs(m.createTypedLiteral("P1Y",
+				XSDDatatype.XSDduration)));
+		assertTrue("inequality test",
+				l1 != m.createTypedLiteral("P1Y", XSDDatatype.XSDduration));
+
+		l1 = m.createTypedLiteral("-P120D", XSDDatatype.XSDduration);
+		Literal l2 = m.createTypedLiteral(l1.getValue());
+		assertEquals("-P120D", l2.getLexicalForm());
+
+		// Duration equality bug
+		Literal d1 = m.createTypedLiteral("PT1H1M1S", XSDDatatype.XSDduration);
+		Literal d2 = m
+				.createTypedLiteral("PT1H1M1.1S", XSDDatatype.XSDduration);
+		assertTrue("duration compare", !d1.sameValueAs(d2));
+		XSDDuration dur1 = (XSDDuration) d1.getValue();
+		XSDDuration dur2 = (XSDDuration) d2.getValue();
+		assertEquals("duration compare order", 1, dur2.compare(dur1));
+
+		// dateTime
+		l1 = m.createTypedLiteral("1999-05-31T02:09:32Z",
+				XSDDatatype.XSDdateTime);
+		XSDDateTime xdt = (XSDDateTime) l1.getValue();
+		assertEquals("dateTime data type", XSDDatatype.XSDdateTime,
+				l1.getDatatype());
+		assertEquals("dateTime java type", XSDDateTime.class, l1.getValue()
+				.getClass());
+		assertEquals("dateTime value", 1999, xdt.getYears());
+		assertEquals("dateTime value", 5, xdt.getMonths());
+		assertEquals("dateTime value", 31, xdt.getDays());
+		assertEquals("dateTime value", 2, xdt.getHours());
+		assertEquals("dateTime value", 9, xdt.getMinutes());
+		assertEquals("dateTime value", 32, xdt.getFullSeconds());
+		assertEquals("serialization", "1999-05-31T02:09:32Z", l1.getValue()
+				.toString());
+		Calendar cal = xdt.asCalendar();
+		Calendar testCal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
+		testCal.set(1999, 4, 31, 2, 9, 32);
+		/*
+		 * assertEquals("calendar value", cal.get(Calendar.YEAR),
+		 * testCal.get(Calendar.YEAR) ); assertEquals("calendar value",
+		 * cal.get(Calendar.MONTH), testCal.get(Calendar.MONTH) );
+		 * assertEquals("calendar value", cal.get(Calendar.DATE),
+		 * testCal.get(Calendar.DATE) ); assertEquals("calendar value",
+		 * cal.get(Calendar.HOUR), testCal.get(Calendar.HOUR) );
+		 * assertEquals("calendar value", cal.get(Calendar.MINUTE),
+		 * testCal.get(Calendar.MINUTE) ); assertEquals("calendar value",
+		 * cal.get(Calendar.SECOND), testCal.get(Calendar.SECOND) );
+		 */
+		testCal.set(Calendar.MILLISECOND, 0); // ms field can be undefined on
+												// Linux
+		assertEquals("calendar value", cal, testCal);
+		assertEquals("equality test", l1, m.createTypedLiteral(
+				"1999-05-31T02:09:32Z", XSDDatatype.XSDdateTime));
+		assertTrue("inequality test", l1 != m.createTypedLiteral(
+				"1999-04-31T02:09:32Z", XSDDatatype.XSDdateTime));
+
+		Calendar testCal2 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
+		testCal2.set(1999, 4, 30, 15, 9, 32);
+		testCal2.set(Calendar.MILLISECOND, 0); // ms field can be undefined on
+												// Linux
+		Literal lc = m.createTypedLiteral(testCal2);
+		assertEquals("calendar 24 hour test", m.createTypedLiteral(
+				"1999-05-30T15:09:32Z", XSDDatatype.XSDdateTime), lc);
+
+		assertEquals("calendar value", cal, testCal);
+		assertEquals("equality test", l1, m.createTypedLiteral(
+				"1999-05-31T02:09:32Z", XSDDatatype.XSDdateTime));
+
+		Calendar testCal3 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
+		testCal3.clear();
+		testCal3.set(1999, Calendar.JANUARY, 30, 15, 9, 32);
+		lc = m.createTypedLiteral(testCal3);
+		assertEquals("1999-01-30T15:09:32Z", lc.getLexicalForm());
+		String urib = "rdf://test.com#";
+		String uri1 = urib + "1";
+		String urip = urib + "prop";
+		String testN3 = "<" + uri1 + "> <" + urip + "> \""
+				+ lc.getLexicalForm() + "\"^^<" + lc.getDatatypeURI() + "> .";
+		java.io.StringReader sr = new java.io.StringReader(testN3);
+		m.read(sr, urib, "N3");
+		assertTrue(m.contains(m.getResource(uri1), m.getProperty(urip)));
+		Resource r1 = m.getResource(uri1);
+		Property p = m.getProperty(urip);
+		XSDDateTime returnedDateTime = (XSDDateTime) r1.getProperty(p)
+				.getLiteral().getValue();
+		assertEquals("deserialized calendar value", testCal3,
+				returnedDateTime.asCalendar());
+
+		// dateTime to calendar with milliseconds
+		Calendar testCal4 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
+		testCal4.set(1999, 4, 30, 15, 9, 32);
+		testCal4.set(Calendar.MILLISECOND, 25);
+		doDateTimeTest(testCal4, "1999-05-30T15:09:32.025Z", 32.025);
+		testCal4.set(Calendar.MILLISECOND, 250);
+		doDateTimeTest(testCal4, "1999-05-30T15:09:32.25Z", 32.25);
+		testCal4.set(Calendar.MILLISECOND, 2);
+		doDateTimeTest(testCal4, "1999-05-30T15:09:32.002Z", 32.002);
+
+		// Illegal dateTimes
+		boolean ok = false;
+		boolean old = JenaParameters.enableEagerLiteralValidation;
+		try {
+			JenaParameters.enableEagerLiteralValidation = true;
+			l1 = m.createTypedLiteral(new Date(12345656l),
+					XSDDatatype.XSDdateTime);
+		} catch (DatatypeFormatException e) {
+			ok = true;
+		} finally {
+			JenaParameters.enableEagerLiteralValidation = old;
+		}
+		assertTrue("Early detection of invalid literals", ok);
+
+		// date
+		l1 = m.createTypedLiteral("1999-05-31", XSDDatatype.XSDdate);
+		assertEquals("dateTime data type", XSDDatatype.XSDdate,
+				l1.getDatatype());
+		assertEquals("dateTime java type", XSDDateTime.class, l1.getValue()
+				.getClass());
+		xdt = (XSDDateTime) l1.getValue();
+		assertEquals("dateTime value", 1999, xdt.getYears());
+		assertEquals("dateTime value", 5, xdt.getMonths());
+		assertEquals("dateTime value", 31, xdt.getDays());
+		try {
+			xdt.getHours();
+			assertTrue("Failed to prevent illegal access", false);
+		} catch (IllegalDateTimeFieldException e) {
+		}
+
+		// time
+		l1 = m.createTypedLiteral("12:56:32", XSDDatatype.XSDtime);
+		assertEquals("dateTime data type", XSDDatatype.XSDtime,
+				l1.getDatatype());
+		assertEquals("dateTime java type", XSDDateTime.class, l1.getValue()
+				.getClass());
+		xdt = (XSDDateTime) l1.getValue();
+		assertEquals("dateTime value", 12, xdt.getHours());
+		assertEquals("dateTime value", 56, xdt.getMinutes());
+		assertEquals("dateTime value", 32, xdt.getFullSeconds());
+		try {
+			xdt.getDays();
+			assertTrue("Failed to prevent illegal access", false);
+		} catch (IllegalDateTimeFieldException e) {
+		}
+
+		// gYearMonth
+		l1 = m.createTypedLiteral("1999-05", XSDDatatype.XSDgYearMonth);
+		assertEquals("dateTime data type", XSDDatatype.XSDgYearMonth,
+				l1.getDatatype());
+		assertEquals("dateTime java type", XSDDateTime.class, l1.getValue()
+				.getClass());
+		xdt = (XSDDateTime) l1.getValue();
+		assertEquals("dateTime value", 1999, xdt.getYears());
+		assertEquals("dateTime value", 5, xdt.getMonths());
+		try {
+			xdt.getDays();
+			assertTrue("Failed to prevent illegal access", false);
+		} catch (IllegalDateTimeFieldException e) {
+		}
+
+		// gYear
+		l1 = m.createTypedLiteral("1999", XSDDatatype.XSDgYear);
+		assertEquals("dateTime data type", XSDDatatype.XSDgYear,
+				l1.getDatatype());
+		assertEquals("dateTime java type", XSDDateTime.class, l1.getValue()
+				.getClass());
+		xdt = (XSDDateTime) l1.getValue();
+		assertEquals("dateTime value", 1999, xdt.getYears());
+		try {
+			xdt.getMonths();
+			assertTrue("Failed to prevent illegal access", false);
+		} catch (IllegalDateTimeFieldException e) {
+		}
+
+		// gMonth
+		l1 = m.createTypedLiteral("--05--", XSDDatatype.XSDgMonth);
+		assertEquals("dateTime data type", XSDDatatype.XSDgMonth,
+				l1.getDatatype());
+		assertEquals("dateTime java type", XSDDateTime.class, l1.getValue()
+				.getClass());
+		xdt = (XSDDateTime) l1.getValue();
+		assertEquals("dateTime value", 5, xdt.getMonths());
+		try {
+			xdt.getYears();
+			assertTrue("Failed to prevent illegal access", false);
+		} catch (IllegalDateTimeFieldException e) {
+		}
+
+		// gMonthDay
+		l1 = m.createTypedLiteral("--05-25", XSDDatatype.XSDgMonthDay);
+		assertEquals("dateTime data type", XSDDatatype.XSDgMonthDay,
+				l1.getDatatype());
+		assertEquals("dateTime java type", XSDDateTime.class, l1.getValue()
+				.getClass());
+		xdt = (XSDDateTime) l1.getValue();
+		assertEquals("dateTime value", 5, xdt.getMonths());
+		assertEquals("dateTime value", 25, xdt.getDays());
+		try {
+			xdt.getYears();
+			assertTrue("Failed to prevent illegal access", false);
+		} catch (IllegalDateTimeFieldException e) {
+		}
+
+		// gDay
+		l1 = m.createTypedLiteral("---25", XSDDatatype.XSDgDay);
+		assertEquals("dateTime data type", XSDDatatype.XSDgDay,
+				l1.getDatatype());
+		assertEquals("dateTime java type", XSDDateTime.class, l1.getValue()
+				.getClass());
+		xdt = (XSDDateTime) l1.getValue();
+		assertEquals("dateTime value", 25, xdt.getDays());
+		try {
+			xdt.getMonths();
+			assertTrue("Failed to prevent illegal access", false);

[... 798 lines stripped ...]