import java.awt.Color;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import junit.framework.TestCase;
import edu.umd.cs.piccolo.PNode;
import edu.umd.cs.piccolo.event.PBasicInputEventHandler;
import edu.umd.cs.piccolo.util.PAffineTransform;
import edu.umd.cs.piccolo.util.PBounds;
import edu.umd.cs.piccolo.util.PDimension;
public class NodeTest extends TestCase {
public NodeTest(String name) {
super(name);
}
public void setUp() {
}
public void testCenterBaseBoundsOnPoint() {
PNode aNode = new PNode();
aNode.setBounds(100, 300, 100, 80);
aNode.centerBoundsOnPoint(0, 0);
assertEquals(-50, aNode.getBoundsReference().getX(), 0);
assertEquals(-40, aNode.getBoundsReference().getY(), 0);
}
public void testClientProperties() {
PNode n = new PNode();
assertNull(n.getAttribute(null));
n.addAttribute("a", "b");
assertEquals(n.getAttribute("a"), "b");
assertNull(n.getAttribute(null));
n.addAttribute("a", null);
assertNull(n.getAttribute("a"));
}
public void testFullScale() {
PNode aParent = new PNode();
PNode aNode = new PNode();
aParent.addChild(aNode);
aParent.scale(2.0);
aNode.scale(0.5);
assertEquals(1.0, aNode.getGlobalScale(), 0);
aParent.setScale(1.0);
assertEquals(0.5, aNode.getGlobalScale(), 0);
aNode.setScale(.75);
assertEquals(0.75, aNode.getGlobalScale(), 0);
}
public void testReparent() {
PNode aParent = new PNode();
PNode aNode = new PNode();
aParent.setOffset(400, 500);
aParent.scale(0.5);
aNode.reparent(aParent);
assertEquals(0, aNode.getGlobalTranslation().getX(), 0);
assertEquals(0, aNode.getGlobalTranslation().getY(), 0);
assertEquals(2.0, aNode.getScale(), 0);
aNode.setGlobalScale(0.25);
aNode.setGlobalTranslation(new Point2D.Double(10, 10));
assertEquals(10, aNode.getGlobalTranslation().getX(), 0);
assertEquals(10, aNode.getGlobalTranslation().getY(), 0);
assertEquals(0.25, aNode.getGlobalScale(), 0);
}
public void testFindIntersectingNodes() {
PNode n = new PNode();
PNode c = new PNode();
n.addChild(c);
n.setBounds(0, 0, 100, 100);
c.setBounds(0, 0, 100, 100);
c.scale(200);
ArrayList found = new ArrayList();
Rectangle2D rect2d = new Rectangle2D.Double(50, 50, 10, 10);
n.findIntersectingNodes(rect2d, found);
assertEquals(found.size(), 2);
assertEquals(rect2d.getHeight(), 10, 0);
found = new ArrayList();
PBounds bounds = new PBounds(50, 50, 10, 10);
n.findIntersectingNodes(bounds, found);
assertEquals(found.size(), 2);
assertEquals(bounds.getHeight(), 10, 0);
}
public void testRemoveNonexistantListener() {
PNode n = new PNode();
n.removeInputEventListener(new PBasicInputEventHandler());
}
public void testAddChild() {
PNode p = new PNode();
PNode c = new PNode();
p.addChild(c);
p.addChild(new PNode());
p.addChild(new PNode());
p.addChild(c);
assertEquals(c, p.getChild(2));
p.addChild(0, c);
assertEquals(c, p.getChild(0));
p.addChild(1, c);
assertEquals(c, p.getChild(1));
p.addChild(2, c);
assertEquals(c, p.getChild(2));
}
public void testCopy() {
PNode aNode = new PNode();
aNode.setPaint(Color.yellow);
PNode aChild = new PNode();
aNode.addChild(aChild);
aNode = (PNode) aNode.clone();
assertEquals(aNode.getPaint(), Color.yellow);
assertEquals(aNode.getChildrenCount(), 1);
}
public void testLocalToGlobal() {
PNode aParent = new PNode();
PNode aChild = new PNode();
aParent.addChild(aChild);
aChild.scale(0.5);
// bounds
PBounds bnds = new PBounds(0, 0, 50, 50);
aChild.localToGlobal(bnds);
assertEquals(0, bnds.x, 0);
assertEquals(0, bnds.y, 0);
assertEquals(25, bnds.width, 0);
assertEquals(25, bnds.height, 0);
aChild.globalToLocal(bnds);
assertEquals(0, bnds.x, 0);
assertEquals(0, bnds.y, 0);
assertEquals(50, bnds.width, 0);
assertEquals(50, bnds.height, 0);
aChild.getGlobalToLocalTransform(new PAffineTransform());
aChild.getLocalToGlobalTransform(new PAffineTransform()).createTransformedShape(aChild.getBounds());
// dimensions
PDimension dim = new PDimension(50, 50);
aChild.localToGlobal(dim);
assertEquals(25, dim.getHeight(), 0);
assertEquals(25, dim.getWidth(), 0);
aChild.globalToLocal(dim);
assertEquals(50, dim.getHeight(), 0);
assertEquals(50, dim.getWidth(), 0);
}
public void testToString() {
PNode a = new PNode();
PNode b = new PNode();
PNode c = new PNode();
PNode d = new PNode();
PNode e = new PNode();
PNode f = new PNode();
a.translate(100, 100);
a.getFullBoundsReference();
a.addChild(b);
b.addChild(c);
c.addChild(d);
d.addChild(e);
e.addChild(f);
System.out.println(a.toString());
}
public void testRecursiveLayout() {
PNode layoutNode1 = new PNode() {
protected void layoutChildren() {
if (getChildrenCount() > 0) {
getChild(0).setOffset(1, 0);
}
}
};
PNode layoutNode2 = new PNode() {
protected void layoutChildren() {
if (getChildrenCount() > 0) {
getChild(0).setOffset(1, 0);
}
}
};
layoutNode1.addChild(layoutNode2);
PNode n = new PNode();
n.setBounds(0, 0, 100, 100);
layoutNode2.addChild(n);
n.setBounds(10, 10, 100, 100);
layoutNode1.getFullBoundsReference();
}
}