JAL-1691 linked scrollling in split frame (Desktop)
[jalview.git] / test / jalview / util / MappingUtilsTest.java
index 41efa73..4e144fc 100644 (file)
@@ -8,6 +8,8 @@ import java.awt.Color;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import org.junit.Test;
@@ -21,6 +23,7 @@ import jalview.datamodel.SearchResults;
 import jalview.datamodel.SearchResults.Match;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
 import jalview.gui.AlignViewport;
 import jalview.io.AppletFormatAdapter;
 import jalview.io.FormatAdapter;
@@ -587,4 +590,75 @@ public class MappingUtilsTest
     assertEquals(0, mappedGroup.getStartRes());
     assertEquals(4, mappedGroup.getEndRes());
   }
+
+  @Test
+  public void testFindMappingsForSequence()
+  {
+    SequenceI seq1 = new Sequence("Seq1", "ABC");
+    SequenceI seq2 = new Sequence("Seq2", "ABC");
+    SequenceI seq3 = new Sequence("Seq3", "ABC");
+    SequenceI seq4 = new Sequence("Seq4", "ABC");
+    seq1.createDatasetSequence();
+    seq2.createDatasetSequence();
+    seq3.createDatasetSequence();
+    seq4.createDatasetSequence();
+
+    /*
+     * Create mappings from seq1 to seq2, seq2 to seq1, seq3 to seq1
+     */
+    AlignedCodonFrame acf1 = new AlignedCodonFrame();
+    MapList map = new MapList(new int[]
+    { 1, 3 }, new int[]
+    { 1, 3 },1, 1);
+    acf1.addMap(seq1.getDatasetSequence(), seq2.getDatasetSequence(), map);
+    AlignedCodonFrame acf2 = new AlignedCodonFrame();
+    acf2.addMap(seq2.getDatasetSequence(), seq1.getDatasetSequence(), map);
+    AlignedCodonFrame acf3 = new AlignedCodonFrame();
+    acf3.addMap(seq3.getDatasetSequence(), seq1.getDatasetSequence(), map);
+    
+    Set<AlignedCodonFrame> mappings = new HashSet<AlignedCodonFrame>();
+    mappings.add(acf1);
+    mappings.add(acf2);
+    mappings.add(acf3);
+    
+    /*
+     * Seq1 has three mappings
+     */
+    List<AlignedCodonFrame> result = MappingUtils.findMappingsForSequence(
+            seq1, mappings);
+    assertEquals(3, result.size());
+    assertTrue(result.contains(acf1));
+    assertTrue(result.contains(acf2));
+    assertTrue(result.contains(acf3));
+
+    /*
+     * Seq2 has two mappings
+     */
+    result = MappingUtils.findMappingsForSequence(seq2, mappings);
+    assertEquals(2, result.size());
+    assertTrue(result.contains(acf1));
+    assertTrue(result.contains(acf2));
+
+    /*
+     * Seq3 has one mapping
+     */
+    result = MappingUtils.findMappingsForSequence(seq3, mappings);
+    assertEquals(1, result.size());
+    assertTrue(result.contains(acf3));
+
+    /*
+     * Seq4 has no mappings
+     */
+    result = MappingUtils.findMappingsForSequence(seq4, mappings);
+    assertEquals(0, result.size());
+
+    result = MappingUtils.findMappingsForSequence(null, mappings);
+    assertEquals(0, result.size());
+
+    result = MappingUtils.findMappingsForSequence(seq1, null);
+    assertEquals(0, result.size());
+
+    result = MappingUtils.findMappingsForSequence(null, null);
+    assertEquals(0, result.size());
+}
 }