Clover icon

jalviewX

  1. Project Clover database Wed Oct 31 2018 15:13:58 GMT
  2. Package jalview.util

File UrlLinkTest.java

 

Code metrics

0
211
9
1
442
308
9
0.04
23.44
9
1

Classes

Class Line # Actions
UrlLinkTest 43 211 9 0
1.0100%
 

Contributing tests

This file is covered by 8 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.util;
22   
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;
29   
30    import jalview.datamodel.DBRefEntry;
31    import jalview.datamodel.DBRefSource;
32    import jalview.datamodel.Sequence;
33    import jalview.gui.JvOptionPane;
34   
35    import java.util.ArrayList;
36    import java.util.LinkedHashMap;
37    import java.util.List;
38    import java.util.Map;
39   
40    import org.testng.annotations.BeforeClass;
41    import org.testng.annotations.Test;
42   
 
43    public class UrlLinkTest
44    {
45   
 
46  1 toggle @BeforeClass(alwaysRun = true)
47    public void setUpJvOptionPane()
48    {
49  1 JvOptionPane.setInteractiveMode(false);
50  1 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
51    }
52   
53    final static String DB = "Test";
54   
55    final static String URL_PREFIX = "http://www.jalview.org/";
56   
57    final static String URL_SUFFIX = "/blah";
58   
59    final static String SEP = "|";
60   
61    final static String DELIM = "$";
62   
63    final static String REGEX_NESTED = "=/^(?:Label:)?(?:(?:gi\\|(\\d+))|([^:]+))/=";
64   
65    final static String REGEX_RUBBISH = "=/[0-9]++/=";
66   
67    /**
68    * Test URL link creation when the input string has no regex
69    */
 
70  1 toggle @Test(groups = { "Functional" })
71    public void testUrlLinkCreationNoRegex()
72    {
73    // SEQUENCE_ID
74  1 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
75    + DELIM + URL_SUFFIX);
76  1 assertEquals(DB, ul.getTarget());
77  1 assertEquals(DB, ul.getLabel());
78  1 assertEquals(URL_PREFIX, ul.getUrlPrefix());
79  1 assertEquals(URL_SUFFIX, ul.getUrlSuffix());
80  1 assertTrue(ul.isDynamic());
81  1 assertFalse(ul.usesDBAccession());
82  1 assertNull(ul.getRegexReplace());
83  1 assertTrue(ul.isValid());
84  1 assertNull(ul.getInvalidMessage());
85   
86    // DB_ACCESSION
87  1 ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION + DELIM
88    + URL_SUFFIX);
89  1 assertEquals(DB, ul.getTarget());
90  1 assertEquals(DB, ul.getLabel());
91  1 assertEquals(URL_PREFIX, ul.getUrlPrefix());
92  1 assertEquals(URL_SUFFIX, ul.getUrlSuffix());
93  1 assertTrue(ul.isDynamic());
94  1 assertTrue(ul.usesDBAccession());
95  1 assertNull(ul.getRegexReplace());
96  1 assertTrue(ul.isValid());
97  1 assertNull(ul.getInvalidMessage());
98   
99    // Not dynamic
100  1 ul = new UrlLink(DB + SEP + URL_PREFIX + URL_SUFFIX.substring(1));
101  1 assertEquals(DB, ul.getTarget());
102  1 assertEquals(DB, ul.getLabel());
103  1 assertEquals(URL_PREFIX + URL_SUFFIX.substring(1), ul.getUrlPrefix());
104  1 assertFalse(ul.isDynamic());
105  1 assertFalse(ul.usesDBAccession());
106  1 assertNull(ul.getRegexReplace());
107  1 assertTrue(ul.isValid());
108  1 assertNull(ul.getInvalidMessage());
109    }
110   
111    /**
112    * Test URL link creation when the input string has regex
113    */
 
