blob: f32309b43964d2ecf0b098d98ddc33ebd4a61da1 [file] [log] [blame]
/**
* 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.tajo.util;
import org.apache.commons.lang.CharUtils;
import org.apache.commons.lang.StringEscapeUtils;
import org.junit.Test;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.*;
public class TestStringUtil {
@Test
public void testUnicodeEscapedDelimiter() {
for (int i = 0; i < 128; i++) {
char c = (char) i;
String delimiter = CharUtils.unicodeEscaped(c);
String escapedDelimiter = StringUtils.unicodeEscapedDelimiter(delimiter);
assertEquals(delimiter, escapedDelimiter);
assertEquals(1, StringEscapeUtils.unescapeJava(escapedDelimiter).length());
assertEquals(c, StringEscapeUtils.unescapeJava(escapedDelimiter).charAt(0));
}
}
@Test
public void testUnescapedDelimiter() {
for (int i = 0; i < 128; i++) {
char c = (char) i;
String delimiter = String.valueOf(c);
String escapedDelimiter = StringUtils.unicodeEscapedDelimiter(delimiter);
assertEquals(CharUtils.unicodeEscaped(c), escapedDelimiter);
assertEquals(1, StringEscapeUtils.unescapeJava(escapedDelimiter).length());
assertEquals(c, StringEscapeUtils.unescapeJava(escapedDelimiter).charAt(0));
}
}
@Test
public void testVariousDelimiter() {
/*
* Character ASCII Unicode
*
* Horizontal tab 9 <U0009>
* Space Bar 32 <U0020>
* 1 49 <U0031>
* | 124 <U007c>
*
* */
String escapedDelimiter = "\\u0031";
assertEquals(escapedDelimiter, StringUtils.unicodeEscapedDelimiter("1"));
assertEquals(escapedDelimiter, StringUtils.unicodeEscapedDelimiter("\\1"));
assertEquals(escapedDelimiter, StringUtils.unicodeEscapedDelimiter("\\u0031"));
assertEquals(escapedDelimiter, StringUtils.unicodeEscapedDelimiter((char)49));
assertNotEquals(escapedDelimiter, StringUtils.unicodeEscapedDelimiter('\001'));
String delimiter = "|";
assertEquals("\\u007c", StringUtils.unicodeEscapedDelimiter(delimiter));
assertEquals(delimiter, StringEscapeUtils.unescapeJava(StringUtils.unicodeEscapedDelimiter(delimiter)));
String commaDelimiter = ",";
assertEquals("\\u002c", StringUtils.unicodeEscapedDelimiter(commaDelimiter));
assertEquals(commaDelimiter, StringEscapeUtils.unescapeJava(StringUtils.unicodeEscapedDelimiter(commaDelimiter)));
String tabDelimiter = "\t";
assertEquals("\\u0009", StringUtils.unicodeEscapedDelimiter(tabDelimiter));
assertEquals(tabDelimiter, StringEscapeUtils.unescapeJava(StringUtils.unicodeEscapedDelimiter(tabDelimiter)));
String spaceDelimiter = " ";
assertEquals("\\u0020", StringUtils.unicodeEscapedDelimiter(spaceDelimiter));
assertEquals(spaceDelimiter, StringEscapeUtils.unescapeJava(StringUtils.unicodeEscapedDelimiter(spaceDelimiter)));
}
@Test
public void testAsciiBytes() {
String asciiText = "abcde 12345 ABCDE";
assertArrayEquals(asciiText.getBytes(), BytesUtils.toASCIIBytes(asciiText.toCharArray()));
}
@Test
public void testSplitBytes() {
String text = "abcde|12345|ABCDE";
char separatorChar = '|';
String[] textArray = org.apache.commons.lang.StringUtils.splitPreserveAllTokens(text, separatorChar);
byte[][] bytesArray = BytesUtils.splitPreserveAllTokens(text.getBytes(), separatorChar, 3);
assertEquals(textArray.length, bytesArray.length);
for (int i = 0; i < textArray.length; i++){
assertArrayEquals(textArray[i].getBytes(), bytesArray[i]);
}
}
@Test
public void testSplitProjectionBytes() {
String text = "abcde|12345|ABCDE";
int[] target = new int[]{ 1 };
char separatorChar = '|';
String[] textArray = org.apache.commons.lang.StringUtils.splitPreserveAllTokens(text, separatorChar);
byte[][] bytesArray = BytesUtils.splitPreserveAllTokens(text.getBytes(), separatorChar, target, 3);
assertEquals(textArray.length, bytesArray.length);
assertNull(bytesArray[0]);
assertNotNull(bytesArray[1]);
assertArrayEquals(textArray[1].getBytes(), bytesArray[1]);
assertNull(bytesArray[2]);
}
@Test
public void testConvertBytesToChars() {
byte[] testStringArray = new byte[] { 0x74, 0x61, 0x6A, 0x6F };
assertArrayEquals(new char[] { 't', 'a', 'j', 'o' },
StringUtils.convertBytesToChars(testStringArray, Charset.forName("UTF-8")));
testStringArray = new byte[] { (byte) 0xED, (byte) 0x83, (byte) 0x80, (byte) 0xEC, (byte) 0xA1, (byte) 0xB0 };
assertArrayEquals(new char[] { '\ud0c0', '\uc870' },
StringUtils.convertBytesToChars(testStringArray, Charset.forName("UTF-8")));
}
@Test
public void testConvertCharsToBytes() {
char[] testStringArray = new char[] { 't', 'a', 'j', 'o' };
assertArrayEquals(new byte[] { 0x74, 0x61, 0x6A, 0x6F },
StringUtils.convertCharsToBytes(testStringArray, Charset.forName("UTF-8")));
testStringArray = new char[] { '\ud0c0', '\uc870' };
assertArrayEquals(new byte[] { (byte) 0xED, (byte) 0x83, (byte) 0x80, (byte) 0xEC, (byte) 0xA1, (byte) 0xB0 },
StringUtils.convertCharsToBytes(testStringArray, Charset.forName("UTF-8")));
}
@Test
public void testJoinIterable() {
List<String> testList = new ArrayList<>();
testList.add("t");
testList.add("a");
testList.add("j");
testList.add("o");
assertTrue(StringUtils.join(testList).equals("t, a, j, o"));
}
}