2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
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.
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.
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.
23 import static jalview.util.UrlConstants.DB_ACCESSION;
24 import static jalview.util.UrlConstants.SEQUENCE_ID;
25 import static org.testng.AssertJUnit.assertEquals;
26 import static org.testng.AssertJUnit.assertFalse;
27 import static org.testng.AssertJUnit.assertNull;
28 import static org.testng.AssertJUnit.assertTrue;
30 import jalview.datamodel.DBRefEntry;
31 import jalview.datamodel.DBRefSource;
32 import jalview.datamodel.Sequence;
34 import java.util.ArrayList;
35 import java.util.LinkedHashMap;
36 import java.util.List;
39 import org.testng.annotations.Test;
41 public class UrlLinkTest
44 final static String DB = "Test";
46 final static String URL_PREFIX = "http://www.jalview.org/";
48 final static String URL_SUFFIX = "/blah";
50 final static String SEP = "|";
52 final static String DELIM = "$";
54 final static String REGEX_NESTED = "=/^(?:Label:)?(?:(?:gi\\|(\\d+))|([^:]+))/=";
56 final static String REGEX_RUBBISH = "=/[0-9]++/=";
59 * Test URL link creation when the input string has no regex
61 @Test(groups = { "Functional" })
62 public void testUrlLinkCreationNoRegex()
65 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
66 + DELIM + URL_SUFFIX);
67 assertEquals(DB, ul.getTarget());
68 assertEquals(DB, ul.getLabel());
69 assertEquals(URL_PREFIX, ul.getUrl_prefix());
70 assertEquals(URL_SUFFIX, ul.getUrl_suffix());
71 assertTrue(ul.isDynamic());
72 assertFalse(ul.usesDBAccession());
73 assertNull(ul.getRegexReplace());
74 assertTrue(ul.isValid());
75 assertNull(ul.getInvalidMessage());
78 ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION + DELIM
80 assertEquals(DB, ul.getTarget());
81 assertEquals(DB, ul.getLabel());
82 assertEquals(URL_PREFIX, ul.getUrl_prefix());
83 assertEquals(URL_SUFFIX, ul.getUrl_suffix());
84 assertTrue(ul.isDynamic());
85 assertTrue(ul.usesDBAccession());
86 assertNull(ul.getRegexReplace());
87 assertTrue(ul.isValid());
88 assertNull(ul.getInvalidMessage());
91 ul = new UrlLink(DB + SEP + URL_PREFIX + URL_SUFFIX.substring(1));
92 assertEquals(DB, ul.getTarget());
93 assertEquals(DB, ul.getLabel());
94 assertEquals(URL_PREFIX + URL_SUFFIX.substring(1), ul.getUrl_prefix());
95 assertFalse(ul.isDynamic());
96 assertFalse(ul.usesDBAccession());
97 assertNull(ul.getRegexReplace());
98 assertTrue(ul.isValid());
99 assertNull(ul.getInvalidMessage());
103 * Test URL link creation when the input string has regex
105 @Test(groups = { "Functional" })
106 public void testUrlLinkCreationWithRegex()
109 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
110 + REGEX_NESTED + DELIM + URL_SUFFIX);
111 assertEquals(DB, ul.getTarget());
112 assertEquals(DB, ul.getLabel());
113 assertEquals(URL_PREFIX, ul.getUrl_prefix());
114 assertEquals(URL_SUFFIX, ul.getUrl_suffix());
115 assertTrue(ul.isDynamic());
116 assertFalse(ul.usesDBAccession());
117 assertEquals(REGEX_NESTED.substring(2, REGEX_NESTED.length() - 2),
118 ul.getRegexReplace());
119 assertTrue(ul.isValid());
120 assertNull(ul.getInvalidMessage());
123 ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION
124 + REGEX_NESTED + DELIM + URL_SUFFIX);
125 assertEquals(DB, ul.getTarget());
126 assertEquals(DB, ul.getLabel());
127 assertEquals(URL_PREFIX, ul.getUrl_prefix());
128 assertEquals(URL_SUFFIX, ul.getUrl_suffix());
129 assertTrue(ul.isDynamic());
130 assertTrue(ul.usesDBAccession());
131 assertEquals(REGEX_NESTED.substring(2, REGEX_NESTED.length() - 2),
132 ul.getRegexReplace());
133 assertTrue(ul.isValid());
134 assertNull(ul.getInvalidMessage());
137 ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION
138 + REGEX_RUBBISH + DELIM + URL_SUFFIX);
139 assertEquals(DB, ul.getTarget());
140 assertEquals(DB, ul.getLabel());
141 assertEquals(URL_PREFIX, ul.getUrl_prefix());
142 assertEquals(URL_SUFFIX, ul.getUrl_suffix());
143 assertTrue(ul.isDynamic());
144 assertTrue(ul.usesDBAccession());
145 assertEquals(REGEX_RUBBISH.substring(2, REGEX_RUBBISH.length() - 2),
146 ul.getRegexReplace());
147 assertFalse(ul.isValid());
149 "Invalid Regular Expression : '"
150 + REGEX_RUBBISH.substring(2, REGEX_RUBBISH.length() - 2)
152 ul.getInvalidMessage());
156 * Test construction of link by substituting sequence id or name
158 @Test(groups = { "Functional" })
159 public void testMakeUrlNoRegex()
162 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
163 + DELIM + URL_SUFFIX);
164 String idstring = "FER_CAPAA";
165 String[] urls = ul.makeUrls(idstring, true);
167 assertEquals(2, urls.length);
168 assertEquals(idstring, urls[0]);
169 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
171 urls = ul.makeUrls(idstring, false);
173 assertEquals(2, urls.length);
174 assertEquals(idstring, urls[0]);
175 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
179 * Test construction of link by substituting sequence id or name using regular
182 @Test(groups = { "Functional" })
183 public void testMakeUrlWithRegex()
186 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION
187 + REGEX_NESTED + DELIM + URL_SUFFIX);
188 String idstring = "FER_CAPAA";
189 String[] urls = ul.makeUrls(idstring, true);
191 assertEquals(2, urls.length);
192 assertEquals(idstring, urls[0]);
193 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
194 assertTrue(ul.isValid());
195 assertNull(ul.getInvalidMessage());
197 urls = ul.makeUrls(idstring, false);
199 assertEquals(2, urls.length);
200 assertEquals(idstring, urls[0]);
201 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
202 assertTrue(ul.isValid());
203 assertNull(ul.getInvalidMessage());
206 idstring = "Label:gi|9234|pdb|102L|A";
207 urls = ul.makeUrls(idstring, true);
209 assertEquals(2, urls.length);
210 assertEquals("9234", urls[0]);
211 assertEquals(URL_PREFIX + "9234" + URL_SUFFIX, urls[1]);
212 assertTrue(ul.isValid());
213 assertNull(ul.getInvalidMessage());
215 urls = ul.makeUrls(idstring, false);
217 assertEquals(2, urls.length);
218 assertEquals("9234", urls[0]);
219 assertEquals(URL_PREFIX + "9234" + URL_SUFFIX, urls[1]);
220 assertTrue(ul.isValid());
221 assertNull(ul.getInvalidMessage());
224 idstring = "this does not match";
225 urls = ul.makeUrls(idstring, true);
227 assertEquals(2, urls.length);
228 assertEquals(idstring, urls[0]);
229 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
230 assertTrue(ul.isValid());
231 assertNull(ul.getInvalidMessage());
233 urls = ul.makeUrls(idstring, false);
235 assertEquals(2, urls.length);
236 assertEquals(idstring, urls[0]);
237 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
238 assertTrue(ul.isValid());
239 assertNull(ul.getInvalidMessage());
243 urls = ul.makeUrls(idstring, true);
247 urls = ul.makeUrls(idstring, false);
249 assertEquals(2, urls.length);
250 assertEquals("", urls[0]);
251 assertEquals(URL_PREFIX + URL_SUFFIX, urls[1]);
252 assertTrue(ul.isValid());
253 assertNull(ul.getInvalidMessage());
257 * Test creating links with null sequence
259 @Test(groups = { "Functional" })
260 public void testCreateLinksFromNullSequence()
262 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
263 + DELIM + URL_SUFFIX);
265 Map<String, List<String>> linkset = new LinkedHashMap<String, List<String>>();
266 ul.createLinksFromSeq(null, linkset);
268 String key = DB + SEP + URL_PREFIX;
269 assertEquals(1, linkset.size());
270 assertTrue(linkset.containsKey(key));
271 assertEquals(linkset.get(key).get(0), DB);
272 assertEquals(linkset.get(key).get(1), DB);
273 assertEquals(linkset.get(key).get(2), null);
274 assertEquals(linkset.get(key).get(3), URL_PREFIX);
278 * Test creating links with non-dynamic urlLink
280 @Test(groups = { "Functional" })
281 public void testCreateLinksForNonDynamic()
283 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + URL_SUFFIX);
285 Map<String, List<String>> linkset = new LinkedHashMap<String, List<String>>();
286 ul.createLinksFromSeq(null, linkset);
288 String key = DB + SEP + URL_PREFIX + URL_SUFFIX;
289 assertEquals(1, linkset.size());
290 assertTrue(linkset.containsKey(key));
291 assertEquals(linkset.get(key).get(0), DB);
292 assertEquals(linkset.get(key).get(1), DB);
293 assertEquals(linkset.get(key).get(2), null);
294 assertEquals(linkset.get(key).get(3), URL_PREFIX + URL_SUFFIX);
298 * Test creating links
300 @Test(groups = { "Functional" })
301 public void testCreateLinksFromSequence()
304 // create list of links and list of DBRefs
305 List<String> links = new ArrayList<String>();
306 List<DBRefEntry> refs = new ArrayList<DBRefEntry>();
308 // links as might be added into Preferences | Connections dialog
309 links.add("EMBL-EBI Search | http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$"
310 + SEQUENCE_ID + "$");
311 links.add("UNIPROT | http://www.uniprot.org/uniprot/$" + DB_ACCESSION
313 links.add("INTERPRO | http://www.ebi.ac.uk/interpro/entry/$"
314 + DB_ACCESSION + "$");
317 refs.add(new DBRefEntry(DBRefSource.UNIPROT, "1", "P83527"));
318 refs.add(new DBRefEntry("INTERPRO", "1", "IPR001041"));
319 refs.add(new DBRefEntry("INTERPRO", "1", "IPR006058"));
320 refs.add(new DBRefEntry("INTERPRO", "1", "IPR012675"));
322 Sequence seq0 = new Sequence("FER1", "AKPNGVL");
324 // add all the dbrefs to the sequence
325 seq0.addDBRef(refs.get(0));
326 seq0.addDBRef(refs.get(1));
327 seq0.addDBRef(refs.get(2));
328 seq0.addDBRef(refs.get(3));
329 seq0.createDatasetSequence();
331 // Test where link takes a sequence id as replacement
332 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
333 + DELIM + URL_SUFFIX);
335 Map<String, List<String>> linkset = new LinkedHashMap<String, List<String>>();
336 ul.createLinksFromSeq(seq0, linkset);
338 String key = seq0.getName() + SEP + URL_PREFIX + seq0.getName()
340 assertEquals(1, linkset.size());
341 assertTrue(linkset.containsKey(key));
342 assertEquals(linkset.get(key).get(0), DB);
343 assertEquals(linkset.get(key).get(1), DB);
344 assertEquals(linkset.get(key).get(2), seq0.getName());
345 assertEquals(linkset.get(key).get(3), URL_PREFIX + seq0.getName()
348 // Test where link takes a db annotation id and only has one dbref
349 ul = new UrlLink(links.get(1));
350 linkset = new LinkedHashMap<String, List<String>>();
351 ul.createLinksFromSeq(seq0, linkset);
353 key = "P83527|http://www.uniprot.org/uniprot/P83527";
354 assertEquals(1, linkset.size());
355 assertTrue(linkset.containsKey(key));
356 assertEquals(linkset.get(key).get(0), DBRefSource.UNIPROT);
357 assertEquals(linkset.get(key).get(1), DBRefSource.UNIPROT + SEP
359 assertEquals(linkset.get(key).get(2), "P83527");
360 assertEquals(linkset.get(key).get(3),
361 "http://www.uniprot.org/uniprot/P83527");
363 // Test where link takes a db annotation id and has multiple dbrefs
364 ul = new UrlLink(links.get(2));
365 linkset = new LinkedHashMap<String, List<String>>();
366 ul.createLinksFromSeq(seq0, linkset);
367 assertEquals(3, linkset.size());
369 // check each link made it in correctly
370 key = "IPR001041|http://www.ebi.ac.uk/interpro/entry/IPR001041";
371 assertTrue(linkset.containsKey(key));
372 assertEquals(linkset.get(key).get(0), "INTERPRO");
373 assertEquals(linkset.get(key).get(1), "INTERPRO" + SEP + "IPR001041");
374 assertEquals(linkset.get(key).get(2), "IPR001041");
375 assertEquals(linkset.get(key).get(3),
376 "http://www.ebi.ac.uk/interpro/entry/IPR001041");
378 key = "IPR006058|http://www.ebi.ac.uk/interpro/entry/IPR006058";
379 assertTrue(linkset.containsKey(key));
380 assertEquals(linkset.get(key).get(0), "INTERPRO");
381 assertEquals(linkset.get(key).get(1), "INTERPRO" + SEP + "IPR006058");
382 assertEquals(linkset.get(key).get(2), "IPR006058");
383 assertEquals(linkset.get(key).get(3),
384 "http://www.ebi.ac.uk/interpro/entry/IPR006058");
386 key = "IPR012675|http://www.ebi.ac.uk/interpro/entry/IPR012675";
387 assertTrue(linkset.containsKey(key));
388 assertEquals(linkset.get(key).get(0), "INTERPRO");
389 assertEquals(linkset.get(key).get(1), "INTERPRO" + SEP + "IPR012675");
390 assertEquals(linkset.get(key).get(2), "IPR012675");
391 assertEquals(linkset.get(key).get(3),
392 "http://www.ebi.ac.uk/interpro/entry/IPR012675");
394 // Test where there are no matching dbrefs for the link
395 ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION + DELIM
397 linkset = new LinkedHashMap<String, List<String>>();
398 ul.createLinksFromSeq(seq0, linkset);
399 assertTrue(linkset.isEmpty());