JAL-3468 i18n and additional unit tests feature/JAL-3468featureDescriptionEllipsis
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 6 Mar 2020 13:59:36 +0000 (13:59 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 6 Mar 2020 13:59:36 +0000 (13:59 +0000)
resources/lang/Messages.properties
resources/lang/Messages_es.properties
src/jalview/gui/SeqPanel.java
test/jalview/gui/PopupMenuTest.java

index fdd15cd..7f86e9f 100644 (file)
@@ -1403,4 +1403,5 @@ label.by_annotation_tooltip = Annotation Colour is configured from the main Colo
 label.show_linked_features = Show {0} features
 label.on_top = on top
 label.include_linked_features = Include {0} features
-label.include_linked_tooltip = Include visible {0} features<br>converted to local sequence coordinates
\ No newline at end of file
+label.include_linked_tooltip = Include visible {0} features<br>converted to local sequence coordinates
+label.features_not_shown = {0} feature(s) not shown
\ No newline at end of file
index daa4418..42f145b 100644 (file)
@@ -1404,4 +1404,5 @@ label.by_annotation_tooltip = El color de anotaci
 label.show_linked_features = Características de {0}
 label.on_top = encima
 label.include_linked_features = Incluir características de {0}
-label.include_linked_tooltip = Incluir características de {0}<br>convertidas a coordenadas de secuencia local
\ No newline at end of file
+label.include_linked_tooltip = Incluir características de {0}<br>convertidas a coordenadas de secuencia local
+label.features_not_shown = {0} característica(s) no mostradas
\ No newline at end of file
index 796d339..7020265 100644 (file)
@@ -1074,24 +1074,24 @@ public class SeqPanel extends JPanel
         }
       }
     }
-    if (tooltipText.length() == 6) // <html>
+    if (tooltipText.length() == 6) // "<html>"
     {
       setToolTipText(null);
       lastTooltip = null;
     }
     else
     {
-      if (tooltipText.length() > MAX_TOOLTIP_LENGTH) // constant
+      if (tooltipText.length() > MAX_TOOLTIP_LENGTH)
       {
         tooltipText.setLength(MAX_TOOLTIP_LENGTH);
-        tooltipText.append("...TOOLONG!");
+        tooltipText.append("...");
       }
       if (unshownFeatures > 0)
       {
         tooltipText.append("<br/>").append("... ").append("<i>")
-                .append(unshownFeatures)
-                .append(" feature").append(unshownFeatures == 1 ? "" : "s")
-                .append(" not shown</i>");
+                .append(MessageManager.formatMessage(
+                        "label.features_not_shown", unshownFeatures))
+                .append("</i>");
       }
       String textString = tooltipText.toString();
       if (lastTooltip == null || !lastTooltip.equals(textString))
index acef0a1..5e83942 100644 (file)
@@ -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;
@@ -690,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<SequenceFeature> 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("<html>helix 2-6 curly</html>", item.getText());
+    item = menu.getItem(1);
+    assertEquals("<html>chain 1 straight (uniprot)</html>", 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(
+            "<html>helix 2-6 this is a quite extraordinarily long des...</html>",
+            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
+  }
 }