/******************************************************************************* * 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.client; import java.util.Collections; import org.openanzo.rdf.IStatementListener; import org.openanzo.rdf.Resource; import org.openanzo.rdf.Statement; import org.openanzo.rdf.URI; import org.openanzo.rdf.Value; import org.openanzo.rdf.utils.test.TestUtilities.TestData; import org.openanzo.services.ITracker; import org.openanzo.services.impl.SelectorTracker; /** * Unit tests for the Tracker class. * * @author Joe Betz <jpbetz@cambridgesemantics.com> * @author Ben Szekely ( <a href="mailto:ben@cambridgesemantics.com">ben@cambridgesemantics.com </a>) * */ public class TestTracker extends TestConfiguration { boolean deleted, deleted2; boolean changed, changed2; /** * Verifies a trackers getters return the correct results after a tracker is created. */ public void testCreateTracker() { SelectorTracker tracker = new SelectorTracker(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1); assertEquals(Collections.<Resource> singleton(TestData.subj1), tracker.getSubject()); assertEquals(Collections.<URI> singleton(TestData.pred1), tracker.getPredicate()); assertEquals(Collections.<Value> singleton(TestData.obj1), tracker.getObject()); assertEquals(Collections.<URI> singleton(TestData.graph1), tracker.getNamedGraphUri()); } /** * For a statement add, Verify that after a listener is registered for a tracker, that a call to notifyListeners sends the correct event to the listener. */ public void testNotifyAdd() { SelectorTracker tracker = new SelectorTracker(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1); tracker.addListener(listener); deleted = false; changed = false; tracker.notifyListeners(true, TestData.stmt1); assertTrue(changed); assertFalse(deleted); } /** * For a statement delete, Verify that after a listener is registered for a tracker, that a call to notifyListeners sends the correct event to the listener. */ public void testNotifyDelete() { SelectorTracker tracker = new SelectorTracker(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1); deleted = false; changed = false; tracker.addListener(listener); tracker.notifyListeners(false, TestData.stmt1); assertFalse(changed); assertTrue(deleted); } /** * Verifies that if a tracker is removed by it's handle that the listener registered is unregistered and events are no longer sent to the listener. */ public void testUnregistersListener() { SelectorTracker tracker = new SelectorTracker(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1); deleted = false; changed = false; tracker.addListener(listener); tracker.removeListener(listener); tracker.notifyListeners(false, TestData.stmt1); assertFalse(changed); assertFalse(deleted); } /** * Verifies that multiple tracker, listeners may co-exist. */ public void testMultipleHandles() { SelectorTracker tracker = new SelectorTracker(TestData.subj1, TestData.pred1, TestData.obj1, TestData.graph1); deleted = deleted2 = false; changed = changed2 = false; tracker.addListener(listener); tracker.addListener(listener2); tracker.notifyListeners(true, TestData.stmt1); assertTrue(changed); assertTrue(changed2); assertFalse(deleted); assertFalse(deleted2); deleted = deleted2 = false; changed = changed2 = false; tracker.removeListener(listener); tracker.notifyListeners(true, TestData.stmt1); assertFalse(changed); assertTrue(changed2); assertFalse(deleted); assertFalse(deleted2); } IStatementListener<ITracker> listener = new IStatementListener<ITracker>() { public void statementsAdded(ITracker tracker, Statement... statement) { changed = true; } public void statementsRemoved(ITracker tracker, Statement... tatement) { deleted = true; } }; IStatementListener<ITracker> listener2 = new IStatementListener<ITracker>() { public void statementsAdded(ITracker tracker, Statement... statement) { changed2 = true; } public void statementsRemoved(ITracker tracker, Statement... tatement) { deleted2 = true; } }; }