JAL-3446 tests - Popup/HTML changes in Applet
authorBobHanson <hansonr@stolaf.edu>
Wed, 10 Jun 2020 05:22:18 +0000 (00:22 -0500)
committerBobHanson <hansonr@stolaf.edu>
Wed, 10 Jun 2020 05:22:18 +0000 (00:22 -0500)
- <br> indicates no additional line breaks.
- removal of unrealistic tests ("false" tests of jws2Discoverer HTML
messages)
- accepts either <br> or <br/> (as does JLabel)

src/jalview/gui/JvSwingUtils.java
src/jalview/gui/PopupMenu.java
test/jalview/gui/JvSwingUtilsTest.java
test/jalview/gui/PopupMenuTest.java

index e399236..f89b4e4 100644 (file)
@@ -56,12 +56,15 @@ import jalview.util.MessageManager;
  */
 public final class JvSwingUtils
 {
+  static final String HTML_PREFIX = "<html><div style=\"width:350px;white-space:pre-wrap;margin:2px;overflow-wrap:break-word;\">";
+
   /**
    * wrap a bare html safe string to around 60 characters per line using a CSS
    * style class specifying word-wrap and break-word
    * 
    * @param enclose
-   *          if true, add &lt;html&gt; wrapper tags
+   *          if true, add &lt;html&gt; wrapper tags (currently false for only
+   *          two references -- both in Jws2Discoverer --
    * @param ttext
    * 
    * @return
@@ -70,12 +73,26 @@ public final class JvSwingUtils
   {
     Objects.requireNonNull(ttext,
             "Tootip text to format must not be null!");
-    ttext = ttext.trim();
-    boolean maxLengthExceeded = false;
+    ttext = ttext.trim().replaceAll("<br/>", "<br>");
 
-    if (ttext.contains("<br>"))
+    boolean maxLengthExceeded = false;
+    boolean isHTML = ttext.startsWith("<html>");
+    if (isHTML)
+    {
+      ttext = ttext.substring(6);
+    }
+    if (ttext.endsWith("</html>"))
+    {
+      isHTML = true;
+      ttext = ttext.substring(0, ttext.length() - 7);
+    }
+    boolean hasBR = ttext.contains("<br>");
+    enclose |= isHTML || hasBR;
+    if (hasBR)
     {
-      maxLengthExceeded = false;
+      
+// Too complex in HTML5 to mix <br> with word wrapping.
+//      
 //      String[] htmllines = ttext.split("<br>");
 //      for (String line : htmllines)
 //      {
@@ -95,16 +112,8 @@ public final class JvSwingUtils
     {
       return enclose ? "<html>" + ttext + "</html>" : ttext;
     }
-
-    return (enclose ? "<html>" : "")
-     // BH 2018
-            + "<style> div.ttip {width:350px;white-space:pre-wrap;margin:2px;overflow-wrap:break-word;}</style><div class=\"ttip\">"
-//            + "<style> p.ttip {width:350px;margin:-14px 0px -14px 0px;padding:2px;overflow-wrap:break-word;}"
-//            + "</style><p class=\"ttip\">"
-            + ttext
-            + " </div>"
-//            + "</p>"
-            + ((enclose ? "</html>" : ""));
+    // BH 2018,2019
+    return (enclose ? HTML_PREFIX + ttext + "</div></html>" : ttext);
   }
 
   public static JButton makeButton(String label, String tooltip,
index dc7fea3..4469b43 100644 (file)
@@ -1699,7 +1699,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
       menuItem.setEnabled(true);
       for (String calcId : tipEntries.keySet())
       {
-        tooltip.append("<br/>" + calcId + "/" + tipEntries.get(calcId));
+        tooltip.append("<br>" + calcId + "/" + tipEntries.get(calcId));
       }
       String tooltipText = JvSwingUtils.wrapTooltip(true,
               tooltip.toString());
index 61c5c9b..214a3ad 100644 (file)
@@ -86,7 +86,12 @@ public class JvSwingUtilsTest
             JvSwingUtils.wrapTooltip(true, tip));
 
     tip = "0123456789012345678901234567890123456789012345678901234567890"; // 61
-    assertFalse(tip.equals(JvSwingUtils.wrapTooltip(false, tip)));
+
+    // n/a -- message is too long for "false"
+//  
+//    assertFalse(tip.equals(JvSwingUtils.wrapTooltip(false, tip)));
+//    
+    
     assertFalse(("<html>" + tip + "</html>").equals(JvSwingUtils
             .wrapTooltip(true, tip)));
   }
@@ -100,9 +105,21 @@ public class JvSwingUtilsTest
   public void testWrapTooltip_multilineShortText()
   {
     String tip = "Now is the winter of our discontent<br>Made glorious summer by this sun of York";
-    assertEquals(tip, JvSwingUtils.wrapTooltip(false, tip));
-    assertEquals("<html>" + tip + "</html>",
-            JvSwingUtils.wrapTooltip(true, tip));
+    String tip2 = "Now is the winter of our discontent<br/>Made glorious summer by this sun of York";
+
+// BH not applicable in Jalview; "false" is only for when no <br> and only for short j2s2Discover messages
+//
+//    String s = JvSwingUtils.wrapTooltip(false, tip);
+//    System.out.println("<html>" + tip + "</html>");
+//    assertEquals(tip, s);
+    
+    String s;
+    s = JvSwingUtils.wrapTooltip(true, tip);
+    System.out.println(s);
+    assertEquals("<html>" + tip + "</html>", s);
+    s = JvSwingUtils.wrapTooltip(true, tip2);
+    System.out.println(s);
+    assertEquals("<html>" + tip + "</html>", s);
   }
 
   /**
@@ -112,11 +129,13 @@ public class JvSwingUtilsTest
   @Test(groups = { "Functional" })
   public void testWrapTooltip_longText()
   {
+    // BH should work in Java and JavaScript
     String tip = "Now is the winter of our discontent made glorious summer by this sun of York";
-    String expected = "<style> div.ttip {width:350px;white-space:pre-wrap;padding:2px;overflow-wrap:break-word;}</style>"
-            + "<div class=\"ttip\">" + tip + " </div>";
-    assertEquals("<html>" + expected + "</html>",
-            JvSwingUtils.wrapTooltip(true, tip));
-    assertEquals(expected, JvSwingUtils.wrapTooltip(false, tip));
+    String expected = JvSwingUtils.HTML_PREFIX + tip + "</div></html>";
+    String s = JvSwingUtils.wrapTooltip(true, tip);
+    assertEquals(expected, s);
+ // BH not applicable in Jalview; "false" is only for when no <br> and only for short j2s2Discover messages
+//    s = JvSwingUtils.wrapTooltip(false, tip);
+//    assertEquals(expected, s);
   }
 }
index cc13fb9..4a5c248 100644 (file)
@@ -201,9 +201,10 @@ public class PopupMenuTest
     testee.configureReferenceAnnotationsMenu(menu, seqs);
     assertTrue(menu.isEnabled());
     String s = MessageManager.getString("label.add_annotations_for");
-    String expected = "<html><style> div.ttip {width:350px;white-space:pre-wrap;padding:2px;overflow-wrap:break-word;}</style>"
-            + "<div class=\"ttip\">" + s
-            + "<br/>Jmol/secondary structure<br/>PDB/Temp </div></html>";
+//    String expected = "<html><style> div.ttip {width:350px;white-space:pre-wrap;padding:2px;overflow-wrap:break-word;}</style>"
+//            + "<div class=\"ttip\">" + s
+//            + "<br/>Jmol/secondary structure<br/>PDB/Temp </div></html>";
+    String expected = "<html>" + s + "<br>Jmol/secondary structure<br>PDB/Temp</html>";
     assertEquals(expected, menu.getToolTipText());
   }
 
@@ -225,10 +226,13 @@ public class PopupMenuTest
     testee.configureReferenceAnnotationsMenu(menu, seqs);
     assertTrue(menu.isEnabled());
     String s = MessageManager.getString("label.add_annotations_for");
-    String expected = "<html><style> div.ttip {width:350px;white-space:pre-wrap;padding:2px;overflow-wrap:break-word;}</style>"
-            + "<div class=\"ttip\">" + s
-            + "<br/>Jmol/secondary structure<br/>PDB/Temp </div></html>";
-    assertEquals(expected, menu.getToolTipText());
+//    String expected = "<html><style> div.ttip {width:350px;white-space:pre-wrap;padding:2px;overflow-wrap:break-word;}</style>"
+//            + "<div class=\"ttip\">" + s
+//            + "<br/>Jmol/secondary structure<br/>PDB/Temp</html>";
+    String expected = "<html>" + s
+            + "<br>Jmol/secondary structure<br>PDB/Temp</html>";
+    s = menu.getToolTipText();
+    assertEquals(expected, s);
   }
 
   /**