114  1 toggle @Test(groups = { "Functional" })
115    public void testUrlLinkCreationWithRegex()
116    {
117    // SEQUENCE_ID
118  1 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
119    + REGEX_NESTED + DELIM + URL_SUFFIX);
120  1 assertEquals(DB, ul.getTarget());
121  1 assertEquals(DB, ul.getLabel());
122  1 assertEquals(URL_PREFIX, ul.getUrlPrefix());
123  1 assertEquals(URL_SUFFIX, ul.getUrlSuffix());
124  1 assertTrue(ul.isDynamic());
125  1 assertFalse(ul.usesDBAccession());
126  1 assertEquals(REGEX_NESTED.substring(2, REGEX_NESTED.length() - 2),
127    ul.getRegexReplace());
128  1 assertTrue(ul.isValid());
129  1 assertNull(ul.getInvalidMessage());
130   
131    // DB_ACCESSION
132  1 ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION
133    + REGEX_NESTED + DELIM + URL_SUFFIX);
134  1 assertEquals(DB, ul.getTarget());
135  1 assertEquals(DB, ul.getLabel());
136  1 assertEquals(URL_PREFIX, ul.getUrlPrefix());
137  1 assertEquals(URL_SUFFIX, ul.getUrlSuffix());
138  1 assertTrue(ul.isDynamic());
139  1 assertTrue(ul.usesDBAccession());
140  1 assertEquals(REGEX_NESTED.substring(2, REGEX_NESTED.length() - 2),
141    ul.getRegexReplace());
142  1 assertTrue(ul.isValid());
143  1 assertNull(ul.getInvalidMessage());
144   
145    // invalid regex
146  1 ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION
147    + REGEX_RUBBISH + DELIM + URL_SUFFIX);
148  1 assertEquals(DB, ul.getTarget());
149  1 assertEquals(DB, ul.getLabel());
150  1 assertEquals(URL_PREFIX, ul.getUrlPrefix());
151  1 assertEquals(URL_SUFFIX, ul.getUrlSuffix());
152  1 assertTrue(ul.isDynamic());
153  1 assertTrue(ul.usesDBAccession());
154  1 assertEquals(REGEX_RUBBISH.substring(2, REGEX_RUBBISH.length() - 2),
155    ul.getRegexReplace());
156  1 assertFalse(ul.isValid());
157  1 assertEquals(
158    "Invalid Regular Expression : '"
159    + REGEX_RUBBISH.substring(2, REGEX_RUBBISH.length() - 2)
160    + "'\n",
161    ul.getInvalidMessage());
162    }
163   
164    /**
165    * Test construction of link by substituting sequence id or name
166    */
 
167  1 toggle @Test(groups = { "Functional" })
168    public void testMakeUrlNoRegex()
169    {
170    // Single non-regex
171  1 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
172    + DELIM + URL_SUFFIX);
173  1 String idstring = "FER_CAPAA";
174  1 String[] urls = ul.makeUrls(idstring, true);
175   
176  1 assertEquals(2, urls.length);
177  1 assertEquals(idstring, urls[0]);
178  1 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
179   
180  1 urls = ul.makeUrls(idstring, false);
181   
182  1 assertEquals(2, urls.length);
183  1 assertEquals(idstring, urls[0]);
184  1 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
185    }
186   
187    /**
188    * Test construction of link by substituting sequence id or name using regular
189    * expression
190    */
 
191  1 toggle @Test(groups = { "Functional" })
192    public void testMakeUrlWithRegex()
193    {
194    // Unused regex
195  1 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION
196    + REGEX_NESTED + DELIM + URL_SUFFIX);
197  1 String idstring = "FER_CAPAA";
198  1 String[] urls = ul.makeUrls(idstring, true);
199   
200  1 assertEquals(2, urls.length);
201  1 assertEquals(idstring, urls[0]);
202  1 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
203  1 assertTrue(ul.isValid());
204  1 assertNull(ul.getInvalidMessage());
205   
206  1 urls = ul.makeUrls(idstring, false);
207   
208  1 assertEquals(2, urls.length);
209  1 assertEquals(idstring, urls[0]);
210  1 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
211  1 assertTrue(ul.isValid());
212  1 assertNull(ul.getInvalidMessage());
213   
214    // nested regex
215  1 idstring = "Label:gi|9234|pdb|102L|A";
216  1 urls = ul.makeUrls(idstring, true);
217   
218  1 assertEquals(2, urls.length);
219  1 assertEquals("9234", urls[0]);
220  1 assertEquals(URL_PREFIX + "9234" + URL_SUFFIX, urls[1]);
221  1 assertTrue(ul.isValid());
222  1 assertNull(ul.getInvalidMessage());
223   
224  1 urls = ul.makeUrls(idstring, false);
225   
226  1 assertEquals(2, urls.length);
227  1 assertEquals("9234", urls[0]);
228  1 assertEquals(URL_PREFIX + "9234" + URL_SUFFIX, urls[1]);
229  1 assertTrue(ul.isValid());
230  1 assertNull(ul.getInvalidMessage());
231   
232    // unmatched regex
233  1 idstring = "this does not match";
234  1 urls = ul.makeUrls(idstring, true);
235   
236  1 assertEquals(2, urls.length);
237  1 assertEquals(idstring, urls[0]);
238  1 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
239  1 assertTrue(ul.isValid());
240  1 assertNull(ul.getInvalidMessage());
241   
242  1 urls = ul.makeUrls(idstring, false);
243   
244  1 assertEquals(2, urls.length);
245  1 assertEquals(idstring, urls[0]);
246  1 assertEquals(URL_PREFIX + idstring + URL_SUFFIX, urls[1]);
247  1 assertTrue(ul.isValid());
248  1 assertNull(ul.getInvalidMessage());
249   
250    // empty idstring
251  1 idstring = "";
252  1 urls = ul.makeUrls(idstring, true);
253   
254  1 assertNull(urls);
255   
256  1 urls = ul.makeUrls(idstring, false);
257   
258  1 assertEquals(2, urls.length);
259  1 assertEquals("", urls[0]);
260  1 assertEquals(URL_PREFIX + URL_SUFFIX, urls[1]);
261  1 assertTrue(ul.isValid());
262  1 assertNull(ul.getInvalidMessage());
263    }
264   
265    /**
266    * Test creating links with null sequence
267    */
 
