📄 testtypedliterals.java
字号:
/******************************************************************
* File: TestTypedLiterals.java
* Created by: Dave Reynolds
* Created on: 08-Dec-02
*
* (c) Copyright 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
* [See end of file]
* $Id: TestTypedLiterals.java,v 1.59 2007/01/02 11:50:06 andy_seaborne Exp $
*****************************************************************/
package com.hp.hpl.jena.graph.test;
import com.hp.hpl.jena.datatypes.*;
import com.hp.hpl.jena.datatypes.xsd.*;
import com.hp.hpl.jena.datatypes.xsd.impl.XMLLiteralType;
import com.hp.hpl.jena.graph.*;
import com.hp.hpl.jena.graph.impl.*;
import com.hp.hpl.jena.graph.query.*;
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.enhanced.EnhNode;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import java.math.*;
import java.util.*;
import java.io.*;
import org.apache.xerces.impl.dv.util.HexBin;
/**
* Unit test for the typed literal machinery - including RDFDatatype,
* TypeMapper and LiteralLabel.
*
* @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
* @version $Revision: 1.59 $ on $Date: 2007/01/02 11:50:06 $
*/
public class TestTypedLiterals extends TestCase {
/** 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"));
}
*/
/**
* Boilerplate for junit
*/
public TestTypedLiterals( String name ) {
super( name );
}
/**
* This is its own test suite
*/
public static TestSuite suite() {
return new TestSuite( TestTypedLiterals.class );
}
/**
* Test the base functioning of unknown datatypes
*/
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");
Literal l7 = m.createLiteral("foo");
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 {
int i = 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 {
Literal l8 = 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 = new LiteralLabel(foo);
assertEquals(ll.getLexicalForm(), foo.toString());
}
/**
* Tests the base functioning of a user defined datatype
*/
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 {
int i = l1.getInt();
assertTrue("Allowed int conversion", false);
} catch (DatatypeFormatException e) {}
assertEquals("Extract xml tag", l1.isWellFormedXML(), false);
}
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()
*/
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
*/
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.
*/
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 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -