JAL-1291 JAL-1297 JAL-1295 JAL-1294 allow alignment+annotation equivalence test to...
[jalview.git] / test / jalview / io / StockholmFileTest.java
index d826e13..2a57ae1 100644 (file)
@@ -4,6 +4,7 @@ import static org.junit.Assert.*;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 
@@ -16,36 +17,32 @@ import org.junit.Test;
 public class StockholmFileTest
 {
 
-  public static void main(String argv[])
-  {
-    try {
-      new StockholmFileTest().pfamFileIO();
-    
-    } catch (Exception x)
-    {
-      x.printStackTrace();
-    }
-  }
-
   static String PfamFile = "examples/PF00111_seed.stk",
           RfamFile = "examples/RF00031_folded.stk";
 
   @Test
   public void pfamFileIO() throws Exception
   {
-      test(new File(PfamFile));
-      AppletFormatAdapter af = new AppletFormatAdapter();
-      AlignmentI al = af.readFile(PfamFile, af.FILE, new IdentifyFile().Identify(PfamFile, af.FILE));
-      int numpdb=0;
-      for (SequenceI sq:al.getSequences())
+    testFileIOwithFormat(new File(PfamFile), "STH");
+  }
+  @Test
+  public void pfamFileDataExtraction() throws Exception
+  {  AppletFormatAdapter af = new AppletFormatAdapter();
+    AlignmentI al = af.readFile(PfamFile, af.FILE,
+            new IdentifyFile().Identify(PfamFile, af.FILE));
+    int numpdb = 0;
+    for (SequenceI sq : al.getSequences())
+    {
+      if (sq.getPDBId() != null)
       {
-        if (sq.getPDBId()!=null)
-        {
-          numpdb+=sq.getPDBId().size();
-        }
+        numpdb += sq.getPDBId().size();
       }
-      assertTrue("PF00111 seed alignment has at least 1 PDB file, but the reader found none.",numpdb>0);
+    }
+    assertTrue(
+            "PF00111 seed alignment has at least 1 PDB file, but the reader found none.",
+            numpdb > 0);
   }
+
   @Test
   public void rfamFileIO() throws Exception
   {
@@ -112,7 +109,7 @@ public class StockholmFileTest
    *          'secondary' or generated alignment from some datapreserving
    *          transformation
    */
-  private static void testAlignmentEquivalence(AlignmentI al,
+  public static void testAlignmentEquivalence(AlignmentI al,
           AlignmentI al_input)
   {
     assertNotNull("Original alignment was null", al);
@@ -142,7 +139,7 @@ public class StockholmFileTest
       for (int i = 0; i < aa_original.length; i++)
       {
         if (aa_new.length>i) {
-          assertTrue("Different alignment annotation ordering",
+          assertTrue("Different alignment annotation at position "+i,
                 equalss(aa_original[i], aa_new[i]));
         } else {
           System.err.println("No matching annotation row for "+aa_original[i].toString());
@@ -258,18 +255,20 @@ public class StockholmFileTest
       System.err.println("Different lengths for annotation row elements: "+annot_or.annotations.length +"!="+ annot_new.annotations.length);
       return false;
     }
+    // TODO: does not compare graphGroup or graph properties
+    // TODO: does not compare visibility
     for (int i = 0; i < annot_or.annotations.length; i++)
     {
-      if (annot_or.annotations[i] != null
-              && annot_new.annotations[i] != null)
+      Annotation an_or=annot_or.annotations[i],an_new=annot_new.annotations[i];
+      if (an_or != null
+              && an_new!= null)
       {
-        // Jim's comment - shouldn't the conditional here be using || not && for
-        // all these clauses ?
-        if (!annot_or.annotations[i].displayCharacter
-                .equals(annot_new.annotations[i].displayCharacter)
-                && annot_or.annotations[i].secondaryStructure != annot_new.annotations[i].secondaryStructure
-                && !annot_or.annotations[i].description
-                        .equals(annot_new.annotations[i].description))
+        if (!an_or.displayCharacter
+                .equals(an_new.displayCharacter)
+                || an_or.secondaryStructure != an_new.secondaryStructure
+                || (an_or.description != an_new.description && (an_or.description == null
+                        || an_new.description == null || !an_or.description
+                          .equals(an_new.description))))
         {
           System.err.println("Annotation Element Mismatch\nElement "+i+" in original: "+annot_or.annotations[i].toString()+"\nElement "+i+" in new: "+annot_new.annotations[i].toString());
           return false;