JAL-3121 'attributes map' in GFF3 without special 'jvmap_' token
[jalview.git] / test / jalview / util / StringUtilsTest.java
index 02e7061..37506c0 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2)
- * Copyright (C) 2015 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
@@ -24,15 +24,25 @@ import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertNull;
 import static org.testng.AssertJUnit.assertTrue;
 
+import jalview.gui.JvOptionPane;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 public class StringUtilsTest
 {
 
+  @BeforeClass(alwaysRun = true)
+  public void setUpJvOptionPane()
+  {
+    JvOptionPane.setInteractiveMode(false);
+    JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
+  }
+
   @Test(groups = { "Functional" })
   public void testInsertCharAt()
   {
@@ -135,7 +145,7 @@ public class StringUtilsTest
   public void testListToDelimitedString()
   {
     assertEquals("", StringUtils.listToDelimitedString(null, ";"));
-    List<String> list = new ArrayList<String>();
+    List<String> list = new ArrayList<>();
     assertEquals("", StringUtils.listToDelimitedString(list, ";"));
     list.add("now");
     assertEquals("now", StringUtils.listToDelimitedString(list, ";"));
@@ -218,4 +228,92 @@ public class StringUtilsTest
     assertEquals("", StringUtils.toSentenceCase(""));
     assertNull(StringUtils.toSentenceCase(null));
   }
+
+  @Test(groups = { "Functional" })
+  public void testStripHtmlTags()
+  {
+    assertNull(StringUtils.stripHtmlTags(null));
+    assertEquals("", StringUtils.stripHtmlTags(""));
+    assertEquals(
+            "<a href=\"something\">label</href>",
+            StringUtils
+                    .stripHtmlTags("<html><a href=\"something\">label</href></html>"));
+
+    // if no "<html>" tag, < and > get html-encoded (not sure why)
+    assertEquals("&lt;a href=\"something\"&gt;label&lt;/href&gt;",
+            StringUtils.stripHtmlTags("<a href=\"something\">label</href>"));
+
+    // </body> gets removed but not <body> (is this intentional?)
+    assertEquals("<body><p>hello",
+            StringUtils.stripHtmlTags("<html><body><p>hello</body></html>"));
+
+    assertEquals("kdHydro &lt; 12.53",
+            StringUtils.stripHtmlTags("kdHydro < 12.53"));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testUrlEncode()
+  {
+    // degenerate cases
+    assertNull(StringUtils.urlEncode(null, ";,"));
+    assertEquals("", StringUtils.urlEncode("", ""));
+    assertEquals("", StringUtils.urlEncode("", ";,"));
+
+    // sanity checks, see
+    // https://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters
+    assertEquals("+", StringUtils.urlEncode(" ", " "));
+    assertEquals("%25", StringUtils.urlEncode("%", "%"));
+    assertEquals(".", StringUtils.urlEncode(".", ".")); // note . is not encoded
+    assertEquals("%3A", StringUtils.urlEncode(":", ":"));
+    assertEquals("%3B", StringUtils.urlEncode(";", ";"));
+    assertEquals("%3D", StringUtils.urlEncode("=", "="));
+    assertEquals("%2C", StringUtils.urlEncode(",", ","));
+
+    // check % does not get recursively encoded!
+    assertEquals("a%25b%3Dc%3Bd%3Ae%2C%2C",
+            StringUtils.urlEncode("a%b=c;d:e,,", "=,;:%"));
+
+    // = not in the list for encoding
+    assertEquals("a=b", StringUtils.urlEncode("a=b", ";,"));
+
+    // encode = (as %3B) and ; (as %3D)
+    assertEquals("a%3Db.c%3B", StringUtils.urlEncode("a=b.c;", ";=,"));
+
+    // . and space not in the list for encoding
+    assertEquals("a%3Db.c d", StringUtils.urlEncode("a=b.c d", ";=,"));
+
+    // encode space also (as +)
+    assertEquals("a%3Db.c+d", StringUtils.urlEncode("a=b.c d", ";=, "));
+
+    // . does not get encoded even if requested - behaviour of URLEncoder
+    assertEquals("a%3Db.c+d.e%3Df",
+            StringUtils.urlEncode("a=b.c d.e=f", ";=,. "));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testUrlDecode()
+  {
+    // degenerate cases
+    assertNull(StringUtils.urlDecode(null, ";,"));
+    assertEquals("", StringUtils.urlDecode("", ""));
+    assertEquals("", StringUtils.urlDecode("", ";,"));
+
+    // = not in the list for encoding
+    assertEquals("a%3Db", StringUtils.urlDecode("a%3Db", ";,"));
+
+    // decode = and ; but not .
+    assertEquals("a=b%3Ec; d",
+            StringUtils.urlDecode("a%3Db%3Ec; d", ";=,"));
+
+    // space not in the list for decoding
+    assertEquals("a=b;c+d", StringUtils.urlDecode("a%3Db%3Bc+d", ";=,"));
+
+    // decode space also; %3E is not decoded to .
+    assertEquals("a=b%3Ec d=,",
+            StringUtils.urlDecode("a%3Db%3Ec+d%3D%2C", ";=, "));
+
+    // decode encoded % (%25)
+    assertEquals("a,=;\t%z",
+            StringUtils.urlDecode("a%2C%3D%3B%09%25z", ";=,\t%"));
+  }
 }