Merge branch 'develop' into update_212_Dec_merge_with_21125_chamges
[jalview.git] / test / jalview / util / StringUtilsTest.java
index 9d805cc..b425116 100644 (file)
@@ -67,20 +67,23 @@ public class StringUtilsTest
     char[] c1 = "ABC".toCharArray();
 
     // delete second position
-    assertTrue(Arrays.equals(new char[] { 'A', 'C' },
-            StringUtils.deleteChars(c1, 1, 2)));
+    assertTrue(
+            Arrays.equals(new char[]
+            { 'A', 'C' }, StringUtils.deleteChars(c1, 1, 2)));
 
     // delete positions 1 and 2
-    assertTrue(Arrays.equals(new char[] { 'C' },
-            StringUtils.deleteChars(c1, 0, 2)));
+    assertTrue(
+            Arrays.equals(new char[]
+            { 'C' }, StringUtils.deleteChars(c1, 0, 2)));
 
     // delete positions 1-3
     assertTrue(Arrays.equals(new char[] {},
             StringUtils.deleteChars(c1, 0, 3)));
 
     // delete position 3
-    assertTrue(Arrays.equals(new char[] { 'A', 'B' },
-            StringUtils.deleteChars(c1, 2, 3)));
+    assertTrue(
+            Arrays.equals(new char[]
+            { 'A', 'B' }, StringUtils.deleteChars(c1, 2, 3)));
 
     // out of range deletion is ignore
     assertTrue(Arrays.equals(c1, StringUtils.deleteChars(c1, 3, 4)));
@@ -103,8 +106,8 @@ public class StringUtilsTest
      * String delimited by | containing a quoted | (should not be treated as
      * delimiter)
      */
-    assertEquals("[abc='|'d, ef, g]", Arrays.toString(StringUtils
-            .separatorListToArray("abc='|'d|ef|g", "|")));
+    assertEquals("[abc='|'d, ef, g]", Arrays.toString(
+            StringUtils.separatorListToArray("abc='|'d|ef|g", "|")));
   }
 
   @Test(groups = { "Functional" })
@@ -113,19 +116,19 @@ public class StringUtilsTest
     assertEquals("*", StringUtils.arrayToSeparatorList(null, "*"));
     assertEquals("*",
             StringUtils.arrayToSeparatorList(new String[] {}, "*"));
-    assertEquals(
-            "a*bc*cde",
-            StringUtils.arrayToSeparatorList(new String[] { "a", "bc",
-                "cde" }, "*"));
-    assertEquals(
-            "a*cde",
-            StringUtils.arrayToSeparatorList(new String[] { "a", null,
-                "cde" }, "*"));
-    assertEquals("a**cde", StringUtils.arrayToSeparatorList(new String[] {
-        "a", "", "cde" }, "*"));
+    assertEquals("a*bc*cde",
+            StringUtils.arrayToSeparatorList(new String[]
+            { "a", "bc", "cde" }, "*"));
+    assertEquals("a*cde",
+            StringUtils.arrayToSeparatorList(new String[]
+            { "a", null, "cde" }, "*"));
+    assertEquals("a**cde",
+            StringUtils.arrayToSeparatorList(new String[]
+            { "a", "", "cde" }, "*"));
     // delimiter within token is not (yet) escaped
-    assertEquals("a*b*c*cde", StringUtils.arrayToSeparatorList(new String[]
-    { "a", "b*c", "cde" }, "*"));
+    assertEquals("a*b*c*cde",
+            StringUtils.arrayToSeparatorList(new String[]
+            { "a", "b*c", "cde" }, "*"));
   }
 
   @Test(groups = { "Functional" })
@@ -138,7 +141,8 @@ public class StringUtilsTest
     assertEquals("now", StringUtils.listToDelimitedString(list, ";"));
     list.add("is");
     assertEquals("now;is", StringUtils.listToDelimitedString(list, ";"));
-    assertEquals("now ; is", StringUtils.listToDelimitedString(list, " ; "));
+    assertEquals("now ; is",
+            StringUtils.listToDelimitedString(list, " ; "));
     list.add("the");
     list.add("winter");
     list.add("of");
@@ -186,7 +190,8 @@ public class StringUtilsTest
     assertEquals(-1, StringUtils.compareVersions("2.8.3", "2.9.2"));
     assertEquals(-1, StringUtils.compareVersions("2.8", "2.8.3"));
     assertEquals(-1, StringUtils.compareVersions("2.8.3", "2.8.3b1", "b"));
-    assertEquals(-1, StringUtils.compareVersions("2.8.3b1", "2.8.3b2", "b"));
+    assertEquals(-1,
+            StringUtils.compareVersions("2.8.3b1", "2.8.3b2", "b"));
     assertEquals(-1, StringUtils.compareVersions("2.8", "2.8.0", "b"));
     assertEquals(-1, StringUtils.compareVersions("2", "12"));
     assertEquals(-1, StringUtils.compareVersions("3.2.4", "3.12.11"));
@@ -221,20 +226,86 @@ public class StringUtilsTest
   {
     assertNull(StringUtils.stripHtmlTags(null));
     assertEquals("", StringUtils.stripHtmlTags(""));
-    assertEquals(
-            "<a href=\"something\">label</href>",
-            StringUtils
-                    .stripHtmlTags("<html><a href=\"something\">label</href></html>"));
+    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>"));
+            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("<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%"));
+  }
 }