X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fws%2Fdbsources%2FUniprotTest.java;h=060c3032f2abf456765a2d516c359c59843773c8;hb=0d4b46bd187c65f264ebdbdc968ac349f2dfcce5;hp=9fba1cb8d3dd70c95fb44f0e9e02e361a885ef7f;hpb=c93b9ad2ebfab4cad4608a8890132918589576be;p=jalview.git diff --git a/test/jalview/ws/dbsources/UniprotTest.java b/test/jalview/ws/dbsources/UniprotTest.java index 9fba1cb..060c303 100644 --- a/test/jalview/ws/dbsources/UniprotTest.java +++ b/test/jalview/ws/dbsources/UniprotTest.java @@ -1,20 +1,54 @@ +/* + * 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.ws.dbsources; import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNull; import jalview.datamodel.PDBEntry; -import jalview.datamodel.SequenceFeature; -import jalview.datamodel.UniprotEntry; +import jalview.datamodel.SequenceI; +import jalview.datamodel.xdb.uniprot.UniprotEntry; +import jalview.datamodel.xdb.uniprot.UniprotFeature; +import jalview.gui.JvOptionPane; import java.io.Reader; import java.io.StringReader; import java.util.Vector; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class UniprotTest { + + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + // adapted from http://www.uniprot.org/uniprot/A9CKP4.xml private static final String UNIPROT_XML = "" + "" @@ -26,16 +60,23 @@ public class UniprotTest + "Mitogen-activated protein kinase 13Henry" + "" + "" + + "" + "" + "" + "" + + "ML" + + "ML" + + "M" + + "LLMVM" + + "LLLMVML" + + "LLLMVKMLML" + "MHAPL VSKDL" + ""; /** * Test the method that unmarshals XML to a Uniprot model */ - @Test + @Test(groups = { "Functional" }) public void testGetUniprotEntries() { Uniprot u = new Uniprot(); @@ -53,8 +94,7 @@ public class UniprotTest /* * UniprotSequence drops any space characters */ - assertEquals("MHAPLVSKDL", entry.getUniprotSequence() - .getContent()); + assertEquals("MHAPLVSKDL", entry.getUniprotSequence().getContent()); assertEquals(2, entry.getProtein().getName().size()); assertEquals("Mitogen-activated protein kinase 13", entry.getProtein() @@ -64,61 +104,188 @@ public class UniprotTest /* * Check sequence features */ - Vector features = entry.getFeature(); - assertEquals(3, features.size()); - SequenceFeature sf = features.get(0); + Vector features = entry.getFeature(); + assertEquals(9, features.size()); + UniprotFeature sf = features.get(0); assertEquals("signal peptide", sf.getType()); assertNull(sf.getDescription()); assertNull(sf.getStatus()); - assertEquals(1, sf.getPosition()); // wrong - Castor bug?? assertEquals(1, sf.getBegin()); assertEquals(18, sf.getEnd()); sf = features.get(1); assertEquals("propeptide", sf.getType()); assertEquals("Activation peptide", sf.getDescription()); - assertEquals(19, sf.getPosition()); // wrong - Castor bug?? + assertEquals(19, sf.getPosition()); assertEquals(19, sf.getBegin()); assertEquals(20, sf.getEnd()); sf = features.get(2); assertEquals("chain", sf.getType()); assertEquals("Granzyme B", sf.getDescription()); - assertEquals(21, sf.getPosition()); // wrong - Castor bug?? + assertEquals(21, sf.getPosition()); assertEquals(21, sf.getBegin()); assertEquals(247, sf.getEnd()); + sf = features.get(3); + assertEquals("sequence variant", sf.getType()); + assertNull(sf.getDescription()); + assertEquals(41, sf.getPosition()); + assertEquals(41, sf.getBegin()); + assertEquals(41, sf.getEnd()); + + sf = features.get(4); + assertEquals("sequence variant", sf.getType()); + assertEquals("Pathogenic", sf.getDescription()); + assertEquals(41, sf.getPosition()); + assertEquals(41, sf.getBegin()); + assertEquals(41, sf.getEnd()); + + sf = features.get(5); + assertEquals("sequence variant", sf.getType()); + assertEquals("Pathogenic", sf.getDescription()); + assertEquals(41, sf.getPosition()); + assertEquals(41, sf.getBegin()); + assertEquals(41, sf.getEnd()); + + sf = features.get(6); + assertEquals("sequence variant", sf.getType()); + assertEquals("Foo", + sf.getDescription()); + assertEquals(42, sf.getPosition()); + assertEquals(42, sf.getBegin()); + assertEquals(42, sf.getEnd()); + Assert.assertEquals(Uniprot.getDescription(sf), + "p.Met42Leu" + "
  " + + "p.Met42LeuMetVal Foo"); + + sf = features.get(7); + assertEquals(42, sf.getBegin()); + assertEquals(43, sf.getEnd()); + Assert.assertEquals(Uniprot.getDescription(sf), + "p.MetLeu42LeuLeu" + "
  " + + "p.MetLeu42LeuMetVal Foo"); + + sf = features.get(8); + assertEquals(42, sf.getBegin()); + assertEquals(45, sf.getEnd()); + Assert.assertEquals(Uniprot.getDescription(sf), + "p.MLML42LeuLeu" + "
  " + + "p.MLML42LMVK Foo Too"); + /* * Check cross-references */ Vector xrefs = entry.getDbReference(); - assertEquals(2, xrefs.size()); + assertEquals(3, xrefs.size()); PDBEntry xref = xrefs.get(0); assertEquals("2FSQ", xref.getId()); assertEquals("PDB", xref.getType()); - assertEquals(2, xref.getProperty().size()); - assertEquals("X-ray", xref.getProperty().get("method")); - assertEquals("1.40", xref.getProperty().get("resolution")); + assertEquals("X-ray", xref.getProperty("method")); + assertEquals("1.40", xref.getProperty("resolution")); xref = xrefs.get(1); assertEquals("2FSR", xref.getId()); assertEquals("PDBsum", xref.getType()); - assertNull(xref.getProperty()); + assertFalse(xref.getProperties().hasMoreElements()); + + xref = xrefs.get(2); + assertEquals("AE007869", xref.getId()); + assertEquals("EMBL", xref.getType()); + assertEquals("AAK85932.1", xref.getProperty("protein sequence ID")); + assertEquals("Genomic_DNA", xref.getProperty("molecule type")); + } + + @Test(groups = { "Functional" }) + public void testGetUniprotSequence() + { + UniprotEntry entry = new Uniprot().getUniprotEntries( + new StringReader(UNIPROT_XML)).get(0); + SequenceI seq = new Uniprot().uniprotEntryToSequenceI(entry); + assertNotNull(seq); + assertEquals(6, seq.getDBRefs().length); // 2*Uniprot, PDB, PDBsum, 2*EMBL + } /** - * Test the method that formats the sequence name in Fasta style + * Test the method that formats the sequence id */ - @Test - public void testConstructSequenceFastaHeader() + @Test(groups = { "Functional" }) + public void testGetUniprotEntryId() { - Uniprot u = new Uniprot(); - Reader reader = new StringReader(UNIPROT_XML); - Vector entries = u.getUniprotEntries(reader); - UniprotEntry entry = entries.get(0); + UniprotEntry entry = new Uniprot().getUniprotEntries( + new StringReader(UNIPROT_XML)).get(0); + + /* + * name formatted with Uniprot Entry name + */ + String expectedName = "A9CKP4_AGRT5|A9CKP4_AGRT6"; + assertEquals(expectedName, + Uniprot.getUniprotEntryId(entry)); + } + + /** + * Test the method that formats the sequence description + */ + @Test(groups = { "Functional" }) + public void testGetUniprotEntryDescription() + { + UniprotEntry entry = new Uniprot().getUniprotEntries( + new StringReader(UNIPROT_XML)).get(0); + + /* + * recommended names concatenated with space separator + */ + String expectedDescription = "Mitogen-activated protein kinase 13 Henry"; + assertEquals(expectedDescription, + Uniprot.getUniprotEntryDescription(entry)); + } + + @Test(groups = { "Functional" }) + public void testGetDescription() + { + UniprotFeature uf = new UniprotFeature(); + assertEquals("", Uniprot.getDescription(uf)); + + uf.setDescription("Hello"); + assertEquals("Hello", Uniprot.getDescription(uf)); + + uf.setPosition(23); + uf.setOriginal("K"); + Vector vars = new Vector<>(); + vars.add("y"); + uf.setVariation(vars); + assertEquals("p.Lys23Tyr Hello", Uniprot.getDescription(uf)); + + // multiple variants generate an html description over more than one line + vars.add("W"); + assertEquals("p.Lys23Tyr
  p.Lys23Trp Hello", + Uniprot.getDescription(uf)); + + /* + * indel cases + * up to 3 bases (original or variant) are shown using 3 letter code + */ + vars.clear(); + vars.add("KWE"); + uf.setOriginal("KLS"); + assertEquals("p.LysLeuSer23LysTrpGlu Hello", + Uniprot.getDescription(uf)); + + // adding a fourth original base switches to single letter code + uf.setOriginal("KLST"); + assertEquals("p.KLST23LysTrpGlu Hello", Uniprot.getDescription(uf)); + + // adding a fourth variant switches to single letter code + vars.clear(); + vars.add("KWES"); + assertEquals("p.KLST23KWES Hello", Uniprot.getDescription(uf)); + + vars.clear(); + vars.add("z"); // unknown variant - fails gracefully + uf.setOriginal("K"); + assertEquals("p.Lys23z Hello", Uniprot.getDescription(uf)); - // source + accession ids + names + protein names - String expectedName = ">UniProt/Swiss-Prot|A9CKP4|A9CKP5|A9CKP4_AGRT5|A9CKP4_AGRT6 Mitogen-activated protein kinase 13 Henry"; - assertEquals(expectedName, Uniprot.constructSequenceFastaHeader(entry) - .toString()); + uf.setVariation(null); // variant missing - is ignored + assertEquals("Hello", Uniprot.getDescription(uf)); } }