Merge commit
[jalview.git] / test / jalview / io / AnnotatedPDBFileInputTest.java
index a6d09ca..30b6d55 100644 (file)
@@ -1,12 +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
@@ -14,13 +23,54 @@ public class AnnotatedPDBFileInputTest
 
   AlignmentI al;
 
+  String pdbStr = "examples/1gaq.txt";
+
+  String pdbId;
+
   @Before
   public void setup() throws Exception
   {
     FileLoader loader = new FileLoader(false);
-    AlignFrame af = loader.LoadFileWaitTillLoaded("examples/1gaq.txt",
+    AlignFrame af = loader.LoadFileWaitTillLoaded(pdbStr,
             FormatAdapter.FILE);
     al = af.getViewport().getAlignment();
+    pdbId = ((PDBEntry) al.getSequenceAt(0).getDatasetSequence().getPDBId()
+            .get(0)).getId();
+  }
+
+  @Test
+  public void checkNoDuplicates()
+  {
+    // not strictly a requirement, but strange things may happen if multiple
+    // instances of the same annotation are placed in the alignment annotation
+    // vector
+    assertNotNull(al.getAlignmentAnnotation());
+    // verify that all sequence annotation is doubly referenced
+    AlignmentAnnotation[] avec = al.getAlignmentAnnotation();
+    for (int p = 0; p < avec.length; p++)
+    {
+      for (int q = p + 1; q < avec.length; q++)
+      {
+        assertNotEquals(
+                "Found a duplicate annotation row " + avec[p].label,
+                avec[p], avec[q]);
+      }
+    }
+  }
+
+  @Test
+  public void checkPDBannotationSource()
+  {
+
+    for (SequenceI asq : al.getSequences())
+    {
+      for (AlignmentAnnotation aa : asq.getAnnotation())
+      {
+
+        System.out.println("CalcId: " + aa.getCalcId());
+        assertTrue(MCview.PDBfile.isCalcIdForFile(aa, pdbId));
+      }
+    }
   }
 
   @Test
@@ -51,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/1gaq.txt";
+    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,
+                    pdbentry.getId()))
+            {
+              found = true;
+            }
+          }
+        }
+        if (exists)
+        {
+          assertTrue("Couldn't find any annotation for " + pdbentry.getId()
+                  + " (file handle " + pdbentry.getFile() + ")", found);
+        }
+      }
+    }
+  }
 }