Clover icon

Coverage Report

  1. Project Clover database Wed Nov 13 2024 16:21:17 GMT
  2. Package jalview.io

File AnnotationFileIOTest.java

 

Code metrics

2
56
5
1
204
145
8
0.14
11.2
5
1.6

Classes

Class Line # Actions
AnnotationFileIOTest 43 56 8
0.920634992.1%
 

Contributing tests

This file is covered by 2 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ 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.io;
22   
23    import static org.testng.AssertJUnit.assertEquals;
24    import static org.testng.AssertJUnit.assertNotNull;
25    import static org.testng.AssertJUnit.assertTrue;
26   
27    import java.awt.Color;
28    import java.io.File;
29    import java.util.Hashtable;
30    import java.util.List;
31   
32    import org.testng.Assert;
33    import org.testng.annotations.BeforeClass;
34    import org.testng.annotations.Test;
35   
36    import jalview.datamodel.AlignmentI;
37    import jalview.datamodel.HiddenColumns;
38    import jalview.datamodel.SequenceGroup;
39    import jalview.gui.AlignFrame;
40    import jalview.gui.JvOptionPane;
41    import jalview.io.AnnotationFile.ViewDef;
42   
 
43    public class AnnotationFileIOTest
44    {
45   
 
46  1 toggle @BeforeClass(alwaysRun = true)
47    public void setUpJvOptionPane()
48    {
49  1 JvOptionPane.setInteractiveMode(false);
50  1 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
51    }
52   
53    static String TestFiles[][] = { { "Test example annotation import/export",
54    "examples/uniref50.fa", "examples/testdata/example_annot_file.jva" },
55    { "Test multiple combine annotation statements import/export",
56    "examples/uniref50.fa",
57    "examples/testdata/test_combine_annot.jva" },
58    { "Test multiple combine annotation statements with sequence_ref import/export",
59    "examples/uniref50.fa", "examples/testdata/uniref50_iupred.jva" },
60    { "Test group only annotation file parsing results in parser indicating annotation was parsed",
61    "examples/uniref50.fa", "examples/testdata/test_grpannot.jva" },
62    { "Test hiding/showing of insertions on sequence_ref",
63    "examples/uniref50.fa",
64    "examples/testdata/uniref50_seqref.jva" } };
65   
 
66  1 toggle @Test(groups = { "Functional" })
67    public void exampleAnnotationFileIO() throws Exception
68    {
69  1 for (String[] testPair : TestFiles)
70    {
71  5 testAnnotationFileIO(testPair[0], new File(testPair[1]),
72    new File(testPair[2]));
73    }
74    }
75   
 
76  10 toggle protected AlignmentI readAlignmentFile(File f)
77    {
78  10 System.out.println("Reading file: " + f);
79  10 String ff = f.getPath();
80  10 try
81    {
82  10 FormatAdapter rf = new FormatAdapter();
83   
84  10 AlignmentI al = rf.readFile(ff, DataSourceType.FILE,
85    new IdentifyFile().identify(ff, DataSourceType.FILE));
86   
87    // make sure dataset is initialised ? not sure about this
88  160 for (int i = 0; i < al.getSequencesArray().length; ++i)
89    {
90  150 al.getSequenceAt(i).createDatasetSequence();
91    }
92  10 assertNotNull("Couldn't read supplied alignment data.", al);
93  10 return al;
94    } catch (Exception e)
95    {
96  0 e.printStackTrace();
97    }
98  0 Assert.fail(
99    "Couln't read the alignment in file '" + f.toString() + "'");
100  0 return null;
101    }
102   
103    /**
104    * test alignment data in given file can be imported, exported and reimported
105    * with no dataloss
106    *
107    * @param f
108    * - source datafile (IdentifyFile.identify() should work with it)
109    * @param ioformat
110    * - label for IO class used to write and read back in the data from
111    * f
112    */
 
113  5 toggle void testAnnotationFileIO(String testname, File f, File annotFile)
114    {
115  5 System.out.println("Test: " + testname + "\nReading annotation file '"
116    + annotFile + "' onto : " + f);
117  5 String af = annotFile.getPath();
118  5 try
119    {
120  5 AlignmentI al = readAlignmentFile(f);
121  5 HiddenColumns cs = new HiddenColumns();
122  5 assertTrue("Test " + testname
123    + "\nAlignment was not annotated - annotation file not imported.",
124    new AnnotationFile().readAnnotationFile(al, cs, af,
125    DataSourceType.FILE));
126   
127  5 AnnotationFile aff = new AnnotationFile();
128    // ViewDef is not used by Jalview
129  5 ViewDef v = aff.new ViewDef(null, al.getHiddenSequences(), cs,
130    new Hashtable());
131  5 String anfileout = new AnnotationFile().printAnnotations(
132    al.getAlignmentAnnotation(), al.getGroups(),
133    al.getProperties(), null, al, v);
134  5 assertTrue("Test " + testname
135    + "\nAlignment annotation file was not regenerated. Null string",
136    anfileout != null);
137  5 assertTrue("Test " + testname
138    + "\nAlignment annotation file was not regenerated. Empty string",
139    anfileout.length() > "JALVIEW_ANNOTATION".length());
140   
141  5 System.out.println(
142    "Output annotation file:\n" + anfileout + "\n<<EOF\n");
143   
144  5 AlignmentI al_new = readAlignmentFile(f);
145  5 assertTrue("Test " + testname
146    + "\nregenerated annotation file did not annotate alignment.",
147    new AnnotationFile().readAnnotationFile(al_new, anfileout,
148    DataSourceType.PASTE));
149   
150    // test for consistency in io
151  5 StockholmFileTest.testAlignmentEquivalence(al, al_new, false, false,
152    false);
153  5 return;
154    } catch (Exception e)
155    {
156  0 e.printStackTrace();
157    }
158  0 Assert.fail("Test " + testname
159    + "\nCouldn't complete Annotation file roundtrip input/output/input test for '"
160    + annotFile + "'.");
161    }
162   
 
163  1 toggle @Test(groups = "Functional")
164    public void testAnnotateAlignmentView()
165    {
166  1 long t1 = System.currentTimeMillis();
167    /*
168    * JAL-3779 test multiple groups of the same name get annotated
169    */
170  1 AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
171    ">Seq1\nQRSIL\n>Seq2\nFTHND\n>Seq3\nRPVSL\n",
172    DataSourceType.PASTE);
173  1 long t2 = System.currentTimeMillis();
174  1 System.err.println("t0: " + (t2 - t1));
175    // seq1 and seq3 are in distinct groups both named Group1
176  1 String annotationFile = "JALVIEW_ANNOTATION\nSEQUENCE_GROUP\tGroup1\t*\t*\t1\n"
177    + "SEQUENCE_GROUP\tGroup2\t*\t*\t2\n"
178    + "SEQUENCE_GROUP\tGroup1\t*\t*\t3\n"
179    + "PROPERTIES\tGroup1\toutlineColour=blue\tidColour=red\n";
180  1 new AnnotationFile().annotateAlignmentView(af.getViewport(),
181    annotationFile, DataSourceType.PASTE);
182   
183  1 AlignmentI al = af.getViewport().getAlignment();
184  1 List<SequenceGroup> groups = al.getGroups();
185  1 assertEquals(3, groups.size());
186  1 SequenceGroup sg = groups.get(0);
187  1 assertEquals("Group1", sg.getName());
188  1 assertTrue(sg.contains(al.getSequenceAt(0)));
189  1 assertEquals(Color.BLUE, sg.getOutlineColour());
190  1 assertEquals(Color.RED, sg.getIdColour());
191  1 sg = groups.get(1);
192  1 assertEquals("Group2", sg.getName());
193  1 assertTrue(sg.contains(al.getSequenceAt(1)));
194   
195    /*
196    * the bug fix: a second group of the same name is also given properties
197    */
198  1 sg = groups.get(2);
199  1 assertEquals("Group1", sg.getName());
200  1 assertTrue(sg.contains(al.getSequenceAt(2)));
201  1 assertEquals(Color.BLUE, sg.getOutlineColour());
202  1 assertEquals(Color.RED, sg.getIdColour());
203    }
204    }