JAL-2507 JAL-2509 new assert to compare secondary structure in two annotation rows
authorJim Procter <jprocter@issues.jalview.org>
Thu, 4 May 2017 13:02:24 +0000 (14:02 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Thu, 4 May 2017 13:02:24 +0000 (14:02 +0100)
test/jalview/io/StockholmFileTest.java

index 4028913..e9edd1b 100644 (file)
@@ -201,8 +201,9 @@ public class StockholmFileTest
       {
         if (aa_new.length > i)
         {
-          assertTrue("Different alignment annotation at position " + i,
-                  equalss(aa_original[i], aa_new[i]));
+          assertEqualSecondaryStructure(
+                  "Different alignment annotation at position " + i,
+                  aa_original[i], aa_new[i]);
           // compare graphGroup or graph properties - needed to verify JAL-1299
           assertEquals("Graph type not identical.", aa_original[i].graph,
                   aa_new[i].graph);
@@ -310,8 +311,9 @@ public class StockholmFileTest
               {
                 annot_original = al.getSequenceAt(i).getAnnotation()[j];
                 annot_new = al_input.getSequenceAt(in).getAnnotation()[j];
-                assertTrue("Different annotation elements",
-                        equalss(annot_original, annot_new));
+                assertEqualSecondaryStructure(
+                        "Different annotation elements", annot_original,
+                        annot_new);
               }
             }
           }
@@ -333,39 +335,57 @@ public class StockholmFileTest
     }
   }
 
-  /*
-   * compare annotations
-   */
-  private static boolean equalss(AlignmentAnnotation annot_or,
+  private static void assertEqualSecondaryStructure(String message,
+          AlignmentAnnotation annot_or,
           AlignmentAnnotation annot_new)
   {
+    // TODO: test to cover this assert behaves correctly for all allowed
+    // variations of secondary structure annotation row equivalence
     if (annot_or.annotations.length != annot_new.annotations.length)
     {
-      System.err.println("Different lengths for annotation row elements: "
+      fail("Different lengths for annotation row elements: "
               + annot_or.annotations.length + "!="
               + annot_new.annotations.length);
-      return false;
     }
+    boolean isRna = annot_or.isRNA();
+    assertTrue("Expected " + (isRna ? " valid RNA " : " no RNA ")
+            + " secondary structure in the row.",
+            isRna == annot_new.isRNA());
     for (int i = 0; i < annot_or.annotations.length; i++)
     {
       Annotation an_or = annot_or.annotations[i], an_new = annot_new.annotations[i];
       if (an_or != null && an_new != null)
       {
-        if (!an_or.displayCharacter.trim().equals(
-                an_new.displayCharacter.trim())
-                || !("" + an_or.secondaryStructure).trim().equals(
-                        ("" + an_new.secondaryStructure).trim())
-                || (an_or.description != an_new.description && !((an_or.description == null && an_new.description
-                        .trim().length() == 0)
-                        || (an_new.description == null && an_or.description
-                                .trim().length() == 0) || an_or.description
-                        .trim().equals(an_new.description.trim()))))
+
+        if (isRna)
         {
-          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;
+          if (an_or.secondaryStructure != an_new.secondaryStructure
+                  || an_or.value != an_new.value)
+          {
+            fail("Different RNA secondary structure at column " + i
+                    + " expected: [" + annot_or.annotations[i].toString()
+                    + "] but got: [" + annot_new.annotations[i].toString()
+                    + "]");
+          }
+        }
+        else
+        {
+          // not RNA secondary structure, so expect all elements to match...
+          if (!an_or.displayCharacter.trim().equals(
+                  an_new.displayCharacter.trim())
+                  || !("" + an_or.secondaryStructure).trim().equals(
+                          ("" + an_new.secondaryStructure).trim())
+                  || (an_or.description != an_new.description && !((an_or.description == null && an_new.description
+                          .trim().length() == 0)
+                          || (an_new.description == null && an_or.description
+                                  .trim().length() == 0) || an_or.description
+                          .trim().equals(an_new.description.trim()))))
+          {
+            fail("Annotation Element Mismatch\nElement " + i
+                    + " in original: " + annot_or.annotations[i].toString()
+                    + "\nElement " + i + " in new: "
+                    + annot_new.annotations[i].toString());
+          }
         }
       }
       else if (annot_or.annotations[i] == null
@@ -375,7 +395,7 @@ public class StockholmFileTest
       }
       else
       {
-        System.err.println("Annotation Element Mismatch\nElement "
+        fail("Annotation Element Mismatch\nElement "
                 + i
                 + " in original: "
                 + (annot_or.annotations[i] == null ? "is null"
@@ -385,9 +405,7 @@ public class StockholmFileTest
                 + " in new: "
                 + (annot_new.annotations[i] == null ? "is null"
                         : annot_new.annotations[i].toString()));
-        return false;
       }
     }
-    return true;
   }
 }