JAL-1379 Jpred JABA client test harness
authorj.procter@dundee.ac.uk <jprocter@jims-mbp-2.dyn.lifesci.dundee.ac.uk>
Fri, 18 Jul 2014 12:59:26 +0000 (13:59 +0100)
committerj.procter@dundee.ac.uk <jprocter@jims-mbp-2.dyn.lifesci.dundee.ac.uk>
Fri, 18 Jul 2014 12:59:26 +0000 (13:59 +0100)
test/jalview/ws/jabaws/JpredJabaStructExportImport.java [new file with mode: 0644]

diff --git a/test/jalview/ws/jabaws/JpredJabaStructExportImport.java b/test/jalview/ws/jabaws/JpredJabaStructExportImport.java
new file mode 100644 (file)
index 0000000..f0b8f99
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.ws.jabaws;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import jalview.datamodel.AlignmentI;
+import jalview.gui.Jalview2XML;
+import jalview.io.AnnotationFile;
+import jalview.io.FormatAdapter;
+import jalview.io.StockholmFileTest;
+import jalview.ws.jws2.JPred301Client;
+import jalview.ws.jws2.JabaParamStore;
+import jalview.ws.jws2.Jws2Discoverer;
+import jalview.ws.jws2.SequenceAnnotationWSClient;
+import jalview.ws.jws2.jabaws2.Jws2Instance;
+import jalview.ws.params.ArgumentI;
+import jalview.ws.params.AutoCalcSetting;
+
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import compbio.metadata.Argument;
+import compbio.metadata.WrongParameterException;
+
+public class JpredJabaStructExportImport
+{
+  public static String testseqs = "examples/uniref50.fa";
+
+  public static Jws2Discoverer disc;
+
+  public static Jws2Instance jpredws;
+
+  jalview.ws.jws2.JPred301Client jpredClient;
+
+  public static jalview.gui.AlignFrame af = null;
+
+  @BeforeClass
+  public static void setUpBeforeClass() throws Exception
+  {
+
+    jalview.bin.Cache.initLogger();
+    disc = JalviewJabawsTestUtils.getJabawsDiscoverer(false);
+
+    for (Jws2Instance svc : disc.getServices())
+    {
+
+      if (svc.getServiceTypeURI().toLowerCase().contains("jpred"))
+      {
+        jpredws = svc;
+      }
+    }
+
+    System.out.println("State of jpredws: " + jpredws);
+
+    if (jpredws == null)
+      System.exit(0);
+
+    jalview.io.FileLoader fl = new jalview.io.FileLoader(false);
+
+    af = fl.LoadFileWaitTillLoaded(testseqs, jalview.io.FormatAdapter.FILE);
+
+    assertNotNull("Couldn't load test data ('" + testseqs + "')", af);
+
+  }
+
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception
+  {
+    if (af != null)
+    {
+      af.setVisible(false);
+      af.dispose();
+    }
+  }
+
+  @Test
+  public void testJPredStructOneSeqOnly()
+  {
+    af.selectAllSequenceMenuItem_actionPerformed(null);
+    af.getViewport()
+            .getSelectionGroup()
+            .addOrRemove(
+                    af.getViewport().getSelectionGroup().getSequenceAt(0),
+                    false);
+    af.hideSelSequences_actionPerformed(null);
+    jpredClient = new JPred301Client(jpredws, af, null, null);
+
+    assertTrue(
+            "Didn't find any default args to check for. Buggy implementation of hardwired arguments in client.",
+            jpredClient.selectDefaultArgs().size() > 0);
+
+    boolean success = false;
+    af.getViewport().getCalcManager().startWorker(jpredClient);
+    do
+    {
+      try
+      {
+        Thread.sleep(500);
+        List<Argument> args = JabaParamStore.getJabafromJwsArgs(af
+                .getViewport()
+                .getCalcIdSettingsFor(jpredClient.getCalcId())
+                .getArgumentSet()), defargs = jpredClient
+                .selectDefaultArgs();
+        for (Argument rg : args)
+        {
+          for (Argument defg : defargs)
+          {
+            if (defg.equals(rg))
+            {
+              success = true;
+            }
+          }
+        }
+        if (!success)
+        {
+          jpredClient.cancelCurrentJob();
+          fail("Jpred Client didn't run with hardwired default parameters.");
+        }
+
+      } catch (InterruptedException x)
+      {
+      }
+      ;
+    } while (af.getViewport().getCalcManager().isWorking());
+
+  }
+
+  @Test
+  public void testJPredStructExport()
+  {
+
+    jpredClient = new JPred301Client(jpredws, af, null, null);
+
+    af.getViewport().getCalcManager().startWorker(jpredClient);
+
+    do
+    {
+      try
+      {
+        Thread.sleep(50);
+      } catch (InterruptedException x)
+      {
+      }
+      ;
+    } while (af.getViewport().getCalcManager().isWorking());
+
+    AlignmentI orig_alig = af.getViewport().getAlignment();
+
+    testAnnotationFileIO("Testing JPredWS Annotation IO", orig_alig);
+
+  }
+
+  public static void testAnnotationFileIO(String testname, AlignmentI al)
+  {
+    try
+    {
+      // what format would be appropriate for RNAalifold annotations?
+      String aligfileout = new FormatAdapter().formatSequences("PFAM",
+              al.getSequencesArray());
+
+      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");
+
+      // again what format would be appropriate?
+      AlignmentI al_new = new FormatAdapter().readFile(aligfileout,
+              FormatAdapter.PASTE, "PFAM");
+      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.");
+  }
+
+  // @Test
+  public void testJpredwsSettingsRecovery()
+  {
+    fail("not implemnented");
+    List<compbio.metadata.Argument> opts = new ArrayList<compbio.metadata.Argument>();
+    for (compbio.metadata.Argument rg : (List<compbio.metadata.Argument>) jpredws
+            .getRunnerConfig().getArguments())
+    {
+      if (rg.getDescription().contains("emperature"))
+      {
+        try
+        {
+          rg.setValue("292");
+        } catch (WrongParameterException q)
+        {
+          fail("Couldn't set the temperature parameter "
+                  + q.getStackTrace());
+        }
+        opts.add(rg);
+      }
+      if (rg.getDescription().contains("max"))
+      {
+        opts.add(rg);
+      }
+    }
+    jpredClient = new JPred301Client(jpredws, af, null, opts);
+
+    af.getViewport().getCalcManager().startWorker(jpredClient);
+
+    do
+    {
+      try
+      {
+        Thread.sleep(50);
+      } catch (InterruptedException x)
+      {
+      }
+      ;
+    } while (af.getViewport().getCalcManager().isWorking());
+    AutoCalcSetting oldacs = af.getViewport().getCalcIdSettingsFor(
+            jpredClient.getCalcId());
+    String oldsettings = oldacs.getWsParamFile();
+    // write out parameters
+    jalview.gui.AlignFrame nalf = null;
+    assertTrue("Couldn't write out the Jar file",
+            new Jalview2XML(false).SaveAlignment(af,
+                    "testJPredWS_param.jar", "trial parameter writeout"));
+    assertTrue("Couldn't read back the Jar file", (nalf = new Jalview2XML(
+            false).LoadJalviewAlign("testJpredWS_param.jar")) != null);
+    if (nalf != null)
+    {
+      AutoCalcSetting acs = af.getViewport().getCalcIdSettingsFor(
+              jpredClient.getCalcId());
+      assertTrue("Calc ID settings not recovered from viewport stash",
+              acs.equals(oldacs));
+      assertTrue(
+              "Serialised Calc ID settings not identical to those recovered from viewport stash",
+              acs.getWsParamFile().equals(oldsettings));
+      JMenu nmenu = new JMenu();
+      new SequenceAnnotationWSClient()
+              .attachWSMenuEntry(nmenu, jpredws, af);
+      assertTrue("Couldn't get menu entry for service",
+              nmenu.getItemCount() > 0);
+      for (Component itm : nmenu.getMenuComponents())
+      {
+        if (itm instanceof JMenuItem)
+        {
+          JMenuItem i = (JMenuItem) itm;
+          if (i.getText().equals(
+                  jpredws.getAlignAnalysisUI().getAAconToggle()))
+          {
+            i.doClick();
+            break;
+          }
+        }
+      }
+      while (af.getViewport().isCalcInProgress())
+      {
+        try
+        {
+          Thread.sleep(200);
+        } catch (Exception x)
+        {
+        }
+        ;
+      }
+      AutoCalcSetting acs2 = af.getViewport().getCalcIdSettingsFor(
+              jpredClient.getCalcId());
+      assertTrue(
+              "Calc ID settings after recalculation has not been recovered.",
+              acs2.getWsParamFile().equals(oldsettings));
+    }
+  }
+}