Merge develop to Release_2_8_3_Branch
[jalview.git] / test / jalview / ws / seqfetcher / DbRefFetcherTest.java
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.ws.seqfetcher;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertTrue;
26
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import org.junit.AfterClass;
31 import org.junit.BeforeClass;
32 import org.junit.Test;
33
34 import jalview.analysis.CrossRef;
35 import jalview.datamodel.AlignmentI;
36 import jalview.datamodel.DBRefEntry;
37 import jalview.datamodel.DBRefSource;
38 import jalview.util.DBRefUtils;
39 import jalview.ws.SequenceFetcher;
40
41 /**
42  * @author jimp
43  * 
44  */
45 public class DbRefFetcherTest
46 {
47
48   /**
49    * @throws java.lang.Exception
50    */
51   @BeforeClass
52   public static void setUpBeforeClass() throws Exception
53   {
54     jalview.bin.Cache.initLogger();
55   }
56
57   /**
58    * @throws java.lang.Exception
59    */
60   @AfterClass
61   public static void tearDownAfterClass() throws Exception
62   {
63   }
64
65   @Test
66   public void testStandardProtDbs()
67   {
68     String[] defdb = DBRefSource.PROTEINDBS;
69     List<DbSourceProxy> srces = new ArrayList<DbSourceProxy>();
70     for (String ddb : defdb)
71     {
72       SequenceFetcher sfetcher = new SequenceFetcher();
73       List<DbSourceProxy> srcesfordb = sfetcher.getSourceProxy(ddb);
74
75       if (srcesfordb != null)
76       {
77         srces.addAll(srcesfordb);
78       }
79     }
80     DbSourceProxy uniprot = null;
81     int i = 0;
82     // append the selected sequence sources to the default dbs
83     for (DbSourceProxy s : srces)
84     {
85       if (s.getDbSource().equalsIgnoreCase(DBRefSource.UNIPROT))
86       {
87         i++;
88       }
89
90       if (s instanceof jalview.ws.dbsources.Uniprot)
91       {
92         uniprot = s;
93         break;
94       }
95     }
96
97     assertTrue("Failed to find Uniprot source as first source amongst "
98             + srces.size() + " sources (source was at position " + i + ")",
99             uniprot != null && i < 2);
100   }
101
102   @Test
103   public void testEmblUniprotProductRecovery() throws Exception
104   {
105     String retrievalId = "CAA23748"; // "V00488";
106     DbSourceProxy embl = new SequenceFetcher().getSourceProxy(DBRefSource.EMBL).get(0);
107     assertNotNull("Couldn't find the EMBL retrieval client", embl);
108     verifyProteinNucleotideXref(retrievalId, embl);
109   }
110
111   @Test
112   public void testEmblCDSUniprotProductRecovery() throws Exception
113   {
114     String retrievalId = "AAH29712";
115     DbSourceProxy embl = new SequenceFetcher().getSourceProxy(
116             DBRefSource.EMBLCDS).get(0);
117     assertNotNull("Couldn't find the EMBL retrieval client", embl);
118     verifyProteinNucleotideXref(retrievalId, embl);
119   }
120
121   private void verifyProteinNucleotideXref(String retrievalId,
122           DbSourceProxy embl) throws Exception
123   {
124     AlignmentI alsq = embl.getSequenceRecords(retrievalId);
125     assertNotNull("Couldn't find the EMBL record " + retrievalId, alsq);
126     assertEquals("Didn't retrieve right number of records", 1, alsq.getHeight());
127     DBRefEntry[] dr = DBRefUtils.selectRefs(alsq.getSequenceAt(0).getDBRef(), DBRefSource.PROTEINSEQ);
128     assertNotNull(dr);
129     assertEquals("Expected a single Uniprot cross reference", 1, dr.length);
130     assertEquals("Expected cross refernce map to be one amino acid", dr[0]
131             .getMap().getMappedWidth(), 1);
132     assertEquals("Expected local refernce map to be 3 nucleotides", dr[0]
133             .getMap().getWidth(), 3);
134     AlignmentI sprods = CrossRef.findXrefSequences(alsq.getSequencesArray(), true, dr[0].getSource(), alsq.getDataset());
135     assertNotNull(
136             "Couldn't recover cross reference sequence from dataset. Was it ever added ?",
137             sprods);
138     
139     
140   }
141 }