Merge develop to Release_2_8_3_Branch
[jalview.git] / test / jalview / structure / StructureSelectionManagerTest.java
1 package jalview.structure;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
5 import jalview.datamodel.AlignedCodonFrame;
6
7 import java.util.HashSet;
8 import java.util.Set;
9
10 import org.junit.Before;
11 import org.junit.Test;
12
13 public class StructureSelectionManagerTest
14 {
15   private StructureSelectionManager ssm;
16
17   @Before
18   public void setUp()
19   {
20     ssm = new StructureSelectionManager();
21   }
22
23   @Test
24   public void testAddMapping()
25   {
26     AlignedCodonFrame acf1 = new AlignedCodonFrame();
27     AlignedCodonFrame acf2 = new AlignedCodonFrame();
28
29     /*
30      * One mapping only.
31      */
32     ssm.addMapping(acf1);
33     assertEquals(1, ssm.seqmappings.size());
34     assertTrue(ssm.seqmappings.contains(acf1));
35     assertEquals(1, ssm.seqMappingRefCounts.size());
36     assertEquals(1, ssm.seqMappingRefCounts.get(acf1).intValue());
37
38     /*
39      * A second mapping.
40      */
41     ssm.addMapping(acf2);
42     assertEquals(2, ssm.seqmappings.size());
43     assertTrue(ssm.seqmappings.contains(acf1));
44     assertTrue(ssm.seqmappings.contains(acf2));
45     assertEquals(2, ssm.seqMappingRefCounts.size());
46     assertEquals(1, ssm.seqMappingRefCounts.get(acf1).intValue());
47     assertEquals(1, ssm.seqMappingRefCounts.get(acf2).intValue());
48
49     /*
50      * A second reference to the first mapping.
51      */
52     ssm.addMapping(acf1);
53     assertEquals(2, ssm.seqmappings.size());
54     assertTrue(ssm.seqmappings.contains(acf1));
55     assertTrue(ssm.seqmappings.contains(acf2));
56     assertEquals(2, ssm.seqMappingRefCounts.size());
57     assertEquals(2, ssm.seqMappingRefCounts.get(acf1).intValue());
58     assertEquals(1, ssm.seqMappingRefCounts.get(acf2).intValue());
59   }
60
61   @Test
62   public void testAddMappings()
63   {
64     AlignedCodonFrame acf1 = new AlignedCodonFrame();
65     AlignedCodonFrame acf2 = new AlignedCodonFrame();
66     AlignedCodonFrame acf3 = new AlignedCodonFrame();
67
68     Set<AlignedCodonFrame> set1 = new HashSet<AlignedCodonFrame>();
69     set1.add(acf1);
70     set1.add(acf2);
71     Set<AlignedCodonFrame> set2 = new HashSet<AlignedCodonFrame>();
72     set2.add(acf2);
73     set2.add(acf3);
74
75     /*
76      * Adding both sets adds acf2 twice and acf1 and acf3 once each.
77      */
78     ssm.addMappings(set1);
79     ssm.addMappings(set2);
80
81     assertEquals(3, ssm.seqmappings.size());
82     assertTrue(ssm.seqmappings.contains(acf1));
83     assertTrue(ssm.seqmappings.contains(acf2));
84     assertTrue(ssm.seqmappings.contains(acf3));
85     assertEquals(3, ssm.seqMappingRefCounts.size());
86     assertEquals(1, ssm.seqMappingRefCounts.get(acf1).intValue());
87     assertEquals(2, ssm.seqMappingRefCounts.get(acf2).intValue());
88     assertEquals(1, ssm.seqMappingRefCounts.get(acf3).intValue());
89   }
90
91   @Test
92   public void testRemoveMapping()
93   {
94     AlignedCodonFrame acf1 = new AlignedCodonFrame();
95     AlignedCodonFrame acf2 = new AlignedCodonFrame();
96     ssm.addMapping(acf1);
97
98     /*
99      * Add one and remove it.
100      */
101     ssm.removeMapping(acf1);
102     ssm.removeMapping(acf2);
103     assertEquals(0, ssm.seqmappings.size());
104     assertEquals(0, ssm.seqMappingRefCounts.size());
105
106     /*
107      * Add one twice and remove it once.
108      */
109     ssm.addMapping(acf1);
110     ssm.addMapping(acf2);
111     ssm.addMapping(acf1);
112     ssm.removeMapping(acf1);
113     assertEquals(2, ssm.seqmappings.size());
114     assertTrue(ssm.seqmappings.contains(acf1));
115     assertTrue(ssm.seqmappings.contains(acf2));
116     assertEquals(2, ssm.seqMappingRefCounts.size());
117     assertEquals(1, ssm.seqMappingRefCounts.get(acf1).intValue());
118     assertEquals(1, ssm.seqMappingRefCounts.get(acf2).intValue());
119
120     /*
121      * Remove both once more to clear the set.
122      */
123     ssm.removeMapping(acf1);
124     ssm.removeMapping(acf2);
125     assertEquals(0, ssm.seqmappings.size());
126     assertEquals(0, ssm.seqMappingRefCounts.size());
127   }
128
129   @Test
130   public void testRemoveMappings()
131   {
132     AlignedCodonFrame acf1 = new AlignedCodonFrame();
133     AlignedCodonFrame acf2 = new AlignedCodonFrame();
134     AlignedCodonFrame acf3 = new AlignedCodonFrame();
135
136     /*
137      * Initial ref counts are 3/2/1:
138      */
139     ssm.addMapping(acf1);
140     ssm.addMapping(acf1);
141     ssm.addMapping(acf1);
142     ssm.addMapping(acf2);
143     ssm.addMapping(acf2);
144     ssm.addMapping(acf3);
145
146     Set<AlignedCodonFrame> set1 = new HashSet<AlignedCodonFrame>();
147     set1.add(acf1);
148     set1.add(acf2);
149     Set<AlignedCodonFrame> set2 = new HashSet<AlignedCodonFrame>();
150     set2.add(acf2);
151     set2.add(acf3);
152
153     /*
154      * Remove one ref each to acf1, acf2, counts are now 2/1/1:
155      */
156     ssm.removeMappings(set1);
157     assertEquals(3, ssm.seqmappings.size());
158     assertTrue(ssm.seqmappings.contains(acf1));
159     assertTrue(ssm.seqmappings.contains(acf2));
160     assertTrue(ssm.seqmappings.contains(acf3));
161     assertEquals(3, ssm.seqMappingRefCounts.size());
162     assertEquals(2, ssm.seqMappingRefCounts.get(acf1).intValue());
163     assertEquals(1, ssm.seqMappingRefCounts.get(acf2).intValue());
164     assertEquals(1, ssm.seqMappingRefCounts.get(acf3).intValue());
165
166     /*
167      * Remove one ref each to acf2, acf3 - they are removed
168      */
169     ssm.removeMappings(set2);
170     assertEquals(1, ssm.seqmappings.size());
171     assertTrue(ssm.seqmappings.contains(acf1));
172     assertEquals(1, ssm.seqMappingRefCounts.size());
173     assertEquals(2, ssm.seqMappingRefCounts.get(acf1).intValue());
174   }
175 }