/*
* (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed 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.
*
* Contributors:
* Nuxeo - initial API and implementation
*
* $Id: TestStringUtils.java 27204 2007-11-14 19:14:10Z gracinet $
*/
package org.nuxeo.common.utils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
/**
* @author <a href="mailto:at@nuxeo.com">Anahide Tchertchian</a>
*/
public class TestStringUtils {
@Test
public void testToAscii() throws UnsupportedEncodingException {
String s = "h\u00E9h\u00E9";
assertEquals("hehe", StringUtils.toAscii(s));
}
@Test
public void testSplit() {
String str;
String[] ar;
str = ",a ,,, b";
ar = StringUtils.split(str, ',', false);
assertTrue(Arrays.equals(new String[] { "", "a ", "", "", " b" }, ar));
ar = StringUtils.split(str, ',', true);
assertTrue(Arrays.equals(new String[] { "", "a", "", "", "b" }, ar));
str = "a , b, c,\n d";
ar = StringUtils.split(str, ',', false);
assertTrue(Arrays.equals(new String[] { "a ", " b", " c", "\n d" }, ar));
ar = StringUtils.split(str, ',', true);
assertTrue(Arrays.equals(new String[] { "a", "b", "c", "d" }, ar));
str = "a , b, c, d,";
ar = StringUtils.split(str, ',', false);
assertTrue(Arrays.equals(new String[] { "a ", " b", " c", " d", "" }, ar));
ar = StringUtils.split(str, ',', true);
assertTrue(Arrays.equals(new String[] { "a", "b", "c", "d", "" }, ar));
str = " , , a , b, c, d , , ";
ar = StringUtils.split(str, ',', false);
assertTrue(Arrays.equals(new String[] { " ", " ", " a ", " b", " c", " d ", " ", " " }, ar));
ar = StringUtils.split(str, ',', true);
assertTrue(Arrays.equals(new String[] { "", "", "a", "b", "c", "d", "", "" }, ar));
}
/**
* @since 9.1
*/
@Test
public void testSplitWithEscape() {
String str = " , , a , b, c, d , , ";
List<String> li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { " ", " ", " a ", " b", " c", " d ", " ", " " },
li.toArray(new String[li.size()])));
li = StringUtils.split(str, ',', '\\', true);
assertTrue(
Arrays.equals(new String[] { "", "", "a", "b", "c", "d", "", "" }, li.toArray(new String[li.size()])));
str = " , , a , b, c, d , ,";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { " ", " ", " a ", " b", " c", " d ", " ", "" },
li.toArray(new String[li.size()])));
li = StringUtils.split(str, ',', '\\', true);
assertTrue(
Arrays.equals(new String[] { "", "", "a", "b", "c", "d", "", "" }, li.toArray(new String[li.size()])));
str = "a , b\\,aobad, c,\n d";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { "a ", " b,aobad", " c", "\n d" }, li.toArray(new String[li.size()])));
li = StringUtils.split(str, ',', '\\', true);
assertTrue(Arrays.equals(new String[] { "a", "b,aobad", "c", "d" }, li.toArray(new String[li.size()])));
str = "a , b\\\\,aobad, c, d\\";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(
Arrays.equals(new String[] { "a ", " b\\", "aobad", " c", " d\\" }, li.toArray(new String[li.size()])));
li = StringUtils.split(str, ',', '\\', true);
assertTrue(Arrays.equals(new String[] { "a", "b\\", "aobad", "c", "d\\" }, li.toArray(new String[li.size()])));
str = "a | b\\|aobad| c|\n d";
li = StringUtils.split(str, '|', '\\', false);
assertTrue(Arrays.equals(new String[] { "a ", " b|aobad", " c", "\n d" }, li.toArray(new String[li.size()])));
li = StringUtils.split(str, '|', '\\', true);
assertTrue(Arrays.equals(new String[] { "a", "b|aobad", "c", "d" }, li.toArray(new String[li.size()])));
str = "a \\ b\\\\aobad\\ c\\\n d";
try {
li = StringUtils.split(str, '\\', '\\', false);
fail("Using the same character for escape and delimiter should not be possible");
} catch (IllegalArgumentException e) {
// Expected
}
try {
li = StringUtils.split(str, '\\', '\\', true);
fail("Using the same character for escape and delimiter should not be possible");
} catch (IllegalArgumentException e) {
// Expected
}
str = "foo\\\\bar";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { "foo\\bar" }, li.toArray(new String[li.size()])));
str = "toto,foo\\\\bar";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { "toto", "foo\\bar" }, li.toArray(new String[li.size()])));
str = "foo\\,bar";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { "foo,bar" }, li.toArray(new String[li.size()])));
str = "foo\\,bar,foo\\\\bar";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { "foo,bar", "foo\\bar" }, li.toArray(new String[li.size()])));
str = "foo\\\\\\,bar";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { "foo\\,bar" }, li.toArray(new String[li.size()])));
str = "foo\\\\,bar";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { "foo\\", "bar" }, li.toArray(new String[li.size()])));
str = "foo\\zbar";
li = StringUtils.split("foo\\zbar", ',', '\\', false);
assertTrue(Arrays.equals(new String[] { "foo\\zbar" }, li.toArray(new String[li.size()])));
str = "";
li = StringUtils.split(str, ',', '\\', false);
assertTrue(Arrays.equals(new String[] { "" }, li.toArray(new String[li.size()])));
}
}