Revert "Merge branch 'bug/JAL-3806_mappingCoversSequence' into releases/Release_2_11_...
[jalview.git] / test / jalview / util / MappingUtilsTest.java
index 813edf8..08673ae 100644 (file)
@@ -22,9 +22,11 @@ package jalview.util;
 
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNull;
 import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
 import static org.testng.AssertJUnit.fail;
+import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
 
 import java.awt.Color;
 import java.io.IOException;
@@ -37,6 +39,7 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 import jalview.api.AlignViewportI;
+import jalview.bin.Cache;
 import jalview.commands.EditCommand;
 import jalview.commands.EditCommand.Action;
 import jalview.commands.EditCommand.Edit;
@@ -59,7 +62,12 @@ import jalview.io.FormatAdapter;
 
 public class MappingUtilsTest
 {
-
+  @BeforeClass(alwaysRun = true)
+  public void setUp()
+  {
+    Cache.initLogger();
+  }
+  
   @BeforeClass(alwaysRun = true)
   public void setUpJvOptionPane()
   {
@@ -232,8 +240,8 @@ public class MappingUtilsTest
             .asList(new AlignedCodonFrame[]
             { acf });
 
-    AlignViewportI dnaView = new AlignViewport(cdna);
-    AlignViewportI proteinView = new AlignViewport(protein);
+    AlignViewportI theDnaView = new AlignViewport(cdna);
+    AlignViewportI theProteinView = new AlignViewport(protein);
     protein.setCodonFrames(acfList);
 
     /*
@@ -251,7 +259,7 @@ public class MappingUtilsTest
      * Verify the mapped sequence group in dna
      */
     SequenceGroup mappedGroup = MappingUtils.mapSequenceGroup(sg,
-            proteinView, dnaView);
+            theProteinView, theDnaView);
     assertTrue(mappedGroup.getColourText());
     assertSame(sg.getIdColour(), mappedGroup.getIdColour());
     assertSame(sg.getOutlineColour(), mappedGroup.getOutlineColour());
@@ -269,7 +277,7 @@ public class MappingUtilsTest
     sg.addSequence(cdna.getSequenceAt(0), false);
     sg.setStartRes(0);
     sg.setEndRes(2);
-    mappedGroup = MappingUtils.mapSequenceGroup(sg, dnaView, proteinView);
+    mappedGroup = MappingUtils.mapSequenceGroup(sg, theDnaView, theProteinView);
     assertTrue(mappedGroup.getColourText());
     assertSame(sg.getIdColour(), mappedGroup.getIdColour());
     assertSame(sg.getOutlineColour(), mappedGroup.getOutlineColour());
@@ -523,8 +531,8 @@ public class MappingUtilsTest
             .asList(new AlignedCodonFrame[]
             { acf });
 
-    AlignViewportI dnaView = new AlignViewport(cdna);
-    AlignViewportI proteinView = new AlignViewport(protein);
+    AlignViewportI theDnaView = new AlignViewport(cdna);
+    AlignViewportI theProteinView = new AlignViewport(protein);
     protein.setCodonFrames(acfList);
 
     /*
@@ -544,7 +552,7 @@ public class MappingUtilsTest
      * Verify the mapped sequence group in dna
      */
     SequenceGroup mappedGroup = MappingUtils.mapSequenceGroup(sg,
-            proteinView, dnaView);
+            theProteinView, theDnaView);
     assertTrue(mappedGroup.getColourText());
     assertSame(sg.getIdColour(), mappedGroup.getIdColour());
     assertSame(sg.getOutlineColour(), mappedGroup.getOutlineColour());
@@ -565,7 +573,7 @@ public class MappingUtilsTest
     // select columns 2 and 3 in DNA which span protein columns 0 and 1
     sg.setStartRes(2);
     sg.setEndRes(3);
-    mappedGroup = MappingUtils.mapSequenceGroup(sg, dnaView, proteinView);
+    mappedGroup = MappingUtils.mapSequenceGroup(sg, theDnaView, theProteinView);
     assertTrue(mappedGroup.getColourText());
     assertSame(sg.getIdColour(), mappedGroup.getIdColour());
     assertSame(sg.getOutlineColour(), mappedGroup.getOutlineColour());
