From 8fae74e850aa0446371370d0eed2c0be2a417001 Mon Sep 17 00:00:00 2001 From: "j.procter@dundee.ac.uk" Date: Fri, 18 Jul 2014 13:59:26 +0100 Subject: [PATCH] JAL-1379 Jpred JABA client test harness --- .../ws/jabaws/JpredJabaStructExportImport.java | 321 ++++++++++++++++++++ 1 file changed, 321 insertions(+) create mode 100644 test/jalview/ws/jabaws/JpredJabaStructExportImport.java diff --git a/test/jalview/ws/jabaws/JpredJabaStructExportImport.java b/test/jalview/ws/jabaws/JpredJabaStructExportImport.java new file mode 100644 index 0000000..f0b8f99 --- /dev/null +++ b/test/jalview/ws/jabaws/JpredJabaStructExportImport.java @@ -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 . + * 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 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< opts = new ArrayList(); + for (compbio.metadata.Argument rg : (List) 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)); + } + } +} -- 1.7.10.2