JAL-1705 JAL-1191 SequenceOntologyLite added as hard-coded alternative
[jalview.git] / test / jalview / ext / ensembl / EnsemblSeqProxyTest.java
index c525e95..31745e5 100644 (file)
@@ -4,14 +4,19 @@ import static org.testng.AssertJUnit.assertEquals;
 
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.io.AppletFormatAdapter;
 import jalview.io.FastaFile;
 import jalview.io.FileParse;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.io.gff.SequenceOntologyLite;
 
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -280,4 +285,82 @@ public class EnsemblSeqProxyTest
     variants = EnsemblSeqProxy.computePeptideVariants(codonVariants, "S");
     assertEquals("[C, R, T, W]", variants.toString());
   }
+  
+  /**
+   * Tests for the method that maps the subset of a dna sequence that has CDS
+   * (or subtype) feature.
+   */
+  @Test(groups = "Functional")
+  public void testGetCdsRanges()
+  {
+    EnsemblSeqProxy testee = new EnsemblSeqProxyAdapter();
+
+    SequenceI dnaSeq = new Sequence("dna", "aaaGGGcccAAATTTttt");
+    dnaSeq.createDatasetSequence();
+    SequenceI ds = dnaSeq.getDatasetSequence();
+
+    // CDS for dna 3-6
+    SequenceFeature sf = new SequenceFeature("CDS", "", 4, 6, 0f, null);
+    ds.addSequenceFeature(sf);
+    // exon feature should be ignored here
+    sf = new SequenceFeature("exon", "", 7, 9, 0f, null);
+    ds.addSequenceFeature(sf);
+    // CDS for dna 10-12
+    sf = new SequenceFeature("some_cds", "", 10, 12, 0f, null);
+    ds.addSequenceFeature(sf);
+
+    SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
+    List<int[]> ranges = new ArrayList<int[]>();
+    int mappedLength = testee.getCdsRanges(dnaSeq, ranges);
+    assertEquals(6, mappedLength);
+    assertEquals(2, ranges.size());
+    assertEquals(4, ranges.get(0)[0]);
+    assertEquals(6, ranges.get(0)[1]);
+    assertEquals(10, ranges.get(1)[0]);
+    assertEquals(12, ranges.get(1)[1]);
+
+  }
+
+  @Test(groups = "Functional")
+  public void getGenomicRangesFromFeatures()
+  {
+
+  }
+
+  /**
+   * Tests for the method that maps the subset of a dna sequence that has CDS
+   * (or subtype) feature - case where the start codon is incomplete.
+   */
+  @Test(groups = "Functional")
+  public void testGetCdsRanges_fivePrimeIncomplete()
+  {
+    EnsemblSeqProxy testee = new EnsemblSeqProxyAdapter();
+  
+    SequenceI dnaSeq = new Sequence("dna", "aaagGGCCCaaaTTTttt");
+    dnaSeq.createDatasetSequence();
+    SequenceI ds = dnaSeq.getDatasetSequence();
+  
+    // CDS for dna 5-6 (incomplete codon), 7-9
+    SequenceFeature sf = new SequenceFeature("CDS", "", 5, 9, 0f, null);
+    sf.setPhase("2"); // skip 2 bases to start of next codon
+    ds.addSequenceFeature(sf);
+    ds.addSequenceFeature(sf);
+    // CDS for dna 13-15
+    sf = new SequenceFeature("some_cds", "", 13, 15, 0f, null);
+    ds.addSequenceFeature(sf);
+  
+    SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
+    List<int[]> ranges = new ArrayList<int[]>();
+    int mappedLength = testee.getCdsRanges(dnaSeq, ranges);
+
+    /*
+     * check the mapping starts with the first complete codon
+     */
+    assertEquals(6, mappedLength);
+    assertEquals(2, ranges.size());
+    assertEquals(7, ranges.get(0)[0]);
+    assertEquals(9, ranges.get(0)[1]);
+    assertEquals(13, ranges.get(1)[0]);
+    assertEquals(15, ranges.get(1)[1]);
+  }
 }
\ No newline at end of file