X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fgui%2FPaintRefresherTest.java;fp=test%2Fjalview%2Fgui%2FPaintRefresherTest.java;h=1da7c8cfc367b436adcb8950297132db5dac62ad;hb=8647c805617f33b905c4f72ebe30aab3c21b56f4;hp=0000000000000000000000000000000000000000;hpb=ad15cff29620f960119f80176f1fd443da9f6763;p=jalview.git diff --git a/test/jalview/gui/PaintRefresherTest.java b/test/jalview/gui/PaintRefresherTest.java new file mode 100644 index 0000000..1da7c8c --- /dev/null +++ b/test/jalview/gui/PaintRefresherTest.java @@ -0,0 +1,116 @@ +package jalview.gui; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import jalview.datamodel.Alignment; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; +import jalview.viewmodel.AlignmentViewport; + +import java.awt.Component; +import java.util.List; +import java.util.Map; + +import javax.swing.JPanel; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class PaintRefresherTest +{ + // TODO would prefer PaintRefresher to be a single rather than static + @Before + public void setUp() + { + PaintRefresher.components.clear(); + } + + @After + public void tearDown() + { + PaintRefresher.components.clear(); + } + + @Test + public void testRegister() + { + JPanel jp = new JPanel(); + JPanel jp2 = new JPanel(); + JPanel jp3 = new JPanel(); + JPanel jp4 = new JPanel(); + PaintRefresher.Register(jp, "22"); + PaintRefresher.Register(jp, "22"); + PaintRefresher.Register(jp2, "22"); + PaintRefresher.Register(jp3, "33"); + PaintRefresher.Register(jp3, "44"); + PaintRefresher.Register(jp4, "44"); + + Map> registered = PaintRefresher.components; + assertEquals(3, registered.size()); + assertEquals(2, registered.get("22").size()); + assertEquals(1, registered.get("33").size()); + assertEquals(2, registered.get("44").size()); + assertTrue(registered.get("22").contains(jp)); + assertTrue(registered.get("22").contains(jp2)); + assertTrue(registered.get("33").contains(jp3)); + assertTrue(registered.get("44").contains(jp3)); + assertTrue(registered.get("44").contains(jp4)); + } + + @Test + public void testRemoveComponent() + { + Map> registered = PaintRefresher.components; + + // no error with an empty PaintRefresher + JPanel jp = new JPanel(); + JPanel jp2 = new JPanel(); + PaintRefresher.RemoveComponent(jp); + assertTrue(registered.isEmpty()); + + /* + * Add then remove one item + */ + PaintRefresher.Register(jp, "11"); + PaintRefresher.RemoveComponent(jp); + assertTrue(registered.isEmpty()); + + /* + * Add one item under two ids, then remove it. It is removed from both ids, + * and the now empty id is removed. + */ + PaintRefresher.Register(jp, "11"); + PaintRefresher.Register(jp, "22"); + PaintRefresher.Register(jp2, "22"); + PaintRefresher.RemoveComponent(jp); + // "11" is removed as now empty, only 22/jp2 left + assertEquals(1, registered.size()); + assertEquals(1, registered.get("22").size()); + assertTrue(registered.get("22").contains(jp2)); + } + + @Test + public void testGetAssociatedPanels() + { + SequenceI [] seqs = new SequenceI[]{new Sequence("", "ABC")}; + Alignment al = new Alignment(seqs); + + /* + * AlignFrame constructor has side-effects: AlignmentPanel is constructed, + * and SeqCanvas, IdPanel, AlignmentPanel are all registered under the + * sequence set id of the viewport. + */ + AlignmentViewport av = new AlignViewport(al); + AlignFrame af = new AlignFrame(al, 4, 1); + AlignmentPanel ap1 = af.alignPanel; + AlignmentPanel[] panels = PaintRefresher.getAssociatedPanels(av + .getSequenceSetId()); + assertEquals(1, panels.length); + assertSame(ap1, panels[0]); + + panels = PaintRefresher.getAssociatedPanels(av.getSequenceSetId() + 1); + assertEquals(0, panels.length); + } +}