4dff315b5b9495b69d3fbb2f1f759470103f27f7
[jalview.git] / test / jalview / schemes / ResiduePropertiesTest.java
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.schemes;
22
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertNull;
25
26 import java.util.Collections;
27 import java.util.List;
28
29 import org.testng.annotations.Test;
30
31 public class ResiduePropertiesTest
32 {
33
34   /**
35    * Test 'standard' codon translations (no ambiguity codes)
36    */
37   @Test(groups = { "Functional" })
38   public void testCodonTranslate()
39   {
40     // standard translation table order column 1/2/3/4
41     assertEquals("F", ResidueProperties.codonTranslate("TTT"));
42     assertEquals("F", ResidueProperties.codonTranslate("TTC"));
43     assertEquals("L", ResidueProperties.codonTranslate("TTA"));
44     assertEquals("L", ResidueProperties.codonTranslate("TTG"));
45     assertEquals("L", ResidueProperties.codonTranslate("CTT"));
46     assertEquals("L", ResidueProperties.codonTranslate("CTC"));
47     assertEquals("L", ResidueProperties.codonTranslate("CTA"));
48     assertEquals("L", ResidueProperties.codonTranslate("CTG"));
49     assertEquals("I", ResidueProperties.codonTranslate("ATT"));
50     assertEquals("I", ResidueProperties.codonTranslate("ATC"));
51     assertEquals("I", ResidueProperties.codonTranslate("ATA"));
52     assertEquals("M", ResidueProperties.codonTranslate("ATG"));
53     assertEquals("V", ResidueProperties.codonTranslate("GTT"));
54     assertEquals("V", ResidueProperties.codonTranslate("GTC"));
55     assertEquals("V", ResidueProperties.codonTranslate("GTA"));
56     assertEquals("V", ResidueProperties.codonTranslate("GTG"));
57     assertEquals("S", ResidueProperties.codonTranslate("TCT"));
58     assertEquals("S", ResidueProperties.codonTranslate("TCC"));
59     assertEquals("S", ResidueProperties.codonTranslate("TCA"));
60     assertEquals("S", ResidueProperties.codonTranslate("TCG"));
61     assertEquals("P", ResidueProperties.codonTranslate("CCT"));
62     assertEquals("P", ResidueProperties.codonTranslate("CCC"));
63     assertEquals("P", ResidueProperties.codonTranslate("CCA"));
64     assertEquals("P", ResidueProperties.codonTranslate("CCG"));
65     assertEquals("T", ResidueProperties.codonTranslate("ACT"));
66     assertEquals("T", ResidueProperties.codonTranslate("ACC"));
67     assertEquals("T", ResidueProperties.codonTranslate("ACA"));
68     assertEquals("T", ResidueProperties.codonTranslate("ACG"));
69     assertEquals("A", ResidueProperties.codonTranslate("GCT"));
70     assertEquals("A", ResidueProperties.codonTranslate("GCC"));
71     assertEquals("A", ResidueProperties.codonTranslate("GCA"));
72     assertEquals("A", ResidueProperties.codonTranslate("GCG"));
73     assertEquals("Y", ResidueProperties.codonTranslate("TAT"));
74     assertEquals("Y", ResidueProperties.codonTranslate("TAC"));
75     assertEquals("STOP", ResidueProperties.codonTranslate("TAA"));
76     assertEquals("STOP", ResidueProperties.codonTranslate("TAG"));
77     assertEquals("H", ResidueProperties.codonTranslate("CAT"));
78     assertEquals("H", ResidueProperties.codonTranslate("CAC"));
79     assertEquals("Q", ResidueProperties.codonTranslate("CAA"));
80     assertEquals("Q", ResidueProperties.codonTranslate("CAG"));
81     assertEquals("N", ResidueProperties.codonTranslate("AAT"));
82     assertEquals("N", ResidueProperties.codonTranslate("AAC"));
83     assertEquals("K", ResidueProperties.codonTranslate("AAA"));
84     assertEquals("K", ResidueProperties.codonTranslate("AAG"));
85     assertEquals("D", ResidueProperties.codonTranslate("GAT"));
86     assertEquals("D", ResidueProperties.codonTranslate("GAC"));
87     assertEquals("E", ResidueProperties.codonTranslate("GAA"));
88     assertEquals("E", ResidueProperties.codonTranslate("GAG"));
89     assertEquals("C", ResidueProperties.codonTranslate("TGT"));
90     assertEquals("C", ResidueProperties.codonTranslate("TGC"));
91     assertEquals("STOP", ResidueProperties.codonTranslate("TGA"));
92     assertEquals("W", ResidueProperties.codonTranslate("TGG"));
93     assertEquals("R", ResidueProperties.codonTranslate("CGT"));
94     assertEquals("R", ResidueProperties.codonTranslate("CGC"));
95     assertEquals("R", ResidueProperties.codonTranslate("CGA"));
96     assertEquals("R", ResidueProperties.codonTranslate("CGG"));
97     assertEquals("S", ResidueProperties.codonTranslate("AGT"));
98     assertEquals("S", ResidueProperties.codonTranslate("AGC"));
99     assertEquals("R", ResidueProperties.codonTranslate("AGA"));
100     assertEquals("R", ResidueProperties.codonTranslate("AGG"));
101     assertEquals("G", ResidueProperties.codonTranslate("GGT"));
102     assertEquals("G", ResidueProperties.codonTranslate("GGC"));
103     assertEquals("G", ResidueProperties.codonTranslate("GGA"));
104     assertEquals("G", ResidueProperties.codonTranslate("GGG"));
105   }
106
107   /**
108    * Test a sample of codon translations involving ambiguity codes. Should
109    * return a protein value where the ambiguity does not affect the translation.
110    */
111   @Test(groups = { "Functional" })
112   public void testCodonTranslate_ambiguityCodes()
113   {
114     // Y is C or T
115     assertEquals("C", ResidueProperties.codonTranslate("TGY"));
116     // Phenylalanine first base variation
117     assertEquals("L", ResidueProperties.codonTranslate("YTA"));
118
119     // W is A or T
120     assertEquals("L", ResidueProperties.codonTranslate("CTW"));
121     assertNull(ResidueProperties.codonTranslate("TTW"));
122
123     // S is G or C
124     assertEquals("G", ResidueProperties.codonTranslate("GGS"));
125     assertNull(ResidueProperties.codonTranslate("ATS"));
126
127     // K is T or G
128     assertEquals("S", ResidueProperties.codonTranslate("TCK"));
129     assertNull(ResidueProperties.codonTranslate("ATK"));
130
131     // M is C or A
132     assertEquals("T", ResidueProperties.codonTranslate("ACM"));
133     // Arginine first base variation
134     assertEquals("R", ResidueProperties.codonTranslate("MGA"));
135     assertEquals("R", ResidueProperties.codonTranslate("MGG"));
136     assertNull(ResidueProperties.codonTranslate("TAM"));
137
138     // D is A, G or T
139     assertEquals("P", ResidueProperties.codonTranslate("CCD"));
140     assertNull(ResidueProperties.codonTranslate("AAD"));
141
142     // V is A, C or G
143     assertEquals("V", ResidueProperties.codonTranslate("GTV"));
144     assertNull(ResidueProperties.codonTranslate("TTV"));
145
146     // H is A, C or T
147     assertEquals("A", ResidueProperties.codonTranslate("GCH"));
148     assertEquals("I", ResidueProperties.codonTranslate("ATH"));
149     assertNull(ResidueProperties.codonTranslate("AGH"));
150
151     // B is C, G or T
152     assertEquals("P", ResidueProperties.codonTranslate("CCB"));
153     assertNull(ResidueProperties.codonTranslate("TAB"));
154
155     // R is A or G
156     // additional tests for JAL-1685 (resolved)
157     assertEquals("L", ResidueProperties.codonTranslate("CTR"));
158     assertEquals("V", ResidueProperties.codonTranslate("GTR"));
159     assertEquals("S", ResidueProperties.codonTranslate("TCR"));
160     assertEquals("P", ResidueProperties.codonTranslate("CCR"));
161     assertEquals("T", ResidueProperties.codonTranslate("ACR"));
162     assertEquals("A", ResidueProperties.codonTranslate("GCR"));
163     assertEquals("R", ResidueProperties.codonTranslate("CGR"));
164     assertEquals("G", ResidueProperties.codonTranslate("GGR"));
165     assertEquals("R", ResidueProperties.codonTranslate("AGR"));
166     assertEquals("E", ResidueProperties.codonTranslate("GAR"));
167     assertEquals("K", ResidueProperties.codonTranslate("AAR"));
168     assertEquals("L", ResidueProperties.codonTranslate("TTR"));
169     assertEquals("Q", ResidueProperties.codonTranslate("CAR"));
170     assertEquals("STOP", ResidueProperties.codonTranslate("TAR"));
171     assertEquals("STOP", ResidueProperties.codonTranslate("TRA"));
172     // Arginine first and third base ambiguity
173     assertEquals("R", ResidueProperties.codonTranslate("MGR"));
174     assertNull(ResidueProperties.codonTranslate("ATR"));
175
176     // N is any base; 8 proteins accept any base in 3rd position
177     assertEquals("L", ResidueProperties.codonTranslate("CTN"));
178     assertEquals("V", ResidueProperties.codonTranslate("GTN"));
179     assertEquals("S", ResidueProperties.codonTranslate("TCN"));
180     assertEquals("P", ResidueProperties.codonTranslate("CCN"));
181     assertEquals("T", ResidueProperties.codonTranslate("ACN"));
182     assertEquals("A", ResidueProperties.codonTranslate("GCN"));
183     assertEquals("R", ResidueProperties.codonTranslate("CGN"));
184     assertEquals("G", ResidueProperties.codonTranslate("GGN"));
185     assertNull(ResidueProperties.codonTranslate("ATN"));
186     assertNull(ResidueProperties.codonTranslate("ANT"));
187     assertNull(ResidueProperties.codonTranslate("NAT"));
188     assertNull(ResidueProperties.codonTranslate("ANN"));
189     assertNull(ResidueProperties.codonTranslate("NNA"));
190     assertNull(ResidueProperties.codonTranslate("NNN"));
191
192     // some random stuff
193     assertNull(ResidueProperties.codonTranslate("YWB"));
194     assertNull(ResidueProperties.codonTranslate("VHD"));
195     assertNull(ResidueProperties.codonTranslate("WSK"));
196   }
197
198   @Test(groups = { "Functional" })
199   public void testGetResidues_nucleotide()
200   {
201     /*
202      * Non-ambiguous only; we don't care about the order of the list, it is just
203      * sorted here to make assertions reliable
204      */
205     List<String> residues = ResidueProperties.getResidues(true, false);
206     Collections.sort(residues);
207     assertEquals("[A, C, G, T, U]", residues.toString());
208
209     /*
210      * Including ambiguity codes I N R X Y
211      */
212     residues = ResidueProperties.getResidues(true, true);
213     Collections.sort(residues);
214     assertEquals("[A, C, G, I, N, R, T, U, X, Y]", residues.toString());
215   }
216
217   @Test(groups = { "Functional" })
218   public void testGetResidues_peptide()
219   {
220     /*
221      * Non-ambiguous only; we don't care about the order of the list, it is just
222      * sorted here to make assertions reliable
223      */
224     List<String> residues = ResidueProperties.getResidues(false, false);
225     Collections.sort(residues);
226     assertEquals(
227             "[ALA, ARG, ASN, ASP, CYS, GLN, GLU, GLY, HIS, ILE, LEU, LYS, MET, PHE, PRO, SER, THR, TRP, TYR, VAL]",
228             residues.toString());
229
230     /*
231      * Including ambiguity codes ASX, GLX, XAA
232      */
233     residues = ResidueProperties.getResidues(false, true);
234     Collections.sort(residues);
235     assertEquals(
236             "[ALA, ARG, ASN, ASP, ASX, CYS, GLN, GLU, GLX, GLY, HIS, ILE, LEU, LYS, MET, PHE, PRO, SER, THR, TRP, TYR, VAL, XAA]",
237             residues.toString());
238   }
239
240   @Test(groups = { "Functional" })
241   public void testGetCanonicalAminoAcid()
242   {
243     assertEquals("MET", ResidueProperties.getCanonicalAminoAcid("MET"));
244     assertEquals("MET", ResidueProperties.getCanonicalAminoAcid("MSE"));
245     assertEquals(null, ResidueProperties.getCanonicalAminoAcid(null));
246   }
247
248   @Test(groups = { "Functional" })
249   public void testGetSingleCharacterCode()
250   {
251     assertEquals('0', ResidueProperties.getSingleCharacterCode(null));
252     assertEquals('0', ResidueProperties.getSingleCharacterCode(null));
253     assertEquals('0', ResidueProperties.getSingleCharacterCode(""));
254     assertEquals('Q', ResidueProperties.getSingleCharacterCode("GLN"));
255     assertEquals('Q', ResidueProperties.getSingleCharacterCode("Gln"));
256     assertEquals('Q', ResidueProperties.getSingleCharacterCode("gln"));
257   }
258 }