package jalview.structure; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import jalview.datamodel.AlignedCodonFrame; import java.util.HashSet; import java.util.Set; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class StructureSelectionManagerTest { private StructureSelectionManager ssm; @BeforeMethod(alwaysRun = true) public void setUp() { ssm = new StructureSelectionManager(); } @Test(groups ={ "Functional" }) public void testAddMapping() { AlignedCodonFrame acf1 = new AlignedCodonFrame(); AlignedCodonFrame acf2 = new AlignedCodonFrame(); /* * One mapping only. */ ssm.addMapping(acf1); assertEquals(1, ssm.seqmappings.size()); assertTrue(ssm.seqmappings.contains(acf1)); assertEquals(1, ssm.seqMappingRefCounts.size()); assertEquals(1, ssm.seqMappingRefCounts.get(acf1).intValue()); /* * A second mapping. */ ssm.addMapping(acf2); assertEquals(2, ssm.seqmappings.size()); assertTrue(ssm.seqmappings.contains(acf1)); assertTrue(ssm.seqmappings.contains(acf2)); assertEquals(2, ssm.seqMappingRefCounts.size()); assertEquals(1, ssm.seqMappingRefCounts.get(acf1).intValue()); assertEquals(1, ssm.seqMappingRefCounts.get(acf2).intValue()); /* * A second reference to the first mapping. */ ssm.addMapping(acf1); assertEquals(2, ssm.seqmappings.size()); assertTrue(ssm.seqmappings.contains(acf1)); assertTrue(ssm.seqmappings.contains(acf2)); assertEquals(2, ssm.seqMappingRefCounts.size()); assertEquals(2, ssm.seqMappingRefCounts.get(acf1).intValue()); assertEquals(1, ssm.seqMappingRefCounts.get(acf2).intValue()); } @Test(groups ={ "Functional" }) public void testAddMappings() { AlignedCodonFrame acf1 = new AlignedCodonFrame(); AlignedCodonFrame acf2 = new AlignedCodonFrame(); AlignedCodonFrame acf3 = new AlignedCodonFrame(); Set set1 = new HashSet(); set1.add(acf1); set1.add(acf2); Set set2 = new HashSet(); set2.add(acf2); set2.add(acf3); /* * Adding both sets adds acf2 twice and acf1 and acf3 once each. */ ssm.addMappings(set1); ssm.addMappings(set2); assertEquals(3, ssm.seqmappings.size()); assertTrue(ssm.seqmappings.contains(acf1)); assertTrue(ssm.seqmappings.contains(acf2)); assertTrue(ssm.seqmappings.contains(acf3)); assertEquals(3, ssm.seqMappingRefCounts.size()); assertEquals(1, ssm.seqMappingRefCounts.get(acf1).intValue()); assertEquals(2, ssm.seqMappingRefCounts.get(acf2).intValue()); assertEquals(1, ssm.seqMappingRefCounts.get(acf3).intValue()); } @Test(groups ={ "Functional" }) public void testRemoveMapping() { AlignedCodonFrame acf1 = new AlignedCodonFrame(); AlignedCodonFrame acf2 = new AlignedCodonFrame(); ssm.addMapping(acf1); /* * Add one and remove it. */ ssm.removeMapping(acf1); ssm.removeMapping(acf2); assertEquals(0, ssm.seqmappings.size()); assertEquals(0, ssm.seqMappingRefCounts.size()); /* * Add one twice and remove it once. */ ssm.addMapping(acf1); ssm.addMapping(acf2); ssm.addMapping(acf1); ssm.removeMapping(acf1); assertEquals(2, ssm.seqmappings.size()); assertTrue(ssm.seqmappings.contains(acf1)); assertTrue(ssm.seqmappings.contains(acf2)); assertEquals(2, ssm.seqMappingRefCounts.size()); assertEquals(1, ssm.seqMappingRefCounts.get(acf1).intValue()); assertEquals(1, ssm.seqMappingRefCounts.get(acf2).intValue()); /* * Remove both once more to clear the set. */ ssm.removeMapping(acf1); ssm.removeMapping(acf2); assertEquals(0, ssm.seqmappings.size()); assertEquals(0, ssm.seqMappingRefCounts.size()); } @Test(groups ={ "Functional" }) public void testRemoveMappings() { AlignedCodonFrame acf1 = new AlignedCodonFrame(); AlignedCodonFrame acf2 = new AlignedCodonFrame(); AlignedCodonFrame acf3 = new AlignedCodonFrame(); /* * Initial ref counts are 3/2/1: */ ssm.addMapping(acf1); ssm.addMapping(acf1); ssm.addMapping(acf1); ssm.addMapping(acf2); ssm.addMapping(acf2); ssm.addMapping(acf3); Set set1 = new HashSet(); set1.add(acf1); set1.add(acf2); Set set2 = new HashSet(); set2.add(acf2); set2.add(acf3); /* * Remove one ref each to acf1, acf2, counts are now 2/1/1: */ ssm.removeMappings(set1); assertEquals(3, ssm.seqmappings.size()); assertTrue(ssm.seqmappings.contains(acf1)); assertTrue(ssm.seqmappings.contains(acf2)); assertTrue(ssm.seqmappings.contains(acf3)); assertEquals(3, ssm.seqMappingRefCounts.size()); assertEquals(2, ssm.seqMappingRefCounts.get(acf1).intValue()); assertEquals(1, ssm.seqMappingRefCounts.get(acf2).intValue()); assertEquals(1, ssm.seqMappingRefCounts.get(acf3).intValue()); /* * Remove one ref each to acf2, acf3 - they are removed */ ssm.removeMappings(set2); assertEquals(1, ssm.seqmappings.size()); assertTrue(ssm.seqmappings.contains(acf1)); assertEquals(1, ssm.seqMappingRefCounts.size()); assertEquals(2, ssm.seqMappingRefCounts.get(acf1).intValue()); } }