Merge branch 'features/JAL-845splitPaneMergeDevelop' into develop
[jalview.git] / test / jalview / datamodel / AlignedCodonIteratorTest.java
diff --git a/test/jalview/datamodel/AlignedCodonIteratorTest.java b/test/jalview/datamodel/AlignedCodonIteratorTest.java
new file mode 100644 (file)
index 0000000..671c51d
--- /dev/null
@@ -0,0 +1,135 @@
+package jalview.datamodel;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.fail;
+import jalview.util.MapList;
+
+import java.util.Iterator;
+
+import org.junit.Test;
+
+/**
+ * Unit tests for Mapping$AlignedCodonIterator
+ * 
+ * @author gmcarstairs
+ *
+ */
+public class AlignedCodonIteratorTest
+{
+  /**
+   * Test normal case for iterating over aligned codons.
+   */
+  @Test
+  public void testNext()
+  {
+    SequenceI from = new Sequence("Seq1", "-CgC-C-cCtAG-AtG-Gc");
+    from.createDatasetSequence();
+    SequenceI to = new Sequence("Seq1", "-PQ-R-");
+    to.createDatasetSequence();
+    MapList map = new MapList(new int[]
+    { 1, 1, 3, 4, 6, 6, 8, 10, 12, 13 }, new int[]
+    { 1, 3 }, 3, 1);
+    Mapping m = new Mapping(to.getDatasetSequence(), map);
+
+    Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
+    AlignedCodon codon = codons.next();
+    assertEquals("[1, 3, 5]", codon.toString());
+    assertEquals("P", codon.product);
+    codon = codons.next();
+    assertEquals("[8, 10, 11]", codon.toString());
+    assertEquals("Q", codon.product);
+    codon = codons.next();
+    assertEquals("[13, 15, 17]", codon.toString());
+    assertEquals("R", codon.product);
+    assertFalse(codons.hasNext());
+  }
+
+  /**
+   * Test weird case where the mapping skips over a peptide.
+   */
+  @Test
+  public void testNext_unmappedPeptide()
+  {
+    SequenceI from = new Sequence("Seq1", "-CgC-C-cCtAG-AtG-Gc");
+    from.createDatasetSequence();
+    SequenceI to = new Sequence("Seq1", "-PQ-TR-");
+    to.createDatasetSequence();
+    MapList map = new MapList(new int[]
+    { 1, 1, 3, 4, 6, 6, 8, 10, 12, 13 }, new int[]
+    { 1, 2, 4, 4 }, 3, 1);
+    Mapping m = new Mapping(to.getDatasetSequence(), map);
+
+    Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
+    AlignedCodon codon = codons.next();
+    assertEquals("[1, 3, 5]", codon.toString());
+    assertEquals("P", codon.product);
+    codon = codons.next();
+    assertEquals("[8, 10, 11]", codon.toString());
+    assertEquals("Q", codon.product);
+    codon = codons.next();
+    assertEquals("[13, 15, 17]", codon.toString());
+    assertEquals("R", codon.product);
+    assertFalse(codons.hasNext());
+  }
+  
+  /**
+   * Test for exception thrown for an incomplete codon.
+   */
+  @Test
+  public void testNext_incompleteCodon()
+  {
+    SequenceI from = new Sequence("Seq1", "-CgC-C-cCgTt");
+    from.createDatasetSequence();
+    SequenceI to = new Sequence("Seq1", "-PQ-R-");
+    to.createDatasetSequence();
+    MapList map = new MapList(new int[]
+    { 1, 1, 3, 4, 6, 6, 8, 8 }, new int[]
+    { 1, 3 }, 3, 1);
+    Mapping m = new Mapping(to.getDatasetSequence(), map);
+
+    Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
+    AlignedCodon codon = codons.next();
+    assertEquals("[1, 3, 5]", codon.toString());
+    assertEquals("P", codon.product);
+    try
+    {
+      codon = codons.next();
+      fail("expected exception");
+    } catch (IncompleteCodonException e)
+    {
+      // expected
+    }
+  }
+
+  /**
+   * Test normal case for iterating over aligned codons.
+   */
+  @Test
+  public void testAnother()
+  {
+    SequenceI from = new Sequence("Seq1", "TGCCATTACCAG-");
+    from.createDatasetSequence();
+    SequenceI to = new Sequence("Seq1", "CHYQ");
+    to.createDatasetSequence();
+    MapList map = new MapList(new int[]
+    { 1, 12 }, new int[]
+    { 1, 4 }, 3, 1);
+    Mapping m = new Mapping(to.getDatasetSequence(), map);
+  
+    Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
+    AlignedCodon codon = codons.next();
+    assertEquals("[0, 1, 2]", codon.toString());
+    assertEquals("C", codon.product);
+    codon = codons.next();
+    assertEquals("[3, 4, 5]", codon.toString());
+    assertEquals("H", codon.product);
+    codon = codons.next();
+    assertEquals("[6, 7, 8]", codon.toString());
+    assertEquals("Y", codon.product);
+    codon = codons.next();
+    assertEquals("[9, 10, 11]", codon.toString());
+    assertEquals("Q", codon.product);
+    assertFalse(codons.hasNext());
+  }
+}