268  1 toggle @Test(groups = { "Functional" })
269    public void testCreateLinksFromNullSequence()
270    {
271  1 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
272    + DELIM + URL_SUFFIX);
273   
274  1 Map<String, List<String>> linkset = new LinkedHashMap<String, List<String>>();
275  1 ul.createLinksFromSeq(null, linkset);
276   
277  1 String key = DB + SEP + URL_PREFIX;
278  1 assertEquals(1, linkset.size());
279  1 assertTrue(linkset.containsKey(key));
280  1 assertEquals(DB, linkset.get(key).get(0));
281  1 assertEquals(DB, linkset.get(key).get(1));
282  1 assertEquals(null, linkset.get(key).get(2));
283  1 assertEquals(URL_PREFIX, linkset.get(key).get(3));
284    }
285   
286    /**
287    * Test creating links with non-dynamic urlLink
288    */
 
289  1 toggle @Test(groups = { "Functional" })
290    public void testCreateLinksForNonDynamic()
291    {
292  1 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + URL_SUFFIX);
293   
294  1 Map<String, List<String>> linkset = new LinkedHashMap<String, List<String>>();
295  1 ul.createLinksFromSeq(null, linkset);
296   
297  1 String key = DB + SEP + URL_PREFIX + URL_SUFFIX;
298  1 assertEquals(1, linkset.size());
299  1 assertTrue(linkset.containsKey(key));
300  1 assertEquals(DB, linkset.get(key).get(0));
301  1 assertEquals(DB, linkset.get(key).get(1));
302  1 assertEquals(null, linkset.get(key).get(2));
303  1 assertEquals(URL_PREFIX + URL_SUFFIX, linkset.get(key).get(3));
304    }
305   
306    /**
307    * Test creating links
308    */
 
