/*
* Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
* Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jalview. If not, see .
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.schemes;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNull;
import java.util.Collections;
import java.util.List;
import org.testng.annotations.Test;
public class ResiduePropertiesTest
{
/**
* Test 'standard' codon translations (no ambiguity codes)
*/
@Test(groups = { "Functional" })
public void testCodonTranslate()
{
// standard translation table order column 1/2/3/4
assertEquals("F", ResidueProperties.codonTranslate("TTT"));
assertEquals("F", ResidueProperties.codonTranslate("TTC"));
assertEquals("L", ResidueProperties.codonTranslate("TTA"));
assertEquals("L", ResidueProperties.codonTranslate("TTG"));
assertEquals("L", ResidueProperties.codonTranslate("CTT"));
assertEquals("L", ResidueProperties.codonTranslate("CTC"));
assertEquals("L", ResidueProperties.codonTranslate("CTA"));
assertEquals("L", ResidueProperties.codonTranslate("CTG"));
assertEquals("I", ResidueProperties.codonTranslate("ATT"));
assertEquals("I", ResidueProperties.codonTranslate("ATC"));
assertEquals("I", ResidueProperties.codonTranslate("ATA"));
assertEquals("M", ResidueProperties.codonTranslate("ATG"));
assertEquals("V", ResidueProperties.codonTranslate("GTT"));
assertEquals("V", ResidueProperties.codonTranslate("GTC"));
assertEquals("V", ResidueProperties.codonTranslate("GTA"));
assertEquals("V", ResidueProperties.codonTranslate("GTG"));
assertEquals("S", ResidueProperties.codonTranslate("TCT"));
assertEquals("S", ResidueProperties.codonTranslate("TCC"));
assertEquals("S", ResidueProperties.codonTranslate("TCA"));
assertEquals("S", ResidueProperties.codonTranslate("TCG"));
assertEquals("P", ResidueProperties.codonTranslate("CCT"));
assertEquals("P", ResidueProperties.codonTranslate("CCC"));
assertEquals("P", ResidueProperties.codonTranslate("CCA"));
assertEquals("P", ResidueProperties.codonTranslate("CCG"));
assertEquals("T", ResidueProperties.codonTranslate("ACT"));
assertEquals("T", ResidueProperties.codonTranslate("ACC"));
assertEquals("T", ResidueProperties.codonTranslate("ACA"));
assertEquals("T", ResidueProperties.codonTranslate("ACG"));
assertEquals("A", ResidueProperties.codonTranslate("GCT"));
assertEquals("A", ResidueProperties.codonTranslate("GCC"));
assertEquals("A", ResidueProperties.codonTranslate("GCA"));
assertEquals("A", ResidueProperties.codonTranslate("GCG"));
assertEquals("Y", ResidueProperties.codonTranslate("TAT"));
assertEquals("Y", ResidueProperties.codonTranslate("TAC"));
assertEquals("STOP", ResidueProperties.codonTranslate("TAA"));
assertEquals("STOP", ResidueProperties.codonTranslate("TAG"));
assertEquals("H", ResidueProperties.codonTranslate("CAT"));
assertEquals("H", ResidueProperties.codonTranslate("CAC"));
assertEquals("Q", ResidueProperties.codonTranslate("CAA"));
assertEquals("Q", ResidueProperties.codonTranslate("CAG"));
assertEquals("N", ResidueProperties.codonTranslate("AAT"));
assertEquals("N", ResidueProperties.codonTranslate("AAC"));
assertEquals("K", ResidueProperties.codonTranslate("AAA"));
assertEquals("K", ResidueProperties.codonTranslate("AAG"));
assertEquals("D", ResidueProperties.codonTranslate("GAT"));
assertEquals("D", ResidueProperties.codonTranslate("GAC"));
assertEquals("E", ResidueProperties.codonTranslate("GAA"));
assertEquals("E", ResidueProperties.codonTranslate("GAG"));
assertEquals("C", ResidueProperties.codonTranslate("TGT"));
assertEquals("C", ResidueProperties.codonTranslate("TGC"));
assertEquals("STOP", ResidueProperties.codonTranslate("TGA"));
assertEquals("W", ResidueProperties.codonTranslate("TGG"));
assertEquals("R", ResidueProperties.codonTranslate("CGT"));
assertEquals("R", ResidueProperties.codonTranslate("CGC"));
assertEquals("R", ResidueProperties.codonTranslate("CGA"));
assertEquals("R", ResidueProperties.codonTranslate("CGG"));
assertEquals("S", ResidueProperties.codonTranslate("AGT"));
assertEquals("S", ResidueProperties.codonTranslate("AGC"));
assertEquals("R", ResidueProperties.codonTranslate("AGA"));
assertEquals("R", ResidueProperties.codonTranslate("AGG"));
assertEquals("G", ResidueProperties.codonTranslate("GGT"));
assertEquals("G", ResidueProperties.codonTranslate("GGC"));
assertEquals("G", ResidueProperties.codonTranslate("GGA"));
assertEquals("G", ResidueProperties.codonTranslate("GGG"));
}
/**
* Test a sample of codon translations involving ambiguity codes. Should
* return a protein value where the ambiguity does not affect the translation.
*/
@Test(groups = { "Functional" })
public void testCodonTranslate_ambiguityCodes()
{
// Y is C or T
assertEquals("C", ResidueProperties.codonTranslate("TGY"));
// Phenylalanine first base variation
assertEquals("L", ResidueProperties.codonTranslate("YTA"));
// W is A or T
assertEquals("L", ResidueProperties.codonTranslate("CTW"));
assertNull(ResidueProperties.codonTranslate("TTW"));
// S is G or C
assertEquals("G", ResidueProperties.codonTranslate("GGS"));
assertNull(ResidueProperties.codonTranslate("ATS"));
// K is T or G
assertEquals("S", ResidueProperties.codonTranslate("TCK"));
assertNull(ResidueProperties.codonTranslate("ATK"));
// M is C or A
assertEquals("T", ResidueProperties.codonTranslate("ACM"));
// Arginine first base variation
assertEquals("R", ResidueProperties.codonTranslate("MGA"));
assertEquals("R", ResidueProperties.codonTranslate("MGG"));
assertNull(ResidueProperties.codonTranslate("TAM"));
// D is A, G or T
assertEquals("P", ResidueProperties.codonTranslate("CCD"));
assertNull(ResidueProperties.codonTranslate("AAD"));
// V is A, C or G
assertEquals("V", ResidueProperties.codonTranslate("GTV"));
assertNull(ResidueProperties.codonTranslate("TTV"));
// H is A, C or T
assertEquals("A", ResidueProperties.codonTranslate("GCH"));
assertEquals("I", ResidueProperties.codonTranslate("ATH"));
assertNull(ResidueProperties.codonTranslate("AGH"));
// B is C, G or T
assertEquals("P", ResidueProperties.codonTranslate("CCB"));
assertNull(ResidueProperties.codonTranslate("TAB"));
// R is A or G
// additional tests for JAL-1685 (resolved)
assertEquals("L", ResidueProperties.codonTranslate("CTR"));
assertEquals("V", ResidueProperties.codonTranslate("GTR"));
assertEquals("S", ResidueProperties.codonTranslate("TCR"));
assertEquals("P", ResidueProperties.codonTranslate("CCR"));
assertEquals("T", ResidueProperties.codonTranslate("ACR"));
assertEquals("A", ResidueProperties.codonTranslate("GCR"));
assertEquals("R", ResidueProperties.codonTranslate("CGR"));
assertEquals("G", ResidueProperties.codonTranslate("GGR"));
assertEquals("R", ResidueProperties.codonTranslate("AGR"));
assertEquals("E", ResidueProperties.codonTranslate("GAR"));
assertEquals("K", ResidueProperties.codonTranslate("AAR"));
assertEquals("L", ResidueProperties.codonTranslate("TTR"));
assertEquals("Q", ResidueProperties.codonTranslate("CAR"));
assertEquals("STOP", ResidueProperties.codonTranslate("TAR"));
assertEquals("STOP", ResidueProperties.codonTranslate("TRA"));
// Arginine first and third base ambiguity
assertEquals("R", ResidueProperties.codonTranslate("MGR"));
assertNull(ResidueProperties.codonTranslate("ATR"));
// N is any base; 8 proteins accept any base in 3rd position
assertEquals("L", ResidueProperties.codonTranslate("CTN"));
assertEquals("V", ResidueProperties.codonTranslate("GTN"));
assertEquals("S", ResidueProperties.codonTranslate("TCN"));
assertEquals("P", ResidueProperties.codonTranslate("CCN"));
assertEquals("T", ResidueProperties.codonTranslate("ACN"));
assertEquals("A", ResidueProperties.codonTranslate("GCN"));
assertEquals("R", ResidueProperties.codonTranslate("CGN"));
assertEquals("G", ResidueProperties.codonTranslate("GGN"));
assertNull(ResidueProperties.codonTranslate("ATN"));
assertNull(ResidueProperties.codonTranslate("ANT"));
assertNull(ResidueProperties.codonTranslate("NAT"));
assertNull(ResidueProperties.codonTranslate("ANN"));
assertNull(ResidueProperties.codonTranslate("NNA"));
assertNull(ResidueProperties.codonTranslate("NNN"));
// some random stuff
assertNull(ResidueProperties.codonTranslate("YWB"));
assertNull(ResidueProperties.codonTranslate("VHD"));
assertNull(ResidueProperties.codonTranslate("WSK"));
}
@Test(groups = { "Functional" })
public void testGetResidues_nucleotide()
{
/*
* Non-ambiguous only; we don't care about the order of the list, it is just
* sorted here to make assertions reliable
*/
List residues = ResidueProperties.getResidues(true, false);
Collections.sort(residues);
assertEquals("[A, C, G, T, U]", residues.toString());
/*
* Including ambiguity codes I N R X Y
*/
residues = ResidueProperties.getResidues(true, true);
Collections.sort(residues);
assertEquals("[A, C, G, I, N, R, T, U, X, Y]", residues.toString());
}
@Test(groups = { "Functional" })
public void testGetResidues_peptide()
{
/*
* Non-ambiguous only; we don't care about the order of the list, it is just
* sorted here to make assertions reliable
*/
List residues = ResidueProperties.getResidues(false, false);
Collections.sort(residues);
assertEquals(
"[ALA, ARG, ASN, ASP, CYS, GLN, GLU, GLY, HIS, ILE, LEU, LYS, MET, PHE, PRO, SER, THR, TRP, TYR, VAL]",
residues.toString());
/*
* Including ambiguity codes ASX, GLX, XAA
*/
residues = ResidueProperties.getResidues(false, true);
Collections.sort(residues);
assertEquals(
"[ALA, ARG, ASN, ASP, ASX, CYS, GLN, GLU, GLX, GLY, HIS, ILE, LEU, LYS, MET, PHE, PRO, SER, THR, TRP, TYR, VAL, XAA]",
residues.toString());
}
@Test(groups = { "Functional" })
public void testGetCanonicalAminoAcid()
{
assertEquals("MET", ResidueProperties.getCanonicalAminoAcid("MET"));
assertEquals("MET", ResidueProperties.getCanonicalAminoAcid("MSE"));
assertEquals(null, ResidueProperties.getCanonicalAminoAcid(null));
}
@Test(groups = { "Functional" })
public void testGetSingleCharacterCode()
{
assertEquals('0', ResidueProperties.getSingleCharacterCode(null));
assertEquals('0', ResidueProperties.getSingleCharacterCode(null));
assertEquals('0', ResidueProperties.getSingleCharacterCode(""));
assertEquals('Q', ResidueProperties.getSingleCharacterCode("GLN"));
assertEquals('Q', ResidueProperties.getSingleCharacterCode("Gln"));
assertEquals('Q', ResidueProperties.getSingleCharacterCode("gln"));
}
}