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