JAL-2316 Adjusted unit tests. Tidied UrlLinkProviderI interface.
[jalview.git] / test / jalview / urls / IdentifiersUrlProviderTest.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
22 package jalview.urls;
23
24 import static org.testng.AssertJUnit.assertEquals;
25 import static org.testng.AssertJUnit.assertFalse;
26 import static org.testng.AssertJUnit.assertTrue;
27
28 import java.io.File;
29 import java.io.FileWriter;
30 import java.util.Arrays;
31 import java.util.HashMap;
32 import java.util.Vector;
33
34 import org.testng.annotations.BeforeClass;
35 import org.testng.annotations.Test;
36
37 public class IdentifiersUrlProviderTest
38 {
39   // Test identifiers.org download file
40   private static final String testIdOrgFile = "[{\"id\":\"MIR:00000002\",\"name\":\"ChEBI\",\"pattern\":\"^CHEBI:\\d+$\","
41           + "\"definition\":\"Chemical Entities of Biological Interest (ChEBI)\",\"prefix\":\"chebi\","
42           + "\"url\":\"http://identifiers.org/chebi\"},{\"id\":\"MIR:00000005\",\"name\":\"UniProt Knowledgebase\","
43           + "\"pattern\":\"^([A-N,R-Z][0-9]([A-Z][A-Z, 0-9][A-Z, 0-9][0-9]){1,2})|([O,P,Q][0-9][A-Z, 0-9][A-Z, 0-9][A-Z, 0-9][0-9])(\\.\\d+)?$\","
44           + "\"definition\":\"The UniProt Knowledgebase (UniProtKB)\",\"prefix\":\"uniprot\",\"url\":\"http://identifiers.org/uniprot\"},"
45           + "{\"id\":\"MIR:00000011\",\"name\":\"InterPro\",\"pattern\":\"^IPR\\d{6}$\",\"definition\":\"InterPro\",\"prefix\":\"interpro\","
46           + "\"url\":\"http://identifiers.org/interpro\"},"
47           + "{\"id\":\"MIR:00000372\",\"name\":\"ENA\",\"pattern\":\"^[A-Z]+[0-9]+(\\.\\d+)?$\",\"definition\":\"The European Nucleotide Archive (ENA),\""
48           + "\"prefix\":\"ena.embl\",\"url\":\"http://identifiers.org/ena.embl\"}]";
49   
50   private static final String[] dlinks = {
51       "UniProt Knowledgebase|http://identifiers.org/uniprot/$DB_ACCESSION$",
52       "InterPro|http://identifiers.org/interpro/$DB_ACCESSION$",
53       "ENA|http://identifiers.org/ena.embl/$DB_ACCESSION$" };
54
55   private static final String[] dlinks1 = {
56       "MIR:00000011|http://identifiers.org/interpro/$DB_ACCESSION$",
57       "MIR:00000372|http://identifiers.org/ena.embl/$DB_ACCESSION$" };
58
59   private static final String[] dlinks2 = {
60       "MIR:00000005|http://identifiers.org/uniprot/$DB_ACCESSION$",
61       "MIR:00000011|http://identifiers.org/interpro/$DB_ACCESSION$" };
62
63   private static final String stringLinks = "MIR:00000005|http://identifiers.org/uniprot/$DB_ACCESSION$"
64           + "MIR:00000011|http://identifiers.org/interpro/$DB_ACCESSION$"
65           + "MIR:00000372|http://identifiers.org/ena.embl/$DB_ACCESSION$";
66
67   private static final Vector<String> displayLinks = new Vector<String>(
68         Arrays.asList(dlinks));
69   
70   private static final Vector<String> displayLinks1 = new Vector<String>(
71           Arrays.asList(dlinks1));
72
73   private static final Vector<String> displayLinks2 = new Vector<String>(
74           Arrays.asList(dlinks2));
75
76   private static final HashMap<String, String> urlMap = new HashMap<String, String>()
77   {
78     {
79       put("MIR:00000005", "http://identifiers.org/uniprot/$DB_ACCESSION$");
80       put("MIR:00000011", "http://identifiers.org/interpro/$DB_ACCESSION$");
81       put("MIR:00000372", "http://identifiers.org/ena.embl/$DB_ACCESSION$");
82     }
83   };
84
85   private String testfile = "";
86
87
88   @BeforeClass(alwaysRun = true)
89   public void setup()
90   {
91     // setup test ids in a file
92     File outFile = null;
93     try
94     {
95       outFile = File.createTempFile("testidsfile", "txt");
96       outFile.deleteOnExit();
97
98       FileWriter fw = new FileWriter(outFile);
99       fw.write(testIdOrgFile);
100       fw.close();
101
102       testfile = outFile.getAbsolutePath();
103
104     } catch (Exception ex)
105     {
106       System.err.println(ex);
107     }
108   }
109
110   /*
111    * Test urls are set and returned correctly
112    */
113   @Test(groups = { "Functional" })
114   public void testUrlLinks()
115   {
116     // creation from cached id list
117     String idList = "MIR:00000005|MIR:00000011|MIR:00000372";
118     UrlProviderI idProv = new IdentifiersUrlProvider(idList, testfile);
119     
120     assertTrue(displayLinks.containsAll(idProv.getLinksForMenu()));
121
122     // because UrlProvider does not guarantee order of links, we can't just
123     // compare the output of writeUrlsAsString to a string, hence the hoops here
124     String result = idProv.writeUrlsAsString();
125     UrlProviderI up = new IdentifiersUrlProvider(result, testfile);
126     assertTrue(displayLinks.containsAll(up.getLinksForMenu()));
127
128   }
129
130   /*
131    * Test default is set and returned correctly
132    */
133   @Test(groups = { "Functional" })
134   public void testDefaultUrl()
135   {
136     // creation from cached id list
137     String idList = "MIR:00000005|MIR:00000011|MIR:00000372";
138     UrlProviderI idProv = new IdentifiersUrlProvider(idList, testfile);
139     
140     // initially no default
141     assertEquals(null, idProv.getDefaultUrl("seqid"));
142     
143     // set and then retrieve default
144     assertTrue(idProv.setDefaultUrl("MIR:00000005"));
145     assertEquals("http://identifiers.org/uniprot/seqid",
146             idProv.getDefaultUrl("seqid"));
147
148     // ids less than length 4 return null
149     assertEquals(null,
150             idProv.getDefaultUrl("123"));
151
152     // attempt to set bad default
153     assertFalse(idProv.setDefaultUrl("MIR:00001234"));
154     // default set to null (as default should have been set elsewhere)
155     assertEquals(null, idProv.getDefaultUrl("seqid"));
156
157     // chooseDefaultUrl not implemented for IdentifiersUrlProvider
158     assertEquals(null, idProv.chooseDefaultUrl());
159   }
160 }