1 package jalview.analysis;
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertFalse;
5 import static org.testng.Assert.assertNull;
6 import static org.testng.Assert.assertSame;
8 import java.util.Iterator;
10 import org.testng.annotations.Test;
12 public class GeneticCodesTest
14 @Test(groups = "Functional")
15 public void testGetCodeTable()
17 GeneticCodes codes = GeneticCodes.getInstance();
18 assertEquals(codes.getStandardCodeTable().getName(), "Standard");
19 assertEquals(codes.getStandardCodeTable().getId(), "1");
20 assertSame(codes.getStandardCodeTable(), codes.getCodeTable("1"));
21 assertEquals(codes.getCodeTable("2").getName(),
22 "Vertebrate Mitochondrial");
23 assertEquals(codes.getCodeTable("11").getName(),
24 "Bacterial, Archaeal and Plant Plastid");
25 assertEquals(codes.getCodeTable("31").getName(),
26 "Blastocrithidia Nuclear");
29 @Test(groups = "Functional")
30 public void testGetCodeTables()
32 GeneticCodes codes = GeneticCodes.getInstance();
33 Iterator<GeneticCodeI> tableIterator = codes.getCodeTables().iterator();
34 String[] ids = new String[] { "1", "2", "3", "4", "5", "6", "9", "10",
35 "11", "12", "13", "14", "15", "16", "21", "22", "23", "24", "25",
36 "26", "27", "28", "29", "30", "31" };
37 for (int i = 0; i < ids.length; i++)
39 assertEquals(tableIterator.next().getId(), ids[i]);
41 assertFalse(tableIterator.hasNext());
44 @Test(groups = "Functional")
45 public void testTranslate()
47 GeneticCodes codes = GeneticCodes.getInstance();
49 GeneticCodeI gc = codes.getCodeTable("1");
50 assertNull(gc.translate("XYZ"));
51 assertEquals(gc.translate("AGA"), "R");
53 gc = codes.getCodeTable("2");
54 assertEquals(gc.translate("AGA"), "*"); // variant
55 assertEquals(gc.translate("ttc"), "F"); // non-variant
57 // table 11 has no variant translations - should serve the standard values
58 gc = codes.getCodeTable("11");
59 assertEquals(gc.translate("ttc"), "F");
61 gc = codes.getCodeTable("31");
62 assertEquals(gc.translate("TGA"), "W"); // variant
63 assertEquals(gc.translate("tag"), "E"); // variant
64 assertEquals(gc.translate("AGC"), "S"); // non-variant
68 * Test 'standard' codon translations (no ambiguity codes)
70 @Test(groups = { "Functional" })
71 public void testTranslate_standardTable()
73 GeneticCodeI st = GeneticCodes.getInstance().getStandardCodeTable();
74 assertEquals("F", st.translate("TTT"));
75 assertEquals("F", st.translate("TTC"));
76 assertEquals("L", st.translate("TTA"));
77 assertEquals("L", st.translate("TTG"));
78 assertEquals("L", st.translate("CTT"));
79 assertEquals("L", st.translate("CTC"));
80 assertEquals("L", st.translate("CTA"));
81 assertEquals("L", st.translate("CTG"));
82 assertEquals("I", st.translate("ATT"));
83 assertEquals("I", st.translate("ATC"));
84 assertEquals("I", st.translate("ATA"));
85 assertEquals("M", st.translate("ATG"));
86 assertEquals("V", st.translate("GTT"));
87 assertEquals("V", st.translate("GTC"));
88 assertEquals("V", st.translate("GTA"));
89 assertEquals("V", st.translate("GTG"));
90 assertEquals("S", st.translate("TCT"));
91 assertEquals("S", st.translate("TCC"));
92 assertEquals("S", st.translate("TCA"));
93 assertEquals("S", st.translate("TCG"));
94 assertEquals("P", st.translate("CCT"));
95 assertEquals("P", st.translate("CCC"));
96 assertEquals("P", st.translate("CCA"));
97 assertEquals("P", st.translate("CCG"));
98 assertEquals("T", st.translate("ACT"));
99 assertEquals("T", st.translate("ACC"));
100 assertEquals("T", st.translate("ACA"));
101 assertEquals("T", st.translate("ACG"));
102 assertEquals("A", st.translate("GCT"));
103 assertEquals("A", st.translate("GCC"));
104 assertEquals("A", st.translate("GCA"));
105 assertEquals("A", st.translate("GCG"));
106 assertEquals("Y", st.translate("TAT"));
107 assertEquals("Y", st.translate("TAC"));
108 assertEquals("*", st.translate("TAA"));
109 assertEquals("*", st.translate("TAG"));
110 assertEquals("H", st.translate("CAT"));
111 assertEquals("H", st.translate("CAC"));
112 assertEquals("Q", st.translate("CAA"));
113 assertEquals("Q", st.translate("CAG"));
114 assertEquals("N", st.translate("AAT"));
115 assertEquals("N", st.translate("AAC"));
116 assertEquals("K", st.translate("AAA"));
117 assertEquals("K", st.translate("AAG"));
118 assertEquals("D", st.translate("GAT"));
119 assertEquals("D", st.translate("GAC"));
120 assertEquals("E", st.translate("GAA"));
121 assertEquals("E", st.translate("GAG"));
122 assertEquals("C", st.translate("TGT"));
123 assertEquals("C", st.translate("TGC"));
124 assertEquals("*", st.translate("TGA"));
125 assertEquals("W", st.translate("TGG"));
126 assertEquals("R", st.translate("CGT"));
127 assertEquals("R", st.translate("CGC"));
128 assertEquals("R", st.translate("CGA"));
129 assertEquals("R", st.translate("CGG"));
130 assertEquals("S", st.translate("AGT"));
131 assertEquals("S", st.translate("AGC"));
132 assertEquals("R", st.translate("AGA"));
133 assertEquals("R", st.translate("AGG"));
134 assertEquals("G", st.translate("GGT"));
135 assertEquals("G", st.translate("GGC"));
136 assertEquals("G", st.translate("GGA"));
137 assertEquals("G", st.translate("GGG"));
141 * Test a sample of codon translations involving ambiguity codes. Should
142 * return a protein value where the ambiguity does not affect the translation.
144 @Test(groups = { "Functional" })
145 public void testTranslate_standardTableAmbiguityCodes()
147 GeneticCodeI st = GeneticCodes.getInstance().getStandardCodeTable();
149 assertEquals("C", st.translate("TGY"));
150 // Phenylalanine first base variation
151 assertEquals("L", st.translate("YTA"));
154 assertEquals("L", st.translate("CTW"));
155 assertNull(st.translate("TTW"));
158 assertEquals("G", st.translate("GGS"));
159 assertNull(st.translate("ATS"));
162 assertEquals("S", st.translate("TCK"));
163 assertNull(st.translate("ATK"));
166 assertEquals("T", st.translate("ACM"));
167 // Arginine first base variation
168 assertEquals("R", st.translate("MGA"));
169 assertEquals("R", st.translate("MGG"));
170 assertNull(st.translate("TAM"));
173 assertEquals("P", st.translate("CCD"));
174 assertNull(st.translate("AAD"));
177 assertEquals("V", st.translate("GTV"));
178 assertNull(st.translate("TTV"));
181 assertEquals("A", st.translate("GCH"));
182 assertEquals("I", st.translate("ATH"));
183 assertNull(st.translate("AGH"));
186 assertEquals("P", st.translate("CCB"));
187 assertNull(st.translate("TAB"));
190 // additional tests for JAL-1685 (resolved)
191 assertEquals("L", st.translate("CTR"));
192 assertEquals("V", st.translate("GTR"));
193 assertEquals("S", st.translate("TCR"));
194 assertEquals("P", st.translate("CCR"));
195 assertEquals("T", st.translate("ACR"));
196 assertEquals("A", st.translate("GCR"));
197 assertEquals("R", st.translate("CGR"));
198 assertEquals("G", st.translate("GGR"));
199 assertEquals("R", st.translate("AGR"));
200 assertEquals("E", st.translate("GAR"));
201 assertEquals("K", st.translate("AAR"));
202 assertEquals("L", st.translate("TTR"));
203 assertEquals("Q", st.translate("CAR"));
204 assertEquals("*", st.translate("TAR"));
205 assertEquals("*", st.translate("TRA"));
206 // Arginine first and third base ambiguity
207 assertEquals("R", st.translate("MGR"));
208 assertNull(st.translate("ATR"));
210 // N is any base; 8 proteins accept any base in 3rd position
211 assertEquals("L", st.translate("CTN"));
212 assertEquals("V", st.translate("GTN"));
213 assertEquals("S", st.translate("TCN"));
214 assertEquals("P", st.translate("CCN"));
215 assertEquals("T", st.translate("ACN"));
216 assertEquals("A", st.translate("GCN"));
217 assertEquals("R", st.translate("CGN"));
218 assertEquals("G", st.translate("GGN"));
219 assertNull(st.translate("ATN"));
220 assertNull(st.translate("ANT"));
221 assertNull(st.translate("NAT"));
222 assertNull(st.translate("ANN"));
223 assertNull(st.translate("NNA"));
224 assertNull(st.translate("NNN"));
227 assertNull(st.translate("YWB"));
228 assertNull(st.translate("VHD"));
229 assertNull(st.translate("WSK"));
233 * Test a sample of codon translations involving ambiguity codes. Should
234 * return a protein value where the ambiguity does not affect the translation.
236 @Test(groups = { "Functional" })
237 public void testTranslate_nonStandardTableAmbiguityCodes()
239 GeneticCodeI standard = GeneticCodes.getInstance()
240 .getStandardCodeTable();
243 * Vertebrate Mitochondrial (Table 2)
245 GeneticCodeI gc = GeneticCodes.getInstance().getCodeTable("2");
246 // AGR is AGA or AGG - R in standard code, * in table 2
247 assertEquals(gc.translate("AGR"), "*");
248 assertEquals(standard.translate("AGR"), "R");
249 // TGR is TGA or TGG - ambiguous in standard code, W in table 2
250 assertEquals(gc.translate("TGR"), "W");
251 assertNull(standard.translate("TGR"));
254 * Yeast Mitochondrial (Table 3)
256 gc = GeneticCodes.getInstance().getCodeTable("3");
257 // CTN is L in standard code, T in table 3
258 assertEquals(gc.translate("ctn"), "T");
259 assertEquals(standard.translate("CTN"), "L");
262 * Alternative Yeast Nuclear (Table 12)
264 gc = GeneticCodes.getInstance().getCodeTable("12");
265 // CTG is S; in the standard code CTN is L
266 assertEquals(gc.translate("CTG"), "S");
267 assertNull(gc.translate("CTK")); // K is G or T -> S or L
268 assertEquals(standard.translate("CTK"), "L");
269 assertEquals(gc.translate("CTH"), "L"); // H is anything other than G
270 assertEquals(standard.translate("CTH"), "L");
271 assertEquals(standard.translate("CTN"), "L");
274 * Trematode Mitochondrial (Table 21)
276 gc = GeneticCodes.getInstance().getCodeTable("21");
277 // AAR is K in standard code, ambiguous in table 21 as AAA=N not K
278 assertNull(gc.translate("AAR"));
279 assertEquals(standard.translate("AAR"), "K");
282 @Test(groups = "Functional")
283 public void testTranslateCanonical()
285 GeneticCodes codes = GeneticCodes.getInstance();
287 GeneticCodeI gc = codes.getCodeTable("1");
288 assertNull(gc.translateCanonical("XYZ"));
289 assertEquals(gc.translateCanonical("AGA"), "R");
290 // translateCanonical should not resolve ambiguity codes
291 assertNull(gc.translateCanonical("TGY"));
293 gc = codes.getCodeTable("2");
294 assertNull(gc.translateCanonical("AGR"));
295 assertEquals(gc.translateCanonical("AGA"), "*"); // variant
296 assertEquals(gc.translateCanonical("ttc"), "F"); // non-variant