+ /**
+ * Test creating links with null sequence
+ */
+ @Test(groups = { "Functional" })
+ public void testCreateLinksFromNullSequence()
+ {
+ UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
+ + DELIM + URL_SUFFIX);
+
+ Map<String, List<String>> linkset = new LinkedHashMap<>();
+ ul.createLinksFromSeq(null, linkset);
+
+ String key = DB + SEP + URL_PREFIX;
+ assertEquals(1, linkset.size());
+ assertTrue(linkset.containsKey(key));
+ assertEquals(DB, linkset.get(key).get(0));
+ assertEquals(DB, linkset.get(key).get(1));
+ assertEquals(null, linkset.get(key).get(2));
+ assertEquals(URL_PREFIX, linkset.get(key).get(3));
+ }
+
+ /**
+ * Test creating links with non-dynamic urlLink
+ */
+ @Test(groups = { "Functional" })
+ public void testCreateLinksForNonDynamic()
+ {
+ UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + URL_SUFFIX);
+
+ Map<String, List<String>> linkset = new LinkedHashMap<>();
+ ul.createLinksFromSeq(null, linkset);
+
+ String key = DB + SEP + URL_PREFIX + URL_SUFFIX;
+ assertEquals(1, linkset.size());
+ assertTrue(linkset.containsKey(key));
+ assertEquals(DB, linkset.get(key).get(0));
+ assertEquals(DB, linkset.get(key).get(1));
+ assertEquals(null, linkset.get(key).get(2));
+ assertEquals(URL_PREFIX + URL_SUFFIX, linkset.get(key).get(3));
+ }
+
+ /**
+ * Test creating links
+ */
+ @Test(groups = { "Functional" })
+ public void testCreateLinksFromSequence()
+ {
+
+ // create list of links and list of DBRefs
+ List<String> links = new ArrayList<>();
+ List<DBRefEntry> refs = new ArrayList<>();
+
+ // links as might be added into Preferences | Connections dialog
+ links.add("EMBL-EBI Search | http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$"
+ + SEQUENCE_ID + "$");
+ links.add("UNIPROT | http://www.uniprot.org/uniprot/$" + DB_ACCESSION
+ + "$");
+ links.add("INTERPRO | http://www.ebi.ac.uk/interpro/entry/$"
+ + DB_ACCESSION + "$");
+
+ // make seq0 dbrefs
+ refs.add(new DBRefEntry(DBRefSource.UNIPROT, "1", "P83527"));
+ refs.add(new DBRefEntry("INTERPRO", "1", "IPR001041"));
+ refs.add(new DBRefEntry("INTERPRO", "1", "IPR006058"));
+ refs.add(new DBRefEntry("INTERPRO", "1", "IPR012675"));
+
+ Sequence seq0 = new Sequence("FER1", "AKPNGVL");
+
+ // add all the dbrefs to the sequence
+ seq0.addDBRef(refs.get(0));
+ seq0.addDBRef(refs.get(1));
+ seq0.addDBRef(refs.get(2));
+ seq0.addDBRef(refs.get(3));
+ seq0.createDatasetSequence();
+
+ // Test where link takes a sequence id as replacement
+ UrlLink ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + SEQUENCE_ID
+ + DELIM + URL_SUFFIX);
+
+ Map<String, List<String>> linkset = new LinkedHashMap<>();
+ ul.createLinksFromSeq(seq0, linkset);
+
+ String key = seq0.getName() + SEP + URL_PREFIX + seq0.getName()
+ + URL_SUFFIX;
+ assertEquals(1, linkset.size());
+ assertTrue(linkset.containsKey(key));
+ assertEquals(DB, linkset.get(key).get(0));
+ assertEquals(DB, linkset.get(key).get(1));
+ assertEquals(seq0.getName(), linkset.get(key).get(2));
+ assertEquals(URL_PREFIX + seq0.getName() + URL_SUFFIX, linkset.get(key)
+ .get(3));
+
+ // Test where link takes a db annotation id and only has one dbref
+ ul = new UrlLink(links.get(1));
+ linkset = new LinkedHashMap<>();
+ ul.createLinksFromSeq(seq0, linkset);
+
+ key = "P83527|http://www.uniprot.org/uniprot/P83527";
+ assertEquals(linkset.size(), 1);
+ assertTrue(linkset.containsKey(key));
+ assertEquals(DBRefSource.UNIPROT, linkset.get(key).get(0));
+ assertEquals(DBRefSource.UNIPROT + SEP + "P83527", linkset.get(key)
+ .get(1));
+ assertEquals("P83527", linkset.get(key).get(2));
+ assertEquals("http://www.uniprot.org/uniprot/P83527", linkset.get(key)
+ .get(3));
+
+ // Test where link takes a db annotation id and has multiple dbrefs
+ ul = new UrlLink(links.get(2));
+ linkset = new LinkedHashMap<>();
+ ul.createLinksFromSeq(seq0, linkset);
+ assertEquals(3, linkset.size());
+
+ // check each link made it in correctly
+ key = "IPR001041|http://www.ebi.ac.uk/interpro/entry/IPR001041";
+ assertTrue(linkset.containsKey(key));
+ assertEquals("INTERPRO", linkset.get(key).get(0));
+ assertEquals("INTERPRO" + SEP + "IPR001041", linkset.get(key).get(1));
+ assertEquals("IPR001041", linkset.get(key).get(2));
+ assertEquals("http://www.ebi.ac.uk/interpro/entry/IPR001041", linkset
+ .get(key).get(3));
+
+ key = "IPR006058|http://www.ebi.ac.uk/interpro/entry/IPR006058";
+ assertTrue(linkset.containsKey(key));
+ assertEquals("INTERPRO", linkset.get(key).get(0));
+ assertEquals("INTERPRO" + SEP + "IPR006058", linkset.get(key).get(1));
+ assertEquals("IPR006058", linkset.get(key).get(2));
+ assertEquals("http://www.ebi.ac.uk/interpro/entry/IPR006058", linkset
+ .get(key).get(3));
+
+ key = "IPR012675|http://www.ebi.ac.uk/interpro/entry/IPR012675";
+ assertTrue(linkset.containsKey(key));
+ assertEquals("INTERPRO", linkset.get(key).get(0));
+ assertEquals("INTERPRO" + SEP + "IPR012675", linkset.get(key).get(1));
+ assertEquals("IPR012675", linkset.get(key).get(2));
+ assertEquals("http://www.ebi.ac.uk/interpro/entry/IPR012675", linkset
+ .get(key).get(3));
+
+ // Test where there are no matching dbrefs for the link
+ ul = new UrlLink(DB + SEP + URL_PREFIX + DELIM + DB_ACCESSION + DELIM
+ + URL_SUFFIX);
+ linkset = new LinkedHashMap<>();
+ ul.createLinksFromSeq(seq0, linkset);
+ assertTrue(linkset.isEmpty());
+ }
+
+ /**
+ * Test links where label and target are both included
+ */
+ @Test(groups = { "Functional" })
+ public void testLinksWithTargets()
+ {
+ UrlLink ul = new UrlLink(
+ "Protein Data Bank | http://www.identifiers.org/pdb/$"
+ + DB_ACCESSION + "$" + " | pdb");
+
+ assertEquals("Protein Data Bank", ul.getLabel());
+ assertEquals("pdb", ul.getTarget());
+ assertEquals("http://www.identifiers.org/pdb/$" + DB_ACCESSION + "$",
+ ul.getUrlWithToken());
+
+ assertEquals("Protein Data Bank|http://www.identifiers.org/pdb/$"
+ + DB_ACCESSION + "$" + "|pdb", ul.toStringWithTarget());
+
+ ul = new UrlLink("Protein Data Bank",
+ "http://www.identifiers.org/pdb/$" + DB_ACCESSION + "$", "pdb");
+
+ assertEquals("Protein Data Bank", ul.getLabel());
+ assertEquals("pdb", ul.getTarget());
+ assertEquals("http://www.identifiers.org/pdb/$" + DB_ACCESSION + "$",
+ ul.getUrlWithToken());
+
+ assertEquals("Protein Data Bank|http://www.identifiers.org/pdb/$"
+ + DB_ACCESSION + "$" + "|pdb", ul.toStringWithTarget());
+
+ }
+
+ @Test(groups = { "Functional" })
+ public void testLinkComparator()
+ {
+ Comparator<String> c = UrlLink.LINK_COMPARATOR;
+ assertEquals(0, c.compare(null, null));
+ assertEquals(0, c.compare(null, "x"));
+ assertEquals(0, c.compare("y", null));
+
+ /*
+ * SEQUENCE_ID templates should come before DB_ACCESSION templates
+ */
+ String dbRefUrl = "Cath|http://www.cathdb.info/version/v4_2_0/superfamily/$DB_ACCESSION$";
+ String seqIdUrl = "EBI|https://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$";
+ assertTrue(c.compare(seqIdUrl, dbRefUrl) < 0);
+ assertTrue(c.compare(dbRefUrl, seqIdUrl) > 0);
+
+ String interpro = "Interpro|https://www.ebi.ac.uk/interpro/entry/$DB_ACCESSION$";
+ String prosite = "ProSite|https://prosite.expasy.org/PS00197";
+ assertTrue(c.compare(interpro, prosite) < 0);
+ assertTrue(c.compare(prosite, interpro) > 0);
+ }