From fd31723c8ec5ff636e24a780d3a500cb59c35ddf Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Thu, 3 Oct 2019 16:25:58 +0100 Subject: [PATCH] JAL-3070 basic AACon service functionality test --- .../jalview/ws/jabaws/AAConAnnotAndSettingsIO.java | 198 ++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 test/jalview/ws/jabaws/AAConAnnotAndSettingsIO.java diff --git a/test/jalview/ws/jabaws/AAConAnnotAndSettingsIO.java b/test/jalview/ws/jabaws/AAConAnnotAndSettingsIO.java new file mode 100644 index 0000000..fae8b21 --- /dev/null +++ b/test/jalview/ws/jabaws/AAConAnnotAndSettingsIO.java @@ -0,0 +1,198 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ 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.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertTrue; + +import jalview.bin.Cache; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.gui.AlignFrame; +import jalview.gui.JvOptionPane; +import jalview.io.AnnotationFile; +import jalview.io.DataSourceType; +import jalview.io.FileFormat; +import jalview.io.FormatAdapter; +import jalview.io.StockholmFileTest; +import jalview.ws.api.ServiceWithParameters; +import jalview.ws.jws2.Jws2Discoverer; +import jalview.ws.jws2.SeqAnnotationServiceCalcWorker; + +import java.util.ArrayList; +import java.util.List; + +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/* + * All methods in this class are set to the Network group because setUpBeforeClass will fail + * if there is no network. + */ +@Test(singleThreaded = true) +public class DisorderAnnotExportImport +{ + + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + + public static String testseqs = "examples/uniref50.fa"; + + public static Jws2Discoverer disc; + + public static List aacon; + + jalview.ws.jws2.SeqAnnotationServiceCalcWorker aaconClient; + + public static jalview.gui.AlignFrame af = null; + + @BeforeClass(alwaysRun = true) + public static void setUpBeforeClass() throws Exception + { + Cache.loadProperties("test/jalview/io/testProps.jvprops"); + Cache.initLogger(); + disc = JalviewJabawsTestUtils.getJabawsDiscoverer(); + + while (disc.isRunning()) + { + // don't get services until discoverer has finished + Thread.sleep(100); + } + + aacon = new ArrayList<>(); + for (ServiceWithParameters svc : disc.getServices()) + { + if (svc.getNameURI().toLowerCase().contains("aacon")) + { + aacon.add(svc); + } + } + assertTrue("Couldn't discover any AACon services to use to test.", + aacon.size() > 0); + jalview.io.FileLoader fl = new jalview.io.FileLoader(false); + af = fl.LoadFileWaitTillLoaded(testseqs, jalview.io.DataSourceType.FILE); + assertNotNull("Couldn't load test data ('" + testseqs + "')", af); + } + + @AfterClass(alwaysRun = true) + public static void tearDownAfterClass() throws Exception + { + if (af != null) + { + af.setVisible(false); + af.dispose(); + af = null; + } + } + + /** + * Run AACon on an alignment with defaults and verify Just Shenkin annotation + * appears + */ + @Test(groups = { "External", "Network" }) + public void testAAConAnnotAndRecovery() + { + testAAConClient(af, aacon.get(0)); + } + + static void testAAConClient(AlignFrame af, ServiceWithParameters aacon) + { + SeqAnnotationServiceCalcWorker aaconClient = new SeqAnnotationServiceCalcWorker( + aacon, af, null, + null); + af.getViewport().getCalcManager().startWorker(aaconClient); + do + { + try + { + Thread.sleep(50); + } catch (InterruptedException x) + { + } + ; + } while (af.getViewport().getCalcManager().isWorking()); + AlignmentI orig_alig = af.getViewport().getAlignment(); + boolean foundShenkin = false; + for (AlignmentAnnotation aa : orig_alig + .findAnnotation(aacon.getAlignAnalysisUI().getCalcId())) + { + assertTrue("AACon annotation not marked as autocalculated!", + aa.autoCalculated); + if ("shenkin".equals(aa.label.toLowerCase())) + { + foundShenkin = true; + break; + } + } + assertTrue("Failed to locate 'SHENKIN' annotation row.", foundShenkin); + } + + static void checkAnnotationFileIO(String testname, AlignmentI al) + { + try + { + String aligfileout = FileFormat.Pfam.getWriter(al).print( + al.getSequencesArray(), true); + String anfileout = new AnnotationFile() + .printAnnotationsForAlignment(al); + 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<