import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
+import jalview.bin.Cache;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.Annotation;
import jalview.datamodel.DBRefSource;
import jalview.datamodel.HiddenColumns;
import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
import jalview.io.DataSourceType;
import jalview.io.FileFormat;
import jalview.io.FormatAdapter;
+import jalview.urls.api.UrlProviderFactoryI;
+import jalview.urls.desktop.DesktopUrlProviderFactory;
import jalview.util.MessageManager;
+import jalview.util.UrlConstants;
import java.awt.Component;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@BeforeMethod(alwaysRun = true)
public void setUp() throws IOException
{
+ Cache.loadProperties("test/jalview/io/testProps.jvprops");
+ String inMenuString = ("EMBL-EBI Search | http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$"
+ + SEQUENCE_ID
+ + "$"
+ + "|"
+ + "UNIPROT | http://www.uniprot.org/uniprot/$" + DB_ACCESSION + "$")
+ + "|"
+ + ("INTERPRO | http://www.ebi.ac.uk/interpro/entry/$"
+ + DB_ACCESSION + "$")
+ + "|"
+ +
+ // Gene3D entry tests for case (in)sensitivity
+ ("Gene3D | http://gene3d.biochem.ucl.ac.uk/Gene3D/search?sterm=$"
+ + DB_ACCESSION + "$&mode=protein");
+
+ UrlProviderFactoryI factory = new DesktopUrlProviderFactory(
+ UrlConstants.DEFAULT_LABEL, inMenuString, "");
+ Preferences.sequenceUrlLinks = factory.createUrlProvider();
+
alignment = new FormatAdapter().readFile(TEST_DATA,
DataSourceType.PASTE, FileFormat.Fasta);
AlignFrame af = new AlignFrame(alignment, 700, 500);
testee.configureReferenceAnnotationsMenu(menu, seqs);
assertTrue(menu.isEnabled());
String s = MessageManager.getString("label.add_annotations_for");
- String expected = "<html><style> p.ttip {width: 350; text-align: justify; word-wrap: break-word;}</style><p class=\"ttip\">"
- + s + "<br/>Jmol/secondary structure<br/>PDB/Temp</p></html>";
+ // String expected = "<html><style> p.ttip {width: 350; text-align: justify;
+ // word-wrap: break-word;}</style><p class=\"ttip\">"
+ // + s + "<br/>Jmol/secondary structure<br/>PDB/Temp</p></html>";
+ String expected = JvSwingUtils.HTML_PREFIX + s
+ + "<br/>Jmol/secondary structure<br/>PDB/Temp</div></html>";
assertEquals(expected, menu.getToolTipText());
}
testee.configureReferenceAnnotationsMenu(menu, seqs);
assertTrue(menu.isEnabled());
String s = MessageManager.getString("label.add_annotations_for");
- String expected = "<html><style> p.ttip {width: 350; text-align: justify; word-wrap: break-word;}</style><p class=\"ttip\">"
- + s + "<br/>Jmol/secondary structure<br/>PDB/Temp</p></html>";
+ // String expected = "<html><style> p.ttip {width: 350; text-align: justify;
+ // word-wrap: break-word;}</style><p class=\"ttip\">"
+ // + s + "<br/>Jmol/secondary structure<br/>PDB/Temp</p></html>";
+ String expected = JvSwingUtils.HTML_PREFIX
+ + "Add annotations for<br/>Jmol/secondary structure<br/>PDB/Temp</div></html>";
assertEquals(expected, menu.getToolTipText());
}
}
/**
- * Test for adding feature links
+ * Test for adding sequence id, dbref and feature links
*/
@Test(groups = { "Functional" })
- public void testAddFeatureLinks()
+ public void testBuildLinkMenu()
{
- // sequences from the alignment
List<SequenceI> seqs = parentPanel.getAlignment().getSequences();
-
- // 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 + "$");
- // Gene3D entry tests for case (in)sensitivity
- links.add("Gene3D | http://gene3d.biochem.ucl.ac.uk/Gene3D/search?sterm=$"
- + DB_ACCESSION + "$&mode=protein");
-
- // 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"));
-
- // make seq1 dbrefs
- refs.add(new DBRefEntry(DBRefSource.UNIPROT, "1", "Q9ZTS2"));
- refs.add(new DBRefEntry("GENE3D", "1", "3.10.20.30"));
-
- // add all the dbrefs to the sequences: Uniprot 1 each, Interpro all 3 to
- // seq0, Gene3D to seq1
- seqs.get(0).addDBRef(refs.get(0));
-
- seqs.get(0).addDBRef(refs.get(1));
- seqs.get(0).addDBRef(refs.get(2));
- seqs.get(0).addDBRef(refs.get(3));
-
- seqs.get(1).addDBRef(refs.get(4));
- seqs.get(1).addDBRef(refs.get(5));
+ final SequenceI seq0 = seqs.get(0);
+ final SequenceI seq1 = seqs.get(1);
+ final List<SequenceFeature> noFeatures = Collections
+ .<SequenceFeature> emptyList();
+ final String linkText = MessageManager.getString("action.link");
+
+ seq0.addDBRef(new DBRefEntry(DBRefSource.UNIPROT, "1", "P83527"));
+ seq0.addDBRef(new DBRefEntry("INTERPRO", "1", "IPR001041"));
+ seq0.addDBRef(new DBRefEntry("INTERPRO", "1", "IPR012675"));
+ seq0.addDBRef(new DBRefEntry("INTERPRO", "1", "IPR006058"));
+ seq1.addDBRef(new DBRefEntry(DBRefSource.UNIPROT, "1", "Q9ZTS2"));
+ seq1.addDBRef(new DBRefEntry("GENE3D", "1", "3.10.20.30"));
- // get the Popup Menu for first sequence
- testee = new PopupMenu(parentPanel, (Sequence) seqs.get(0), links);
- Component[] seqItems = testee.sequenceMenu.getMenuComponents();
- JMenu linkMenu = (JMenu) seqItems[6];
+ /*
+ * check the Link Menu for the first sequence
+ */
+ JMenu linkMenu = PopupMenu.buildLinkMenu(seq0, noFeatures);
+ assertEquals(linkText, linkMenu.getText());
Component[] linkItems = linkMenu.getMenuComponents();
- // check the number of links are the expected number
+ /*
+ * menu items are ordered: SEQUENCE_ID search first, then dbrefs in order
+ * of database name (and within that by order of dbref addition)
+ */
assertEquals(5, linkItems.length);
-
- // first entry is EMBL-EBI which just uses sequence id not accession id?
assertEquals("EMBL-EBI Search", ((JMenuItem) linkItems[0]).getText());
+ assertEquals("INTERPRO|IPR001041",
+ ((JMenuItem) linkItems[1]).getText());
+ assertEquals("INTERPRO|IPR012675",
+ ((JMenuItem) linkItems[2]).getText());
+ assertEquals("INTERPRO|IPR006058",
+ ((JMenuItem) linkItems[3]).getText());
+ assertEquals("UNIPROT|P83527", ((JMenuItem) linkItems[4]).getText());
- // sequence id for each link should match corresponding DB accession id
- for (int i = 1; i < 4; i++)
- {
- assertEquals(refs.get(i - 1).getSource(), ((JMenuItem) linkItems[i])
- .getText().split("\\|")[0]);
- assertEquals(refs.get(i - 1).getAccessionId(),
- ((JMenuItem) linkItems[i])
- .getText().split("\\|")[1]);
- }
-
- // get the Popup Menu for second sequence
- testee = new PopupMenu(parentPanel, (Sequence) seqs.get(1), links);
- seqItems = testee.sequenceMenu.getMenuComponents();
- linkMenu = (JMenu) seqItems[6];
+ /*
+ * check the Link Menu for the second sequence
+ * note dbref GENE3D is matched to link Gene3D, the latter is displayed
+ */
+ linkMenu = PopupMenu.buildLinkMenu(seq1, noFeatures);
+ assertEquals(linkText, linkMenu.getText());
linkItems = linkMenu.getMenuComponents();
-
- // check the number of links are the expected number
assertEquals(3, linkItems.length);
-
- // first entry is EMBL-EBI which just uses sequence id not accession id?
assertEquals("EMBL-EBI Search", ((JMenuItem) linkItems[0]).getText());
+ assertEquals("Gene3D|3.10.20.30", ((JMenuItem) linkItems[1]).getText());
+ assertEquals("UNIPROT|Q9ZTS2", ((JMenuItem) linkItems[2]).getText());
- // sequence id for each link should match corresponding DB accession id
- for (int i = 1; i < 3; i++)
- {
- assertEquals(refs.get(i + 3).getSource(), ((JMenuItem) linkItems[i])
- .getText().split("\\|")[0].toUpperCase());
- assertEquals(refs.get(i + 3).getAccessionId(),
- ((JMenuItem) linkItems[i]).getText().split("\\|")[1]);
- }
-
- // if there are no valid links the Links submenu is disabled
- List<String> nomatchlinks = new ArrayList<>();
- nomatchlinks.add("NOMATCH | http://www.uniprot.org/uniprot/$"
- + DB_ACCESSION + "$");
-
- testee = new PopupMenu(parentPanel, (Sequence) seqs.get(0),
- nomatchlinks);
- seqItems = testee.sequenceMenu.getMenuComponents();
- linkMenu = (JMenu) seqItems[6];
- assertFalse(linkMenu.isEnabled());
-
+ /*
+ * if there are no valid links the Links submenu is still shown, but
+ * reduced to the EMBL-EBI lookup only (inserted by
+ * CustomUrlProvider.choosePrimaryUrl())
+ */
+ String unmatched = "NOMATCH|http://www.uniprot.org/uniprot/$"
+ + DB_ACCESSION + "$";
+ UrlProviderFactoryI factory = new DesktopUrlProviderFactory(null,
+ unmatched, "");
+ Preferences.sequenceUrlLinks = factory.createUrlProvider();
+
+ linkMenu = PopupMenu.buildLinkMenu(seq1, noFeatures);
+ assertEquals(linkText, linkMenu.getText());
+ linkItems = linkMenu.getMenuComponents();
+ assertEquals(1, linkItems.length);
+ assertEquals("EMBL-EBI Search", ((JMenuItem) linkItems[0]).getText());
}
- /**
- * Test for adding feature links
- */
@Test(groups = { "Functional" })
public void testHideInsertions()
{
.revealAllHiddenColumns(sel);
// get the Popup Menu for 7th sequence - no insertions
- testee = new PopupMenu(parentPanel, (Sequence) seqs.get(7), null);
+ testee = new PopupMenu(parentPanel, seqs.get(7), null);
testee.hideInsertions_actionPerformed(null);
HiddenColumns hidden = parentPanel.av.getAlignment().getHiddenColumns();
assertFalse(it.hasNext());
// get the Popup Menu for GappySeq - this time we have insertions
- testee = new PopupMenu(parentPanel, (Sequence) seqs.get(4), null);
+ testee = new PopupMenu(parentPanel, seqs.get(4), null);
testee.hideInsertions_actionPerformed(null);
hidden = parentPanel.av.getAlignment().getHiddenColumns();
it = hidden.iterator();
hidden.hideColumns(31, 40);
// get the Popup Menu for LessGappySeq in the sequence group
- testee = new PopupMenu(parentPanel, (Sequence) seqs.get(5), null);
+ testee = new PopupMenu(parentPanel, seqs.get(5), null);
testee.hideInsertions_actionPerformed(null);
hidden = parentPanel.av.getAlignment().getHiddenColumns();
it = hidden.iterator();