blob: 372b7c6d9cfd1d345961c6b38110cf676821b65b [file] [log] [blame]
/**
*******************************************************************************
* Copyright (C) 1996-2001, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/test/text/Attic/UTF16Test.java,v $
* $Date: 2001/03/23 19:52:03 $
* $Revision: 1.5 $
*
*******************************************************************************
*/
package com.ibm.icu.test.text;
import com.ibm.test.TestFmwk;
import com.ibm.text.UCharacter;
import com.ibm.text.UTF16;
/**
* Testing class for UTF16
* @author Syn Wee Quek
* @since feb 09 2001
*/
public final class UTF16Test extends TestFmwk
{
// constructor ===================================================
/**
* Constructor
*/
public UTF16Test()
{
}
// public methods ================================================
/**
* Testing UTF16 class methods append, getCharCount and bounds
*/
public void TestUTF16AppendBoundCount()
{
StringBuffer str = new StringBuffer("this is a string ");
int initstrsize = str.length();
int length;
for (int i = UCharacter.MIN_VALUE; i < UCharacter.MAX_VALUE; i += 100)
{
length = str.length();
UTF16.append(str, i);
// this is to cater for the combination of 0xDBXX 0xDC50 which forms
// a supplementary character
if (i == 0xDC50)
initstrsize --;
if (UTF16.countCodePoint(str.toString()) != initstrsize + (i / 100) + 1)
{
errln("FAIL Counting code points in string appended with " +
" 0x" + Integer.toHexString(i));
break;
}
if (!UCharacter.isSupplementary(i))
{
if (UTF16.getCharCount(i) != 1)
{
errln("FAIL Counting BMP character size error" );
break;
}
if (str.length() != length + 1)
{
errln("FAIL Adding a BMP character error" );
break;
}
if (!UTF16.isSurrogate((char)i) &&
(UTF16.bounds(str.toString(), str.length() - 1) !=
UTF16.SINGLE_CHAR_BOUNDARY ||
UTF16.boundsAtCodePointOffset(str.toString(),
initstrsize + (i /100))
!= UTF16.SINGLE_CHAR_BOUNDARY))
{
errln("FAIL Finding BMP character bounds error" );
break;
}
}
else
{
if (UTF16.getCharCount(i) != 2)
{
errln("FAIL Counting Supplementary character size error" );
break;
}
if (str.length() != length + 2)
{
errln("FAIL Adding a Supplementary character error" );
break;
}
length = str.length();
if (UTF16.bounds(str.toString(), str.length() - 2) !=
UTF16.LEAD_SURROGATE_BOUNDARY ||
UTF16.bounds(str.toString(), str.length() - 1) !=
UTF16.TRAIL_SURROGATE_BOUNDARY ||
UTF16.boundsAtCodePointOffset(str.toString(),
initstrsize + (i / 100))
!= UTF16.LEAD_SURROGATE_BOUNDARY)
{
errln("FAIL Finding Supplementary character bounds error with " +
"string appended with 0x" + Integer.toHexString(i));
break;
}
}
}
}
/**
* Testing UTF16 class methods findCodePointOffset, findOffsetFromCodePoint, charAt and
* charAtCodePoint
*/
public void TestUTF16OffsetCharAt()
{
StringBuffer str = new StringBuffer("12345");
UTF16.append(str, 0x10001);
str.append("67890");
UTF16.append(str, 0x10002);
String s = str.toString();
if (UTF16.charAt(s, 0) != '1' || UTF16.charAt(s, 2) != '3' ||
UTF16.charAt(s, 5) != 0x10001 || UTF16.charAt(s, 6) != 0x10001 ||
UTF16.charAt(s, 12) != 0x10002 || UTF16.charAt(s, 13) != 0x10002 ||
UTF16.charAtCodePointOffset(s, 0) != '1' ||
UTF16.charAtCodePointOffset(s, 2) != '3' ||
UTF16.charAtCodePointOffset(s, 5) != 0x10001 ||
UTF16.charAtCodePointOffset(s, 6) != '6' ||
UTF16.charAtCodePointOffset(s, 11) != 0x10002)
errln("FAIL Getting character from string error" );
if (UTF16.findCodePointOffset(s, 3) != 3 ||
UTF16.findCodePointOffset(s, 5) != 5 ||
UTF16.findCodePointOffset(s, 6) != 5)
errln("FAIL Getting codepoint offset from string error" );
if (UTF16.findOffsetFromCodePoint(s, 3) != 3 ||
UTF16.findOffsetFromCodePoint(s, 5) != 5 ||
UTF16.findOffsetFromCodePoint(s, 6) != 7)
errln("FAIL Getting UTF16 offset from codepoint in string error" );
UTF16.setCharAt(str, 3, '3');
UTF16.setCharAtCodePointOffset(str, 4, '3');
if (UTF16.charAt(str.toString(), 3) != '3' ||
UTF16.charAtCodePointOffset(str.toString(), 3) != '3' ||
UTF16.charAt(str.toString(), 4) != '3' ||
UTF16.charAtCodePointOffset(str.toString(), 4) != '3')
errln("FAIL Setting non-supplementary characters at a " +
"non-supplementary position");
UTF16.setCharAt(str, 5, '3');
if (UTF16.charAt(str.toString(), 5) != '3' ||
UTF16.charAtCodePointOffset(str.toString(), 5) != '3' ||
UTF16.charAt(str.toString(), 6) != '6' ||
UTF16.charAtCodePointOffset(str.toString(), 5) != '3' ||
UTF16.charAtCodePointOffset(str.toString(), 6) != '6')
errln("FAIL Setting non-supplementary characters at a " +
"supplementary position");
UTF16.setCharAt(str, 5, 0x10001);
if (UTF16.charAt(str.toString(), 5) != 0x10001 ||
UTF16.charAtCodePointOffset(str.toString(), 5) != 0x10001 ||
UTF16.charAt(str.toString(), 7) != '6' ||
UTF16.charAtCodePointOffset(str.toString(), 6) != '6')
errln("FAIL Setting supplementary characters at a " +
"non-supplementary position");
UTF16.setCharAtCodePointOffset(str, 5, '3');
if (UTF16.charAt(str.toString(), 5) != '3' ||
UTF16.charAtCodePointOffset(str.toString(), 5) != '3' ||
UTF16.charAt(str.toString(), 6) != '6' ||
UTF16.charAtCodePointOffset(str.toString(), 6) != '6')
errln("FAIL Setting non-supplementary characters at a " +
"supplementary position");
UTF16.setCharAt(str, 5, 0x10001);
if (UTF16.charAt(str.toString(), 5) != 0x10001 ||
UTF16.charAtCodePointOffset(str.toString(), 5) != 0x10001 ||
UTF16.charAt(str.toString(), 7) != '6' ||
UTF16.charAtCodePointOffset(str.toString(), 6) != '6')
errln("FAIL Setting supplementary characters at a " +
"non-supplementary position");
UTF16.setCharAt(str, 5, 0xD800);
UTF16.setCharAt(str, 6, 0xD800);
if (UTF16.charAt(str.toString(), 5) != 0xD800 ||
UTF16.charAt(str.toString(), 6) != 0xD800 ||
UTF16.charAtCodePointOffset(str.toString(), 5) != 0xD800 ||
UTF16.charAtCodePointOffset(str.toString(), 6) != 0xD800)
errln("FAIL Setting lead characters at a supplementary position");
UTF16.setCharAt(str, 5, 0xDDDD);
if (UTF16.charAt(str.toString(), 5) != 0xDDDD ||
UTF16.charAt(str.toString(), 6) != 0xD800 ||
UTF16.charAtCodePointOffset(str.toString(), 5) != 0xDDDD ||
UTF16.charAtCodePointOffset(str.toString(), 6) != 0xD800)
errln("FAIL Setting trail characters at a surrogate position");
UTF16.setCharAt(str, 5, '3');
if (UTF16.charAt(str.toString(), 5) != '3' ||
UTF16.charAt(str.toString(), 6) != 0xD800 ||
UTF16.charAtCodePointOffset(str.toString(), 5) != '3' ||
UTF16.charAtCodePointOffset(str.toString(), 6) != 0xD800)
errln("FAIL Setting non-supplementary characters at a surrogate " +
"position");
}
public static void main(String[] arg)
{
try
{
UTF16Test test = new UTF16Test();
test.run(arg);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}