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(
32 new int[] { 1, 1, 3, 4, 6, 6, 8, 10, 12, 13 },
33 new int[] { 1, 3 }, 3, 1);
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(
60 new int[] { 1, 1, 3, 4, 6, 6, 8, 10, 12, 13 }, new int[] { 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[] { 1, 1, 3, 4, 6, 6, 8, 8 },
88 new int[] { 1, 3 }, 3, 1);
89 Mapping m = new Mapping(to.getDatasetSequence(), map);
91 Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
92 AlignedCodon codon = codons.next();
93 assertEquals("[1, 3, 5]", codon.toString());
94 assertEquals("P", codon.product);
97 codon = codons.next();
98 Assert.fail("expected exception");
99 } catch (IncompleteCodonException e)
106 * Test normal case for iterating over aligned codons.
108 @Test(groups = { "Functional" })
109 public void testAnother()
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[] { 1, 12 }, new int[] { 1, 4 }, 3, 1);
116 Mapping m = new Mapping(to.getDatasetSequence(), map);
118 Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
119 AlignedCodon codon = codons.next();
120 assertEquals("[0, 1, 2]", codon.toString());
121 assertEquals("C", codon.product);
122 codon = codons.next();
123 assertEquals("[3, 4, 5]", codon.toString());
124 assertEquals("H", codon.product);
125 codon = codons.next();
126 assertEquals("[6, 7, 8]", codon.toString());
127 assertEquals("Y", codon.product);
128 codon = codons.next();
129 assertEquals("[9, 10, 11]", codon.toString());
130 assertEquals("Q", codon.product);
131 assertFalse(codons.hasNext());