Merge branch 'develop' into menard
[jalview.git] / test / jalview / io / TCoffeeScoreFileTest.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
3  * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
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 of the License, or (at your option) any later version.
10  *  
11  * Jalview is distributed in the hope that it will be useful, but 
12  * WITHOUT ANY WARRANTY; without even the implied warranty 
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14  * PURPOSE.  See the GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 package jalview.io;
19
20 import static org.junit.Assert.*;
21 import jalview.io.TCoffeeScoreFile.Block;
22 import jalview.io.TCoffeeScoreFile.Header;
23
24 import java.io.BufferedReader;
25 import java.io.File;
26 import java.io.FileNotFoundException;
27 import java.io.FileReader;
28 import java.io.IOException;
29 import java.io.StringReader;
30 import java.util.List;
31
32 import javax.xml.parsers.ParserConfigurationException;
33
34 import org.junit.Test;
35 import org.xml.sax.SAXException;
36
37 import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax;
38 import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed;
39 import fr.orsay.lri.varna.exceptions.ExceptionPermissionDenied;
40 import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses;
41
42 public class TCoffeeScoreFileTest {
43
44         final static File SCORE_FILE = new File("test/jalview/io/tcoffee.score_ascii");
45         final static File ALIGN_FILE = new File("test/jalview/io/tcoffee.fasta_aln");
46         
47         @Test
48         public void testReadHeader() throws IOException, FileNotFoundException, ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException, ExceptionUnmatchedClosingParentheses {
49
50                 TCoffeeScoreFile scoreFile = new TCoffeeScoreFile(SCORE_FILE.getPath(),AppletFormatAdapter.FILE);
51                 assertTrue(scoreFile.getWarningMessage(),scoreFile.isValid());
52                 Header header = scoreFile.header;
53                 assertNotNull(header);
54                 assertEquals( "T-COFFEE, Version_9.02.r1228 (2012-02-16 18:15:12 - Revision 1228 - Build 336)", header.head );
55                 assertEquals( 90, header.score );
56                 assertEquals( 89, header.getScoreFor("1PHT") );
57                 assertEquals( 90, header.getScoreFor("1BB9") );
58                 assertEquals( 94, header.getScoreFor("1UHC") );
59                 assertEquals( 94, header.getScoreFor("1YCS") );
60                 assertEquals( 93, header.getScoreFor("1OOT") );
61                 assertEquals( 94, header.getScoreFor("1ABO") );
62                 assertEquals( 94, header.getScoreFor("1FYN") );
63                 assertEquals( 94, header.getScoreFor("1QCF") );
64                 assertEquals( 90, header.getScoreFor("cons") );
65         }
66         
67         
68         @Test
69         public void testWrongFile() throws ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException, ExceptionUnmatchedClosingParentheses {
70             try {
71                 TCoffeeScoreFile result = new TCoffeeScoreFile(ALIGN_FILE.getPath(), FormatAdapter.FILE);
72                 assertFalse(result.isValid());
73             } catch (IOException x)
74             {
75               assertTrue("File not found exception thrown",x instanceof FileNotFoundException);
76             }
77         } 
78
79         @Test
80         public void testHeightAndWidth() throws IOException, ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException, ExceptionUnmatchedClosingParentheses {
81                 TCoffeeScoreFile result = new TCoffeeScoreFile(SCORE_FILE.getPath(), FormatAdapter.FILE);
82                 assertTrue(result.isValid());
83                 assertEquals( 8, result.getHeight() );
84                 assertEquals( 83, result.getWidth() );
85         }       
86         
87         @Test
88         public void testReadBlock( ) throws IOException {
89                 
90                 String BLOCK = "\n" +
91                                 "\n" +
92                                 "\n" +
93                                 "1PHT   999999999999999999999999998762112222543211112134\n" +
94                                 "1BB9   99999999999999999999999999987-------4322----2234  \n" +
95                                 "1UHC   99999999999999999999999999987-------5321----2246\n" +
96                                 "1YCS   99999999999999999999999999986-------4321----1-35\n" +
97                                 "1OOT   999999999999999999999999999861-------3------1135  \n" +
98                                 "1ABO   99999999999999999999999999986-------422-------34\n" +
99                                 "1FYN   99999999999999999999999999985-------32--------35\n" +
100                                 "1QCF   99999999999999999999999999974-------2---------24\n" +
101                                 "cons   999999999999999999999999999851000110321100001134\n" +
102                                 "\n" +
103                                 "\n";
104                 FileParse source=new FileParse(BLOCK, FormatAdapter.PASTE);
105                 Block block = TCoffeeScoreFile.readBlock(source, 0);
106
107                 assertNotNull(block);
108                 assertEquals( "999999999999999999999999998762112222543211112134", block.getScoresFor("1PHT") );
109                 assertEquals( "99999999999999999999999999987-------4322----2234", block.getScoresFor("1BB9") );
110                 assertEquals( "99999999999999999999999999987-------5321----2246", block.getScoresFor("1UHC") );
111                 assertEquals( "99999999999999999999999999986-------4321----1-35", block.getScoresFor("1YCS") );
112                 assertEquals( "999999999999999999999999999861-------3------1135", block.getScoresFor("1OOT") );
113                 assertEquals( "99999999999999999999999999986-------422-------34", block.getScoresFor("1ABO") );
114                 assertEquals( "99999999999999999999999999985-------32--------35", block.getScoresFor("1FYN") );
115                 assertEquals( "99999999999999999999999999974-------2---------24", block.getScoresFor("1QCF") );
116                 assertEquals( "999999999999999999999999999851000110321100001134", block.getConsensus() );
117         }
118
119         @Test
120         public void testParse() throws IOException, ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException, ExceptionUnmatchedClosingParentheses {
121
122                 TCoffeeScoreFile parser = new TCoffeeScoreFile(SCORE_FILE.getPath(), FormatAdapter.FILE);
123
124                 assertEquals( "999999999999999999999999998762112222543211112134----------5666642367889999999999889", parser.getScoresFor("1PHT") );
125                 assertEquals( "99999999999999999999999999987-------4322----22341111111111676653-355679999999999889", parser.getScoresFor("1BB9") );
126                 assertEquals( "99999999999999999999999999987-------5321----2246----------788774--66789999999999889", parser.getScoresFor("1UHC") );
127                 assertEquals( "99999999999999999999999999986-------4321----1-35----------78777--356789999999999889", parser.getScoresFor("1YCS") );
128                 assertEquals( "999999999999999999999999999861-------3------1135----------78877--356789999999997-67", parser.getScoresFor("1OOT") );
129                 assertEquals( "99999999999999999999999999986-------422-------34----------687774--56779999999999889", parser.getScoresFor("1ABO") );
130                 assertEquals( "99999999999999999999999999985-------32--------35----------6888842356789999999999889", parser.getScoresFor("1FYN") );
131                 assertEquals( "99999999999999999999999999974-------2---------24----------6878742356789999999999889", parser.getScoresFor("1QCF") );
132                 assertEquals( "99999999999999999999999999985100011032110000113400100000006877641356789999999999889", parser.getScoresFor("cons") );             
133         }
134
135         
136         @Test
137         public void testGetAsList() throws IOException, ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException, ExceptionUnmatchedClosingParentheses {
138                 
139           TCoffeeScoreFile parser = new TCoffeeScoreFile(SCORE_FILE.getPath(),FormatAdapter.FILE);
140           assertTrue(parser.getWarningMessage(),parser.isValid());
141                 List<String> scores = parser.getScoresList();
142                 assertEquals( "999999999999999999999999998762112222543211112134----------5666642367889999999999889", scores.get(0) );
143                 assertEquals( "99999999999999999999999999987-------4322----22341111111111676653-355679999999999889", scores.get(1) );
144                 assertEquals( "99999999999999999999999999987-------5321----2246----------788774--66789999999999889", scores.get(2) );
145                 assertEquals( "99999999999999999999999999986-------4321----1-35----------78777--356789999999999889", scores.get(3) );
146                 assertEquals( "999999999999999999999999999861-------3------1135----------78877--356789999999997-67", scores.get(4) );
147                 assertEquals( "99999999999999999999999999986-------422-------34----------687774--56779999999999889", scores.get(5) );
148                 assertEquals( "99999999999999999999999999985-------32--------35----------6888842356789999999999889", scores.get(6) );
149                 assertEquals( "99999999999999999999999999974-------2---------24----------6878742356789999999999889", scores.get(7) );
150                 assertEquals( "99999999999999999999999999985100011032110000113400100000006877641356789999999999889", scores.get(8) );           
151                 
152         } 
153         
154         
155         @Test
156         public void testGetAsArray() throws IOException, ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException, ExceptionUnmatchedClosingParentheses {
157                 
158           TCoffeeScoreFile parser = new TCoffeeScoreFile(SCORE_FILE.getPath(),FormatAdapter.FILE);
159           assertTrue(parser.getWarningMessage(),parser.isValid());
160                 byte[][] scores = parser.getScoresArray();
161         
162                 assertEquals( 9, scores[0][0] );
163                 assertEquals( 9, scores[1][0] );
164                 assertEquals( 9, scores[2][0] );
165                 assertEquals( 9, scores[3][0] );
166                 assertEquals( 9, scores[4][0] );
167                 assertEquals( 9, scores[5][0] );
168                 assertEquals( 9, scores[6][0] );
169                 assertEquals( 9, scores[7][0] );
170                 assertEquals( 9, scores[8][0] );
171                 
172                 assertEquals( 5, scores[0][36] );
173                 assertEquals( 4, scores[1][36] );
174                 assertEquals( 5, scores[2][36] );
175                 assertEquals( 4, scores[3][36] );
176                 assertEquals( -1, scores[4][36] );
177                 assertEquals( 4, scores[5][36] );
178                 assertEquals( 3, scores[6][36] );
179                 assertEquals( 2, scores[7][36] );
180                 assertEquals( 3, scores[8][36] );
181                 
182         } 
183         
184         
185         
186 }