blob: a33170a629c1179c2d4c739bef374ab3a839561d [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.util;
import static org.hamcrest.Matchers.arrayContaining;
import static org.hamcrest.Matchers.emptyArray;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.nio.charset.StandardCharsets;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
public class StringUtilTest
{
@Test
public void testAsciiToLowerCase()
{
String lc="\u0690bc def 1\u06903";
assertEquals(StringUtil.asciiToLowerCase("\u0690Bc DeF 1\u06903"), lc);
assertTrue(StringUtil.asciiToLowerCase(lc)==lc);
}
@Test
public void testStartsWithIgnoreCase()
{
assertTrue(StringUtil.startsWithIgnoreCase("\u0690b\u0690defg", "\u0690b\u0690"));
assertTrue(StringUtil.startsWithIgnoreCase("\u0690bcdefg", "\u0690bc"));
assertTrue(StringUtil.startsWithIgnoreCase("\u0690bcdefg", "\u0690Bc"));
assertTrue(StringUtil.startsWithIgnoreCase("\u0690Bcdefg", "\u0690bc"));
assertTrue(StringUtil.startsWithIgnoreCase("\u0690Bcdefg", "\u0690Bc"));
assertTrue(StringUtil.startsWithIgnoreCase("\u0690bcdefg", ""));
assertTrue(StringUtil.startsWithIgnoreCase("\u0690bcdefg", null));
assertTrue(StringUtil.startsWithIgnoreCase("\u0690bcdefg", "\u0690bcdefg"));
assertFalse(StringUtil.startsWithIgnoreCase(null, "xyz"));
assertFalse(StringUtil.startsWithIgnoreCase("\u0690bcdefg", "xyz"));
assertFalse(StringUtil.startsWithIgnoreCase("\u0690", "xyz"));
}
@Test
public void testEndsWithIgnoreCase()
{
assertTrue(StringUtil.endsWithIgnoreCase("\u0690bcd\u0690f\u0690", "\u0690f\u0690"));
assertTrue(StringUtil.endsWithIgnoreCase("\u0690bcdefg", "efg"));
assertTrue(StringUtil.endsWithIgnoreCase("\u0690bcdefg", "eFg"));
assertTrue(StringUtil.endsWithIgnoreCase("\u0690bcdeFg", "efg"));
assertTrue(StringUtil.endsWithIgnoreCase("\u0690bcdeFg", "eFg"));
assertTrue(StringUtil.endsWithIgnoreCase("\u0690bcdefg", ""));
assertTrue(StringUtil.endsWithIgnoreCase("\u0690bcdefg", null));
assertTrue(StringUtil.endsWithIgnoreCase("\u0690bcdefg", "\u0690bcdefg"));
assertFalse(StringUtil.endsWithIgnoreCase(null, "xyz"));
assertFalse(StringUtil.endsWithIgnoreCase("\u0690bcdefg", "xyz"));
assertFalse(StringUtil.endsWithIgnoreCase("\u0690", "xyz"));
}
@Test
public void testIndexFrom()
{
assertEquals(StringUtil.indexFrom("\u0690bcd", "xyz"),-1);
assertEquals(StringUtil.indexFrom("\u0690bcd", "\u0690bcz"),0);
assertEquals(StringUtil.indexFrom("\u0690bcd", "bcz"),1);
assertEquals(StringUtil.indexFrom("\u0690bcd", "dxy"),3);
}
@Test
public void testReplace()
{
String s="\u0690bc \u0690bc \u0690bc";
assertEquals(StringUtil.replace(s, "\u0690bc", "xyz"),"xyz xyz xyz");
assertTrue(StringUtil.replace(s,"xyz","pqy")==s);
s=" \u0690bc ";
assertEquals(StringUtil.replace(s, "\u0690bc", "xyz")," xyz ");
}
@Test
public void testUnquote()
{
String uq =" not quoted ";
assertTrue(StringUtil.unquote(uq)==uq);
assertEquals(StringUtil.unquote("' quoted string '")," quoted string ");
assertEquals(StringUtil.unquote("\" quoted string \"")," quoted string ");
assertEquals(StringUtil.unquote("' quoted\"string '")," quoted\"string ");
assertEquals(StringUtil.unquote("\" quoted'string \"")," quoted'string ");
}
@Test
public void testNonNull()
{
String nn="";
assertTrue(nn==StringUtil.nonNull(nn));
assertEquals("",StringUtil.nonNull(null));
}
/*
* Test for boolean equals(String, char[], int, int)
*/
@Test
public void testEqualsStringcharArrayintint()
{
assertTrue(StringUtil.equals("\u0690bc", new char[] {'x','\u0690','b','c','z'},1,3));
assertFalse(StringUtil.equals("axc", new char[] {'x','a','b','c','z'},1,3));
}
@Test
public void testAppend()
{
StringBuilder buf = new StringBuilder();
buf.append('a');
StringUtil.append(buf, "abc", 1, 1);
StringUtil.append(buf, (byte)12, 16);
StringUtil.append(buf, (byte)16, 16);
StringUtil.append(buf, (byte)-1, 16);
StringUtil.append(buf, (byte)-16, 16);
assertEquals("ab0c10fff0",buf.toString());
}
@Test
public void testSidConversion() throws Exception
{
String sid4 = "S-1-4-21-3623811015-3361044348-30300820";
String sid5 = "S-1-5-21-3623811015-3361044348-30300820-1013";
String sid6 = "S-1-6-21-3623811015-3361044348-30300820-1013-23445";
String sid12 = "S-1-12-21-3623811015-3361044348-30300820-1013-23445-21-3623811015-3361044348-30300820-1013-23445";
byte[] sid4Bytes = StringUtil.sidStringToBytes(sid4);
byte[] sid5Bytes = StringUtil.sidStringToBytes(sid5);
byte[] sid6Bytes = StringUtil.sidStringToBytes(sid6);
byte[] sid12Bytes = StringUtil.sidStringToBytes(sid12);
Assert.assertEquals(sid4, StringUtil.sidBytesToString(sid4Bytes));
Assert.assertEquals(sid5, StringUtil.sidBytesToString(sid5Bytes));
Assert.assertEquals(sid6, StringUtil.sidBytesToString(sid6Bytes));
Assert.assertEquals(sid12, StringUtil.sidBytesToString(sid12Bytes));
}
public static void main(String[] arg) throws Exception
{
String string = "Now \u0690xxxxxxxx";
System.err.println(string);
byte[] bytes=string.getBytes(StandardCharsets.UTF_8);
System.err.println(new String(bytes));
System.err.println(bytes.length);
long calc=0;
Utf8StringBuffer strbuf = new Utf8StringBuffer(bytes.length);
for (int i=0;i<10;i++)
{
long s1=System.currentTimeMillis();
for (int j=1000000; j-->0;)
{
calc+=new String(bytes,0,bytes.length,StandardCharsets.UTF_8).hashCode();
}
long s2=System.currentTimeMillis();
for (int j=1000000; j-->0;)
{
calc+=StringUtil.toUTF8String(bytes,0,bytes.length).hashCode();
}
long s3=System.currentTimeMillis();
for (int j=1000000; j-->0;)
{
Utf8StringBuffer buffer = new Utf8StringBuffer(bytes.length);
buffer.append(bytes,0,bytes.length);
calc+=buffer.toString().hashCode();
}
long s4=System.currentTimeMillis();
for (int j=1000000; j-->0;)
{
strbuf.reset();
strbuf.append(bytes,0,bytes.length);
calc+=strbuf.toString().hashCode();
}
long s5=System.currentTimeMillis();
System.err.println((s2-s1)+", "+(s3-s2)+", "+(s4-s3)+", "+(s5-s4));
}
System.err.println(calc);
}
@Test
public void testIsBlank()
{
Assert.assertTrue(StringUtil.isBlank(null));
Assert.assertTrue(StringUtil.isBlank(""));
Assert.assertTrue(StringUtil.isBlank("\r\n"));
Assert.assertTrue(StringUtil.isBlank("\t"));
Assert.assertTrue(StringUtil.isBlank(" "));
Assert.assertFalse(StringUtil.isBlank("a"));
Assert.assertFalse(StringUtil.isBlank(" a"));
Assert.assertFalse(StringUtil.isBlank("a "));
Assert.assertFalse(StringUtil.isBlank("."));
Assert.assertFalse(StringUtil.isBlank(";\n"));
}
@Test
public void testIsNotBlank()
{
Assert.assertFalse(StringUtil.isNotBlank(null));
Assert.assertFalse(StringUtil.isNotBlank(""));
Assert.assertFalse(StringUtil.isNotBlank("\r\n"));
Assert.assertFalse(StringUtil.isNotBlank("\t"));
Assert.assertFalse(StringUtil.isNotBlank(" "));
Assert.assertTrue(StringUtil.isNotBlank("a"));
Assert.assertTrue(StringUtil.isNotBlank(" a"));
Assert.assertTrue(StringUtil.isNotBlank("a "));
Assert.assertTrue(StringUtil.isNotBlank("."));
Assert.assertTrue(StringUtil.isNotBlank(";\n"));
}
@Test
public void testSanitizeHTML()
{
assertEquals(null,StringUtil.sanitizeXmlString(null));
assertEquals("",StringUtil.sanitizeXmlString(""));
assertEquals("&lt;&amp;&gt;",StringUtil.sanitizeXmlString("<&>"));
assertEquals("Hello &lt;Cruel&gt; World",StringUtil.sanitizeXmlString("Hello <Cruel> World"));
assertEquals("Hello ? World",StringUtil.sanitizeXmlString("Hello \u0000 World"));
}
@Test
public void testSplit()
{
assertThat(StringUtil.csvSplit(null),nullValue());
assertThat(StringUtil.csvSplit(null),nullValue());
assertThat(StringUtil.csvSplit(""),emptyArray());
assertThat(StringUtil.csvSplit(" \t\n"),emptyArray());
assertThat(StringUtil.csvSplit("aaa"),arrayContaining("aaa"));
assertThat(StringUtil.csvSplit(" \taaa\n"),arrayContaining("aaa"));
assertThat(StringUtil.csvSplit(" \ta\n"),arrayContaining("a"));
assertThat(StringUtil.csvSplit(" \t\u1234\n"),arrayContaining("\u1234"));
assertThat(StringUtil.csvSplit("aaa,bbb,ccc"),arrayContaining("aaa","bbb","ccc"));
assertThat(StringUtil.csvSplit("aaa,,ccc"),arrayContaining("aaa","","ccc"));
assertThat(StringUtil.csvSplit(",b b,"),arrayContaining("","b b"));
assertThat(StringUtil.csvSplit(",,bbb,,"),arrayContaining("","","bbb",""));
assertThat(StringUtil.csvSplit(" aaa, bbb, ccc"),arrayContaining("aaa","bbb","ccc"));
assertThat(StringUtil.csvSplit("aaa,\t,ccc"),arrayContaining("aaa","","ccc"));
assertThat(StringUtil.csvSplit(" , b b , "),arrayContaining("","b b"));
assertThat(StringUtil.csvSplit(" ,\n,bbb, , "),arrayContaining("","","bbb",""));
assertThat(StringUtil.csvSplit("\"aaa\", \" b,\\\"\",\"\""),arrayContaining("aaa"," b,\"",""));
}
}