Merge develop to Release_2_8_3_Branch
[jalview.git] / test / jalview / gui / PaintRefresherTest.java
1 package jalview.gui;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertSame;
5 import static org.junit.Assert.assertTrue;
6 import jalview.datamodel.Alignment;
7 import jalview.datamodel.Sequence;
8 import jalview.datamodel.SequenceI;
9 import jalview.viewmodel.AlignmentViewport;
10
11 import java.awt.Component;
12 import java.util.List;
13 import java.util.Map;
14
15 import javax.swing.JPanel;
16
17 import org.junit.After;
18 import org.junit.Before;
19 import org.junit.Test;
20
21 public class PaintRefresherTest
22 {
23   // TODO would prefer PaintRefresher to be a single rather than static
24   @Before
25   public void setUp()
26   {
27     PaintRefresher.components.clear();
28   }
29
30   @After
31   public void tearDown()
32   {
33     PaintRefresher.components.clear();
34   }
35
36   @Test
37   public void testRegister()
38   {
39     JPanel jp = new JPanel();
40     JPanel jp2 = new JPanel();
41     JPanel jp3 = new JPanel();
42     JPanel jp4 = new JPanel();
43     PaintRefresher.Register(jp, "22");
44     PaintRefresher.Register(jp, "22");
45     PaintRefresher.Register(jp2, "22");
46     PaintRefresher.Register(jp3, "33");
47     PaintRefresher.Register(jp3, "44");
48     PaintRefresher.Register(jp4, "44");
49
50     Map<String, List<Component>> registered = PaintRefresher.components;
51     assertEquals(3, registered.size());
52     assertEquals(2, registered.get("22").size());
53     assertEquals(1, registered.get("33").size());
54     assertEquals(2, registered.get("44").size());
55     assertTrue(registered.get("22").contains(jp));
56     assertTrue(registered.get("22").contains(jp2));
57     assertTrue(registered.get("33").contains(jp3));
58     assertTrue(registered.get("44").contains(jp3));
59     assertTrue(registered.get("44").contains(jp4));
60   }
61
62   @Test
63   public void testRemoveComponent()
64   {
65     Map<String, List<Component>> registered = PaintRefresher.components;
66     
67     // no error with an empty PaintRefresher
68     JPanel jp = new JPanel();
69     JPanel jp2 = new JPanel();
70     PaintRefresher.RemoveComponent(jp);
71     assertTrue(registered.isEmpty());
72
73     /*
74      * Add then remove one item
75      */
76     PaintRefresher.Register(jp, "11");
77     PaintRefresher.RemoveComponent(jp);
78     assertTrue(registered.isEmpty());
79
80     /*
81      * Add one item under two ids, then remove it. It is removed from both ids,
82      * and the now empty id is removed.
83      */
84     PaintRefresher.Register(jp, "11");
85     PaintRefresher.Register(jp, "22");
86     PaintRefresher.Register(jp2, "22");
87     PaintRefresher.RemoveComponent(jp);
88     // "11" is removed as now empty, only 22/jp2 left
89     assertEquals(1, registered.size());
90     assertEquals(1, registered.get("22").size());
91     assertTrue(registered.get("22").contains(jp2));
92   }
93
94   @Test
95   public void testGetAssociatedPanels()
96   {
97     SequenceI [] seqs = new SequenceI[]{new Sequence("", "ABC")};
98     Alignment al = new Alignment(seqs);
99
100     /*
101      * AlignFrame constructor has side-effects: AlignmentPanel is constructed,
102      * and SeqCanvas, IdPanel, AlignmentPanel are all registered under the
103      * sequence set id of the viewport.
104      */
105     AlignmentViewport av = new AlignViewport(al);
106     AlignFrame af = new AlignFrame(al, 4, 1);
107     AlignmentPanel ap1 = af.alignPanel;
108     AlignmentPanel[] panels = PaintRefresher.getAssociatedPanels(av
109             .getSequenceSetId());
110     assertEquals(1, panels.length);
111     assertSame(ap1, panels[0]);
112     
113     panels = PaintRefresher.getAssociatedPanels(av.getSequenceSetId() + 1);
114     assertEquals(0, panels.length);
115   }
116 }