package com.bigdata.rdf.internal; import java.util.LinkedList; import java.util.List; import junit.framework.TestCase2; import com.bigdata.btree.keys.IKeyBuilder; import com.bigdata.rdf.internal.impl.AbstractIV; import com.bigdata.rdf.internal.impl.AbstractNonInlineExtensionIVWithDelegateIV; import com.bigdata.rdf.internal.impl.literal.FullyInlineTypedLiteralIV; import com.bigdata.rdf.internal.impl.literal.PartlyInlineTypedLiteralIV; import com.bigdata.rdf.lexicon.BlobsIndexHelper; import com.bigdata.rdf.model.BigdataLiteral; import com.bigdata.test.MockTermIdFactory; /** * Test suite for {@link PartlyInlineTypedLiteralIV}. */ public class TestLiteralDatatypeIV extends TestCase2 { public TestLiteralDatatypeIV() { } public TestLiteralDatatypeIV(String name) { super(name); } private MockTermIdFactory termIdFactory; @Override protected void setUp() throws Exception { super.setUp(); termIdFactory = new MockTermIdFactory(); } @Override protected void tearDown() throws Exception { super.tearDown(); termIdFactory = null; } /** * Factory for mock {@link IV}s. */ private IV<?,?> newTermId(final VTE vte) { return termIdFactory.newTermId(vte); } public void test_LiteralDatatypeIV() { final IV<?,?> datatypeIV = newTermId(VTE.URI); doTest(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>(""), datatypeIV)// ); doTest(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>("abc"), datatypeIV)// ); doTest(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>(" "), datatypeIV)// ); doTest(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>("1"), datatypeIV)// ); doTest(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>("12"), datatypeIV)// ); final IV<?,?>[] e; { final List<IV<?, ?>> ivs = new LinkedList<IV<?, ?>>(); ivs.add(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>(""), datatypeIV)// ); ivs.add(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>("abc"), datatypeIV)// ); ivs.add(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>(" "), datatypeIV)// ); ivs.add(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>("1"), datatypeIV)// ); ivs.add(new PartlyInlineTypedLiteralIV<BigdataLiteral>( new FullyInlineTypedLiteralIV<BigdataLiteral>("12"), datatypeIV)// ); e = ivs.toArray(new IV[0]); } TestEncodeDecodeKeys.doEncodeDecodeTest(e); TestEncodeDecodeKeys.doComparatorTest(e); } private void doTest(final PartlyInlineTypedLiteralIV<BigdataLiteral> iv) { assertEquals(VTE.LITERAL, iv.getVTE()); assertFalse(iv.isInline()); assertTrue(iv.isExtension()); assertEquals(DTE.XSDString, iv.getDTE()); final BlobsIndexHelper h = new BlobsIndexHelper(); final IKeyBuilder keyBuilder = h.newKeyBuilder(); final byte[] key = IVUtility.encode(keyBuilder, iv).getKey(); final PartlyInlineTypedLiteralIV<BigdataLiteral> actual = (PartlyInlineTypedLiteralIV<BigdataLiteral>) IVUtility.decode(key); // Check the extension IVs for consistency. { final AbstractIV<?, ?> expectedExtensionIV = (AbstractIV<?, ?>) iv .getExtensionIV(); final AbstractIV<?, ?> actualExtensionIV = (AbstractIV<?, ?>) actual .getExtensionIV(); assertEquals(expectedExtensionIV, actualExtensionIV); assertEquals(expectedExtensionIV.byteLength(), actualExtensionIV .byteLength()); } // Check the delegate IVs for consistency. { final AbstractIV<?, ?> expectedDelegateIV = (AbstractIV<?, ?>) iv .getDelegate(); final AbstractIV<?, ?> actualDelegateIV = ((AbstractNonInlineExtensionIVWithDelegateIV<?, ?>) actual) .getDelegate(); assertEquals(expectedDelegateIV, actualDelegateIV); assertEquals(expectedDelegateIV.byteLength(), actualDelegateIV .byteLength()); } // Check the total IVs for consistency. { assertEquals(iv, actual); assertEquals(key.length, iv.byteLength()); assertEquals(key.length, actual.byteLength()); } } }