Merge develop to Release_2_8_3_Branch
[jalview.git] / test / jalview / datamodel / AlignedCodonIteratorTest.java
1 package jalview.datamodel;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.fail;
6 import jalview.util.MapList;
7
8 import java.util.Iterator;
9
10 import org.junit.Test;
11
12 /**
13  * Unit tests for Mapping$AlignedCodonIterator
14  * 
15  * @author gmcarstairs
16  *
17  */
18 public class AlignedCodonIteratorTest
19 {
20   /**
21    * Test normal case for iterating over aligned codons.
22    */
23   @Test
24   public void testNext()
25   {
26     SequenceI from = new Sequence("Seq1", "-CgC-C-cCtAG-AtG-Gc");
27     from.createDatasetSequence();
28     SequenceI to = new Sequence("Seq1", "-PQ-R-");
29     to.createDatasetSequence();
30     MapList map = new MapList(new int[]
31     { 1, 1, 3, 4, 6, 6, 8, 10, 12, 13 }, new int[]
32     { 1, 3 }, 3, 1);
33     Mapping m = new Mapping(to.getDatasetSequence(), map);
34
35     Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
36     AlignedCodon codon = codons.next();
37     assertEquals("[1, 3, 5]", codon.toString());
38     assertEquals("P", codon.product);
39     codon = codons.next();
40     assertEquals("[8, 10, 11]", codon.toString());
41     assertEquals("Q", codon.product);
42     codon = codons.next();
43     assertEquals("[13, 15, 17]", codon.toString());
44     assertEquals("R", codon.product);
45     assertFalse(codons.hasNext());
46   }
47
48   /**
49    * Test weird case where the mapping skips over a peptide.
50    */
51   @Test
52   public void testNext_unmappedPeptide()
53   {
54     SequenceI from = new Sequence("Seq1", "-CgC-C-cCtAG-AtG-Gc");
55     from.createDatasetSequence();
56     SequenceI to = new Sequence("Seq1", "-PQ-TR-");
57     to.createDatasetSequence();
58     MapList map = new MapList(new int[]
59     { 1, 1, 3, 4, 6, 6, 8, 10, 12, 13 }, new int[]
60     { 1, 2, 4, 4 }, 3, 1);
61     Mapping m = new Mapping(to.getDatasetSequence(), map);
62
63     Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
64     AlignedCodon codon = codons.next();
65     assertEquals("[1, 3, 5]", codon.toString());
66     assertEquals("P", codon.product);
67     codon = codons.next();
68     assertEquals("[8, 10, 11]", codon.toString());
69     assertEquals("Q", codon.product);
70     codon = codons.next();
71     assertEquals("[13, 15, 17]", codon.toString());
72     assertEquals("R", codon.product);
73     assertFalse(codons.hasNext());
74   }
75   
76   /**
77    * Test for exception thrown for an incomplete codon.
78    */
79   @Test
80   public void testNext_incompleteCodon()
81   {
82     SequenceI from = new Sequence("Seq1", "-CgC-C-cCgTt");
83     from.createDatasetSequence();
84     SequenceI to = new Sequence("Seq1", "-PQ-R-");
85     to.createDatasetSequence();
86     MapList map = new MapList(new int[]
87     { 1, 1, 3, 4, 6, 6, 8, 8 }, new int[]
88     { 1, 3 }, 3, 1);
89     Mapping m = new Mapping(to.getDatasetSequence(), map);
90
91     Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
92     AlignedCodon codon = codons.next();
93     assertEquals("[1, 3, 5]", codon.toString());
94     assertEquals("P", codon.product);
95     try
96     {
97       codon = codons.next();
98       fail("expected exception");
99     } catch (IncompleteCodonException e)
100     {
101       // expected
102     }
103   }
104
105   /**
106    * Test normal case for iterating over aligned codons.
107    */
108   @Test
109   public void testAnother()
110   {
111     SequenceI from = new Sequence("Seq1", "TGCCATTACCAG-");
112     from.createDatasetSequence();
113     SequenceI to = new Sequence("Seq1", "CHYQ");
114     to.createDatasetSequence();
115     MapList map = new MapList(new int[]
116     { 1, 12 }, new int[]
117     { 1, 4 }, 3, 1);
118     Mapping m = new Mapping(to.getDatasetSequence(), map);
119   
120     Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
121     AlignedCodon codon = codons.next();
122     assertEquals("[0, 1, 2]", codon.toString());
123     assertEquals("C", codon.product);
124     codon = codons.next();
125     assertEquals("[3, 4, 5]", codon.toString());
126     assertEquals("H", codon.product);
127     codon = codons.next();
128     assertEquals("[6, 7, 8]", codon.toString());
129     assertEquals("Y", codon.product);
130     codon = codons.next();
131     assertEquals("[9, 10, 11]", codon.toString());
132     assertEquals("Q", codon.product);
133     assertFalse(codons.hasNext());
134   }
135 }