blob: 0e4c491bcb19f21055816970073ecb29bd9d55b1 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 1996-2000, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/translit/Attic/HexToUnicodeTransliteratorTest.java,v $
* $Date: 2000/10/09 16:32:07 $
* $Revision: 1.2 $
*
*****************************************************************************************
*/
package com.ibm.test.translit;
import com.ibm.text.*;
import com.ibm.test.*;
import com.ibm.util.Utility;
import java.text.*;
import java.util.*;
/**
* @test
* @summary General test of HexToUnicodeTransliterator
*/
public class HexToUnicodeTransliteratorTest extends TestFmwk {
public static void main(String[] args) throws Exception {
new HexToUnicodeTransliteratorTest().run(args);
}
/**
* Used by TestConstruction() and TestTransliterate.
*/
UnicodeFilter HexFilter=new UnicodeFilter() {
public boolean contains(char c) {
if(c == 0x0061 || c == 0x0063 )
return false;
else
return true;
}
};
public void TestConstruction(){
logln("Testing the construction HexToUnicodeTransliterator()");
HexToUnicodeTransliterator trans1=new HexToUnicodeTransliterator();
logln("Testing the cosntruction HexToUnicodeTransliterator(pattern)");
String pattern="\\\\U+0000abc";
try{
trans1=new HexToUnicodeTransliterator(pattern);
}catch(IllegalArgumentException ex2) {
errln("FAIL: HexToUnicodeTransliterator construction failed with pattern=" + pattern + " Exception= " + ex2.toString());
}
logln("Testing the cosntruction HexToUnicodeTransliterator(pattern) with illegal pattern");
String pattern2="\\X+";
try{
trans1=new HexToUnicodeTransliterator(pattern2);
}catch(IllegalArgumentException ex3) {
logln("OK: construction with Illegal pattern handled correctly");
}
logln("Testing the construction HexToUnicodeTransliterator(pattern, adoptedFilter=null)");
try{
trans1=new HexToUnicodeTransliterator(pattern, null);
}catch(IllegalArgumentException ex4) {
errln("FAIL: HexToUnicodeTransliterator(pattern, adoptedFilter=null) construction failed. Exception= " + ex4.toString());
}
logln("Testing the construction HexToUnicodeTransliterator(pattern, adoptedFilter)");
try{
trans1=new HexToUnicodeTransliterator(pattern, HexFilter);
}catch(IllegalArgumentException ex4) {
errln("FAIL: HexToUnicodeTransliterator(pattern, adoptedFilter) construction failed. Exception= " + ex4.toString());
}
}
public void TestPattern(){
logln("Testing the applyPattern() and toPattern() API of HexToUnicodeTransliterator");
/*default transliterator has pattern \\u0000*/
HexToUnicodeTransliterator transdefault=new HexToUnicodeTransliterator();
String defaultpattern=transdefault.toPattern();
String pattern1="\\\\U+0000";
HexToUnicodeTransliterator trans1=null;
try{
trans1=new HexToUnicodeTransliterator(pattern1, null);
}catch(IllegalArgumentException ex1) {
errln("FAIL: HexToUnicodeTransliterator construction failed with pattern =" + pattern1 +
"Exception:" + ex1.toString());
}
/*test toPattern() */
if(transdefault.toPattern().equals(trans1.toPattern()) == true ||
transdefault.toPattern().equals("\\\\u0000;\\\\U0000;u+0000;U+0000") != true ||
trans1.toPattern().equals(pattern1) != true ){
errln("Error: toPattern() failed");
}
/*apply patterns for transdefault*/
String str="abKf";
expectPattern(transdefault, pattern1, "\\U+0061\\U+0062\\U+004B\\U+0066", str);
expectPattern(transdefault, "\\U##00,", "U61,U62,U4B,U66,", str);
expectPattern(transdefault, defaultpattern, "\\u0061\\u0062\\u004B\\u0066", str);
expectPattern(trans1, "\\uni0000", "uni0061uni0062uni004Buni0066", str);
expectPattern(trans1, "\\\\S-0000-E", "\\S-0061-E\\S-0062-E\\S-004B-E\\S-0066-E", str);
expectPattern(trans1, "\\\\S-0000-E", "\\S-0061-E\\S-0062-E\\S-004B-E\\S-0066-E", str);
expectPattern(trans1, "\\u##0000", "\\u##0061\\u##0062", "FAIL");
expectPattern(trans1, "\\*0000", "*0061*0062*004B*0066", str);
expectPattern(trans1, "\\u####", "\\u##0061\\u##0062", "FAIL");
}
public void TestSimpleTransliterate(){
String pattern1="\\\\U+0000";
HexToUnicodeTransliterator trans1=null;
try{
trans1=new HexToUnicodeTransliterator(pattern1, null);
}catch(IllegalArgumentException iae){
errln("HexToUnicodeTransliterator(pattern1, null) construction failed with pattern ="
+ pattern1 + "Exception:" + iae.toString());
}
String source="He\\U+006C\\U+006C\\U+006F";
String expected="Hello";
expectTranslit(trans1, ":Replaceable ", source, 1, source.length(), 2, expected);
expect(trans1, "", "\\U+0048\\U+0065\\U+006C\\U+006C\\U+006F", expected);
HexToUnicodeTransliterator transdefault=new HexToUnicodeTransliterator();
HexToUnicodeTransliterator trans2=null;
try{
trans2=new HexToUnicodeTransliterator(transdefault.toPattern(), HexFilter);
}catch(IllegalArgumentException ex2){
errln("HexToUnicodeTransliterator(pattern1, HexFilter) construction failed with pattern ="
+ pattern1 + "Exception:" + ex2.toString());
}
expect(trans2, "with Filter(0x0061, 0x0063) ", "\u0061\u0062\u0063", "\u0061b\u0063");
}
public void TestTransliterate(){
String Data[]={
//pattern, source, index.contextStart, index.contextLimit, index.start, expectedResult,
// "U+##00", "abU+63", "1", "7", "2", "abc",
"\\\\u0000", "a\\u0062c", "1", "7", "1", "abc",
"Uni0000", "abUni0063", "1", "9", "2", "abc",
"U[0000]", "heU[006C]U[006C]o", "0", "16", "2", "hello",
// "prefix-0000-suffix", "aprefix-0062-suffixprefix-0063-suffix", "1", "39", "1", "abc",
"*##00*", "hell*6F**74**68**65*re", "1", "20", "4", "hellothere",
};
HexToUnicodeTransliterator trans1=null;
for(int i=0; i<Data.length; i+=6){
try{
trans1=new HexToUnicodeTransliterator(Data[i+0], null);
}catch(IllegalArgumentException ex1){
errln("HexToUnicodeTransliterator(pattern1, null) construction failed with pattern ="
+ Data[i+0] + "Exception:" + ex1.toString());
}
expectTranslit(trans1, "", Data[i+1], Integer.parseInt(Data[i+2]),
Integer.parseInt(Data[i+3]), Integer.parseInt(Data[i+4]), Data[i+5] );
expect(trans1, "", Data[i+1], Data[i+5]);
}
}
//======================================================================
// Support methods
//======================================================================
private void expectTranslit(HexToUnicodeTransliterator t,
String message, String source,
int start, int limit, int cursor,
String expectedResult){
ReplaceableString rsource = new ReplaceableString(source);
Transliterator.Position index = new Transliterator.Position(start, limit, cursor, limit);
t.transliterate(rsource, index);
t.finishTransliteration(rsource, index);
String result=rsource.toString();
expectAux(t.getID() + ":keyboard " + message, source + "->" + result, result.equals(expectedResult), expectedResult);
}
private void expectPattern(HexToUnicodeTransliterator t,
String pattern, String source, String expectedResult){
try{
t.applyPattern(pattern);
}catch(IllegalArgumentException iae){
if(expectedResult.equals("FAIL")){
logln("OK: calling applyPattern() with illegal pattern failed as expected." + iae.toString());
} else{
errln("FAIL: applyPattern() failed with pattern =" + pattern + "--->" + iae.toString());
}
}
if(!expectedResult.equals("FAIL")){
if(!t.toPattern().equals(pattern)) {
errln("FAIL: applyPattern or toPatten failed. Expected: " + pattern + "Got: " + t.toPattern());
}else{
logln("OK: applyPattern passed. Testing transliteration");
expect(t, " with pattern "+pattern, source, expectedResult);
}
}
}
private void expect(HexToUnicodeTransliterator t, String message, String source, String expectedResult) {
String result=t.transliterate(source);
expectAux(t.getID() + ":String " + message, source + "->" + result, result.equals(expectedResult), expectedResult);
ReplaceableString rsource = new ReplaceableString(source);
t.transliterate(rsource);
result = rsource.toString();
expectAux(t.getID() + ":Replaceable" + message, source + "->" + result, result.equals(expectedResult), expectedResult);
// Test keyboard (incremental) transliteration -- this result
// must be the same after we finalize (see below).
rsource.replace(0, rsource.length(), "");
Transliterator.Position index = new Transliterator.Position();
StringBuffer log = new StringBuffer();
for (int i=0; i<source.length(); ++i) {
if (i != 0) {
log.append(" + ");
}
log.append(source.charAt(i)).append(" -> ");
t.transliterate(rsource, index,
String.valueOf(source.charAt(i)));
// Append the string buffer with a vertical bar '|' where
// the committed index is.
String s = rsource.toString();
log.append(s.substring(0, index.start)).
append('|').
append(s.substring(index.start));
}
// As a final step in keyboard transliteration, we must call
// transliterate to finish off any pending partial matches that
// were waiting for more input.
t.finishTransliteration(rsource, index);
result = rsource.toString();
log.append(" => ").append(rsource.toString());
expectAux(t.getID() + ":Keyboard", log.toString() + "\n" + source + " -> " + result, result.equals(expectedResult), expectedResult);
}
private void expectAux(String tag, String summary, boolean pass, String expectedResult) {
if (pass) {
logln("(" + tag + ") " + Utility.escape(summary));
} else {
errln("FAIL: (" + tag+ ") "
+ Utility.escape(summary)
+ ", expected " + Utility.escape(expectedResult));
}
}
}