@@ -590,11 +598,11 @@ public class MappingUtilsTest
      * viewport).
      */
     AlignmentI cdna = loadAlignment(
-            ">Seq1\nA-CG-GC--AT-CA\n>Seq2\n-TG-AC-AG-T-AT\n>Seq3\n-T--ACG-TAAT-G\n",
+            ">Cds11\nA-CG-GC--AT-CA\n>Cds2\n-TG-AC-AG-T-AT\n>Cds3\n-T--ACG-TAAT-G\n",
             FileFormat.Fasta);
     cdna.setDataset(null);
     AlignmentI protein = loadAlignment(
-            ">Seq1\n-KA-S\n>Seq2\n--L-QY\n>Seq3\nQ-V-M\n",
+            ">Pep1\n-KA-S\n>Pep2\n--L-QY\n>Pep3\nQ-V-M\n",
             FileFormat.Fasta);
     protein.setDataset(null);
     AlignedCodonFrame acf = new AlignedCodonFrame();
@@ -608,15 +616,14 @@ public class MappingUtilsTest
             .asList(new AlignedCodonFrame[]
             { acf });
 
-    AlignViewportI dnaView = new AlignViewport(cdna);
-    AlignViewportI proteinView = new AlignViewport(protein);
+    AlignViewportI theDnaView = new AlignViewport(cdna);
+    AlignViewportI theProteinView = new AlignViewport(protein);
     protein.setCodonFrames(acfList);
 
     /*
-     * Select Seq1 and Seq2 in the protein, column 1 (K/-). Expect mapped
-     * sequence group to cover Seq1, columns 0-3 (ACG). Because the selection
-     * only includes a gap in Seq2 there is no mappable selection region in the
-     * corresponding DNA.
+     * Select Pep1 and Pep2 in the protein, column 1 (K/-). Expect mapped
+     * sequence group to cover Cds1, columns 0-3 (ACG). Although the selection
+     * only includes a gap in Cds2, mapped Cds2 is included with 'no columns'
      */
     SequenceGroup sg = new SequenceGroup();
     sg.setColourText(true);
@@ -631,14 +638,15 @@ public class MappingUtilsTest
      * Verify the mapped sequence group in dna
      */
     SequenceGroup mappedGroup = MappingUtils.mapSequenceGroup(sg,
-            proteinView, dnaView);
+            theProteinView, theDnaView);
     assertTrue(mappedGroup.getColourText());
     assertSame(sg.getIdColour(), mappedGroup.getIdColour());
     assertSame(sg.getOutlineColour(), mappedGroup.getOutlineColour());
-    assertEquals(1, mappedGroup.getSequences().size());
+    assertEquals(2, mappedGroup.getSequences().size());
     assertSame(cdna.getSequenceAt(0), mappedGroup.getSequences().get(0));
-    // Seq2 in protein has a gap in column 1 - ignored
-    // Seq1 has K which should map to columns 0-3 in Seq1
+    assertSame(cdna.getSequenceAt(1), mappedGroup.getSequences().get(1));
+    // Pep2 in protein has a gap in column 1 - doesn't map to any column
+    // Pep1 has K which should map to columns 0-3 in Cds1
     assertEquals(0, mappedGroup.getStartRes());
     assertEquals(3, mappedGroup.getEndRes());
 
@@ -648,7 +656,7 @@ public class MappingUtilsTest
      */
     sg.setStartRes(2);
     sg.setEndRes(4);
-    mappedGroup = MappingUtils.mapSequenceGroup(sg, proteinView, dnaView);
+    mappedGroup = MappingUtils.mapSequenceGroup(sg, theProteinView, theDnaView);
     assertEquals(1, mappedGroup.getStartRes());
     assertEquals(13, mappedGroup.getEndRes());
 
@@ -661,19 +669,19 @@ public class MappingUtilsTest
     // select columns 4,5 - includes Seq1:codon2 (A) only
     sg.setStartRes(4);
     sg.setEndRes(5);
-    mappedGroup = MappingUtils.mapSequenceGroup(sg, dnaView, proteinView);
+    mappedGroup = MappingUtils.mapSequenceGroup(sg, theDnaView, theProteinView);
     assertEquals(2, mappedGroup.getStartRes());
     assertEquals(2, mappedGroup.getEndRes());
 
     // add Seq2 to dna selection cols 4-5 include codons 1 and 2 (LQ)
     sg.addSequence(cdna.getSequenceAt(1), false);
