package test.prefuse.data;
import java.net.URL;
import java.util.Iterator;
import java.util.zip.GZIPInputStream;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import junit.framework.TestCase;
import prefuse.data.Edge;
import prefuse.data.Node;
import prefuse.data.Tree;
import prefuse.data.io.TreeMLReader;
import prefuse.data.util.TreeNodeIterator;
import prefuse.demos.TreeMap;
import prefuse.util.GraphLib;
import prefuse.util.ui.JPrefuseTable;
public class TreeTest extends TestCase {
public static final String TREE_CHI = "/chi-ontology.xml.gz";
public void testTreeReader() {
// load tree
URL url = TreeMap.class.getResource(TREE_CHI);
Tree t = null;
try {
GZIPInputStream gzin = new GZIPInputStream(url.openStream());
t = (Tree) new TreeMLReader().readGraph(gzin);
} catch ( Exception e ) {
e.printStackTrace();
fail();
}
assertEquals(true, t.isValidTree());
Node[] nodelist = new Node[t.getNodeCount()];
Iterator nodes = t.nodes();
for ( int i=0; nodes.hasNext(); ++i ) {
nodelist[i] = (Node)nodes.next();
}
assertEquals(false, nodes.hasNext());
}
public void testAddChild() {
Tree tree = GraphLib.getBalancedTree(2,1);
Node r = tree.getRoot();
Node n = tree.addChild(r);
assertEquals(true, n!=null);
n.setString("label", "new node");
assertEquals(r.getLastChild(), n);
}
public void testRemoveChild() {
Tree tree = GraphLib.getBalancedTree(2,1);
int size = tree.getNodeCount();
Node r = tree.getRoot();
Node c = r.getFirstChild();
Edge e = c.getParentEdge();
assertEquals(true, tree.removeChild(c));
assertEquals(tree.getNodeCount(), size-1);
assertEquals(false, c.isValid());
assertEquals(false, e.isValid());
assertEquals(true, r.getFirstChild() != c);
}
public void testRemoveSubtree() {
Tree tree = GraphLib.getBalancedTree(3,3);
int size = tree.getNodeCount();
Node r = tree.getRoot();
Node c = r.getFirstChild();
Node[] nodes = new Node[13];
Edge[] edges = new Edge[13];
Iterator iter = new TreeNodeIterator(c);
for ( int i=0; iter.hasNext(); ++i ) {
nodes[i] = (Node)iter.next();
edges[i] = (Edge)nodes[i].getParentEdge();
}
assertEquals(true, tree.removeChild(c));
assertEquals(tree.getNodeCount(), size-13);
assertEquals(true, r.getFirstChild() != c);
for ( int i=0; i<nodes.length; ++i ) {
assertEquals(false, nodes[i].isValid());
assertEquals(false, edges[i].isValid());
}
assertEquals(true, tree.isValidTree());
}
public static void main(String[] argv) {
URL url = TreeMap.class.getResource(TREE_CHI);
Tree t = null;
try {
GZIPInputStream gzin = new GZIPInputStream(url.openStream());
t = (Tree) new TreeMLReader().readGraph(gzin);
} catch ( Exception e ) {
e.printStackTrace();
System.exit(1);
}
JPrefuseTable table = new JPrefuseTable(t.getEdgeTable());
JFrame frame = new JFrame("edges");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
}