Clover icon

Coverage Report

  1. Project Clover database Thu Nov 28 2024 18:06:40 GMT
  2. Package jalview.io

File FormatAdapterTest.java

 

Code metrics

4
32
5
1
163
89
10
0.31
6.4
5
2

Classes

Class Line # Actions
FormatAdapterTest 39 32 10
0.926829392.7%
 

Contributing tests

This file is covered by 11 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.fail;
26   
27    import jalview.datamodel.AlignmentI;
28    import jalview.datamodel.SequenceI;
29    import jalview.gui.JvOptionPane;
30   
31    import java.io.IOException;
32    import java.util.ArrayList;
33    import java.util.List;
34   
35    import org.testng.annotations.BeforeClass;
36    import org.testng.annotations.DataProvider;
37    import org.testng.annotations.Test;
38   
 
39    public class FormatAdapterTest
40    {
41   
 
42  1 toggle @BeforeClass(alwaysRun = true)
43    public void setUpJvOptionPane()
44    {
45  1 JvOptionPane.setInteractiveMode(false);
46  1 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
47    }
48   
49    /**
50    * Test saving and re-reading in a specified format
51    *
52    * @throws IOException
53    */
 
54  11 toggle @Test(groups = { "Functional" }, dataProvider = "formats")
55    public void testRoundTrip(FileFormatI format) throws IOException
56    {
57  11 try
58    {
59  11 AlignmentI al = new FormatAdapter().readFile("examples/uniref50.fa",
60    DataSourceType.FILE, FileFormat.Fasta);
61   
62    /*
63    * 'gap' is the gap character used in the alignment data file here,
64    * not the user preferred gap character
65    */
66  11 char gap = al.getGapCharacter();
67  11 assertNotNull(al);
68   
69  11 SequenceI[] seqs = al.getSequencesArray();
70  11 String formatted = new FormatAdapter().formatSequences(format, al,
71    false);
72   
73  11 AlignmentI reloaded = new FormatAdapter().readFile(formatted,
74    DataSourceType.PASTE, format);
75  11 List<SequenceI> reread = reloaded.getSequences();
76  11 assertEquals("Wrong number of reloaded sequences", seqs.length,
77    reread.size());
78   
79  11 int i = 0;
80  11 for (SequenceI seq : reread)
81    {
82  165 String sequenceString = seq.getSequenceAsString();
83   
84    /*
85    * special case: MSF always uses '.' as gap character
86    */
87  165 sequenceString = adjustForGapTreatment(sequenceString, gap, format);
88  165 assertEquals(String.format("Sequence %d: %s", i, seqs[i].getName()),
89    seqs[i].getSequenceAsString(), sequenceString);
90  165 i++;
91    }
92    } catch (IOException e)
93    {
94  0 fail(String.format("Format %s failed with %s", format,
95    e.getMessage()));
96    }
97    }
98   
99    /**
100    * Optionally change the gap character in the string to the given character,
101    * depending on the sequence file format
102    *
103    * @param sequenceString
104    * a sequence (as written in 'format' format)
105    * @param gap
106    * the sequence's original gap character
107    * @param format
108    * @return
109    */
 
110  165 toggle String adjustForGapTreatment(String sequenceString, char gap,
111    FileFormatI format)
112    {
113  165 if (FileFormat.MSF.equals(format))
114    {
115    /*
116    * MSF forces gap character to '.', so change it back
117    * for comparison purposes
118    */
119  15 sequenceString = sequenceString.replace('.', gap);
120    }
121  165 return sequenceString;
122    }
123   
124    /**
125    * Data provider that serves alignment formats that are both readable and
126    * (text) writable
127    *
128    * @return
129    */
 
130  1 toggle @DataProvider(name = "formats")
131    static Object[][] getFormats()
132    {
133  1 List<FileFormatI> both = new ArrayList<FileFormatI>();
134  1 for (FileFormatI format : FileFormats.getInstance().getFormats())
135    {
136  22 if (format.isReadable() && format.isWritable()
137    && format.isTextFormat())
138    {
139  11 both.add(format);
140    }
141    }
142   
143  1 Object[][] formats = new Object[both.size()][];
144  1 int i = 0;
145  1 for (FileFormatI format : both)
146    {
147  11 formats[i] = new Object[] { format };
148  11 i++;
149    }
150  1 return formats;
151    }
152   
153    /**
154    * Enable this to isolate testing to a single file format
155    *
156    * @throws IOException
157    */
 
158  0 toggle @Test(groups = { "Functional" }, enabled = false)
159    public void testOneFormatRoundTrip() throws IOException
160    {
161  0 testRoundTrip(FileFormat.Json);
162    }
163    }