X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fgui%2FPopupMenuTest.java;h=5e83942892d623fcc532c48a96187d72f032c11d;hb=refs%2Fheads%2Ffeature%2FJAL-3468featureDescriptionEllipsis;hp=e04be685a979d2bb7e1529b00afa02d4d4ecbad6;hpb=b22e1863f9c10dbff13ca8bc889255b91f0c4d1c;p=jalview.git diff --git a/test/jalview/gui/PopupMenuTest.java b/test/jalview/gui/PopupMenuTest.java index e04be68..5e83942 100644 --- a/test/jalview/gui/PopupMenuTest.java +++ b/test/jalview/gui/PopupMenuTest.java @@ -24,6 +24,8 @@ 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.assertNotNull; +import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertTrue; import jalview.bin.Cache; @@ -47,6 +49,7 @@ import jalview.util.MessageManager; import jalview.util.UrlConstants; import java.awt.Component; +import java.awt.Container; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -91,6 +94,8 @@ public class PopupMenuTest public void setUp() throws IOException { Cache.loadProperties("test/jalview/io/testProps.jvprops"); + Cache.initLogger(); + String inMenuString = ("EMBL-EBI Search | http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$" + SEQUENCE_ID + "$" @@ -113,7 +118,7 @@ public class PopupMenuTest DataSourceType.PASTE, FileFormat.Fasta); AlignFrame af = new AlignFrame(alignment, 700, 500); parentPanel = new AlignmentPanel(af, af.getViewport()); - testee = new PopupMenu(parentPanel, null, null); + testee = new PopupMenu(parentPanel, alignment.getSequenceAt(0), null); int i = 0; for (SequenceI seq : alignment.getSequences()) { @@ -196,7 +201,7 @@ public class PopupMenuTest testee.configureReferenceAnnotationsMenu(menu, seqs); assertTrue(menu.isEnabled()); String s = MessageManager.getString("label.add_annotations_for"); - String expected = "

" + String expected = "

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

"; assertEquals(expected, menu.getToolTipText()); } @@ -219,7 +224,7 @@ public class PopupMenuTest testee.configureReferenceAnnotationsMenu(menu, seqs); assertTrue(menu.isEnabled()); String s = MessageManager.getString("label.add_annotations_for"); - String expected = "

" + String expected = "

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

"; assertEquals(expected, menu.getToolTipText()); } @@ -492,7 +497,7 @@ public class PopupMenuTest * Test for adding sequence id, dbref and feature links */ @Test(groups = { "Functional" }) - public void testConstructor_links() + public void testBuildLinkMenu() { List seqs = parentPanel.getAlignment().getSequences(); final SequenceI seq0 = seqs.get(0); @@ -509,11 +514,9 @@ public class PopupMenuTest seq1.addDBRef(new DBRefEntry("GENE3D", "1", "3.10.20.30")); /* - * check the Popup Menu for the first sequence + * check the Link Menu for the first sequence */ - testee = new PopupMenu(parentPanel, seq0, noFeatures); - Component[] seqItems = testee.sequenceMenu.getMenuComponents(); - JMenu linkMenu = (JMenu) seqItems[6]; + JMenu linkMenu = PopupMenu.buildLinkMenu(seq0, noFeatures); assertEquals(linkText, linkMenu.getText()); Component[] linkItems = linkMenu.getMenuComponents(); @@ -532,13 +535,10 @@ public class PopupMenuTest assertEquals("UNIPROT|P83527", ((JMenuItem) linkItems[4]).getText()); /* - * check the Popup Menu for second sequence + * check the Link Menu for the second sequence * note dbref GENE3D is matched to link Gene3D, the latter is displayed */ - testee = new PopupMenu(parentPanel, seq1, noFeatures); - seqItems = testee.sequenceMenu.getMenuComponents(); - linkMenu = (JMenu) seqItems[6]; - assertEquals(linkText, linkMenu.getText()); + linkMenu = PopupMenu.buildLinkMenu(seq1, noFeatures); linkItems = linkMenu.getMenuComponents(); assertEquals(3, linkItems.length); assertEquals("EMBL-EBI Search", ((JMenuItem) linkItems[0]).getText()); @@ -556,13 +556,32 @@ public class PopupMenuTest unmatched, ""); Preferences.sequenceUrlLinks = factory.createUrlProvider(); - testee = new PopupMenu(parentPanel, seq1, noFeatures); - seqItems = testee.sequenceMenu.getMenuComponents(); - linkMenu = (JMenu) seqItems[6]; - assertEquals(linkText, linkMenu.getText()); + linkMenu = PopupMenu.buildLinkMenu(seq1, noFeatures); linkItems = linkMenu.getMenuComponents(); assertEquals(1, linkItems.length); assertEquals("EMBL-EBI Search", ((JMenuItem) linkItems[0]).getText()); + + /* + * if sequence is null, only feature links are shown (alignment popup submenu) + */ + linkMenu = PopupMenu.buildLinkMenu(null, noFeatures); + linkItems = linkMenu.getMenuComponents(); + assertEquals(0, linkItems.length); + + List features = new ArrayList<>(); + SequenceFeature sf = new SequenceFeature("type", "desc", 1, 20, null); + features.add(sf); + linkMenu = PopupMenu.buildLinkMenu(null, features); + linkItems = linkMenu.getMenuComponents(); + assertEquals(0, linkItems.length); // feature has no links + + sf.addLink("Pfam family|http://pfam.xfam.org/family/PF00111"); + linkMenu = PopupMenu.buildLinkMenu(null, features); + linkItems = linkMenu.getMenuComponents(); + assertEquals(1, linkItems.length); + JMenuItem item = (JMenuItem) linkItems[0]; + assertEquals("Pfam family", item.getText()); + // ? no way to verify URL, compiled into link's actionListener } @Test(groups = { "Functional" }) @@ -674,4 +693,75 @@ public class PopupMenuTest assertEquals(region[1], 34); } + @Test(groups = { "Functional" }) + public void testAddFeatureDetails() + { + String menuText = MessageManager.getString("label.feature_details"); + + /* + * with no features, sub-menu should not be created + */ + List features = new ArrayList<>(); + SequenceI seq = this.alignment.getSequenceAt(0); // FER_CAPAA/1-12 + testee.addFeatureDetails(features, seq, 10); + JMenu menu = findMenu(testee, menuText); + assertNull(menu); + + /* + * add some features; the menu item text is wrapped in html, and includes + * feature type, position, description, group (if not null) + */ + SequenceFeature sf1 = new SequenceFeature("helix", "curly", 2, 6, null); + SequenceFeature sf2 = new SequenceFeature("chain", "straight", 1, 1, + "uniprot"); + features.add(sf1); + features.add(sf2); + testee.addFeatureDetails(features, seq, 10); + menu = findMenu(testee, menuText); + assertNotNull(menu); + assertEquals(2, menu.getItemCount()); + JMenuItem item = menu.getItem(0); + assertEquals("helix 2-6 curly", item.getText()); + item = menu.getItem(1); + assertEquals("chain 1 straight (uniprot)", item.getText()); + + /* + * long feature descriptions are truncated to 40 characters + */ + sf1.setDescription( + "this is a quite extraordinarily long description"); + testee.remove(menu); // don't create the sub-menu twice + testee.addFeatureDetails(features, seq, 10); + menu = findMenu(testee, menuText); + item = menu.getItem(0); + assertEquals( + "helix 2-6 this is a quite extraordinarily long des...", + item.getText()); + } + + /** + * Returns the first component which is a JMenu with the given text + * + * @param c + * @param text + * @return + */ + private JMenu findMenu(Container c, String text) + { + for (int i = 0; i < c.getComponentCount(); i++) + { + Component comp = c.getComponent(i); + if ((comp instanceof JMenu) && ((JMenu) comp).getText().equals(text)) + { + return (JMenu) comp; + } + } + return null; + } + + @Test(groups = { "Functional" }) + public void testAddFeatureDetails_linkedFeatures() + { + // todo tests that verify menu items for complement features + } }