1 /* 2 * Jalview - A Sequence Alignment Editor and Viewer (2.11.1.4) 3 * Copyright (C) 2021 The Jalview Authors 4 * 5 * This file is part of Jalview. 6 * 7 * Jalview is free software: you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation, either version 3 10 * of the License, or (at your option) any later version. 11 * 12 * Jalview is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty 14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 15 * PURPOSE. See the GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>. 19 * The Jalview Authors are detailed in the 'AUTHORS' file. 20 */ 21 package jalview.ws.jabaws; 22 23 import static org.testng.AssertJUnit.assertNotNull; 24 import static org.testng.AssertJUnit.assertTrue; 25 26 import jalview.bin.Cache; 27 import jalview.datamodel.AlignmentAnnotation; 28 import jalview.datamodel.AlignmentI; 29 import jalview.gui.JvOptionPane; 30 import jalview.io.AnnotationFile; 31 import jalview.io.DataSourceType; 32 import jalview.io.FileFormat; 33 import jalview.io.FormatAdapter; 34 import jalview.io.StockholmFileTest; 35 import jalview.ws.jws2.AADisorderClient; 36 import jalview.ws.jws2.Jws2Discoverer; 37 import jalview.ws.jws2.jabaws2.Jws2Instance; 38 39 import java.util.ArrayList; 40 import java.util.List; 41 42 import org.testng.Assert; 43 import org.testng.annotations.AfterClass; 44 import org.testng.annotations.BeforeClass; 45 import org.testng.annotations.Test; 46 47 /* 48 * All methods in this class are set to the Network group because setUpBeforeClass will fail 49 * if there is no network. 50 */ 51 @Test(singleThreaded = true) 52 public class DisorderAnnotExportImport 53 { 54 55 @BeforeClass(alwaysRun = true) setUpJvOptionPane()56 public void setUpJvOptionPane() 57 { 58 JvOptionPane.setInteractiveMode(false); 59 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); 60 } 61 62 public static String testseqs = "examples/uniref50.fa"; 63 64 public static Jws2Discoverer disc; 65 66 public static List<Jws2Instance> iupreds; 67 68 jalview.ws.jws2.AADisorderClient disorderClient; 69 70 public static jalview.gui.AlignFrame af = null; 71 72 @BeforeClass(alwaysRun = true) setUpBeforeClass()73 public static void setUpBeforeClass() throws Exception 74 { 75 Cache.loadProperties("test/jalview/io/testProps.jvprops"); 76 Cache.initLogger(); 77 disc = JalviewJabawsTestUtils.getJabawsDiscoverer(); 78 79 while (disc.isRunning()) 80 { 81 // don't get services until discoverer has finished 82 Thread.sleep(100); 83 } 84 85 iupreds = new ArrayList<Jws2Instance>(); 86 for (Jws2Instance svc : disc.getServices()) 87 { 88 if (svc.getServiceTypeURI().toLowerCase().contains("iupredws")) 89 { 90 iupreds.add(svc); 91 } 92 } 93 assertTrue("Couldn't discover any IUPred services to use to test.", 94 iupreds.size() > 0); 95 jalview.io.FileLoader fl = new jalview.io.FileLoader(false); 96 af = fl.LoadFileWaitTillLoaded(testseqs, jalview.io.DataSourceType.FILE); 97 assertNotNull("Couldn't load test data ('" + testseqs + "')", af); 98 } 99 100 @AfterClass(alwaysRun = true) tearDownAfterClass()101 public static void tearDownAfterClass() throws Exception 102 { 103 if (af != null) 104 { 105 af.setVisible(false); 106 af.dispose(); 107 af = null; 108 } 109 } 110 111 /** 112 * test for patches to JAL-1294 113 */ 114 @Test(groups = { "External", "Network" }) testDisorderAnnotExport()115 public void testDisorderAnnotExport() 116 { 117 disorderClient = new AADisorderClient(iupreds.get(0), af, null, null); 118 af.getViewport().getCalcManager().startWorker(disorderClient); 119 do 120 { 121 try 122 { 123 Thread.sleep(50); 124 } catch (InterruptedException x) 125 { 126 } 127 ; 128 } while (af.getViewport().getCalcManager().isWorking()); 129 AlignmentI orig_alig = af.getViewport().getAlignment(); 130 // NOTE: Consensus annotation row cannot be exported and reimported 131 // faithfully - so we remove them 132 List<AlignmentAnnotation> toremove = new ArrayList<AlignmentAnnotation>(); 133 for (AlignmentAnnotation aa : orig_alig.getAlignmentAnnotation()) 134 { 135 if (aa.autoCalculated) 136 { 137 toremove.add(aa); 138 } 139 } 140 for (AlignmentAnnotation aa : toremove) 141 { 142 orig_alig.deleteAnnotation(aa); 143 } 144 checkAnnotationFileIO("Testing IUPred Annotation IO", orig_alig); 145 146 } 147 checkAnnotationFileIO(String testname, AlignmentI al)148 static void checkAnnotationFileIO(String testname, AlignmentI al) 149 { 150 try 151 { 152 String aligfileout = FileFormat.Pfam.getWriter(al).print( 153 al.getSequencesArray(), true); 154 String anfileout = new AnnotationFile() 155 .printAnnotationsForAlignment(al); 156 assertTrue( 157 "Test " 158 + testname 159 + "\nAlignment annotation file was not regenerated. Null string", 160 anfileout != null); 161 assertTrue( 162 "Test " 163 + testname 164 + "\nAlignment annotation file was not regenerated. Empty string", 165 anfileout.length() > "JALVIEW_ANNOTATION".length()); 166 167 System.out.println("Output annotation file:\n" + anfileout 168 + "\n<<EOF\n"); 169 170 AlignmentI al_new = new FormatAdapter().readFile(aligfileout, 171 DataSourceType.PASTE, FileFormat.Pfam); 172 assertTrue( 173 "Test " 174 + testname 175 + "\nregenerated annotation file did not annotate alignment.", 176 new AnnotationFile().readAnnotationFile(al_new, anfileout, 177 DataSourceType.PASTE)); 178 179 // test for consistency in io 180 StockholmFileTest.testAlignmentEquivalence(al, al_new, true, false, 181 false); 182 return; 183 } catch (Exception e) 184 { 185 e.printStackTrace(); 186 } 187 Assert.fail("Test " 188 + testname 189 + "\nCouldn't complete Annotation file roundtrip input/output/input test."); 190 } 191 192 } 193