309  1 toggle @Test(groups = { "Functional" })
310    public void testCreateLinksFromSequence()
311    {
312   
313    // create list of links and list of DBRefs
314  1 List<String> links = new ArrayList<String>();
315  1 List<DBRefEntry> refs = new ArrayList<DBRefEntry>();
316   
317    // links as might be added into Preferences | Connections dialog
318  1 links.add("EMBL-EBI Search | http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$"
319    + SEQUENCE_ID + "$");
320  1 links.add("UNIPROT | http://www.uniprot.org/uniprot/$" + DB_ACCESSION
321    + "$");
322  1 links.add("INTERPRO | http://www.ebi.ac.uk/interpro/entry/$"
323    + DB_ACCESSION + "$");
324   
325    // make seq0 dbrefs
326  1 refs.add(new DBRefEntry(DBRefSource.UNIPROT, "1", "P83527"));
327  1 refs.add(new DBRefEntry("INTERPRO", "1", "IPR001041"));
328  1 refs.add(new DBRefEntry("INTERPRO", "1", "IPR006058"));
329  1 refs.add(new DBRefEntry("INTERPRO", "1", "IPR012675"));
330   
331  1 Sequence seq0 = new Sequence("FER1", "AKPNGVL");
332   
333    // add all the dbrefs to the sequence
334  1 seq0.addDBRef(refs.get(0));
335  1 seq0.addDBRef(refs.get(1));
336  1 seq0.addDBRef(refs.get(2));
337  1 seq0.addDBRef(refs.get(3));
338  1 seq0.createDatasetSequence();
339   
340    // Test where link takes a sequence id as replacement
341  1 UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
342    + DELIM + URL_SUFFIX);
343   
344  1 Map<String, List<String>> linkset = new LinkedHashMap<String, List<String>>();
345  1 ul.createLinksFromSeq(seq0, linkset);
346   
347  1 String key = seq0.getName() + SEP + URL_PREFIX + seq0.getName()
348    + URL_SUFFIX;
349  1 assertEquals(1, linkset.size());
350  1 assertTrue(linkset.containsKey(key));
351  1 assertEquals(DB, linkset.get(key).get(0));
352  1 assertEquals(DB, linkset.get(key).get(1));
353  1 assertEquals(seq0.getName(), linkset.get(key).get(2));
354  1 assertEquals(URL_PREFIX + seq0.getName() + URL_SUFFIX, linkset.get(key)
355    .get(3));
356   
357    // Test where link takes a db annotation id and only has one dbref
358  1 ul = new UrlLink(links.get(1));
359  1 linkset = new LinkedHashMap<String, List<String>>();
360  1 ul.createLinksFromSeq(seq0, linkset);
361   
362  1 key = "P83527|http://www.uniprot.org/uniprot/P83527";
363  1 assertEquals(linkset.size(), 1);
364  1 assertTrue(linkset.containsKey(key));
365  1 assertEquals(DBRefSource.UNIPROT, linkset.get(key).get(0));
366  1 assertEquals(DBRefSource.UNIPROT + SEP + "P83527", linkset.get(key)
367    .get(1));
368  1 assertEquals("P83527", linkset.get(key).get(2));
369  1 assertEquals("http://www.uniprot.org/uniprot/P83527", linkset.get(key)
370    .get(3));
371   
372    // Test where link takes a db annotation id and has multiple dbrefs
373  1 ul = new UrlLink(links.get(2));
374  1 linkset = new LinkedHashMap<String, List<String>>();
375  1 ul.createLinksFromSeq(seq0, linkset);
376  1 assertEquals(3, linkset.size());
377   
378    // check each link made it in correctly
379  1 key = "IPR001041|http://www.ebi.ac.uk/interpro/entry/IPR001041";
380  1 assertTrue(linkset.containsKey(key));
381  1 assertEquals("INTERPRO", linkset.get(key).get(0));
382  1 assertEquals("INTERPRO" + SEP + "IPR001041", linkset.get(key).get(1));
383  1 assertEquals("IPR001041", linkset.get(key).get(2));
384  1 assertEquals("http://www.ebi.ac.uk/interpro/entry/IPR001041", linkset
385    .get(key).get(3));
386   
387  1 key = "IPR006058|http://www.ebi.ac.uk/interpro/entry/IPR006058";
388  1 assertTrue(linkset.containsKey(key));
389  1 assertEquals("INTERPRO", linkset.get(key).get(0));
390  1 assertEquals("INTERPRO" + SEP + "IPR006058", linkset.get(key).get(1));
391  1 assertEquals("IPR006058", linkset.get(key).get(2));
392  1 assertEquals("http://www.ebi.ac.uk/interpro/entry/IPR006058", linkset
393    .get(key).get(3));
394   
395  1 key = "IPR012675|http://www.ebi.ac.uk/interpro/entry/IPR012675";
396  1 assertTrue(linkset.containsKey(key));
397  1 assertEquals("INTERPRO", linkset.get(key).get(0));
398  1 assertEquals("INTERPRO" + SEP + "IPR012675", linkset.get(key).get(1));
399  1 assertEquals("IPR012675", linkset.get(key).get(2));
400  1 assertEquals("http://www.ebi.ac.uk/interpro/entry/IPR012675", linkset
401    .get(key).get(3));
402   
403    // Test where there are no matching dbrefs for the link
404  1 ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION + DELIM
405    + URL_SUFFIX);
406  1 linkset = new LinkedHashMap<String, List<String>>();
407  1 ul.createLinksFromSeq(seq0, linkset);
408  1 assertTrue(linkset.isEmpty());
409    }
410   
411    /**
412    * Test links where label and target are both included
413    */
 
414  1 toggle @Test(groups = { "Functional" })
415    public void testLinksWithTargets()
416    {
417  1 UrlLink ul = new UrlLink(
418    "Protein Data Bank | http://www.identifiers.org/pdb/$"
419    + DB_ACCESSION + "$" + " | pdb");
420   
421  1 assertEquals("Protein Data Bank", ul.getLabel());
422  1 assertEquals("pdb", ul.getTarget());
423  1 assertEquals("http://www.identifiers.org/pdb/$" + DB_ACCESSION + "$",
424    ul.getUrlWithToken());
425   
426  1 assertEquals("Protein Data Bank|http://www.identifiers.org/pdb/$"
427    + DB_ACCESSION + "$" + "|pdb", ul.toStringWithTarget());
428   
429  1 ul = new UrlLink("Protein Data Bank",
430    "http://www.identifiers.org/pdb/$" + DB_ACCESSION + "$", "pdb");
431   
432  1 assertEquals("Protein Data Bank", ul.getLabel());
433  1 assertEquals("pdb", ul.getTarget());
434  1 assertEquals("http://www.identifiers.org/pdb/$" + DB_ACCESSION + "$",
435    ul.getUrlWithToken());
436   
437  1 assertEquals("Protein Data Bank|http://www.identifiers.org/pdb/$"
438    + DB_ACCESSION + "$" + "|pdb", ul.toStringWithTarget());
439   
440    }
441   
442    }