Merge branch 'features/JAL-845splitPaneMergeDevelop' into develop
[jalview.git] / test / jalview / gui / PaintRefresherTest.java
diff --git a/test/jalview/gui/PaintRefresherTest.java b/test/jalview/gui/PaintRefresherTest.java
new file mode 100644 (file)
index 0000000..1da7c8c
--- /dev/null
@@ -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<String, List<Component>> 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<String, List<Component>> 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);
+  }
+}