/******************************************************************************* * Copyright (c) 2008 Cambridge Semantics Incorporated. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cambridge Semantics Incorporated *******************************************************************************/ package org.openanzo.rdf; import java.math.BigDecimal; import java.math.BigInteger; import junit.framework.TestCase; import org.openanzo.rdf.vocabulary.XMLSchema; /** * Tests the various RDF Node classes in org.openanzo.rdf: * <ul> * <li>URI</li> * <li>PlainLiteral</li> * <li>TypedLiteral</li> * <li>Variable</li> * <li>BlankNode</li> * </ul> * * @author Joe Betz <jpbetz@cambridgesemantics.com> * */ public class TestRDFNodes extends TestCase { /** * Checks that the various namespace/local name separators function properly. * * The separators are '/', '#' and ':'. * */ public void testGetURILocalName() { URI subj = MemURI.create("http://example.com/subject"); assertEquals("http://example.com/", subj.getNamespace()); assertEquals("subject", subj.getLocalName()); URI pred = MemURI.create("http://example.com/preds#predicate1"); assertEquals("http://example.com/preds#", pred.getNamespace()); assertEquals("predicate1", pred.getLocalName()); URI obj = MemURI.create("urn:guid:example.com:object1"); assertEquals("urn:guid:example.com:", obj.getNamespace()); assertEquals("object1", obj.getLocalName()); } /** * Verifies the various ways a URI can be created function properly. */ public void testCreateURI() { URI simple = MemURI.create("http://example.com/simple"); assertEquals("http://example.com/simple", simple.toString()); URI subj = MemURI.create("http://example.com/", "subject"); assertEquals("http://example.com/subject", subj.toString()); URI pred = MemURI.create("http://example.com/preds#", "predicate1"); assertEquals("http://example.com/preds#predicate1", pred.toString()); URI obj = MemURI.create("urn:guid:example.com:", "object1"); assertEquals("urn:guid:example.com:object1", obj.toString()); } /** * Verifies attempts to create illegal URIs throw exceptions. */ public void testCreateIllegalUri() { String[] illegals = new String[] { "example.com/missingProtocol", "http://two words", "http://two\nlines", "http://example.com>", "!@#$%#@$///|||}{P~!11``><L.,l%^%&^%&&^*&^^^(*&(K)^%&*$%^#@$%#!$%\n\n\n1324134$%@!#$%#@!@#$!@#%" }; for (String illegal : illegals) { boolean exceptionCaught = false; try { MemURI.create(illegal); } catch (Exception e) { exceptionCaught = true; } assertTrue("checking uri: " + illegal, exceptionCaught); } } /** * Verifies attempts to create variables using illegal names throw exceptions. */ public void testCreateIllegalVariable() { String[] illegals = new String[] { "??", "two words", "two\nlines" }; for (String illegal : illegals) { boolean exceptionCaught = false; try { MemVariable.createVariable(illegal); } catch (Exception e) { exceptionCaught = true; } assertTrue("checking variable: " + illegal, exceptionCaught); } } /** * Verifies that variables with the same name are equal. */ public void testCreateVariable() { MemVariable subjVar = MemVariable.createVariable("subj"); MemVariable identicalNameVar = MemVariable.createVariable("subj"); assertEquals("subj", subjVar.getName()); assertTrue(subjVar.equals(identicalNameVar)); } /** * Creates a plain literal with and without a language tag, verifies they are constructed properly. */ public void testCreatePlainLiteral() { PlainLiteral smith = MemPlainLiteral.create("John Smith"); PlainLiteral smithEN = MemPlainLiteral.create("John Smith", "EN"); assertEquals("John Smith", smith.getLabel()); assertNull(smith.getLanguage()); assertFalse(smith.hashCode() == -1); assertEquals("John Smith", smithEN.getLabel()); assertEquals("EN", smithEN.getLanguage()); } /** * Verifies that equality is handled properly for plain literal's and their language tags. */ public void testCompareLanguage() { PlainLiteral lang_none = MemPlainLiteral.create("John Smith"); PlainLiteral lang_EN = MemPlainLiteral.create("John Smith", "EN"); PlainLiteral lang_en = MemPlainLiteral.create("John Smith", "en"); PlainLiteral lang_en_US = MemPlainLiteral.create("John Smith", "en-US"); PlainLiteral lang_EN_US = MemPlainLiteral.create("John Smith", "EN-US"); PlainLiteral lang_EN_us = MemPlainLiteral.create("John Smith", "EN-us"); assertEquals(lang_EN, lang_en); assertEquals(lang_en_US, lang_EN_US); assertEquals(lang_EN_US, lang_EN_us); assertNotSame(lang_none, lang_en); assertNotSame(lang_en, lang_en_US); } /** * Creates typed literals by passing in native java objects representing the typed literal and verifies the typed literal properly represents the object * passed in. * * @throws Exception */ public void testCreateTypedLiteralByNativeObject() throws Exception { TypedLiteral intLiteral = MemTypedLiteral.create(1024); assertEquals("1024", intLiteral.getLabel()); assertEquals(Integer.valueOf(1024), intLiteral.getNativeValue()); assertEquals(XMLSchema.INT, intLiteral.getDatatypeURI()); assertFalse(intLiteral.hashCode() == -1); assertFalse(intLiteral.hashCode() == -1); TypedLiteral shortLiteral = MemTypedLiteral.create((short) 55); assertEquals("55", shortLiteral.getLabel()); assertEquals(Short.valueOf((short) 55), shortLiteral.getNativeValue()); assertEquals(XMLSchema.SHORT, shortLiteral.getDatatypeURI()); TypedLiteral longLiteral = MemTypedLiteral.create((long) 2048); assertEquals("2048", longLiteral.getLabel()); assertEquals(Long.valueOf(2048), longLiteral.getNativeValue()); assertEquals(XMLSchema.LONG, longLiteral.getDatatypeURI()); TypedLiteral booleanLiteral = MemTypedLiteral.create(true); assertEquals("true", booleanLiteral.getLabel()); assertEquals(Boolean.TRUE, booleanLiteral.getNativeValue()); assertEquals(XMLSchema.BOOLEAN, booleanLiteral.getDatatypeURI()); TypedLiteral doubleLiteral = MemTypedLiteral.create(9.87654); assertEquals("9.87654", doubleLiteral.getLabel()); assertEquals(Double.valueOf(9.87654), doubleLiteral.getNativeValue()); assertEquals(XMLSchema.DOUBLE, doubleLiteral.getDatatypeURI()); TypedLiteral floatLiteral = MemTypedLiteral.create((float) 1.2345678); assertEquals("1.2345678", floatLiteral.getLabel()); assertEquals(Float.valueOf((float) 1.2345678), floatLiteral.getNativeValue()); assertEquals(XMLSchema.FLOAT, floatLiteral.getDatatypeURI()); TypedLiteral stringLiteral = MemTypedLiteral.create("John Smith"); assertEquals("John Smith", stringLiteral.getLabel()); assertEquals("John Smith", stringLiteral.getNativeValue()); assertEquals(XMLSchema.STRING, stringLiteral.getDatatypeURI()); TypedLiteral byteLiteral = MemTypedLiteral.create((byte) 15); assertEquals("15", byteLiteral.getLabel()); assertEquals(Byte.valueOf((byte) 15), byteLiteral.getNativeValue()); assertEquals(XMLSchema.BYTE, byteLiteral.getDatatypeURI()); TypedLiteral decimalLiteral = MemTypedLiteral.create(BigDecimal.valueOf(334)); assertEquals("334", decimalLiteral.getLabel()); assertEquals(BigDecimal.valueOf(334), decimalLiteral.getNativeValue()); assertEquals(XMLSchema.DECIMAL, decimalLiteral.getDatatypeURI()); TypedLiteral byteArrayLiteral = MemTypedLiteral.create(new byte[] { 15, 3, 9, 2 }); assertEquals(byte[].class, byteArrayLiteral.getNativeValue().getClass()); byte[] val = (byte[]) byteArrayLiteral.getNativeValue(); assertEquals(15, val[0]); assertEquals(3, val[1]); assertEquals(9, val[2]); assertEquals(2, val[3]); assertEquals(XMLSchema.BASE64BINARY, byteArrayLiteral.getDatatypeURI()); // XML Schema datatypes are tested in org.openanzo.test.client.TestDateTime. } /** * Change the type of a MemTypedLiteral and verify the native value is changed. Also verify the label is correct afterwards. */ public void testChangeMemTypedLiteral() { MemTypedLiteral lit = (MemTypedLiteral) MemTypedLiteral.create("9990", XMLSchema.LONG); assertEquals(Long.valueOf(9990), lit.getNativeValue()); lit = (MemTypedLiteral) MemTypedLiteral.create("9990", XMLSchema.INTEGER); assertEquals(BigInteger.valueOf(9990), lit.getNativeValue()); String label = lit.getLabel(); assertEquals("9990", label); } /** * Checks that blank node scopes are properly isolated. * * @throws Exception */ public void testBlankNodeScope() throws Exception { BlankNodeManager manager = new BlankNodeManager(false); manager.enterLabelScope(); BlankNode first = manager.getBlankNode("a1"); BlankNode second = manager.getBlankNode("a1"); manager.enterLabelScope(); BlankNode third = manager.getBlankNode("a1"); BlankNode fourth = manager.getBlankNode("a1"); manager.exitLabelScope(); manager.exitLabelScope(); assertSame(first, second); assertNotSame(second, third); assertSame(third, fourth); } /** * Checks that a blank node label can be properly associated with a blank node by the blank node manager. * * @throws Exception */ public void testBlankNodeId() throws Exception { BlankNodeManager manager = new BlankNodeManager(false); BlankNode first = manager.getBlankNode("a1"); assertEquals("a1", manager.getLabel(first)); } }