--- /dev/null
+package jalview.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+public class StringUtilsTest
+{
+
+ @Test
+ public void testInsertCharAt()
+ {
+ char[] c1 = "ABC".toCharArray();
+ char[] expected = new char[]
+ { 'A', 'B', 'C', 'w', 'w' };
+ assertTrue(Arrays.equals(expected,
+ StringUtils.insertCharAt(c1, 3, 2, 'w')));
+ expected = new char[]
+ { 'A', 'B', 'C', 'w', 'w' };
+ assertTrue(Arrays.equals(expected,
+ StringUtils.insertCharAt(c1, 4, 2, 'w')));
+ assertTrue(Arrays.equals(expected,
+ StringUtils.insertCharAt(c1, 5, 2, 'w')));
+ assertTrue(Arrays.equals(expected,
+ StringUtils.insertCharAt(c1, 6, 2, 'w')));
+ assertTrue(Arrays.equals(expected,
+ StringUtils.insertCharAt(c1, 7, 2, 'w')));
+ }
+
+ @Test
+ public void testDeleteChars()
+ {
+ char[] c1 = "ABC".toCharArray();
+
+ // delete second position
+ 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)));
+
+ // 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)));
+
+ // out of range deletion is ignore
+ assertTrue(Arrays.equals(c1, StringUtils.deleteChars(c1, 3, 4)));
+ }
+
+ @Test
+ public void testGetLastToken()
+ {
+ assertNull(StringUtils.getLastToken(null, null));
+ assertNull(StringUtils.getLastToken(null, "/"));
+ assertEquals("a", StringUtils.getLastToken("a", null));
+
+ assertEquals("abc", StringUtils.getLastToken("abc", "/"));
+ assertEquals("c", StringUtils.getLastToken("abc", "b"));
+ assertEquals("file1.dat", StringUtils.getLastToken(
+ "file://localhost:8080/data/examples/file1.dat", "/"));
+ }
+
+ @Test
+ public void testSeparatorListToArray()
+ {
+ String[] result = StringUtils.separatorListToArray(
+ "foo=',',min='foo',max='1,2,3',fa=','", ",");
+ assertEquals("[foo=',', min='foo', max='1,2,3', fa=',']",
+ Arrays.toString(result));
+ /*
+ * Comma nested in '' is not treated as delimiter; tokens are not trimmed
+ */
+ result = StringUtils.separatorListToArray("minsize='2', sep=','", ",");
+ assertEquals("[minsize='2', sep=',']", Arrays.toString(result));
+
+ /*
+ * 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", "|")));
+ }
+
+ @Test
+ public void testArrayToSeparatorList()
+ {
+ 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" }, "*"));
+ // delimiter within token is not (yet) escaped
+ assertEquals("a*b*c*cde", StringUtils.arrayToSeparatorList(new String[]
+ { "a", "b*c", "cde" }, "*"));
+ }
+}