JAL-674 methods and test for PDB derived annotation stored and recovered in project
[jalview.git] / test / jalview / io / AnnotatedPDBFileInputTest.java
index acc2cb8..7e99409 100644 (file)
@@ -1,14 +1,21 @@
 package jalview.io;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
+import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
 
+import java.io.File;
+import java.util.Vector;
+
+import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class AnnotatedPDBFileInputTest
@@ -17,6 +24,9 @@ public class AnnotatedPDBFileInputTest
   AlignmentI al;
 
   String pdbStr = "examples/2GIS.pdb";
+
+  String pdbId;
+
   @Before
   public void setup() throws Exception
   {
@@ -24,6 +34,8 @@ public class AnnotatedPDBFileInputTest
     AlignFrame af = loader.LoadFileWaitTillLoaded(pdbStr,
             FormatAdapter.FILE);
     al = af.getViewport().getAlignment();
+    pdbId = ((PDBEntry) al.getSequenceAt(0).getDatasetSequence().getPDBId()
+            .get(0)).getId();
   }
 
   @Test
@@ -56,7 +68,7 @@ public class AnnotatedPDBFileInputTest
       {
 
         System.out.println("CalcId: " + aa.getCalcId());
-        assertTrue(MCview.PDBfile.isCalcIdForFile(aa.getCalcId(), pdbStr));
+        assertTrue(MCview.PDBfile.isCalcIdForFile(aa.getCalcId(), pdbId));
       }
     }
   }
@@ -89,4 +101,78 @@ public class AnnotatedPDBFileInputTest
       }
     }
   }
+
+  /**
+   * @throws java.lang.Exception
+   */
+  @BeforeClass
+  public static void setUpBeforeClass() throws Exception
+  {
+    jalview.bin.Jalview.main(new String[]
+    { "-props", "test/src/jalview/io/testProps.jvprops" });
+  }
+
+  /**
+   * @throws java.lang.Exception
+   */
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception
+  {
+    jalview.gui.Desktop.instance.closeAll_actionPerformed(null);
+
+  }
+
+  @Test
+  public void testJalviewProjectRelocationAnnotation() throws Exception
+  {
+
+    String inFile = "examples/2GIS.pdb";
+    String tfile = File.createTempFile("JalviewTest", ".jvp")
+            .getAbsolutePath();
+    AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(
+            inFile, FormatAdapter.FILE);
+    assertTrue("Didn't read input file " + inFile, af != null);
+    assertTrue("Failed to store as a project.",
+            af.saveAlignment(tfile, "Jalview"));
+    af.closeMenuItem_actionPerformed(true);
+    af = null;
+    af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(tfile,
+            FormatAdapter.FILE);
+    assertTrue("Failed to import new project", af != null);
+    for (SequenceI asq : af.getViewport().getAlignment().getSequences())
+    {
+      SequenceI sq = asq;
+      while (sq.getDatasetSequence() != null)
+      {
+        sq = sq.getDatasetSequence();
+      }
+      assertNotNull(sq.getPDBId());
+      assertEquals("Expected only one PDB ID", sq.getPDBId().size(), 1);
+      for (PDBEntry pdbentry : (Vector<PDBEntry>) sq.getPDBId())
+      {
+        System.err.println("PDB Entry " + pdbentry.getId() + " "
+                + pdbentry.getFile());
+        boolean exists = false, found = false;
+        for (AlignmentAnnotation ana : sq.getAnnotation())
+        {
+          System.err.println("CalcId " + ana.getCalcId());
+          if (ana.getCalcId() != null
+                  && MCview.PDBfile.isCalcIdHandled(ana.getCalcId()))
+          {
+            exists = true;
+            if (MCview.PDBfile.isCalcIdForFile(ana.getCalcId(),
+                    pdbentry.getId()))
+            {
+              found = true;
+            }
+          }
+        }
+        if (exists)
+        {
+          assertTrue("Couldn't find any annotation for " + pdbentry.getId()
+                  + " (file handle " + pdbentry.getFile() + ")", found);
+        }
+      }
+    }
+  }
 }