1 package jalview.structure;
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertNotNull;
5 import static org.testng.AssertJUnit.assertTrue;
7 import jalview.datamodel.AlignedCodonFrame;
8 import jalview.gui.AlignFrame;
9 import jalview.gui.Desktop;
10 import jalview.io.FileLoader;
11 import jalview.io.FormatAdapter;
13 import java.util.HashSet;
14 import java.util.LinkedHashSet;
17 import org.testng.annotations.BeforeClass;
18 import org.testng.annotations.BeforeMethod;
19 import org.testng.annotations.Test;
21 public class StructureSelectionManagerTest
23 private StructureSelectionManager ssm;
25 @BeforeClass(alwaysRun = true)
26 public static void setUpBeforeClass() throws Exception
28 jalview.bin.Jalview.main(new String[] { "-props",
29 "test/jalview/testProps.jvprops" });
32 @BeforeMethod(alwaysRun = true)
35 ssm = new StructureSelectionManager();
38 @Test(groups ={ "Functional" })
39 public void testRegisterMapping()
41 AlignedCodonFrame acf1 = new AlignedCodonFrame();
42 AlignedCodonFrame acf2 = new AlignedCodonFrame();
44 ssm.registerMapping(acf1);
45 assertEquals(1, ssm.seqmappings.size());
46 assertTrue(ssm.seqmappings.contains(acf1));
48 ssm.registerMapping(acf2);
49 assertEquals(2, ssm.seqmappings.size());
50 assertTrue(ssm.seqmappings.contains(acf1));
51 assertTrue(ssm.seqmappings.contains(acf2));
54 * Re-adding the first mapping does nothing
56 ssm.registerMapping(acf1);
57 assertEquals(2, ssm.seqmappings.size());
58 assertTrue(ssm.seqmappings.contains(acf1));
59 assertTrue(ssm.seqmappings.contains(acf2));
62 @Test(groups ={ "Functional" })
63 public void testRegisterMappings()
65 AlignedCodonFrame acf1 = new AlignedCodonFrame();
66 AlignedCodonFrame acf2 = new AlignedCodonFrame();
67 AlignedCodonFrame acf3 = new AlignedCodonFrame();
69 Set<AlignedCodonFrame> set1 = new HashSet<AlignedCodonFrame>();
72 Set<AlignedCodonFrame> set2 = new HashSet<AlignedCodonFrame>();
77 * Add both sets twice; each mapping should be added once only
79 ssm.registerMappings(set1);
80 ssm.registerMappings(set1);
81 ssm.registerMappings(set2);
82 ssm.registerMappings(set2);
84 assertEquals(3, ssm.seqmappings.size());
85 assertTrue(ssm.seqmappings.contains(acf1));
86 assertTrue(ssm.seqmappings.contains(acf2));
87 assertTrue(ssm.seqmappings.contains(acf3));
91 * Test that a mapping is not deregistered if an alignment holds a reference
94 @Test(groups ={ "Functional" })
95 public void testDeregisterMapping_withAlignmentReference()
97 Desktop d = Desktop.instance;
101 * alignment with reference to mappings
103 AlignFrame af1 = new FileLoader().LoadFileWaitTillLoaded(
104 ">Seq1\nCAGT\n", FormatAdapter.PASTE);
106 AlignedCodonFrame acf1 = new AlignedCodonFrame();
107 AlignedCodonFrame acf2 = new AlignedCodonFrame();
109 Set<AlignedCodonFrame> mappings = new LinkedHashSet<AlignedCodonFrame>();
112 af1.getViewport().getAlignment().setCodonFrames(mappings);
115 * Add one and remove it.
117 ssm.registerMapping(acf1);
118 ssm.deregisterMapping(acf1);
119 assertEquals(1, ssm.seqmappings.size());
120 assertTrue(ssm.seqmappings.contains(acf1));
124 * Test that a mapping is deregistered if no alignment holds a reference to it
126 @Test(groups ={ "Functional" })
127 public void testDeregisterMapping_withNoReference()
129 Desktop d = Desktop.instance;
133 * alignment with reference to mappings
135 AlignFrame af1 = new FileLoader().LoadFileWaitTillLoaded(
136 ">Seq1\nCAGT\n", FormatAdapter.PASTE);
138 AlignedCodonFrame acf1 = new AlignedCodonFrame();
139 AlignedCodonFrame acf2 = new AlignedCodonFrame();
141 Set<AlignedCodonFrame> mappings = new LinkedHashSet<AlignedCodonFrame>();
143 af1.getViewport().getAlignment().setCodonFrames(mappings);
146 * Add one and remove it.
148 ssm.registerMapping(acf1);
149 assertEquals(1, ssm.seqmappings.size());
150 assertTrue(ssm.seqmappings.contains(acf1));
151 ssm.deregisterMapping(acf1);
152 assertEquals(0, ssm.seqmappings.size());
156 * Test that a mapping is not deregistered when a second view is closed but
157 * the first still holds a reference to the mapping
159 @Test(groups ={ "Functional" })
160 public void testDeregisterMapping_onCloseView()
163 * alignment with reference to mappings
165 AlignFrame af1 = new FileLoader().LoadFileWaitTillLoaded(
166 ">Seq1\nCAGT\n", FormatAdapter.PASTE);
168 AlignedCodonFrame acf1 = new AlignedCodonFrame();
169 AlignedCodonFrame acf2 = new AlignedCodonFrame();
171 Set<AlignedCodonFrame> mappings = new LinkedHashSet<AlignedCodonFrame>();
174 af1.getViewport().getAlignment().setCodonFrames(mappings);
175 af1.newView_actionPerformed(null);
178 * Verify that creating the alignment for the new View has registered the
181 ssm = StructureSelectionManager
182 .getStructureSelectionManager(Desktop.instance);
183 assertEquals(2, ssm.seqmappings.size());
184 assertTrue(ssm.seqmappings.contains(acf1));
185 assertTrue(ssm.seqmappings.contains(acf2));
188 * Close the second view. Verify that mappings are not removed as the first
189 * view still holds a reference to them.
191 af1.closeMenuItem_actionPerformed(false);
192 assertEquals(2, ssm.seqmappings.size());
193 assertTrue(ssm.seqmappings.contains(acf1));
194 assertTrue(ssm.seqmappings.contains(acf2));