package jalview.gui;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
import jalview.datamodel.SequenceI;
import jalview.io.AppletFormatAdapter;
-import jalview.util.MessageManager;
+import jalview.io.FormatAdapter;
+import java.awt.Component;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import javax.swing.JMenu;
import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.JSeparator;
-import org.junit.Before;
-import org.junit.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
public class PopupMenuTest
{
PopupMenu testee = null;
- @Before
+ @BeforeMethod
public void setUp() throws IOException
{
- alignment = new jalview.io.FormatAdapter().readFile(TEST_DATA,
+ alignment = new FormatAdapter().readFile(TEST_DATA,
AppletFormatAdapter.PASTE, "FASTA");
AlignFrame af = new AlignFrame(alignment, 700, 500);
parentPanel = new AlignmentPanel(af, af.getViewport());
}
}
- @Test
+ @Test(groups ={ "Functional" })
public void testConfigureReferenceAnnotationsMenu_noSequenceSelected()
{
JMenuItem menu = new JMenuItem();
List<SequenceI> seqs = new ArrayList<SequenceI>();
testee.configureReferenceAnnotationsMenu(menu, seqs);
assertFalse(menu.isEnabled());
- assertEquals(
- MessageManager.getString("label.add_reference_annotations"),
- menu.getText());
// now try null list
menu.setEnabled(true);
- testee.configureReferenceAnnotationsMenu(menu, seqs);
+ testee.configureReferenceAnnotationsMenu(menu, null);
assertFalse(menu.isEnabled());
}
* are no reference annotations to add to the alignment. The menu item should
* be disabled.
*/
- @Test
+ @Test(groups ={ "Functional" })
public void testConfigureReferenceAnnotationsMenu_noReferenceAnnotations()
{
JMenuItem menu = new JMenuItem();
- List<SequenceI> seqs = new ArrayList<SequenceI>();
/*
* Initial state is that sequences have annotations, and have dataset
* sequences, but the dataset sequences have no annotations. Hence nothing
* to add.
*/
- seqs = parentPanel.getAlignment().getSequences();
+ List<SequenceI> seqs = parentPanel.getAlignment().getSequences();
testee.configureReferenceAnnotationsMenu(menu, seqs);
assertFalse(menu.isEnabled());
* reference annotations are already on the alignment. The menu item should be
* disabled.
*/
- @Test
+ @Test(groups ={ "Functional" })
public void testConfigureReferenceAnnotationsMenu_alreadyAdded()
{
JMenuItem menu = new JMenuItem();
- List<SequenceI> seqs = new ArrayList<SequenceI>();
+ List<SequenceI> seqs = parentPanel.getAlignment().getSequences();
+
+ // make up new annotations and add to dataset sequences, sequences and
+ // alignment
+ attachReferenceAnnotations(seqs, true, true);
- seqs = parentPanel.getAlignment().getSequences();
- // copy annotation from sequence to dataset
- seqs.get(1).getDatasetSequence()
- .addAlignmentAnnotation(seqs.get(1).getAnnotation()[0]);
testee.configureReferenceAnnotationsMenu(menu, seqs);
assertFalse(menu.isEnabled());
}
* The menu item should be enabled, and acquire a tooltip which lists the
* annotation sources (calcIds) and type (labels).
*/
- @Test
+ @Test(groups ={ "Functional" })
public void testConfigureReferenceAnnotationsMenu()
{
JMenuItem menu = new JMenuItem();
- List<SequenceI> seqs = new ArrayList<SequenceI>();
+ List<SequenceI> seqs = parentPanel.getAlignment().getSequences();
- 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 expected = "<html><table width=350 border=0><tr><td align=justify>Add annotations for<br/>JMOL/secondary structure<br/>PBD/Temp</td></tr></table></html>";
+ 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<SequenceI> 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 expected = "<html><table width=350 border=0><tr><td align=justify>Add annotations for<br/>JMOL/secondary structure<br/>PBD/Temp</td></tr></table></html>";
+ 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<SequenceI> seqs,
+ boolean addToSequence, boolean addToAlignment)
+ {
// PDB.secondary structure on Sequence0
AlignmentAnnotation annotation = new AlignmentAnnotation(
"secondary structure", "", 0);
annotation.setCalcId("PBD");
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("PBD");
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);
+ }
+ }
- testee.configureReferenceAnnotationsMenu(menu, seqs);
- assertTrue(menu.isEnabled());
- String expected = "<html><table width=350 border=0><tr><td>Add annotations for<br/>JMOL/secondary structure<br/>PBD/Temp</td></tr></table></html>";
- assertEquals(expected, menu.getToolTipText());
+ /**
+ * Test building the 'add reference annotations' menu for the case where there
+ * are two alignment views:
+ * <ul>
+ * <li>in one view, reference annotations have been added (are on the
+ * datasets, sequences and alignment)</li>
+ * <li>in the current view, reference annotations are on the dataset and
+ * sequence, but not the alignment</li>
+ * </ul>
+ * 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<SequenceI> 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);
+ 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<SequenceI> 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);
+ 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<SequenceI> 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);
+ 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());
}
}