Clover icon

Coverage Report

  1. Project Clover database Tue Mar 10 2026 14:58:44 GMT
  2. Package jalview.datamodel

File AlignedCodonIteratorTest.java

 

Code metrics

0
86
6
1
194
136
7
0.08
14.33
6
1.17

Classes

Class Line # Actions
AlignedCodonIteratorTest 41 86 7
0.00%
 

Contributing tests

No tests hitting this source file were found.

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
7    * Jalview is free software: you can redistribute it and/or
8    * modify it under the terms of the GNU General Public License
9    * as published by the Free Software Foundation, either version 3
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.datamodel;
22   
23    import static org.testng.AssertJUnit.assertEquals;
24    import static org.testng.AssertJUnit.assertFalse;
25   
26    import jalview.gui.JvOptionPane;
27    import jalview.util.MapList;
28   
29    import java.util.Iterator;
30   
31    import org.testng.Assert;
32    import org.testng.annotations.BeforeClass;
33    import org.testng.annotations.Test;
34   
35    /**
36    * Unit tests for Mapping$AlignedCodonIterator
37    *
38    * @author gmcarstairs
39    *
40    */
 
41    public class AlignedCodonIteratorTest
42    {
43   
 
44  0 toggle @BeforeClass(alwaysRun = true)
45    public void setUpJvOptionPane()
46    {
47  0 JvOptionPane.setInteractiveMode(false);
48  0 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
49    }
50   
51    /**
52    * Test normal case for iterating over aligned codons.
53    */
 
54  0 toggle @Test(groups = { "Functional" })
55    public void testNext()
56    {
57  0 SequenceI from = new Sequence("Seq1", "-CgC-C-cCtAG-AtG-Gc");
58  0 from.createDatasetSequence();
59  0 SequenceI to = new Sequence("Seq1", "-PQ-R-");
60  0 to.createDatasetSequence();
61  0 MapList map = new MapList(new int[] { 1, 1, 3, 4, 6, 6, 8, 10, 12, 13 },
62    new int[]
63    { 1, 3 }, 3, 1);
64  0 Mapping m = new Mapping(to.getDatasetSequence(), map);
65   
66  0 Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
67  0 AlignedCodon codon = codons.next();
68  0 assertEquals("[1, 3, 5]", codon.toString());
69  0 assertEquals("P", codon.product);
70  0 codon = codons.next();
71  0 assertEquals("[8, 10, 11]", codon.toString());
72  0 assertEquals("Q", codon.product);
73  0 codon = codons.next();
74  0 assertEquals("[13, 15, 17]", codon.toString());
75  0 assertEquals("R", codon.product);
76  0 assertFalse(codons.hasNext());
77    }
78   
79    /**
80    * Test weird case where the mapping skips over a peptide.
81    */
 
82  0 toggle @Test(groups = { "Functional" })
83    public void testNext_unmappedPeptide()
84    {
85  0 SequenceI from = new Sequence("Seq1", "-CgC-C-cCtAG-AtG-Gc");
86  0 from.createDatasetSequence();
87  0 SequenceI to = new Sequence("Seq1", "-PQ-TR-");
88  0 to.createDatasetSequence();
89  0 MapList map = new MapList(new int[] { 1, 1, 3, 4, 6, 6, 8, 10, 12, 13 },
90    new int[]
91    { 1, 2, 4, 4 }, 3, 1);
92  0 Mapping m = new Mapping(to.getDatasetSequence(), map);
93   
94  0 Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
95  0 AlignedCodon codon = codons.next();
96  0 assertEquals("[1, 3, 5]", codon.toString());
97  0 assertEquals("P", codon.product);
98  0 codon = codons.next();
99  0 assertEquals("[8, 10, 11]", codon.toString());
100  0 assertEquals("Q", codon.product);
101  0 codon = codons.next();
102  0 assertEquals("[13, 15, 17]", codon.toString());
103  0 assertEquals("R", codon.product);
104  0 assertFalse(codons.hasNext());
105    }
106   
107    /**
108    * Test for exception thrown for an incomplete codon.
109    */
 
110  0 toggle @Test(groups = { "Functional" })
111    public void testNext_incompleteCodon()
112    {
113  0 SequenceI from = new Sequence("Seq1", "-CgC-C-cCgTt");
114  0 from.createDatasetSequence();
115  0 SequenceI to = new Sequence("Seq1", "-PQ-R-");
116  0 to.createDatasetSequence();
117  0 MapList map = new MapList(new int[] { 1, 1, 3, 4, 6, 6, 8, 8 },
118    new int[]
119    { 1, 3 }, 3, 1);
120  0 Mapping m = new Mapping(to.getDatasetSequence(), map);
121   
122  0 Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
123  0 AlignedCodon codon = codons.next();
124  0 assertEquals("[1, 3, 5]", codon.toString());
125  0 assertEquals("P", codon.product);
126  0 try
127    {
128  0 codon = codons.next();
129  0 Assert.fail("expected exception");
130    } catch (IncompleteCodonException e)
131    {
132    // expected
133    }
134    }
135   
136    /**
137    * Test normal case for iterating over aligned codons.
138    */
 
139  0 toggle @Test(groups = { "Functional" })
140    public void testAnother()
141    {
142  0 SequenceI from = new Sequence("Seq1", "TGCCATTACCAG-");
143  0 from.createDatasetSequence();
144  0 SequenceI to = new Sequence("Seq1", "CHYQ");
145  0 to.createDatasetSequence();
146  0 MapList map = new MapList(new int[] { 1, 12 }, new int[] { 1, 4 }, 3,
147    1);
148  0 Mapping m = new Mapping(to.getDatasetSequence(), map);
149   
150  0 Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
151  0 AlignedCodon codon = codons.next();
152  0 assertEquals("[0, 1, 2]", codon.toString());
153  0 assertEquals("C", codon.product);
154  0 codon = codons.next();
155  0 assertEquals("[3, 4, 5]", codon.toString());
156  0 assertEquals("H", codon.product);
157  0 codon = codons.next();
158  0 assertEquals("[6, 7, 8]", codon.toString());
159  0 assertEquals("Y", codon.product);
160  0 codon = codons.next();
161  0 assertEquals("[9, 10, 11]", codon.toString());
162  0 assertEquals("Q", codon.product);
163  0 assertFalse(codons.hasNext());
164    }
165   
166    /**
167    * Test for a case with sequence (and mappings) not starting at 1
168    */
 
169  0 toggle @Test(groups = { "Functional" })
170    public void testNext_withOffset()
171    {
172  0 SequenceI from = new Sequence("Seq1", "-CgC-C-cCtAG-AtG-Gc", 7, 20);
173  0 from.createDatasetSequence();
174  0 SequenceI to = new Sequence("Seq1/10-12", "-PQ-R-");
175  0 to.createDatasetSequence();
176  0 MapList map = new MapList(
177    new int[]
178    { 7, 7, 9, 10, 12, 12, 14, 16, 18, 19 }, new int[] { 10, 12 },
179    3, 1);
180  0 Mapping m = new Mapping(to.getDatasetSequence(), map);
181   
182  0 Iterator<AlignedCodon> codons = m.getCodonIterator(from, '-');
183  0 AlignedCodon codon = codons.next();
184  0 assertEquals("[1, 3, 5]", codon.toString());
185  0 assertEquals("P", codon.product);
186  0 codon = codons.next();
187  0 assertEquals("[8, 10, 11]", codon.toString());
188  0 assertEquals("Q", codon.product);
189  0 codon = codons.next();
190  0 assertEquals("[13, 15, 17]", codon.toString());
191  0 assertEquals("R", codon.product);
192  0 assertFalse(codons.hasNext());
193    }
194    }