package org.marketcetera.util.unicode;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.CharEncoding;
import org.junit.Test;
import org.marketcetera.util.test.TestCaseBase;
import static org.junit.Assert.*;
import static org.marketcetera.util.test.UnicodeData.*;
import static org.marketcetera.util.unicode.UnicodeCharset.*;
/**
* @author tlerios@marketcetera.com
* @since 0.6.0
* @version $Id: UnicodeCharsetTest.java 16154 2012-07-14 16:34:05Z colin $
*/
/* $License$ */
public class UnicodeCharsetTest
extends TestCaseBase
{
private static void singlePrefix
(UnicodeCharset charset,
String name,
byte[] dataIn,
byte[] dataOut)
throws Exception
{
assertEquals(name,charset.getName());
assertTrue(charset.isSupported());
charset.assertSupported();
assertNull(charset.decode(null));
assertNull(charset.decode(null,0,0));
assertNull(charset.encode(null));
assertEquals(COMBO,charset.decode(dataIn));
byte[] inEx=ArrayUtils.addAll
(new byte[] {(byte)0x00,(byte)0x01},dataIn);
inEx=ArrayUtils.addAll
(inEx,new byte[] {(byte)0x00,(byte)0x01});
assertEquals(COMBO,charset.decode(inEx,2,inEx.length-4));
assertArrayEquals(dataOut,charset.encode(COMBO));
}
private static void single
(UnicodeCharset charset,
String name,
byte[] data)
throws Exception
{
singlePrefix(charset,name,data,data);
}
@Test
public void utf8()
throws Exception
{
single(UTF8,CharEncoding.UTF_8,COMBO_UTF8);
}
@Test
public void utf16()
throws Exception
{
single(UTF16BE,CharEncoding.UTF_16BE,COMBO_UTF16BE);
single(UTF16LE,CharEncoding.UTF_16LE,COMBO_UTF16LE);
byte[] dataOut=ArrayUtils.addAll
(Signature.UTF16BE.getMark(),COMBO_UTF16BE);
singlePrefix
(UTF16,CharEncoding.UTF_16,COMBO_UTF16BE,dataOut);
singlePrefix
(UTF16,CharEncoding.UTF_16,ArrayUtils.addAll
(Signature.UTF16BE.getMark(),COMBO_UTF16BE),dataOut);
singlePrefix
(UTF16,CharEncoding.UTF_16,ArrayUtils.addAll
(Signature.UTF16LE.getMark(),COMBO_UTF16LE),dataOut);
}
@Test
public void utf32()
throws Exception
{
single(UTF32BE,"UTF-32BE",COMBO_UTF32BE);
single(UTF32LE,"UTF-32LE",COMBO_UTF32LE);
singlePrefix
(UTF32,"UTF-32",COMBO_UTF32BE,COMBO_UTF32BE);
singlePrefix
(UTF32,"UTF-32",ArrayUtils.addAll
(Signature.UTF32BE.getMark(),COMBO_UTF32BE),
COMBO_UTF32BE);
singlePrefix
(UTF32,"UTF-32",ArrayUtils.addAll
(Signature.UTF32LE.getMark(),COMBO_UTF32LE),
COMBO_UTF32BE);
}
}