/* ========================================== * 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. */ /* ------------------------------ * AbstractGraphIteratorTest.java * ------------------------------ * (C) Copyright 2003-2008, by Liviu Rau and Contributors. * * Original Author: Liviu Rau * Contributor(s): Barak Naveh * * $Id$ * * Changes * ------- * 30-Jul-2003 : Initial revision (LR); * 06-Aug-2003 : Test traversal listener & extract a shared superclass (BN); * */ package org.jgrapht.traverse; import org.jgrapht.*; import org.jgrapht.event.*; import org.jgrapht.graph.*; /** * A basis for testing {@link org.jgrapht.traverse.BreadthFirstIterator} and * {@link org.jgrapht.traverse.DepthFirstIterator} classes. * * @author Liviu Rau * @since Jul 30, 2003 */ public abstract class AbstractGraphIteratorTest extends EnhancedTestCase { //~ Instance fields -------------------------------------------------------- StringBuffer result; //~ Methods ---------------------------------------------------------------- /** * . */ public void testDirectedGraph() { result = new StringBuffer(); DirectedGraph<String, DefaultEdge> graph = createDirectedGraph(); AbstractGraphIterator<String, DefaultEdge> iterator = createIterator(graph, "1"); MyTraversalListener listener = new MyTraversalListener(); iterator.addTraversalListener(listener); while (iterator.hasNext()) { result.append(iterator.next()); if (iterator.hasNext()) { result.append(','); } } assertEquals(getExpectedStr2(), result.toString()); assertEquals(getExpectedFinishString(), listener.getFinishString()); } abstract String getExpectedStr1(); abstract String getExpectedStr2(); String getExpectedFinishString() { return ""; } DirectedGraph<String, DefaultEdge> createDirectedGraph() { DirectedGraph<String, DefaultEdge> graph = new DefaultDirectedWeightedGraph<String, DefaultEdge>( DefaultWeightedEdge.class); // String v1 = "1"; String v2 = "2"; String v3 = "3"; String v4 = "4"; String v5 = "5"; String v6 = "6"; String v7 = "7"; String v8 = "8"; String v9 = "9"; graph.addVertex(v1); graph.addVertex(v2); graph.addVertex("3"); graph.addVertex("4"); graph.addVertex("5"); graph.addVertex("6"); graph.addVertex("7"); graph.addVertex("8"); graph.addVertex("9"); graph.addVertex("orphan"); // NOTE: set weights on some of the edges to test traversals like // ClosestFirstIterator where it matters. For other traversals, it // will be ignored. Rely on the default edge weight being 1. graph.addEdge(v1, v2); Graphs.addEdge(graph, v1, v3, 100); Graphs.addEdge(graph, v2, v4, 1000); graph.addEdge(v3, v5); Graphs.addEdge(graph, v3, v6, 100); graph.addEdge(v5, v6); Graphs.addEdge(graph, v5, v7, 200); graph.addEdge(v6, v1); Graphs.addEdge(graph, v7, v8, 100); graph.addEdge(v7, v9); graph.addEdge(v8, v2); graph.addEdge(v9, v4); return graph; } abstract AbstractGraphIterator<String, DefaultEdge> createIterator( DirectedGraph<String, DefaultEdge> g, String startVertex); //~ Inner Classes ---------------------------------------------------------- /** * Internal traversal listener. * * @author Barak Naveh */ private class MyTraversalListener implements TraversalListener<String, DefaultEdge> { private int componentNumber = 0; private int numComponentVertices = 0; private String finishString = ""; /** * @see TraversalListener#connectedComponentFinished(ConnectedComponentTraversalEvent) */ public void connectedComponentFinished( ConnectedComponentTraversalEvent e) { switch (componentNumber) { case 1: assertEquals(getExpectedStr1(), result.toString()); assertEquals(9, numComponentVertices); break; case 2: assertEquals(getExpectedStr2(), result.toString()); assertEquals(1, numComponentVertices); break; default: assertFalse(); break; } numComponentVertices = 0; } /** * @see TraversalListener#connectedComponentStarted(ConnectedComponentTraversalEvent) */ public void connectedComponentStarted( ConnectedComponentTraversalEvent e) { componentNumber++; } /** * @see TraversalListener#edgeTraversed(EdgeTraversalEvent) */ public void edgeTraversed(EdgeTraversalEvent<String, DefaultEdge> e) { // to be tested... } /** * @see TraversalListener#vertexTraversed(VertexTraversalEvent) */ public void vertexTraversed(VertexTraversalEvent<String> e) { numComponentVertices++; } /** * @see TraversalListener#vertexTraversed(VertexTraversalEvent) */ public void vertexFinished(VertexTraversalEvent<String> e) { finishString += e.getVertex() + ":"; } public String getFinishString() { return finishString; } } } // End AbstractGraphIteratorTest.java