/* ==========================================
* JGraphT : a free Java graph-theory library
* ==========================================
*
* Project Info: http://jgrapht.sourceforge.net/
* Project Creator: Barak Naveh (http://sourceforge.net/users/barak_naveh)
*
* (C) Copyright 2003-2008, by Barak Naveh and Contributors.
*
* This program and the accompanying materials are dual-licensed under
* either
*
* (a) the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation, or (at your option) any
* later version.
*
* or (per the licensee's choosing)
*
* (b) the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation.
*/
/* ------------------------
* ListenableGraphTest.java
* ------------------------
* (C) Copyright 2003-2008, by Barak Naveh and Contributors.
*
* Original Author: Barak Naveh
* Contributor(s): -
*
* $Id$
*
* Changes
* -------
* 03-Aug-2003 : Initial revision (BN);
* 10-Aug-2003 : Adaptation to new event model (BN);
*
*/
package org.jgrapht.graph;
import junit.framework.*;
import org.jgrapht.*;
import org.jgrapht.event.*;
/**
* Unit test for {@link ListenableGraph} class.
*
* @author Barak Naveh
* @since Aug 3, 2003
*/
public class ListenableGraphTest
extends TestCase
{
//~ Instance fields --------------------------------------------------------
DefaultEdge lastAddedEdge;
DefaultEdge lastRemovedEdge;
Object lastAddedVertex;
Object lastRemovedVertex;
//~ Constructors -----------------------------------------------------------
/**
* @see junit.framework.TestCase#TestCase(java.lang.String)
*/
public ListenableGraphTest(String name)
{
super(name);
}
//~ Methods ----------------------------------------------------------------
/**
* Tests GraphListener listener.
*/
public void testGraphListener()
{
init();
ListenableGraph<Object, DefaultEdge> g =
new ListenableUndirectedGraph<Object, DefaultEdge>(
DefaultEdge.class);
GraphListener<Object, DefaultEdge> listener =
new MyGraphListner<DefaultEdge>();
g.addGraphListener(listener);
String v1 = "v1";
String v2 = "v2";
// test vertex notification
g.addVertex(v1);
assertEquals(v1, lastAddedVertex);
assertEquals(null, lastRemovedVertex);
init();
g.removeVertex(v1);
assertEquals(v1, lastRemovedVertex);
assertEquals(null, lastAddedVertex);
// test edge notification
g.addVertex(v1);
g.addVertex(v2);
init();
DefaultEdge e = g.addEdge(v1, v2);
assertEquals(e, lastAddedEdge);
assertEquals(null, lastRemovedEdge);
init();
assertTrue(g.removeEdge(e));
assertEquals(e, lastRemovedEdge);
assertEquals(null, lastAddedEdge);
g.removeVertex(v1);
g.removeVertex(v2);
//
// test notification stops when removing listener
//
g.removeGraphListener(listener);
init();
g.addVertex(v1);
g.addVertex(v2);
e = g.addEdge(v1, v2);
g.removeEdge(e);
assertEquals(null, lastAddedEdge);
assertEquals(null, lastAddedVertex);
assertEquals(null, lastRemovedEdge);
assertEquals(null, lastRemovedVertex);
}
/**
* Tests VertexSetListener listener.
*/
public void testVertexSetListener()
{
init();
ListenableGraph<Object, DefaultEdge> g =
new ListenableUndirectedGraph<Object, DefaultEdge>(
DefaultEdge.class);
VertexSetListener<Object> listener =
new MyGraphListner<DefaultEdge>();
g.addVertexSetListener(listener);
String v1 = "v1";
String v2 = "v2";
// test vertex notification
g.addVertex(v1);
assertEquals(v1, lastAddedVertex);
assertEquals(null, lastRemovedVertex);
init();
g.removeVertex(v1);
assertEquals(v1, lastRemovedVertex);
assertEquals(null, lastAddedVertex);
// test edge notification
g.addVertex(v1);
g.addVertex(v2);
init();
DefaultEdge e = g.addEdge(v1, v2);
assertEquals(null, lastAddedEdge);
assertEquals(null, lastRemovedEdge);
init();
assertTrue(g.removeEdge(e));
assertEquals(null, lastRemovedEdge);
assertEquals(null, lastAddedEdge);
g.removeVertex(v1);
g.removeVertex(v2);
//
// test notification stops when removing listener
//
g.removeVertexSetListener(listener);
init();
g.addVertex(v1);
g.addVertex(v2);
e = g.addEdge(v1, v2);
g.removeEdge(e);
assertEquals(null, lastAddedEdge);
assertEquals(null, lastAddedVertex);
assertEquals(null, lastRemovedEdge);
assertEquals(null, lastRemovedVertex);
}
/**
* Tests that the combination of weights plus listener works.
*/
public void testListenableDirectedWeightedGraph()
{
init();
ListenableDirectedWeightedGraph<Object, DefaultWeightedEdge> g =
new ListenableDirectedWeightedGraph<Object, DefaultWeightedEdge>(
DefaultWeightedEdge.class);
GraphListener<Object, DefaultWeightedEdge> listener =
new MyGraphListner<DefaultWeightedEdge>();
g.addGraphListener(listener);
String v1 = "v1";
String v2 = "v2";
g.addVertex(v1);
assertEquals(v1, lastAddedVertex);
assertEquals(null, lastRemovedVertex);
g.addVertex(v2);
init();
DefaultWeightedEdge e = g.addEdge(v1, v2);
g.setEdgeWeight(e, 10.0);
assertEquals(10.0, g.getEdgeWeight(e));
assertEquals(e, lastAddedEdge);
assertEquals(null, lastRemovedEdge);
}
private void init()
{
lastAddedEdge = null;
lastAddedVertex = null;
lastRemovedEdge = null;
lastRemovedVertex = null;
}
//~ Inner Classes ----------------------------------------------------------
/**
* A listener on the tested graph.
*
* @author Barak Naveh
* @since Aug 3, 2003
*/
private class MyGraphListner<E extends DefaultEdge>
implements GraphListener<Object, E>
{
/**
* @see GraphListener#edgeAdded(GraphEdgeChangeEvent)
*/
public void edgeAdded(GraphEdgeChangeEvent<Object, E> e)
{
lastAddedEdge = e.getEdge();
}
/**
* @see GraphListener#edgeRemoved(GraphEdgeChangeEvent)
*/
public void edgeRemoved(GraphEdgeChangeEvent<Object, E> e)
{
lastRemovedEdge = e.getEdge();
}
/**
* @see VertexSetListener#vertexAdded(GraphVertexChangeEvent)
*/
public void vertexAdded(GraphVertexChangeEvent<Object> e)
{
lastAddedVertex = e.getVertex();
}
/**
* @see VertexSetListener#vertexRemoved(GraphVertexChangeEvent)
*/
public void vertexRemoved(GraphVertexChangeEvent<Object> e)
{
lastRemovedVertex = e.getVertex();
}
}
}
// End ListenableGraphTest.java