-    mappedGroup = MappingUtils.mapSequenceGroup(sg, dnaView, proteinView);
+    mappedGroup = MappingUtils.mapSequenceGroup(sg, theDnaView, theProteinView);
     assertEquals(2, mappedGroup.getStartRes());
     assertEquals(4, mappedGroup.getEndRes());
 
     // add Seq3 to dna selection cols 4-5 include codon 1 (Q)
     sg.addSequence(cdna.getSequenceAt(2), false);
-    mappedGroup = MappingUtils.mapSequenceGroup(sg, dnaView, proteinView);
+    mappedGroup = MappingUtils.mapSequenceGroup(sg, theDnaView, theProteinView);
     assertEquals(0, mappedGroup.getStartRes());
     assertEquals(4, mappedGroup.getEndRes());
   }
@@ -1355,7 +1363,8 @@ public class MappingUtilsTest
   /**
    * Test mapping a sequence group where sequences in and outside the group
    * share a dataset sequence (e.g. alternative CDS for the same gene)
-   * 
+   * <p>
+   * This scenario doesn't arise after JAL-3763 changes, but test left as still valid
    * @throws IOException
    */
   @Test(groups = { "Functional" })
@@ -1377,6 +1386,9 @@ public class MappingUtilsTest
     SequenceI pep1 = new Sequence("pep1", "KF");
     SequenceI pep2 = new Sequence("pep2", "FG");
     SequenceI pep3 = new Sequence("pep3", "GP");
+    pep1.createDatasetSequence();
+    pep2.createDatasetSequence();
+    pep3.createDatasetSequence();
 
     /*
      * add mappings from coding positions of dna to respective peptides
@@ -1401,7 +1413,7 @@ public class MappingUtilsTest
             new SequenceI[]
             { pep1, pep2, pep3 });
     AlignViewportI cdnaView = new AlignViewport(cdna);
-    AlignViewportI proteinView = new AlignViewport(protein);
+    AlignViewportI peptideView = new AlignViewport(protein);
     protein.setCodonFrames(acfList);
 
     /*
@@ -1419,7 +1431,7 @@ public class MappingUtilsTest
      * Verify the mapped sequence group in dna is cds1 and cds3
      */
     SequenceGroup mappedGroup = MappingUtils.mapSequenceGroup(sg,
-            proteinView, cdnaView);
+            peptideView, cdnaView);
     assertTrue(mappedGroup.getColourText());
     assertSame(sg.getIdColour(), mappedGroup.getIdColour());
     assertSame(sg.getOutlineColour(), mappedGroup.getOutlineColour());
@@ -1438,7 +1450,7 @@ public class MappingUtilsTest
     sg.addSequence(cds1, false);
     sg.setStartRes(0);
     sg.setEndRes(cdna.getWidth() - 1);
-    mappedGroup = MappingUtils.mapSequenceGroup(sg, cdnaView, proteinView);
+    mappedGroup = MappingUtils.mapSequenceGroup(sg, cdnaView, peptideView);
     assertTrue(mappedGroup.getColourText());
     assertSame(sg.getIdColour(), mappedGroup.getIdColour());
     assertSame(sg.getOutlineColour(), mappedGroup.getOutlineColour());
@@ -1448,4 +1460,22 @@ public class MappingUtilsTest
     assertEquals(0, mappedGroup.getStartRes());
     assertEquals(1, mappedGroup.getEndRes()); // two columns
   }
+
+  @Test(groups = "Functional")
+  public void testFindOverlap()
+  {
+    List<int[]> ranges = new ArrayList<>();
+    ranges.add(new int[] {4, 8});
+    ranges.add(new int[] {10, 12});
+    ranges.add(new int[] {16, 19});
+    
+    int[] overlap = MappingUtils.findOverlap(ranges, 5,  13);
+    assertArrayEquals(overlap, new int[] {5, 12});
+    overlap = MappingUtils.findOverlap(ranges, -100, 100);
+    assertArrayEquals(overlap, new int[] {4, 19});
+    overlap = MappingUtils.findOverlap(ranges, 7, 17);
+    assertArrayEquals(overlap, new int[] {7, 17});
+    overlap = MappingUtils.findOverlap(ranges, 13, 15);
+    assertNull(overlap);
+  }
 }