JAL-1358 RNAStructExportImport test file mirrors DisorderAnnotExportImport file....
[jalview.git] / test / jalview / ws / jabaws / RNAStructExportImport.java
diff --git a/test/jalview/ws/jabaws/RNAStructExportImport.java b/test/jalview/ws/jabaws/RNAStructExportImport.java
new file mode 100644 (file)
index 0000000..510b913
--- /dev/null
@@ -0,0 +1,198 @@
+package jalview.ws.jabaws;
+
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Vector;
+
+import jalview.api.AlignCalcManagerI;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
+import jalview.io.AnnotationFile;
+import jalview.io.FormatAdapter;
+import jalview.io.StockholmFileTest;
+import jalview.ws.jws2.AADisorderClient;
+import jalview.ws.jws2.Jws2Discoverer;
+import jalview.ws.jws2.RNAalifoldClient;
+import jalview.ws.jws2.jabaws2.Jws2Instance;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class RNAStructExportImport 
+{
+  public static String testseqs = "examples/unfolded_RF00031.aln";
+
+  public static Jws2Discoverer disc;
+
+  public static Jws2Instance rnaalifoldws;
+
+  jalview.ws.jws2.RNAalifoldClient alifoldClient;
+
+  public static jalview.gui.AlignFrame af = null;
+
+  @BeforeClass
+  public static void setUpBeforeClass() throws Exception
+  {
+       
+       
+       System.out.println("test1");
+
+    jalview.bin.Cache.initLogger();
+    disc = JalviewJabawsTestUtils.getJabawsDiscoverer();
+    
+    System.out.println("test2");
+    
+    for (Jws2Instance svc : disc.getServices())
+    {
+       
+       System.out.println("Service type: " + svc.serviceType);
+       
+      if (svc.getServiceTypeURI().toLowerCase().contains("rnaalifoldws"))
+      {
+        rnaalifoldws = svc;
+      }
+    }
+    
+    System.out.println("State of rnaalifoldws: " + rnaalifoldws);
+    
+    if (rnaalifoldws == null) System.exit(0);
+    
+    System.out.println("test3");
+    
+    jalview.io.FileLoader fl = new jalview.io.FileLoader(false);
+    
+    // Following this method a long way we find some (probably important!)
+    //  code that I have just commented out!
+    af = fl.LoadFileWaitTillLoaded(testseqs, jalview.io.FormatAdapter.FILE);
+    
+    assertNotNull("Couldn't load test data ('" + testseqs + "')", af);
+    
+    System.out.println("test5");
+    
+  }
+
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception
+  {
+    if (af != null)
+    {
+      af.setVisible(false);
+      af.dispose();
+    }
+  }
+
+  /**
+   * test for patches to JAL-1294
+   */
+  @Test
+  public void testRNAStructExport()
+  {
+    alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, null);
+    
+    System.out.println("Service action text:\n" + alifoldClient.getServiceActionText());
+    
+    
+    System.out.println("START FOLDING");
+    af.getViewport().getCalcManager().startWorker(alifoldClient);
+    
+    
+    do
+    {
+      try
+      {
+        Thread.sleep(50);
+      } catch (InterruptedException x)
+      {
+      }
+      ;
+    } while (af.getViewport().getCalcManager().isWorking());
+    
+    System.out.println("END FOLDING");
+    
+    // ALL FOR TESTING
+    AlignCalcManagerI test = af.getViewport().getCalcManager();
+    RNAalifoldClient testWorker = ((RNAalifoldClient)test.getRegisteredWorkersOfClass(RNAalifoldClient.class).get(0));
+    testWorker.updateResultAnnotation(true);
+    System.out.println("Annotation from RNAalifoldclient");
+    for (Annotation ann : testWorker.ourAnnots.get(0).annotations) {
+       System.out.print(ann.toString()+"|");
+    }
+    System.out.println();
+    
+    
+    // Why are the AlignViewport.alignment and the RNAalifoldClient alignment
+    //  Annotations different
+    AlignmentI orig_alig = af.getViewport().getAlignment();
+    
+    System.out.println("orig_alig has class: " + orig_alig.getClass());
+    
+    // some time before here but after the RNAalifoldClient Update method
+    //  the alignment annotation is replaced....
+    
+    System.out.println("orig_alig annotation:\n");
+    for (AlignmentAnnotation an : orig_alig.getAlignmentAnnotation()) {
+       for (Annotation ann : an.annotations) {
+               System.out.print(ann.toString()+"|");
+       }
+       System.out.println();
+    }
+    
+    
+    testAnnotationFileIO("Testing RNAalifold Annotation IO", orig_alig);
+
+  }
+
+  public static void testAnnotationFileIO(String testname, AlignmentI al)
+  {
+    try
+    {
+      String aligfileout = new FormatAdapter().formatSequences("CLUSTAL",
+              al.getSequencesArray());
+      
+      // test
+//      System.out.println("aligfileout:\n" + aligfileout);
+      
+      String anfileout = new AnnotationFile().printAnnotations(
+              al.getAlignmentAnnotation(), al.getGroups(),
+              al.getProperties());
+      assertTrue(
+              "Test "
+                      + testname
+                      + "\nAlignment annotation file was not regenerated. Null string",
+              anfileout != null);
+      assertTrue(
+              "Test "
+                      + testname
+                      + "\nAlignment annotation file was not regenerated. Empty string",
+              anfileout.length() > "JALVIEW_ANNOTATION".length());
+
+      System.out.println("Output annotation file:\n" + anfileout
+              + "\n<<EOF\n");
+
+      AlignmentI al_new = new FormatAdapter().readFile(aligfileout,
+              FormatAdapter.PASTE, "CLUSTAL");
+      assertTrue(
+              "Test "
+                      + testname
+                      + "\nregenerated annotation file did not annotate alignment.",
+              new AnnotationFile().readAnnotationFile(al_new, anfileout,
+                      FormatAdapter.PASTE));
+
+      // test for consistency in io
+      StockholmFileTest.testAlignmentEquivalence(al, al_new);
+      return;
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+    fail("Test "
+            + testname
+            + "\nCouldn't complete Annotation file roundtrip input/output/input test.");
+  }
+
+}