package com.tddinaction.swing.plotmap.view; import java.awt.Component; import java.awt.Point; import java.util.Arrays; import junit.extensions.abbot.ComponentTestFixture; import abbot.finder.matchers.NameMatcher; import abbot.tester.ComponentTester; import com.tddinaction.swing.plotmap.model.PlotMapModel; public class TestPlotMapViewImpl extends ComponentTestFixture implements PlotAdditionListener { public TestPlotMapViewImpl(String name) { super(name); } private Point addedPoint; private ComponentTester tester; private PlotMapViewImpl view; private PlotMapCanvasStub canvas; public void plotWasAdded(Point plot) { addedPoint = plot; } public void setUp() throws Exception { super.setUp(); tester = new ComponentTester(); addedPoint = null; canvas = new PlotMapCanvasStub(); view = new PlotMapViewImpl() { @Override protected PlotMapCanvas createCanvas() { return canvas; } }; view.registerAdditionListener(this); showFrame(view); } private void typeIntoTextField(String name, String value) throws Exception { tester.actionKeyString(namedComponent(name), value); } private Component namedComponent(String name) throws Exception { return getFinder().find(new NameMatcher(name)); } public void testAdditionEventGetsTriggered() throws Exception { Point point = new Point(3, 5); typeIntoTextField("x_coord_textfield", "" + point.x); typeIntoTextField("y_coord_textfield", "" + point.y); tester.actionClick(namedComponent("add_button")); assertEquals(point, addedPoint); } public void testViewPassesModelToSeparateCanvasObjectForDrawing() throws Exception { Point p1 = new Point(1, 3); Point p2 = new Point(2, 1); Point p3 = new Point(5, 4); PlotMapModel model = new PlotMapModel(); model.add(p1); model.add(p2); model.add(p3); view.drawPlotMap(model); assertEquals(Arrays.asList(p1, p2, p3), canvas.plottedPoints); } public void testViewCreatesItsCanvasJustOnce() throws Exception { final MutableInt canvasesCreated = new MutableInt(); view = new PlotMapViewImpl() { @Override protected PlotMapCanvas createCanvas() { canvasesCreated.increment(); return new PlotMapCanvasStub(); } }; PlotMapModel model = new PlotMapModel(); model.add(new Point(1, 1)); model.add(new Point(2, 3)); view.drawPlotMap(model); view.drawPlotMap(model); assertEquals(1, canvasesCreated.intValue()); } public void testViewClearsOutCanvasBeforeDrawingAPlotMapModel() throws Exception { Point p1 = new Point(1, 1); Point p2 = new Point(2, 2); PlotMapModel model = new PlotMapModel(); model.add(p1); model.add(p2); view.drawPlotMap(model); view.drawPlotMap(model); assertEquals(Arrays.asList(p1, p2), canvas.plottedPoints); } public void testViewCreatesTheCorrectCanvasImplementation() throws Exception { PlotMapCanvas canvas = new PlotMapViewImpl().createCanvas(); assertEquals(PlotMapCanvasImpl.class, canvas.getClass()); } }