/******************************************************************************* * Copyright (c) 2007 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.jastor.test.tests; import java.util.Iterator; import junit.framework.TestCase; import org.openanzo.rdf.Constants; import org.openanzo.rdf.INamedGraph; import org.openanzo.rdf.NamedGraph; import org.openanzo.rdf.URI; import org.openanzo.rdf.jastor.Thing; import org.openanzo.rdf.jastor.collections.Collection; import org.openanzo.rdf.jastor.collections.CollectionsFactory; import org.openanzo.rdf.jastor.collections.OrderedCollection; import org.openanzo.rdf.jastor.collections.util.CollectionWrapper; import org.openanzo.rdf.jastor.test.ski.Ski; import org.openanzo.rdf.jastor.test.ski.SkiFactory; /** * Test collection wrappers * * @author Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com</a>) * */ public class CollectionWrapperTest extends TestCase { private static final URI GRAPH = Constants.valueFactory.createURI("http://graph1"); /** * Test ordered list of literals * * @throws Exception */ public void testOrderedLiteralCollection() throws Exception { INamedGraph graph = new NamedGraph(GRAPH); OrderedCollection oc = CollectionsFactory.createOrderedCollection("test:oc", graph); CollectionWrapper cw = new CollectionWrapper(oc); cw.add("Dan"); cw.add("Ben"); cw.add("Joe"); assertEquals(3, cw.size()); cw.iterator(); assertTrue(cw.contains("Dan")); assertTrue(cw.contains("Ben")); assertTrue(cw.contains("Joe")); assertFalse(cw.isEmpty()); cw.remove("Ben"); assertEquals(2, cw.size()); assertTrue(cw.contains("Dan")); assertFalse(cw.contains("Ben")); assertTrue(cw.contains("Joe")); cw.remove("Dan"); assertEquals(1, cw.size()); assertFalse(cw.contains("Dan")); assertFalse(cw.contains("Ben")); assertTrue(cw.contains("Joe")); @SuppressWarnings("unchecked") Iterator iter = cw.iterator(); assertTrue(iter.hasNext()); assertTrue(iter.next().equals("Joe")); cw.remove("Joe"); assertEquals(0, cw.size()); assertFalse(cw.contains("Dan")); assertFalse(cw.contains("Ben")); assertFalse(cw.contains("Joe")); } /** * Test ordered resource collection * * @throws Exception */ @SuppressWarnings("unchecked") public void testOrderedResourceCollection() throws Exception { INamedGraph graph = new NamedGraph(GRAPH); OrderedCollection oc = CollectionsFactory.createOrderedCollection("test:oc", graph); CollectionWrapper cw = new CollectionWrapper(oc); Ski s1 = SkiFactory.createSki("test:ski1", graph); Ski s2 = SkiFactory.createSki("test:ski2", graph); Ski s3 = SkiFactory.createSki("test:ski3", graph); cw.add(s1); cw.add(s2); cw.add(s3); assertEquals(3, cw.size()); Iterator iter = cw.iterator(); while (iter.hasNext()) { Thing thing = (Thing) iter.next(); assertTrue(thing.uri().equals(s1.uri()) || thing.uri().equals(s2.uri()) || thing.uri().equals(s3.uri())); } CollectionWrapper cw2 = new CollectionWrapper(oc, SkiFactory.class); Iterator iter2 = cw2.iterator(); while (iter2.hasNext()) { Object obj = iter2.next(); assertTrue(Ski.class.isInstance(obj)); } assertTrue(cw.contains(s1)); assertTrue(cw.contains(s2)); assertTrue(cw.contains(s3)); assertFalse(cw.isEmpty()); cw.remove(s2); assertEquals(2, cw.size()); assertTrue(cw.contains(s1)); assertFalse(cw.contains(s2)); assertTrue(cw.contains(s3)); cw.remove(s1); assertEquals(1, cw.size()); assertFalse(cw.contains(s1)); assertFalse(cw.contains(s2)); assertTrue(cw.contains(s3)); cw.remove(s3); assertEquals(0, cw.size()); assertFalse(cw.contains(s1)); assertFalse(cw.contains(s2)); assertFalse(cw.contains(s3)); } /** * Test literal collection * * @throws Exception */ public void testLiteralCollection() throws Exception { INamedGraph graph = new NamedGraph(GRAPH); Collection c = CollectionsFactory.createCollection("test:oc", graph); CollectionWrapper cw = new CollectionWrapper(c); cw.add("Dan"); cw.add("Ben"); cw.add("Joe"); assertEquals(3, cw.size()); assertTrue(cw.contains("Dan")); assertTrue(cw.contains("Ben")); assertTrue(cw.contains("Joe")); assertFalse(cw.isEmpty()); cw.remove("Ben"); assertEquals(2, cw.size()); assertTrue(cw.contains("Dan")); assertFalse(cw.contains("Ben")); assertTrue(cw.contains("Joe")); cw.remove("Dan"); assertEquals(1, cw.size()); assertFalse(cw.contains("Dan")); assertFalse(cw.contains("Ben")); assertTrue(cw.contains("Joe")); cw.remove("Joe"); assertEquals(0, cw.size()); assertFalse(cw.contains("Dan")); assertFalse(cw.contains("Ben")); assertFalse(cw.contains("Joe")); } /** * Test resource collection * * @throws Exception */ public void testResourceCollection() throws Exception { INamedGraph graph = new NamedGraph(GRAPH); Collection oc = CollectionsFactory.createCollection("test:oc", graph); CollectionWrapper cw = new CollectionWrapper(oc); Ski s1 = SkiFactory.createSki("test:ski1", graph); Ski s2 = SkiFactory.createSki("test:ski2", graph); Ski s3 = SkiFactory.createSki("test:ski3", graph); cw.add(s1); cw.add(s2); cw.add(s3); assertEquals(3, cw.size()); @SuppressWarnings("unchecked") Iterator iter = cw.iterator(); while (iter.hasNext()) { Thing thing = (Thing) iter.next(); assertTrue(thing.uri().equals(s1.uri()) || thing.uri().equals(s2.uri()) || thing.uri().equals(s3.uri())); } assertTrue(cw.contains(s1)); assertTrue(cw.contains(s2)); assertTrue(cw.contains(s3)); assertFalse(cw.isEmpty()); cw.remove(s2); assertEquals(2, cw.size()); assertTrue(cw.contains(s1)); assertFalse(cw.contains(s2)); assertTrue(cw.contains(s3)); cw.remove(s1); assertEquals(1, cw.size()); assertFalse(cw.contains(s1)); assertFalse(cw.contains(s2)); assertTrue(cw.contains(s3)); cw.remove(s3); assertEquals(0, cw.size()); assertFalse(cw.contains(s1)); assertFalse(cw.contains(s2)); assertFalse(cw.contains(s3)); } /** * Test ordered resource collection with dynamic typing * * @throws Exception */ public void testOrderedResourceCollectionDynamicTyping() throws Exception { INamedGraph graph = new NamedGraph(GRAPH); OrderedCollection oc = CollectionsFactory.createOrderedCollection("test:oc", graph); CollectionWrapper cw = new CollectionWrapper(oc, SkiFactory.class); Ski s1 = SkiFactory.createSki("test:ski1", graph); Ski s2 = SkiFactory.createSki("test:ski2", graph); Ski s3 = SkiFactory.createSki("test:ski3", graph); cw.add(s1); cw.add(s2); cw.add(s3); assertEquals(3, cw.size()); @SuppressWarnings("unchecked") Iterator it = cw.iterator(); int i = 0; Ski[] skis = new Ski[] { s1, s2, s3 }; while (it.hasNext()) { assertTrue(it.next().equals(skis[i++])); } } private int sizeByIterator(CollectionWrapper cw) throws Exception { @SuppressWarnings("unchecked") Iterator iter = cw.iterator(); int size = 0; while (iter.hasNext()) { size++; iter.next(); } return size; } /** * Test wrapping existing collection * * @throws Exception */ public void testWrappingExistingCollection() throws Exception { INamedGraph graph = new NamedGraph(GRAPH); OrderedCollection oc = CollectionsFactory.createOrderedCollection("test:oc", graph); CollectionWrapper cw1 = new CollectionWrapper(oc, SkiFactory.class); Ski s1 = SkiFactory.createSki("test:ski1", graph); Ski s2 = SkiFactory.createSki("test:ski2", graph); Ski s3 = SkiFactory.createSki("test:ski3", graph); cw1.add(s1); cw1.add(s2); cw1.add(s3); assertEquals(3, sizeByIterator(cw1)); CollectionWrapper cw2 = new CollectionWrapper(oc, SkiFactory.class); Ski s4 = SkiFactory.createSki("test:ski4", graph); cw2.add(s4); assertEquals(4, sizeByIterator(cw2)); assertEquals(4, sizeByIterator(cw1)); } }