--- /dev/null
+package jalview.gui;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
+import jalview.io.AppletFormatAdapter;
+import jalview.util.MessageManager;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JMenuItem;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class PopupMenuTest
+{
+ // 4 sequences x 13 positions
+ final static String TEST_DATA = ">FER_CAPAA Ferredoxin\n"
+ + "TIETHKEAELVG-\n"
+ + ">FER_CAPAN Ferredoxin, chloroplast precursor\n"
+ + "TIETHKEAELVG-\n"
+ + ">FER1_SOLLC Ferredoxin-1, chloroplast precursor\n"
+ + "TIETHKEEELTA-\n" + ">Q93XJ9_SOLTU Ferredoxin I precursor\n"
+ + "TIETHKEEELTA-\n";
+
+ AlignmentI alignment;
+
+ AlignmentPanel parentPanel;
+
+ PopupMenu testee = null;
+
+ @Before
+ public void setUp() throws IOException
+ {
+ alignment = new jalview.io.FormatAdapter().readFile(TEST_DATA,
+ AppletFormatAdapter.PASTE, "FASTA");
+ AlignFrame af = new AlignFrame(alignment, 700, 500);
+ parentPanel = new AlignmentPanel(af, af.getViewport());
+ testee = new PopupMenu(parentPanel, null, null);
+ int i = 0;
+ for (SequenceI seq : alignment.getSequences())
+ {
+ final AlignmentAnnotation annotation = new AlignmentAnnotation("label" + i,
+ "desc" + i, i);
+ annotation.setCalcId("calcId" + i);
+ seq.addAlignmentAnnotation(annotation);
+ annotation.setSequenceRef(seq);
+ }
+ }
+
+ @Test
+ 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);
+ assertFalse(menu.isEnabled());
+ }
+
+ /**
+ * Test building the 'add reference annotations' menu for the case where there
+ * are no reference annotations to add to the alignment. The menu item should
+ * be disabled.
+ */
+ @Test
+ 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();
+
+ testee.configureReferenceAnnotationsMenu(menu, seqs);
+ assertFalse(menu.isEnabled());
+ }
+
+ /**
+ * Test building the 'add reference annotations' menu for the case where all
+ * reference annotations are already on the alignment. The menu item should be
+ * disabled.
+ */
+ @Test
+ public void testConfigureReferenceAnnotationsMenu_alreadyAdded()
+ {
+ JMenuItem menu = new JMenuItem();
+ List<SequenceI> seqs = new ArrayList<SequenceI>();
+
+ 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());
+ }
+
+ /**
+ * Test building the 'add reference annotations' menu for the case where
+ * several reference annotations are on the dataset but not on the sequences.
+ * The menu item should be enabled, and acquire a tooltip which lists the
+ * annotation sources (calcIds) and type (labels).
+ */
+ @Test
+ public void testConfigureReferenceAnnotationsMenu()
+ {
+ JMenuItem menu = new JMenuItem();
+ List<SequenceI> seqs = new ArrayList<SequenceI>();
+
+ seqs = parentPanel.getAlignment().getSequences();
+ // make up new annotations and add to dataset sequences
+
+ // PDB.secondary structure on Sequence0
+ AlignmentAnnotation annotation = new AlignmentAnnotation(
+ "secondary structure", "", 0);
+ annotation.setCalcId("PBD");
+ seqs.get(0).getDatasetSequence().addAlignmentAnnotation(annotation);
+
+ // PDB.Temp on Sequence1
+ annotation = new AlignmentAnnotation("Temp", "", 0);
+ annotation.setCalcId("PBD");
+ seqs.get(1).getDatasetSequence().addAlignmentAnnotation(annotation);
+
+ // JMOL.secondary structure on Sequence0
+ annotation = new AlignmentAnnotation("secondary structure", "", 0);
+ annotation.setCalcId("JMOL");
+ seqs.get(0).getDatasetSequence().addAlignmentAnnotation(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());
+ }
+}