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