Merge branch 'develop' into trialMerge
[jalview.git] / test / MCview / PDBfileTest.java
index a4fd286..c07c62e 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package MCview;
 
 import static org.testng.AssertJUnit.assertEquals;
@@ -6,21 +26,35 @@ import static org.testng.AssertJUnit.assertNull;
 import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
 
+import jalview.bin.Cache;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
-import jalview.io.AppletFormatAdapter;
+import jalview.gui.JvOptionPane;
+import jalview.io.DataSourceType;
+import jalview.structure.StructureImportSettings;
 
 import java.io.IOException;
+import java.util.List;
 
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 public class PDBfileTest
 {
-  @Test
+
+  @BeforeClass(alwaysRun = true)
+  public void setUpJvOptionPane()
+  {
+    JvOptionPane.setInteractiveMode(false);
+    JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
+  }
+
+  @Test(groups = { "Functional" })
   public void testIsRna()
   {
     SequenceI seq = new Sequence("Seq1", "CGAU");
@@ -42,26 +76,28 @@ public class PDBfileTest
    * 
    * @throws IOException
    */
-  @Test
+  @Test(groups = { "Functional" })
   public void testParse() throws IOException
   {
     /*
      * Constructor with file path performs parse()
      */
     PDBfile pf = new PDBfile(false, false, false, "examples/3W5V.pdb",
-            AppletFormatAdapter.FILE);
+            DataSourceType.FILE);
 
-    assertEquals("3W5V", pf.id);
+    assertEquals("3W5V", pf.getId());
     // verify no alignment annotations created
     assertNull(getAlignmentAnnotations(pf));
 
-    assertEquals(4, pf.chains.size());
-    assertEquals("A", pf.chains.get(0).id);
-    assertEquals("B", pf.chains.get(1).id);
-    assertEquals("C", pf.chains.get(2).id);
-    assertEquals("D", pf.chains.get(3).id);
+    assertEquals(4, pf.getChains().size());
+    assertEquals("A", pf.getChains().get(0).id);
+    assertEquals("B", pf.getChains().get(1).id);
+    assertEquals("C", pf.getChains().get(2).id);
+    assertEquals("D", pf.getChains().get(3).id);
+
+    PDBChain chainA = pf.getChains().get(0);
+    SequenceI seqA = pf.getSeqs().get(0);
 
-    PDBChain chainA = pf.chains.get(0);
     assertEquals(0, chainA.seqstart); // not set
     assertEquals(0, chainA.seqend); // not set
     assertEquals(18, chainA.sequence.getStart());
@@ -70,32 +106,47 @@ public class PDBfileTest
     assertTrue(chainA.sequence.getSequenceAsString().endsWith("WNVEVY"));
     assertEquals("3W5V|A", chainA.sequence.getName());
     assertNull(chainA.sequence.getAnnotation());
-    assertEquals(1, chainA.sequence.getPDBId().size());
-    PDBEntry pdb = chainA.sequence.getPDBId().get(0);
+    assertEquals(1, seqA.getAllPDBEntries().size());
+    PDBEntry pdb = seqA.getAllPDBEntries().get(0);
     assertEquals("A", pdb.getChainCode());
     assertEquals("PDB", pdb.getType());
     assertEquals("3W5V", pdb.getId());
 
-    PDBChain chainB = pf.chains.get(1);
+    PDBChain chainB = pf.getChains().get(1);
     assertEquals(1, chainB.sequence.getStart());
     assertEquals(96, chainB.sequence.getEnd());
     assertTrue(chainB.sequence.getSequenceAsString().startsWith("ATYNVK"));
     assertTrue(chainB.sequence.getSequenceAsString().endsWith("KEEELT"));
     assertEquals("3W5V|B", chainB.sequence.getName());
 
-    PDBChain chainC = pf.chains.get(2);
+    PDBChain chainC = pf.getChains().get(2);
     assertEquals(18, chainC.sequence.getStart());
     assertEquals(314, chainC.sequence.getEnd());
     assertTrue(chainC.sequence.getSequenceAsString().startsWith("KCSKKQEE"));
     assertTrue(chainC.sequence.getSequenceAsString().endsWith("WNVEVY"));
     assertEquals("3W5V|C", chainC.sequence.getName());
 
-    PDBChain chainD = pf.chains.get(3);
+    PDBChain chainD = pf.getChains().get(3);
     assertEquals(1, chainD.sequence.getStart());
     assertEquals(96, chainD.sequence.getEnd());
     assertTrue(chainD.sequence.getSequenceAsString().startsWith("ATYNVK"));
     assertTrue(chainD.sequence.getSequenceAsString().endsWith("KEEELT"));
     assertEquals("3W5V|D", chainD.sequence.getName());
+
+    /*
+     * verify PDB-related data in parsed sequences
+     */
+    List<SequenceI> seqs = pf.getSeqs();
+    assertEquals(4, seqs.size());
+    assertEquals("3W5V|A", seqs.get(0).getName());
+    assertEquals("3W5V|B", seqs.get(1).getName());
+    assertEquals("3W5V|C", seqs.get(2).getName());
+    assertEquals("3W5V|D", seqs.get(3).getName());
+    assertEquals(1, seqs.get(0).getAllPDBEntries().size());
+    PDBEntry pdbe = seqs.get(0).getAllPDBEntries().get(0);
+    assertEquals("A", pdbe.getChainCode());
+    assertEquals("3W5V", pdbe.getId());
+    assertEquals(PDBEntry.Type.PDB.toString(), pdbe.getType());
   }
 
   /**
@@ -104,11 +155,11 @@ public class PDBfileTest
    * 
    * @throws IOException
    */
-  @Test
+  @Test(groups = { "Functional" })
   public void testParse_withAnnotations_noSS() throws IOException
   {
     PDBfile pf = new PDBfile(true, false, false, "examples/3W5V.pdb",
-            AppletFormatAdapter.FILE);
+            DataSourceType.FILE);
 
     AlignmentAnnotation[] anns = getAlignmentAnnotations(pf);
     assertEquals(4, anns.length);
@@ -162,11 +213,11 @@ public class PDBfileTest
    * 
    * @throws IOException
    */
-  @Test
+  @Test(groups = { "Functional" })
   public void testParse_withJmol_noAnnotations() throws IOException
   {
     PDBfile pf = new PDBfile(false, true, false, "examples/3W5V.pdb",
-            AppletFormatAdapter.FILE);
+            DataSourceType.FILE);
 
     /*
      * alignment annotations _are_ created anyway (in
@@ -179,7 +230,7 @@ public class PDBfileTest
      * no sequence annotations created - tempFactor annotation is not added
      * unless the flag to 'addAlignmentAnnotations' is set true
      */
-    for (PDBChain c : pf.chains)
+    for (PDBChain c : pf.getChains())
     {
       assertNull(c.sequence.getAnnotation());
     }
@@ -191,12 +242,12 @@ public class PDBfileTest
    * 
    * @throws IOException
    */
-  @Test
+  @Test(groups = { "Functional" })
   public void testParse_withJmolAddAlignmentAnnotations()
           throws IOException
   {
     PDBfile pf = new PDBfile(true, true, false, "examples/3W5V.pdb",
-            AppletFormatAdapter.FILE);
+            DataSourceType.FILE);
 
     /*
      * Alignment annotations for TempFactor, SecStruct, per sequence (chain)
@@ -215,10 +266,10 @@ public class PDBfileTest
     /*
      * PDBFileWithJmol (unlike PDBChain!) leaves PDB id upper case
      */
-    assertEquals("Secondary Structure for 3W5VA", anns[0].description);
-    assertEquals("Secondary Structure for 3W5VB", anns[2].description);
-    assertEquals("Secondary Structure for 3W5VC", anns[4].description);
-    assertEquals("Secondary Structure for 3W5VD", anns[6].description);
+    assertEquals("Secondary Structure for 3w5vA", anns[0].description);
+    assertEquals("Secondary Structure for 3w5vB", anns[2].description);
+    assertEquals("Secondary Structure for 3w5vC", anns[4].description);
+    assertEquals("Secondary Structure for 3w5vD", anns[6].description);
 
     /*
      * Verify SS annotations are linked to respective sequences (chains)
@@ -248,14 +299,15 @@ public class PDBfileTest
    * @throws IOException
    */
 
-  @Test(enabled = false)
+  @Test(groups = { "Functional" }, enabled = false)
   public void testParse_withAnnotate3D() throws IOException
   {
     // TODO requires a mock for Annotate3D processing
     // and/or run as an integration test
     PDBfile pf = new PDBfile(true, true, true, "examples/2GIS.pdb",
-            AppletFormatAdapter.FILE);
+            DataSourceType.FILE);
   }
+
   /**
    * Helper method to extract parsed annotations from the PDBfile
    * 
@@ -265,7 +317,20 @@ public class PDBfileTest
   private AlignmentAnnotation[] getAlignmentAnnotations(PDBfile pf)
   {
     AlignmentI al = new Alignment(pf.getSeqsAsArray());
-    pf.addAnnotations((Alignment) al);
+    pf.addAnnotations(al);
     return al.getAlignmentAnnotation();
   }
+
+  @BeforeMethod(alwaysRun = true)
+  public void setUp()
+  {
+    Cache.loadProperties("test/jalview/io/testProps.jvprops");
+    Cache.applicationProperties.setProperty("STRUCT_FROM_PDB",
+            Boolean.TRUE.toString());
+    Cache.applicationProperties.setProperty("ADD_TEMPFACT_ANN",
+            Boolean.TRUE.toString());
+    Cache.applicationProperties.setProperty("ADD_SS_ANN",
+            Boolean.TRUE.toString());
+    StructureImportSettings.setDefaultStructureFileFormat("PDB");
   }
+}