X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fgui%2FPopupMenuTest.java;h=922d45758d1b2c784e40848d15fc3de0141716a8;hb=483e7163b1fb8d4bcb9393014816c944befce328;hp=e1f0708f4938cde53ffa6f23d4defc1d14c6e01a;hpb=001922aefa2bcf95471761473d25f4949635691c;p=jalview.git diff --git a/test/jalview/gui/PopupMenuTest.java b/test/jalview/gui/PopupMenuTest.java index e1f0708..922d457 100644 --- a/test/jalview/gui/PopupMenuTest.java +++ b/test/jalview/gui/PopupMenuTest.java @@ -1,8 +1,42 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.gui; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static jalview.util.UrlConstants.DB_ACCESSION; +import static jalview.util.UrlConstants.SEQUENCE_ID; +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.DBRefEntry; +import jalview.datamodel.DBRefSource; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; +import jalview.io.DataSourceType; +import jalview.io.FileFormat; +import jalview.io.FormatAdapter; +import jalview.util.MessageManager; import java.awt.Component; import java.io.IOException; @@ -14,18 +48,20 @@ import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JSeparator; -import org.junit.Before; -import org.junit.Test; - -import jalview.datamodel.AlignmentAnnotation; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.Annotation; -import jalview.datamodel.SequenceI; -import jalview.io.AppletFormatAdapter; -import jalview.io.FormatAdapter; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; public class PopupMenuTest { + + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + // 4 sequences x 13 positions final static String TEST_DATA = ">FER_CAPAA Ferredoxin\n" + "TIETHKEAELVG-\n" @@ -41,26 +77,26 @@ public class PopupMenuTest PopupMenu testee = null; - @Before + @BeforeMethod(alwaysRun = true) public void setUp() throws IOException { alignment = new FormatAdapter().readFile(TEST_DATA, - AppletFormatAdapter.PASTE, "FASTA"); + DataSourceType.PASTE, FileFormat.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); + final AlignmentAnnotation annotation = new AlignmentAnnotation( + "label" + i, "desc" + i, i); annotation.setCalcId("calcId" + i); seq.addAlignmentAnnotation(annotation); annotation.setSequenceRef(seq); } } - @Test + @Test(groups = { "Functional" }) public void testConfigureReferenceAnnotationsMenu_noSequenceSelected() { JMenuItem menu = new JMenuItem(); @@ -78,7 +114,7 @@ public class PopupMenuTest * 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(); @@ -99,7 +135,7 @@ public class PopupMenuTest * 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(); @@ -119,7 +155,7 @@ public class PopupMenuTest * 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(); @@ -130,7 +166,9 @@ public class PopupMenuTest testee.configureReferenceAnnotationsMenu(menu, seqs); assertTrue(menu.isEnabled()); - String expected = "
Add annotations for
JMOL/secondary structure
PBD/Temp
"; + String s = MessageManager.getString("label.add_annotations_for"); + String expected = "

" + + s + "
Jmol/secondary structure
PDB/Temp

"; assertEquals(expected, menu.getToolTipText()); } @@ -140,7 +178,7 @@ public class PopupMenuTest * on the alignment. 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_notOnAlignment() { JMenuItem menu = new JMenuItem(); @@ -151,7 +189,9 @@ public class PopupMenuTest testee.configureReferenceAnnotationsMenu(menu, seqs); assertTrue(menu.isEnabled()); - String expected = "
Add annotations for
JMOL/secondary structure
PBD/Temp
"; + String s = MessageManager.getString("label.add_annotations_for"); + String expected = "

" + + s + "
Jmol/secondary structure
PDB/Temp

"; assertEquals(expected, menu.getToolTipText()); } @@ -169,7 +209,7 @@ public class PopupMenuTest // PDB.secondary structure on Sequence0 AlignmentAnnotation annotation = new AlignmentAnnotation( "secondary structure", "", 0); - annotation.setCalcId("PBD"); + annotation.setCalcId("PDB"); seqs.get(0).getDatasetSequence().addAlignmentAnnotation(annotation); if (addToSequence) { @@ -182,7 +222,7 @@ public class PopupMenuTest // PDB.Temp on Sequence1 annotation = new AlignmentAnnotation("Temp", "", 0); - annotation.setCalcId("PBD"); + annotation.setCalcId("PDB"); seqs.get(1).getDatasetSequence().addAlignmentAnnotation(annotation); if (addToSequence) { @@ -195,7 +235,7 @@ public class PopupMenuTest // JMOL.secondary structure on Sequence0 annotation = new AlignmentAnnotation("secondary structure", "", 0); - annotation.setCalcId("JMOL"); + annotation.setCalcId("Jmol"); seqs.get(0).getDatasetSequence().addAlignmentAnnotation(annotation); if (addToSequence) { @@ -219,7 +259,7 @@ public class PopupMenuTest * 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_twoViews() { } @@ -228,7 +268,7 @@ public class PopupMenuTest * Test for building menu options including 'show' and 'hide' annotation * types. */ - @Test + @Test(groups = { "Functional" }) public void testBuildAnnotationTypesMenus() { JMenu showMenu = new JMenu(); @@ -239,32 +279,29 @@ public class PopupMenuTest // PDB.secondary structure on Sequence0 AlignmentAnnotation annotation = new AlignmentAnnotation( - "secondary structure", "", new Annotation[] - {}); + "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 = 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 = 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 = new AlignmentAnnotation("Temp", "", new Annotation[] {}); annotation.setCalcId("PDB"); annotation.visible = true; seqs.get(1).addAlignmentAnnotation(annotation); @@ -284,8 +321,7 @@ public class PopupMenuTest assertEquals(4, showOptions.length); // includes 'All' and separator assertEquals(4, hideOptions.length); - assertEquals("All", - ((JMenuItem) showOptions[0]).getText()); + assertEquals("All", ((JMenuItem) showOptions[0]).getText()); assertTrue(showOptions[1] instanceof JPopupMenu.Separator); assertEquals(JSeparator.HORIZONTAL, ((JSeparator) showOptions[1]).getOrientation()); @@ -295,8 +331,7 @@ public class PopupMenuTest assertEquals("SSP", ((JMenuItem) showOptions[3]).getText()); assertEquals("JPred", ((JMenuItem) showOptions[3]).getToolTipText()); - assertEquals("All", - ((JMenuItem) hideOptions[0]).getText()); + assertEquals("All", ((JMenuItem) hideOptions[0]).getText()); assertTrue(hideOptions[1] instanceof JPopupMenu.Separator); assertEquals(JSeparator.HORIZONTAL, ((JSeparator) hideOptions[1]).getOrientation()); @@ -310,7 +345,7 @@ public class PopupMenuTest /** * Test for building menu options with only 'hide' annotation types enabled. */ - @Test + @Test(groups = { "Functional" }) public void testBuildAnnotationTypesMenus_showDisabled() { JMenu showMenu = new JMenu(); @@ -321,16 +356,14 @@ public class PopupMenuTest // PDB.secondary structure on Sequence0 AlignmentAnnotation annotation = new AlignmentAnnotation( - "secondary structure", "", new Annotation[] - {}); + "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 = new AlignmentAnnotation("Temp", "", new Annotation[] {}); annotation.setCalcId("PDB"); annotation.visible = true; seqs.get(1).addAlignmentAnnotation(annotation); @@ -369,7 +402,7 @@ public class PopupMenuTest /** * Test for building menu options with only 'show' annotation types enabled. */ - @Test + @Test(groups = { "Functional" }) public void testBuildAnnotationTypesMenus_hideDisabled() { JMenu showMenu = new JMenu(); @@ -380,16 +413,14 @@ public class PopupMenuTest // PDB.secondary structure on Sequence0 AlignmentAnnotation annotation = new AlignmentAnnotation( - "secondary structure", "", new Annotation[] - {}); + "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 = new AlignmentAnnotation("Temp", "", new Annotation[] {}); annotation.setCalcId("PDB2"); annotation.visible = false; seqs.get(1).addAlignmentAnnotation(annotation); @@ -424,4 +455,105 @@ public class PopupMenuTest 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()); + + } }