X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fgui%2FAlignViewportTest.java;fp=test%2Fjalview%2Fgui%2FAlignViewportTest.java;h=0b5840cd796dae7eb53a74d9cdb430d310e13a91;hb=f06554784411ddbf871d642e66c8dcb7f147d4a8;hp=4c553862a2b6a0103d12f6ee3cb3c1338d60dde8;hpb=cf06ee5d732af6cc874115aece1138adafca8ad7;p=jalview.git diff --git a/test/jalview/gui/AlignViewportTest.java b/test/jalview/gui/AlignViewportTest.java index 4c55386..0b5840c 100644 --- a/test/jalview/gui/AlignViewportTest.java +++ b/test/jalview/gui/AlignViewportTest.java @@ -1,15 +1,26 @@ package jalview.gui; import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertSame; +import static org.testng.AssertJUnit.assertTrue; +import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; import jalview.datamodel.PDBEntry; import jalview.datamodel.PDBEntry.Type; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; +import jalview.io.FileLoader; +import jalview.io.FormatAdapter; +import jalview.structure.StructureSelectionManager; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -19,6 +30,13 @@ public class AlignViewportTest AlignmentI al; AlignViewport testee; + @BeforeClass(alwaysRun = true) + public static void setUpBeforeClass() throws Exception + { + jalview.bin.Jalview.main(new String[] { "-props", + "test/jalview/testProps.jvprops" }); + } + @BeforeMethod(alwaysRun = true) public void setUp() { @@ -84,4 +102,155 @@ public class AlignViewportTest // no sequence refers to PDBEntry[2] assertEquals(0, seqs[2].length); } + + /** + * Test that a mapping is not deregistered when a second view is closed but + * the first still holds a reference to the mapping + */ + @Test(groups ={ "Functional" }) + public void testDeregisterMapping_onCloseView() + { + /* + * alignment with reference to mappings + */ + AlignFrame af1 = new FileLoader().LoadFileWaitTillLoaded( + ">Seq1\nCAGT\n", FormatAdapter.PASTE); + + AlignedCodonFrame acf1 = new AlignedCodonFrame(); + AlignedCodonFrame acf2 = new AlignedCodonFrame(); + + Set mappings = new LinkedHashSet(); + mappings.add(acf1); + mappings.add(acf2); + af1.getViewport().getAlignment().setCodonFrames(mappings); + af1.newView_actionPerformed(null); + + /* + * Verify that creating the alignment for the new View has registered the + * mappings + */ + StructureSelectionManager ssm = StructureSelectionManager + .getStructureSelectionManager(Desktop.instance); + assertEquals(2, ssm.seqmappings.size()); + assertTrue(ssm.seqmappings.contains(acf1)); + assertTrue(ssm.seqmappings.contains(acf2)); + + /* + * Close the second view. Verify that mappings are not removed as the first + * view still holds a reference to them. + */ + af1.closeMenuItem_actionPerformed(false); + assertEquals(2, ssm.seqmappings.size()); + assertTrue(ssm.seqmappings.contains(acf1)); + assertTrue(ssm.seqmappings.contains(acf2)); + } + + /** + * Test that a mapping is deregistered if no alignment holds a reference to it + */ + @Test(groups ={ "Functional" }) + public void testDeregisterMapping_withNoReference() + { + Desktop d = Desktop.instance; + assertNotNull(d); + StructureSelectionManager ssm = StructureSelectionManager + .getStructureSelectionManager(Desktop.instance); + ssm.resetAll(); + + AlignFrame af1 = new FileLoader().LoadFileWaitTillLoaded( + ">Seq1\nRSVQ\n", FormatAdapter.PASTE); + AlignFrame af2 = new FileLoader().LoadFileWaitTillLoaded( + ">Seq2\nDGEL\n", FormatAdapter.PASTE); + + AlignedCodonFrame acf1 = new AlignedCodonFrame(); + AlignedCodonFrame acf2 = new AlignedCodonFrame(); + AlignedCodonFrame acf3 = new AlignedCodonFrame(); + + Set mappings1 = new LinkedHashSet(); + mappings1.add(acf1); + af1.getViewport().getAlignment().setCodonFrames(mappings1); + + Set mappings2 = new LinkedHashSet(); + mappings2.add(acf2); + mappings2.add(acf3); + af2.getViewport().getAlignment().setCodonFrames(mappings2); + + /* + * AlignFrame1 has mapping acf1, AlignFrame2 has acf2 and acf3 + */ + + Set ssmMappings = ssm.seqmappings; + assertEquals(0, ssmMappings.size()); + ssm.registerMapping(acf1); + assertEquals(1, ssmMappings.size()); + ssm.registerMapping(acf2); + assertEquals(2, ssmMappings.size()); + ssm.registerMapping(acf3); + assertEquals(3, ssmMappings.size()); + + /* + * Closing AlignFrame2 should remove its mappings from + * StructureSelectionManager, since AlignFrame1 has no reference to them + */ + af2.closeMenuItem_actionPerformed(true); + assertEquals(1, ssmMappings.size()); + assertTrue(ssmMappings.contains(acf1)); + } + + /** + * Test that a mapping is not deregistered if another alignment holds a + * reference to it + */ + @Test(groups ={ "Functional" }) + public void testDeregisterMapping_withReference() + { + Desktop d = Desktop.instance; + assertNotNull(d); + StructureSelectionManager ssm = StructureSelectionManager + .getStructureSelectionManager(Desktop.instance); + ssm.resetAll(); + + AlignFrame af1 = new FileLoader().LoadFileWaitTillLoaded( + ">Seq1\nRSVQ\n", FormatAdapter.PASTE); + AlignFrame af2 = new FileLoader().LoadFileWaitTillLoaded( + ">Seq2\nDGEL\n", FormatAdapter.PASTE); + + AlignedCodonFrame acf1 = new AlignedCodonFrame(); + AlignedCodonFrame acf2 = new AlignedCodonFrame(); + AlignedCodonFrame acf3 = new AlignedCodonFrame(); + + Set mappings1 = new LinkedHashSet(); + mappings1.add(acf1); + mappings1.add(acf2); + af1.getViewport().getAlignment().setCodonFrames(mappings1); + + Set mappings2 = new LinkedHashSet(); + mappings2.add(acf2); + mappings2.add(acf3); + af2.getViewport().getAlignment().setCodonFrames(mappings2); + + /* + * AlignFrame1 has mappings acf1 and acf2, AlignFrame2 has acf2 and acf3 + */ + + Set ssmMappings = ssm.seqmappings; + assertEquals(0, ssmMappings.size()); + ssm.registerMapping(acf1); + assertEquals(1, ssmMappings.size()); + ssm.registerMapping(acf2); + assertEquals(2, ssmMappings.size()); + ssm.registerMapping(acf3); + assertEquals(3, ssmMappings.size()); + + /* + * Closing AlignFrame2 should remove mapping acf3 from + * StructureSelectionManager, but not acf2, since AlignFrame1 still has a + * reference to it + */ + af2.closeMenuItem_actionPerformed(true); + assertEquals(2, ssmMappings.size()); + assertTrue(ssmMappings.contains(acf1)); + assertTrue(ssmMappings.contains(acf2)); + assertFalse(ssmMappings.contains(acf3)); + } }