JAL-1833 added unit tests (some failing) for wrapToolitp
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 20 Aug 2015 08:42:44 +0000 (09:42 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 20 Aug 2015 08:42:44 +0000 (09:42 +0100)
src/jalview/gui/JvSwingUtils.java
test/jalview/gui/JvSwingUtilsTest.java

index a9d0e75..65be457 100644 (file)
@@ -49,12 +49,12 @@ import javax.swing.SwingConstants;
 public final class JvSwingUtils
 {
   /**
-   * wrap a bare html safe string to around 60 characters per line using a
-   * <table width=350>
-   * <tr>
-   * <td></td> field
- * @param enclose TODO
- * @param ttext
+   * 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
+   * @param ttext
    * 
    * @return
    */
@@ -62,15 +62,20 @@ public final class JvSwingUtils
   {
     Objects.requireNonNull(ttext, "Tootip text to format must not be null!");
     ttext = ttext.trim();
-    boolean maxLenghtExceeded = false;
+    boolean maxLengthExceeded = false;
 
+    /*
+     * Split into lines if already separated by <br> tags.
+     * 
+     * TODO what about </br>, <br/>, <br /> ?
+     */
     if (ttext.contains("<br>"))
     {
       String[] htmllines = ttext.split("<br>");
       for (String line : htmllines)
       {
-        maxLenghtExceeded = line.length() > 60;
-        if (maxLenghtExceeded)
+        maxLengthExceeded = line.length() > 60;
+        if (maxLengthExceeded)
         {
           break;
         }
@@ -78,19 +83,17 @@ public final class JvSwingUtils
     }
     else
     {
-      maxLenghtExceeded = ttext.length() > 60;
+      maxLengthExceeded = ttext.length() > 60;
     }
 
-    if (!maxLenghtExceeded)
+    if (!maxLengthExceeded)
     {
       return enclose ? "<html>" + ttext + "</html>" : ttext;
     }
-    else
-    {
-      return enclose ? "<html><style> p.ttip {width: 350; text-align: justify; word-wrap: break-word;}</style><p class=\"ttip\">"
-              + ttext + "</p></html>"
-              : ttext;
-    }
+
+    return enclose ? "<html><style> p.ttip {width: 350; text-align: justify; word-wrap: break-word;}</style><p class=\"ttip\">"
+            + ttext + "</p></html>"
+            : ttext;
   }
 
   public static JButton makeButton(String label, String tooltip,
index 8a6f63b..eb810e6 100644 (file)
@@ -1,6 +1,7 @@
 package jalview.gui;
 
 import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
 
 import javax.swing.JScrollBar;
 
@@ -24,7 +25,7 @@ public class JvSwingUtilsTest
     assertEquals(0.25f, JvSwingUtils.getScrollBarProportion(sb), 0.001f);
   }
 
-  @Test(groups ={ "Functional" })
+  @Test(groups = { "Functional" })
   public void testGetScrollValueForProportion()
   {
     /*
@@ -38,4 +39,56 @@ public class JvSwingUtilsTest
      */
     assertEquals(125, JvSwingUtils.getScrollValueForProportion(sb, 0.25f));
   }
+
+  /**
+   * Test wrap tooltip where it is less than or equal to 60 characters long - no
+   * wrap should be applied
+   */
+  @Test(groups = { "Functional" })
+  public void testWrapTooltip_shortText()
+  {
+    String tip = "hello world";
+    assertEquals(tip, JvSwingUtils.wrapTooltip(false, tip));
+    assertEquals("<html>" + tip + "</html>",
+            JvSwingUtils.wrapTooltip(true, tip));
+
+    tip = "012345678901234567890123456789012345678901234567890123456789"; // 60
+    assertEquals(tip, JvSwingUtils.wrapTooltip(false, tip));
+    assertEquals("<html>" + tip + "</html>",
+            JvSwingUtils.wrapTooltip(true, tip));
+
+    tip = "0123456789012345678901234567890123456789012345678901234567890"; // 61
+    assertFalse(tip.equals(JvSwingUtils.wrapTooltip(false, tip)));
+    assertFalse(("<html>" + tip + "</html>").equals(JvSwingUtils
+            .wrapTooltip(true, tip)));
+  }
+
+  /**
+   * Test wrap tooltip where it is more than one line (separated by &lt;br&gt;
+   * tags) of less than or equal to 60 characters long - no wrap should be
+   * applied
+   */
+  @Test(groups = { "Functional" })
+  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));
+  }
+
+  /**
+   * Test wrap tooltip where it is more than 60 characters long - word break and
+   * word wrap styling should be applied
+   */
+  @Test(groups = { "Functional" })
+  public void testWrapTooltip_longText()
+  {
+    String tip = "Now is the winter of our discontent made glorious summer by this sun of York";
+    String expected = "<style> p.ttip {width: 350; text-align: justify; word-wrap: break-word;}</style><p class=\"ttip\">"
+            + tip + "</p>";
+    assertEquals("<html>" + expected + "</html>",
+            JvSwingUtils.wrapTooltip(true, tip));
+    assertEquals(expected, JvSwingUtils.wrapTooltip(false, tip));
+  }
 }