JAL-2089 Merge branch releases/Release_2_10_Branch to master
[jalview.git] / test / jalview / ws / dbsources / UniprotTest.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2)
3  * Copyright (C) 2015 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.ws.dbsources;
22
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertNotNull;
25 import static org.testng.AssertJUnit.assertNull;
26
27 import jalview.datamodel.PDBEntry;
28 import jalview.datamodel.SequenceFeature;
29 import jalview.datamodel.SequenceI;
30 import jalview.datamodel.UniprotEntry;
31
32 import java.io.Reader;
33 import java.io.StringReader;
34 import java.util.Vector;
35
36 import org.testng.annotations.Test;
37
38 public class UniprotTest
39 {
40   // adapted from http://www.uniprot.org/uniprot/A9CKP4.xml
41   private static final String UNIPROT_XML = "<?xml version='1.0' encoding='UTF-8'?>"
42           + "<uniprot>"
43           + "<entry dataset=\"TrEMBL\" created=\"2008-01-15\" modified=\"2015-03-04\" version=\"38\">"
44           + "<accession>A9CKP4</accession>"
45           + "<accession>A9CKP5</accession>"
46           + "<name>A9CKP4_AGRT5</name>"
47           + "<name>A9CKP4_AGRT6</name>"
48           + "<protein><recommendedName><fullName>Mitogen-activated protein kinase 13</fullName><fullName>Henry</fullName></recommendedName></protein>"
49           + "<dbReference type=\"PDB\" id=\"2FSQ\"><property type=\"method\" value=\"X-ray\"/><property type=\"resolution\" value=\"1.40\"/></dbReference>"
50           + "<dbReference type=\"PDBsum\" id=\"2FSR\"/>"
51           + "<dbReference type=\"EMBL\" id=\"AE007869\"><property type=\"protein sequence ID\" value=\"AAK85932.1\"/><property type=\"molecule type\" value=\"Genomic_DNA\"/></dbReference>"
52           + "<feature type=\"signal peptide\" evidence=\"7\"><location><begin position=\"1\"/><end position=\"18\"/></location></feature>"
53           + "<feature type=\"propeptide\" description=\"Activation peptide\" id=\"PRO_0000027399\" evidence=\"9 16 17 18\"><location><begin position=\"19\"/><end position=\"20\"/></location></feature>"
54           + "<feature type=\"chain\" description=\"Granzyme B\" id=\"PRO_0000027400\"><location><begin position=\"21\"/><end position=\"247\"/></location></feature>"
55           + "<sequence length=\"10\" mass=\"27410\" checksum=\"8CB760AACF88FE6C\" modified=\"2008-01-15\" version=\"1\">MHAPL VSKDL</sequence></entry>"
56           + "</uniprot>";
57
58   /**
59    * Test the method that unmarshals XML to a Uniprot model
60    */
61   @Test(groups = { "Functional" })
62   public void testGetUniprotEntries()
63   {
64     Uniprot u = new Uniprot();
65     Reader reader = new StringReader(UNIPROT_XML);
66     Vector<UniprotEntry> entries = u.getUniprotEntries(reader);
67     assertEquals(1, entries.size());
68     UniprotEntry entry = entries.get(0);
69     assertEquals(2, entry.getName().size());
70     assertEquals("A9CKP4_AGRT5", entry.getName().get(0));
71     assertEquals("A9CKP4_AGRT6", entry.getName().get(1));
72     assertEquals(2, entry.getAccession().size());
73     assertEquals("A9CKP4", entry.getAccession().get(0));
74     assertEquals("A9CKP5", entry.getAccession().get(1));
75
76     /*
77      * UniprotSequence drops any space characters
78      */
79     assertEquals("MHAPLVSKDL", entry.getUniprotSequence().getContent());
80
81     assertEquals(2, entry.getProtein().getName().size());
82     assertEquals("Mitogen-activated protein kinase 13", entry.getProtein()
83             .getName().get(0));
84     assertEquals("Henry", entry.getProtein().getName().get(1));
85
86     /*
87      * Check sequence features
88      */
89     Vector<SequenceFeature> features = entry.getFeature();
90     assertEquals(3, features.size());
91     SequenceFeature sf = features.get(0);
92     assertEquals("signal peptide", sf.getType());
93     assertNull(sf.getDescription());
94     assertNull(sf.getStatus());
95     assertEquals(1, sf.getPosition());
96     assertEquals(1, sf.getBegin());
97     assertEquals(18, sf.getEnd());
98     sf = features.get(1);
99     assertEquals("propeptide", sf.getType());
100     assertEquals("Activation peptide", sf.getDescription());
101     assertEquals(19, sf.getPosition());
102     assertEquals(19, sf.getBegin());
103     assertEquals(20, sf.getEnd());
104     sf = features.get(2);
105     assertEquals("chain", sf.getType());
106     assertEquals("Granzyme B", sf.getDescription());
107     assertEquals(21, sf.getPosition());
108     assertEquals(21, sf.getBegin());
109     assertEquals(247, sf.getEnd());
110
111     /*
112      * Check cross-references
113      */
114     Vector<PDBEntry> xrefs = entry.getDbReference();
115     assertEquals(3, xrefs.size());
116
117     PDBEntry xref = xrefs.get(0);
118     assertEquals("2FSQ", xref.getId());
119     assertEquals("PDB", xref.getType());
120     assertEquals(2, xref.getProperty().size());
121     assertEquals("X-ray", xref.getProperty().get("method"));
122     assertEquals("1.40", xref.getProperty().get("resolution"));
123
124     xref = xrefs.get(1);
125     assertEquals("2FSR", xref.getId());
126     assertEquals("PDBsum", xref.getType());
127     assertNull(xref.getProperty());
128
129     xref = xrefs.get(2);
130     assertEquals("AE007869", xref.getId());
131     assertEquals("EMBL", xref.getType());
132     assertNotNull(xref.getProperty());
133     assertEquals("AAK85932.1",
134             (String) xref.getProperty().get("protein sequence ID"));
135     assertEquals("Genomic_DNA",
136             (String) xref.getProperty().get("molecule type"));
137     assertEquals(2, xref.getProperty().size());
138
139   }
140
141   @Test(groups = { "Functional" })
142   public void testGetUniprotSequence()
143   {
144     UniprotEntry entry = new Uniprot().getUniprotEntries(
145             new StringReader(UNIPROT_XML)).get(0);
146     SequenceI seq = new Uniprot().uniprotEntryToSequenceI(entry);
147     assertNotNull(seq);
148     assertEquals(6, seq.getDBRefs().length); // 2*Uniprot, PDB, PDBsum, 2*EMBL
149
150   }
151
152   /**
153    * Test the method that formats the sequence id
154    */
155   @Test(groups = { "Functional" })
156   public void testGetUniprotEntryId()
157   {
158     UniprotEntry entry = new Uniprot().getUniprotEntries(
159             new StringReader(UNIPROT_XML)).get(0);
160
161     /*
162      * name formatted as source | accession ids | names
163      * source database converted to Jalview canonical name
164      */
165     String expectedName = "UNIPROT|A9CKP4|A9CKP5|A9CKP4_AGRT5|A9CKP4_AGRT6";
166     assertEquals(expectedName, Uniprot.getUniprotEntryId(entry));
167   }
168
169   /**
170    * Test the method that formats the sequence description
171    */
172   @Test(groups = { "Functional" })
173   public void testGetUniprotEntryDescription()
174   {
175     UniprotEntry entry = new Uniprot().getUniprotEntries(
176             new StringReader(UNIPROT_XML)).get(0);
177
178     /*
179      * recommended names concatenated with space separator
180      */
181     String expectedDescription = "Mitogen-activated protein kinase 13 Henry";
182     assertEquals(expectedDescription,
183             Uniprot.getUniprotEntryDescription(entry));
184   }
185 }