JAL-1712 fixes/tests for Castor binding and 'show flanking regions'
[jalview.git] / test / jalview / ws / dbsources / UniprotTest.java
diff --git a/test/jalview/ws/dbsources/UniprotTest.java b/test/jalview/ws/dbsources/UniprotTest.java
new file mode 100644 (file)
index 0000000..7325527
--- /dev/null
@@ -0,0 +1,124 @@
+package jalview.ws.dbsources;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.Vector;
+
+import org.junit.Test;
+
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.UniprotEntry;
+
+public class UniprotTest
+{
+  // adapted from http://www.uniprot.org/uniprot/A9CKP4.xml
+  private static final String UNIPROT_XML = "<?xml version='1.0' encoding='UTF-8'?>"
+          + "<uniprot>"
+          + "<entry dataset=\"TrEMBL\" created=\"2008-01-15\" modified=\"2015-03-04\" version=\"38\">"
+          + "<accession>A9CKP4</accession>"
+          + "<accession>A9CKP5</accession>"
+          + "<name>A9CKP4_AGRT5</name>"
+          + "<name>A9CKP4_AGRT6</name>"
+          + "<protein><recommendedName><fullName>Mitogen-activated protein kinase 13</fullName><fullName>Henry</fullName></recommendedName></protein>"
+          + "<dbReference type=\"PDB\" id=\"2FSQ\"><property type=\"method\" value=\"X-ray\"/><property type=\"resolution\" value=\"1.40\"/></dbReference>"
+          + "<dbReference type=\"PDBsum\" id=\"2FSR\"/>"
+          + "<feature type=\"signal peptide\" evidence=\"7\"><location><begin position=\"1\"/><end position=\"18\"/></location></feature>"
+          + "<feature type=\"propeptide\" description=\"Activation peptide\" id=\"PRO_0000027399\" evidence=\"9 16 17 18\"><location><begin position=\"19\"/><end position=\"20\"/></location></feature>"
+          + "<feature type=\"chain\" description=\"Granzyme B\" id=\"PRO_0000027400\"><location><begin position=\"21\"/><end position=\"247\"/></location></feature>"
+          + "<sequence length=\"10\" mass=\"27410\" checksum=\"8CB760AACF88FE6C\" modified=\"2008-01-15\" version=\"1\">MHAPL VSKDL</sequence></entry>"
+          + "</uniprot>";
+
+  /**
+   * Test the method that unmarshals XML to a Uniprot model
+   */
+  @Test
+  public void testGetUniprotEntries()
+  {
+    Uniprot u = new Uniprot();
+    Reader reader = new StringReader(UNIPROT_XML);
+    Vector<UniprotEntry> entries = u.getUniprotEntries(reader);
+    assertEquals(1, entries.size());
+    UniprotEntry entry = entries.get(0);
+    assertEquals(2, entry.getName().size());
+    assertEquals("A9CKP4_AGRT5", entry.getName().get(0));
+    assertEquals("A9CKP4_AGRT6", entry.getName().get(1));
+    assertEquals(2, entry.getAccession().size());
+    assertEquals("A9CKP4", entry.getAccession().get(0));
+    assertEquals("A9CKP5", entry.getAccession().get(1));
+
+    /*
+     * UniprotSequence drops any space characters
+     */
+    assertEquals("MHAPLVSKDL", entry.getUniprotSequence()
+            .getContent());
+
+    assertEquals(2, entry.getProtein().getName().size());
+    assertEquals("Mitogen-activated protein kinase 13", entry.getProtein()
+            .getName().get(0));
+    assertEquals("Henry", entry.getProtein().getName().get(1));
+
+    /*
+     * Check sequence features
+     */
+    Vector<SequenceFeature> features = entry.getFeature();
+    assertEquals(3, features.size());
+    SequenceFeature 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.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.getBegin());
+    assertEquals(247, sf.getEnd());
+
+    /*
+     * Check cross-references
+     */
+    Vector<PDBEntry> xrefs = entry.getDbReference();
+    assertEquals(2, 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"));
+
+    xref = xrefs.get(1);
+    assertEquals("2FSR", xref.getId());
+    assertEquals("PDBsum", xref.getType());
+    assertNull(xref.getProperty());
+  }
+
+  /**
+   * Test the method that formats the sequence name in Fasta style
+   */
+  @Test
+  public void testConstructSequenceFastaHeader()
+  {
+    Uniprot u = new Uniprot();
+    Reader reader = new StringReader(UNIPROT_XML);
+    Vector<UniprotEntry> entries = u.getUniprotEntries(reader);
+    UniprotEntry entry = entries.get(0);
+
+    // 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());
+  }
+}