seqs = parentPanel.getAlignment().getSequences();
// make up new annotations and add to dataset sequences
attachReferenceAnnotations(seqs, false, false);
testee.configureReferenceAnnotationsMenu(menu, seqs);
assertTrue(menu.isEnabled());
String s = MessageManager.getString("label.add_annotations_for");
String expected = ""
+ s + "
Jmol/secondary structure
PDB/Temp
";
assertEquals(expected, menu.getToolTipText());
}
/**
* Test building the 'add reference annotations' menu for the case where
* several reference annotations are on the dataset and the sequences but not
* on the alignment. The menu item should be enabled, and acquire a tooltip
* which lists the annotation sources (calcIds) and type (labels).
*/
@Test(groups = { "Functional" })
public void testConfigureReferenceAnnotationsMenu_notOnAlignment()
{
JMenuItem menu = new JMenuItem();
List seqs = parentPanel.getAlignment().getSequences();
// make up new annotations and add to dataset sequences and sequences
attachReferenceAnnotations(seqs, true, false);
testee.configureReferenceAnnotationsMenu(menu, seqs);
assertTrue(menu.isEnabled());
String s = MessageManager.getString("label.add_annotations_for");
String expected = ""
+ s + "
Jmol/secondary structure
PDB/Temp
";
assertEquals(expected, menu.getToolTipText());
}
/**
* Generate annotations and add to dataset sequences and (optionally)
* sequences and/or alignment
*
* @param seqs
* @param addToSequence
* @param addToAlignment
*/
private void attachReferenceAnnotations(List seqs,
boolean addToSequence, boolean addToAlignment)
{
// PDB.secondary structure on Sequence0
AlignmentAnnotation annotation = new AlignmentAnnotation(
"secondary structure", "", 0);
annotation.setCalcId("PDB");
seqs.get(0).getDatasetSequence().addAlignmentAnnotation(annotation);
if (addToSequence)
{
seqs.get(0).addAlignmentAnnotation(annotation);
}
if (addToAlignment)
{
this.alignment.addAnnotation(annotation);
}
// PDB.Temp on Sequence1
annotation = new AlignmentAnnotation("Temp", "", 0);
annotation.setCalcId("PDB");
seqs.get(1).getDatasetSequence().addAlignmentAnnotation(annotation);
if (addToSequence)
{
seqs.get(1).addAlignmentAnnotation(annotation);
}
if (addToAlignment)
{
this.alignment.addAnnotation(annotation);
}
// JMOL.secondary structure on Sequence0
annotation = new AlignmentAnnotation("secondary structure", "", 0);
annotation.setCalcId("Jmol");
seqs.get(0).getDatasetSequence().addAlignmentAnnotation(annotation);
if (addToSequence)
{
seqs.get(0).addAlignmentAnnotation(annotation);
}
if (addToAlignment)
{
this.alignment.addAnnotation(annotation);
}
}
/**
* Test building the 'add reference annotations' menu for the case where there
* are two alignment views:
*
* - in one view, reference annotations have been added (are on the
* datasets, sequences and alignment)
* - in the current view, reference annotations are on the dataset and
* sequence, but not the alignment
*
* The menu item should be enabled, and acquire a tooltip which lists the
* annotation sources (calcIds) and type (labels).
*/
@Test(groups = { "Functional" })
public void testConfigureReferenceAnnotationsMenu_twoViews()
{
}
/**
* Test for building menu options including 'show' and 'hide' annotation
* types.
*/
@Test(groups = { "Functional" })
public void testBuildAnnotationTypesMenus()
{
JMenu showMenu = new JMenu();
JMenu hideMenu = new JMenu();
List seqs = parentPanel.getAlignment().getSequences();
// make up new annotations and add to sequences and to the alignment
// PDB.secondary structure on Sequence0
AlignmentAnnotation annotation = new AlignmentAnnotation(
"secondary structure", "", new Annotation[] {});
annotation.setCalcId("PDB");
annotation.visible = true;
seqs.get(0).addAlignmentAnnotation(annotation);
parentPanel.getAlignment().addAnnotation(annotation);
// JMOL.secondary structure on Sequence0 - hidden
annotation = new AlignmentAnnotation("secondary structure", "",
new Annotation[] {});
annotation.setCalcId("JMOL");
annotation.visible = false;
seqs.get(0).addAlignmentAnnotation(annotation);
parentPanel.getAlignment().addAnnotation(annotation);
// Jpred.SSP on Sequence0 - hidden
annotation = new AlignmentAnnotation("SSP", "", new Annotation[] {});
annotation.setCalcId("JPred");
annotation.visible = false;
seqs.get(0).addAlignmentAnnotation(annotation);
parentPanel.getAlignment().addAnnotation(annotation);
// PDB.Temp on Sequence1
annotation = new AlignmentAnnotation("Temp", "", new Annotation[] {});
annotation.setCalcId("PDB");
annotation.visible = true;
seqs.get(1).addAlignmentAnnotation(annotation);
parentPanel.getAlignment().addAnnotation(annotation);
/*
* Expect menu options to show "secondary structure" and "SSP", and to hide
* "secondary structure" and "Temp". Tooltip should be calcId.
*/
testee.buildAnnotationTypesMenus(showMenu, hideMenu, seqs);
assertTrue(showMenu.isEnabled());
assertTrue(hideMenu.isEnabled());
Component[] showOptions = showMenu.getMenuComponents();
Component[] hideOptions = hideMenu.getMenuComponents();
assertEquals(4, showOptions.length); // includes 'All' and separator
assertEquals(4, hideOptions.length);
String all = MessageManager.getString("label.all");
assertEquals(all, ((JMenuItem) showOptions[0]).getText());
assertTrue(showOptions[1] instanceof JPopupMenu.Separator);
assertEquals(JSeparator.HORIZONTAL,
((JSeparator) showOptions[1]).getOrientation());
assertEquals("secondary structure",
((JMenuItem) showOptions[2]).getText());
assertEquals("JMOL", ((JMenuItem) showOptions[2]).getToolTipText());
assertEquals("SSP", ((JMenuItem) showOptions[3]).getText());
assertEquals("JPred", ((JMenuItem) showOptions[3]).getToolTipText());
assertEquals(all, ((JMenuItem) hideOptions[0]).getText());
assertTrue(hideOptions[1] instanceof JPopupMenu.Separator);
assertEquals(JSeparator.HORIZONTAL,
((JSeparator) hideOptions[1]).getOrientation());
assertEquals("secondary structure",
((JMenuItem) hideOptions[2]).getText());
assertEquals("PDB", ((JMenuItem) hideOptions[2]).getToolTipText());
assertEquals("Temp", ((JMenuItem) hideOptions[3]).getText());
assertEquals("PDB", ((JMenuItem) hideOptions[3]).getToolTipText());
}
/**
* Test for building menu options with only 'hide' annotation types enabled.
*/
@Test(groups = { "Functional" })
public void testBuildAnnotationTypesMenus_showDisabled()
{
JMenu showMenu = new JMenu();
JMenu hideMenu = new JMenu();
List seqs = parentPanel.getAlignment().getSequences();
// make up new annotations and add to sequences and to the alignment
// PDB.secondary structure on Sequence0
AlignmentAnnotation annotation = new AlignmentAnnotation(
"secondary structure", "", new Annotation[] {});
annotation.setCalcId("PDB");
annotation.visible = true;
seqs.get(0).addAlignmentAnnotation(annotation);
parentPanel.getAlignment().addAnnotation(annotation);
// PDB.Temp on Sequence1
annotation = new AlignmentAnnotation("Temp", "", new Annotation[] {});
annotation.setCalcId("PDB");
annotation.visible = true;
seqs.get(1).addAlignmentAnnotation(annotation);
parentPanel.getAlignment().addAnnotation(annotation);
/*
* Expect menu options to hide "secondary structure" and "Temp". Tooltip
* should be calcId. 'Show' menu should be disabled.
*/
testee.buildAnnotationTypesMenus(showMenu, hideMenu, seqs);
assertFalse(showMenu.isEnabled());
assertTrue(hideMenu.isEnabled());
Component[] showOptions = showMenu.getMenuComponents();
Component[] hideOptions = hideMenu.getMenuComponents();
assertEquals(2, showOptions.length); // includes 'All' and separator
assertEquals(4, hideOptions.length);
String all = MessageManager.getString("label.all");
assertEquals(all, ((JMenuItem) showOptions[0]).getText());
assertTrue(showOptions[1] instanceof JPopupMenu.Separator);
assertEquals(JSeparator.HORIZONTAL,
((JSeparator) showOptions[1]).getOrientation());
assertEquals(all, ((JMenuItem) hideOptions[0]).getText());
assertTrue(hideOptions[1] instanceof JPopupMenu.Separator);
assertEquals(JSeparator.HORIZONTAL,
((JSeparator) hideOptions[1]).getOrientation());
assertEquals("secondary structure",
((JMenuItem) hideOptions[2]).getText());
assertEquals("PDB", ((JMenuItem) hideOptions[2]).getToolTipText());
assertEquals("Temp", ((JMenuItem) hideOptions[3]).getText());
assertEquals("PDB", ((JMenuItem) hideOptions[3]).getToolTipText());
}
/**
* Test for building menu options with only 'show' annotation types enabled.
*/
@Test(groups = { "Functional" })
public void testBuildAnnotationTypesMenus_hideDisabled()
{
JMenu showMenu = new JMenu();
JMenu hideMenu = new JMenu();
List seqs = parentPanel.getAlignment().getSequences();
// make up new annotations and add to sequences and to the alignment
// PDB.secondary structure on Sequence0
AlignmentAnnotation annotation = new AlignmentAnnotation(
"secondary structure", "", new Annotation[] {});
annotation.setCalcId("PDB");
annotation.visible = false;
seqs.get(0).addAlignmentAnnotation(annotation);
parentPanel.getAlignment().addAnnotation(annotation);
// PDB.Temp on Sequence1
annotation = new AlignmentAnnotation("Temp", "", new Annotation[] {});
annotation.setCalcId("PDB2");
annotation.visible = false;
seqs.get(1).addAlignmentAnnotation(annotation);
parentPanel.getAlignment().addAnnotation(annotation);
/*
* Expect menu options to show "secondary structure" and "Temp". Tooltip
* should be calcId. 'hide' menu should be disabled.
*/
testee.buildAnnotationTypesMenus(showMenu, hideMenu, seqs);
assertTrue(showMenu.isEnabled());
assertFalse(hideMenu.isEnabled());
Component[] showOptions = showMenu.getMenuComponents();
Component[] hideOptions = hideMenu.getMenuComponents();
assertEquals(4, showOptions.length); // includes 'All' and separator
assertEquals(2, hideOptions.length);
String all = MessageManager.getString("label.all");
assertEquals(all, ((JMenuItem) showOptions[0]).getText());
assertTrue(showOptions[1] instanceof JPopupMenu.Separator);
assertEquals(JSeparator.HORIZONTAL,
((JSeparator) showOptions[1]).getOrientation());
assertEquals("secondary structure",
((JMenuItem) showOptions[2]).getText());
assertEquals("PDB", ((JMenuItem) showOptions[2]).getToolTipText());
assertEquals("Temp", ((JMenuItem) showOptions[3]).getText());
assertEquals("PDB2", ((JMenuItem) showOptions[3]).getToolTipText());
assertEquals(all, ((JMenuItem) hideOptions[0]).getText());
assertTrue(hideOptions[1] instanceof JPopupMenu.Separator);
assertEquals(JSeparator.HORIZONTAL,
((JSeparator) hideOptions[1]).getOrientation());
}
/**
* Test for adding feature links
*/
@Test(groups = { "Functional" })
public void testAddFeatureLinks()
{
// sequences from the alignment
List seqs = parentPanel.getAlignment().getSequences();
// create list of links and list of DBRefs
List links = new ArrayList();
List 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));
// 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];
Component[] linkItems = linkMenu.getMenuComponents();
// check the number of links are the expected number
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());
// 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];
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());
// 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 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());
}
}