/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.openjpa.lib.util;
import java.util.concurrent.TimeUnit;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
public class StringUtilTest {
@Test
public void testStringSplit() {
String val = " a b c \n d \n \n";
String[] jsplit = val.split(" ");
String[] split1 = StringUtil.split(val, " ", 0);
String[] split2 = StringUtil.split(val, " ", 30);
String[] split3 = StringUtil.split(val, " ", 3);
Assert.assertEquals(3, split3.length);
Assert.assertEquals("", split3[0]);
Assert.assertEquals("a", split3[1]);
Assert.assertEquals("b c \n d \n \n", split3[2]);
}
@Test
public void testStringSplitEnding() {
String val = "a%B%C%";
String[] jsplit = val.split("%");
String[] ssplit = StringUtil.split(val, "%", Integer.MAX_VALUE);
Assert.assertEquals(4, ssplit.length);
Assert.assertArrayEquals(ssplit, new String[]{"a", "B", "C", ""});
}
@Test
public void testStringSplitFatTokenEnding() {
String val = "a-.-B-.-C-.-";
String[] jsplit = val.split("-.-");
String[] ssplit = StringUtil.split(val, "-.-", Integer.MAX_VALUE);
Assert.assertEquals(4, ssplit.length);
Assert.assertArrayEquals(ssplit, new String[]{"a", "B", "C", ""});
}
@Test
public void testTrimToNull() {
Assert.assertNull(StringUtil.trimToNull(null));
Assert.assertNull(StringUtil.trimToNull(" "));
Assert.assertNull(StringUtil.trimToNull(" "));
Assert.assertNull(StringUtil.trimToNull(" \n "));
Assert.assertEquals("A", StringUtil.trimToNull(" A"));
Assert.assertEquals("A", StringUtil.trimToNull("A "));
Assert.assertEquals("A", StringUtil.trimToNull(" A "));
Assert.assertEquals("A", StringUtil.trimToNull(" A \n "));
}
@Test
public void testStringCapitalize() {
Assert.assertNull(StringUtil.capitalize(null));
Assert.assertEquals("", StringUtil.capitalize(""));
Assert.assertEquals(" ", StringUtil.capitalize(" "));
Assert.assertEquals("Ahoi", StringUtil.capitalize("ahoi"));
Assert.assertEquals("Ahoi", StringUtil.capitalize("Ahoi"));
Assert.assertEquals(" ahoi", StringUtil.capitalize(" ahoi")); // no trim
Assert.assertEquals("\u00d6hoi", StringUtil.capitalize("\u00f6hoi"));
Assert.assertEquals("\u00dfhoi", StringUtil.capitalize("\u00dfhoi"));
}
@Test
public void testStringEndsWith() {
Assert.assertFalse(StringUtil.endsWithIgnoreCase(null, "bla"));
Assert.assertFalse(StringUtil.endsWithIgnoreCase("bla", null));
Assert.assertTrue(StringUtil.endsWithIgnoreCase(null, null));
Assert.assertTrue(StringUtil.endsWithIgnoreCase(null, null));
Assert.assertTrue(StringUtil.endsWithIgnoreCase("I have a cAt", "Cat"));
Assert.assertFalse(StringUtil.endsWithIgnoreCase("at", "Cat"));
Assert.assertTrue(StringUtil.endsWithIgnoreCase("at", ""));
}
@Test
public void testStringParse() {
try {
StringUtil.parse(null, null);
Assert.fail("NullPointerException expected");
}
catch (NullPointerException npe) {
// all fine
}
// test null representation for primitives
Assert.assertEquals(0, (int) StringUtil.parse(null, byte.class));
Assert.assertEquals(0, (char) StringUtil.parse(null, char.class));
Assert.assertEquals(0, (double) StringUtil.parse(null, double.class), 0);
Assert.assertEquals(0f, (float) StringUtil.parse(null, float.class), 0);
Assert.assertEquals(0, (int) StringUtil.parse(null, int.class));
Assert.assertEquals(0L, (long) StringUtil.parse(null, long.class));
Assert.assertEquals(0, (short) StringUtil.parse(null, short.class));
Assert.assertEquals(false, StringUtil.parse(null, boolean.class));
// special fun:
try {
StringUtil.parse(null, void.class);
Assert.fail("IllegalStateException expected");
}
catch (IllegalStateException ise) {
// all fine
}
Assert.assertNull(StringUtil.parse(null, Character.class));
Assert.assertNull(StringUtil.parse(null, Double.class));
Assert.assertNull(StringUtil.parse(null, Float.class));
Assert.assertNull(StringUtil.parse(null, Integer.class));
Assert.assertNull(StringUtil.parse(null, Long.class));
Assert.assertNull(StringUtil.parse(null, Short.class));
Assert.assertNull(StringUtil.parse(null, Boolean.class));
try {
StringUtil.parse(null, char[].class);
Assert.fail("IllegalArgumentException expected");
}
catch (IllegalArgumentException iae) {
// all fine
}
Assert.assertEquals('C', (char) StringUtil.parse("C", char.class));
Assert.assertEquals(35.2345, (double) StringUtil.parse("35.2345", double.class), 0.000001);
Assert.assertEquals(35.2345, (float) StringUtil.parse("35.2345", float.class), 0.000001);
Assert.assertEquals(42, (int) StringUtil.parse("42", int.class));
Assert.assertEquals(42L, (long) StringUtil.parse("42", long.class));
Assert.assertEquals(42, (short) StringUtil.parse("42", short.class));
Assert.assertEquals(true, StringUtil.parse("true", boolean.class));
Assert.assertEquals(true, StringUtil.parse("TRUE", boolean.class));
Assert.assertEquals(false, StringUtil.parse("false", boolean.class));
Assert.assertEquals(false, StringUtil.parse("FALSE", boolean.class));
Assert.assertEquals(false, StringUtil.parse("bla", boolean.class));
Assert.assertEquals('C', (char) StringUtil.parse("C", Character.class));
Assert.assertEquals(35.2345, (double) StringUtil.parse("35.2345", Double.class), 0.000001);
Assert.assertEquals(35.2345, (float) StringUtil.parse("35.2345", Float.class), 0.000001);
Assert.assertEquals(42, (int) StringUtil.parse("42", Integer.class));
Assert.assertEquals(42L, (long) StringUtil.parse("42", Long.class));
Assert.assertEquals(42, (short) StringUtil.parse("42", Short.class));
Assert.assertEquals(true, StringUtil.parse("true", Boolean.class));
Assert.assertEquals(true, StringUtil.parse("TRUE", Boolean.class));
Assert.assertEquals(false, StringUtil.parse("false", Boolean.class));
Assert.assertEquals(false, StringUtil.parse("FALSE", Boolean.class));
Assert.assertEquals(false, StringUtil.parse("bla", Boolean.class));
try {
StringUtil.parse(null, StringUtilTest.class);
Assert.fail("IllegalArgumentException expected");
}
catch (IllegalArgumentException iae) {
// all fine
}
}
@Test
public void testStringJoin() {
Assert.assertEquals("AAA,BBB,CCC", StringUtil.join(new String[]{"AAA", "BBB", "CCC"}, ","));
Assert.assertEquals("AAA", StringUtil.join(new String[]{"AAA"}, ","));
Assert.assertEquals("AAAnullBBBnullCCC", StringUtil.join(new String[]{"AAA", "BBB", "CCC"}, null));
Assert.assertEquals("", StringUtil.join(new String[]{}, ","));
Assert.assertNull(StringUtil.join(null, null));
Assert.assertNull(StringUtil.join(null, ","));
}
@Test
@Ignore("only needed for manual performance tests")
public void stringSplitPerformanceTest() {
String val = " asdfsfsfsfafasdf basdfasf cs d efdfdfdfdfdfdfdf ghai asdf " +
"asdflkj lökajdf lkölkasdflk jklö adfk \n adslsfl \t adsfsfd";
long start = System.nanoTime();
for (int i = 1; i < 10000000; i++) {
StringUtil.split(val, "sd", 0);
//X val.split("sd");
//X serp.util.Strings.split(val, "sd", 0);
}
long stop = System.nanoTime();
System.out.println("took: " + TimeUnit.NANOSECONDS.toMillis(stop - start));
}
@Test
@Ignore("only needed for manual performance tests")
public void testStringsReplacePerformance() {
String val = "This is my fnx test suite for fnx replacement to fnx=fnx";
long start = System.nanoTime();
for (int i = 1; i < 10000000; i++) {
//X Strings.replace(val, "fnx", "weirdo function");
//X val.replace("fnx", "weirdo function");
StringUtil.replace(val, "fnx", "weirdo function");
}
long stop = System.nanoTime();
System.out.println("took: " + TimeUnit.NANOSECONDS.toMillis(stop - start));
}
@Test
@Ignore("only needed for manual performance tests")
public void testStringJoinPerformance() {
String[] vals = {"A", "BDS", "DSD", "XYZ", "HOHOHO", "AND", "SOMETHING", "ELSE"};
long start = System.nanoTime();
for (int i = 1; i < 10000000; i++) {
//X Strings.join(vals, "-.-");
StringUtil.join(vals, "-.-");
}
long stop = System.nanoTime();
System.out.println("took: " + TimeUnit.NANOSECONDS.toMillis(stop - start));
}
}