/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, * Version 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.test.unit; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Date; import java.util.Random; import org.h2.message.DbException; import org.h2.test.TestBase; import org.h2.test.utils.AssertThrows; import org.h2.util.DateTimeUtils; import org.h2.util.StringUtils; /** * Tests string utility methods. */ public class TestStringUtils extends TestBase { /** * Run just this test. * * @param a ignored */ public static void main(String... a) throws Exception { TestBase.createCaller().init().test(); } public void test() throws Exception { testHex(); testXML(); testSplit(); testJavaString(); testURL(); testPad(); testReplaceAll(); } private void testHex() { assertEquals("face", StringUtils.convertBytesToHex(new byte[] { (byte) 0xfa, (byte) 0xce })); assertEquals(new byte[] { (byte) 0xfa, (byte) 0xce }, StringUtils.convertHexToBytes("face")); assertEquals(new byte[] { (byte) 0xfa, (byte) 0xce }, StringUtils.convertHexToBytes("fAcE")); assertEquals(new byte[] { (byte) 0xfa, (byte) 0xce }, StringUtils.convertHexToBytes("FaCe")); new AssertThrows(DbException.class) { public void test() { StringUtils.convertHexToBytes("120"); }}; new AssertThrows(DbException.class) { public void test() { StringUtils.convertHexToBytes("fast"); }}; new AssertThrows(DbException.class) { public void test() { StringUtils.convertHexToBytes("012=abcf"); }}; } private void testPad() { assertEquals("large", StringUtils.pad("larger text", 5, null, true)); assertEquals("large", StringUtils.pad("larger text", 5, null, false)); assertEquals("short+++++", StringUtils.pad("short", 10, "+", true)); assertEquals("+++++short", StringUtils.pad("short", 10, "+", false)); } private void testXML() { assertEquals("<!-- - - - - - -abc- - - - - - -->\n", StringUtils.xmlComment("------abc------")); assertEquals("<test/>\n", StringUtils.xmlNode("test", null, null)); assertEquals("<test>Grübel</test>\n", StringUtils.xmlNode("test", null, StringUtils.xmlText("Gr\u00fcbel"))); assertEquals("Rand&Blue", StringUtils.xmlText("Rand&Blue")); assertEquals("<<[[[]]]>>", StringUtils.xmlCData("<<[[[]]]>>")); Date dt = DateTimeUtils.parseDateTime("2001-02-03 04:05:06 GMT", "yyyy-MM-dd HH:mm:ss z", "en", "GMT"); String s = StringUtils.xmlStartDoc() + StringUtils.xmlComment("Test Comment") + StringUtils.xmlNode("rss", StringUtils.xmlAttr("version", "2.0"), StringUtils .xmlComment("Test Comment\nZeile2") + StringUtils.xmlNode("channel", null, StringUtils.xmlNode("title", null, "H2 Database Engine") + StringUtils.xmlNode("link", null, "http://www.h2database.com") + StringUtils.xmlNode("description", null, "H2 Database Engine") + StringUtils.xmlNode("language", null, "en-us") + StringUtils.xmlNode("pubDate", null, DateTimeUtils.formatDateTime(dt, "EEE, d MMM yyyy HH:mm:ss z", "en", "GMT")) + StringUtils.xmlNode("lastBuildDate", null, DateTimeUtils.formatDateTime(dt, "EEE, d MMM yyyy HH:mm:ss z", "en", "GMT")) + StringUtils.xmlNode("item", null, StringUtils.xmlNode("title", null, "New Version 0.9.9.9.9") + StringUtils.xmlNode("link", null, "http://www.h2database.com") + StringUtils.xmlNode("description", null, StringUtils .xmlCData("\nNew Features\nTest\n"))))); assertEquals(s, "<?xml version=\"1.0\"?>\n" + "<!-- Test Comment -->\n" + "<rss version=\"2.0\">\n" + " <!--\n" + " Test Comment\n" + " Zeile2\n" + " -->\n" + " <channel>\n" + " <title>H2 Database Engine</title>\n" + " <link>http://www.h2database.com</link>\n" + " <description>H2 Database Engine</description>\n" + " <language>en-us</language>\n" + " <pubDate>Sat, 3 Feb 2001 04:05:06 GMT</pubDate>\n" + " <lastBuildDate>Sat, 3 Feb 2001 04:05:06 GMT</lastBuildDate>\n" + " <item>\n" + " <title>New Version 0.9.9.9.9</title>\n" + " <link>http://www.h2database.com</link>\n" + " <description>\n" + " <![CDATA[\n" + " New Features\n" + " Test\n" + " ]]>\n" + " </description>\n" + " </item>\n" + " </channel>\n" + "</rss>\n"); } private void testURL() throws UnsupportedEncodingException { Random random = new Random(1); for (int i = 0; i < 100; i++) { int len = random.nextInt(10); StringBuilder buff = new StringBuilder(); for (int j = 0; j < len; j++) { if (random.nextBoolean()) { buff.append((char) random.nextInt(0x3000)); } else { buff.append((char) random.nextInt(255)); } } String a = buff.toString(); String b = URLEncoder.encode(a, "UTF-8"); String c = URLDecoder.decode(b, "UTF-8"); assertEquals(a, c); String d = StringUtils.urlDecode(b); assertEquals(d, c); } } private void testJavaString() { assertEquals("a\"b", StringUtils.javaDecode("a\"b")); Random random = new Random(1); for (int i = 0; i < 1000; i++) { int len = random.nextInt(10); StringBuilder buff = new StringBuilder(); for (int j = 0; j < len; j++) { if (random.nextBoolean()) { buff.append((char) random.nextInt(0x3000)); } else { buff.append((char) random.nextInt(255)); } } String a = buff.toString(); String b = StringUtils.javaEncode(a); String c = StringUtils.javaDecode(b); assertEquals(a, c); } } private void testSplit() { assertEquals(3, StringUtils.arraySplit("ABC,DEF,G\\,HI", ',', false).length); assertEquals(StringUtils.arrayCombine(new String[] { "", " ", "," }, ','), ", ,\\,"); Random random = new Random(1); for (int i = 0; i < 100; i++) { int len = random.nextInt(10); StringBuilder buff = new StringBuilder(); String select = "abcd,"; for (int j = 0; j < len; j++) { char c = select.charAt(random.nextInt(select.length())); if (c == 'a') { buff.append("\\\\"); } else if (c == 'b') { buff.append("\\,"); } else { buff.append(c); } } String a = buff.toString(); String[] b = StringUtils.arraySplit(a, ',', false); String c = StringUtils.arrayCombine(b, ','); assertEquals(a, c); } } private void testReplaceAll() { assertEquals("def", StringUtils.replaceAll("abc def", "abc ", "")); assertEquals("af", StringUtils.replaceAll("abc def", "bc de", "")); assertEquals("abc def", StringUtils.replaceAll("abc def", "bc ", "bc ")); assertEquals("abc ", StringUtils.replaceAll("abc def", "def", "")); assertEquals(" ", StringUtils.replaceAll("abc abc", "abc", "")); assertEquals("xyz xyz", StringUtils.replaceAll("abc abc", "abc", "xyz")); assertEquals("abc def", StringUtils.replaceAll("abc def", "xyz", "abc")); assertEquals("", StringUtils.replaceAll("abcabcabc", "abc", "")); assertEquals("abcabcabc", StringUtils.replaceAll("abcabcabc", "aBc", "")); } }