blob: 3b69d358afd5b6f65c5accfebc3af2b38ea4f527 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 1996-2003, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/test/translit/Attic/UnicodeFilterLogicTest.java,v $
* $Date: 2003/06/03 18:49:31 $
* $Revision: 1.8 $
*
*****************************************************************************************
*/
package com.ibm.icu.dev.test.translit;
import com.ibm.icu.text.*;
import com.ibm.icu.dev.test.*;
import com.ibm.icu.impl.Utility;
/**
* @test
* @summary UnicodeFilterLogic test
*/
public class UnicodeFilterLogicTest extends TestFmwk {
public static void main(String[] args) throws Exception {
new UnicodeFilterLogicTest().run(args);
}
UnicodeFilter Filter1=new UnicodeFilter() {
public boolean contains(int c) {
if(c == 0x0061 || c == 0x0041 || c == 0x0063 || c == 0x0043)
return false;
else
return true;
}
public String toPattern(boolean escapeUnprintable) {
return "";
}
public boolean matchesIndexValue(int v) {
return false;
}
public void addMatchSetTo(UnicodeSet toUnionTo) {}
};
UnicodeFilter Filter2=new UnicodeFilter() {
public boolean contains(int c) {
if(c == 0x0079 || c == 0x0059 || c == 0x007a || c == 0x005a || c == 0x0061 || c == 0x0063)
return false;
else
return true;
}
public String toPattern(boolean escapeUnprintable) {
return "";
}
public boolean matchesIndexValue(int v) {
return false;
}
public void addMatchSetTo(UnicodeSet toUnionTo) {}
};
public void TestAllFilters() {
Transliterator t1 = Transliterator.getInstance("Any-Hex");
String source="abcdABCDyzYZ";
//sanity testing wihtout any filter
expect(t1, "without any Filter", source, "\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
//sanity testing using the Filter1(acAC) and Filter2(acyzYZ)
t1.setFilter(Filter1);
expect(t1, "with Filter(acAC)", source, "a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
t1.setFilter(Filter2);
expect(t1, "with Filter2(acyzYZ)", source, "a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
UnicodeFilter filterNOT=UnicodeFilterLogic.not(Filter1);
UnicodeFilter filterAND=UnicodeFilterLogic.and(Filter1, Filter2);
UnicodeFilter filterOR=UnicodeFilterLogic.or(Filter1, Filter2);
checkNOT(t1, Filter1, "Filter(acAC)", source, "\u0061b\u0063d\u0041B\u0043DyzYZ");
checkNOT(t1, Filter2, "Filter(acyzYZ)", source, "\u0061b\u0063dABCD\u0079\u007A\u0059\u005A");
// checkNOT(t1, null, "NULL", source, "abcdABCDyzYZ");
checkNOT(t1, filterNOT, "FilterNOT(Fitler1(acAC))", source,
"a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
checkNOT(t1, filterAND, "FilterAND(Fitler1(acAC), Filter2(acyzYZ))", source,
"\u0061b\u0063d\u0041B\u0043D\u0079\u007A\u0059\u005A");
checkNOT(t1, filterOR, "FilterOR(Fitler1(acAC), Filter2(acyzYZ))", source,
"\u0061b\u0063dABCDyzYZ");
checkAND(t1, Filter1, Filter2, "Filter1(a,c,A,C), Filter2(acyzYZ)", source,
"a\u0062c\u0064A\u0042C\u0044yzYZ");
checkAND(t1, Filter2, Filter1, "Filter2(acyzYZ), Filter1(a,c,A,C), ", source,
"a\u0062c\u0064A\u0042C\u0044yzYZ");
checkAND(t1, Filter1, null, "Filter1(a,c,A,C), NULL", source,
"a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
checkAND(t1, null, Filter2, "NULL, Filter2(acyzYZ)", source,
"a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
checkAND(t1, null, null, "NULL, NULL", source,
"\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
checkAND(t1, filterAND, null, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), NULL", source,
"a\u0062c\u0064A\u0042C\u0044yzYZ");
checkAND(t1, filterAND, Filter1, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), Filter1(acAC)", source,
"a\u0062c\u0064A\u0042C\u0044yzYZ");
checkAND(t1, filterAND, Filter2, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), Filter2(acyzYZ)", source,
"a\u0062c\u0064A\u0042C\u0044yzYZ");
checkAND(t1, Filter1, filterAND, "Filter1(acAC), FilterAND(Filter1(acAC), Fitler1(acAC))", source,
"a\u0062c\u0064A\u0042C\u0044yzYZ");
checkAND(t1, Filter2, filterAND, "Filter2(acyzYZ), FilterAND(Filter1(acAC), Fitler1(acAC))", source,
"a\u0062c\u0064A\u0042C\u0044yzYZ");
checkAND(t1, filterOR, null, "FilterOR(Fitler1(acAC), Filter2(acyzYZ)), NULL", source,
"a\u0062c\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
checkAND(t1, filterOR, Filter1, "FilterOR(Fitler1(acAC), Filter2(acyzYZ)), Fitler1(acAC)", source,
"a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
checkAND(t1, filterOR, Filter2, "FilterOR(Fitler1(acAC), Filter2(acyzYZ)), Fitler2(acyzYZ)", source,
"a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
checkAND(t1, filterNOT, Filter1, "FilterNOT(Fitler1(acAC)), Fitler1(acAC)", source,
"abcdABCDyzYZ");
checkAND(t1, Filter1, filterNOT, "Fitler1(acAC), FilterNOT(Fitler1(acAC))", source,
"abcdABCDyzYZ");
checkAND(t1, filterNOT, Filter2, "FilterNOT(Fitler1(acAC)), Fitler2(acyzYZ)", source,
"abcd\u0041B\u0043DyzYZ");
checkAND(t1, Filter2, filterNOT, "Fitler2(acyzYZ), FilterNOT(Fitler1(acAC))", source,
"abcd\u0041B\u0043DyzYZ");
checkOR(t1, Filter1, Filter2, "Filter1(a,c,A,C), Filter2(acyzYZ)", source,
"a\u0062c\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
checkOR(t1, Filter2, Filter1, "Filter2(acyzYZ), Filter1(a,c,A,C)", source,
"a\u0062c\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
checkOR(t1, Filter1, null, "Filter1(a,c,A,C), NULL", source,
"a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
checkOR(t1, null, Filter2, "NULL, Filter2(acyzYZ)", source,
"a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
checkOR(t1, null, null, "NULL, NULL", source,
"\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
checkOR(t1, filterAND, null, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), NULL", source,
"a\u0062c\u0064A\u0042C\u0044yzYZ");
checkOR(t1, filterAND, Filter1, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), Filter1(acAC)", source,
"a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
checkOR(t1, filterAND, Filter2, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), Filter2(acyzYZ)", source,
"a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
checkOR(t1, Filter1, filterAND, "Filter1(acAC), FilterAND(Filter1(acAC), Fitler1(acAC))", source,
"a\u0062c\u0064A\u0042C\u0044\u0079\u007A\u0059\u005A");
checkOR(t1, Filter2, filterAND, "Filter2(acyzYZ), FilterAND(Filter1(acAC), Fitler1(acAC))", source,
"a\u0062c\u0064\u0041\u0042\u0043\u0044yzYZ");
checkOR(t1, filterNOT, Filter1, "FilterNOT(Fitler1(acAC)), Fitler1(acAC)", source,
"\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
checkOR(t1, Filter1, filterNOT, "Fitler1(acAC), FilterNOT(Fitler1(acAC))", source,
"\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044\u0079\u007A\u0059\u005A");
checkOR(t1, filterNOT, Filter2, "FilterNOT(Fitler1(acAC)), Fitler1(acyzYZ)", source,
"\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044yzYZ");
checkOR(t1, Filter2, filterNOT, "Fitler2(acyzYZ), FilterNOT(Fitler1(acAC))", source,
"\u0061\u0062\u0063\u0064\u0041\u0042\u0043\u0044yzYZ");
}
//======================================================================
// Support methods
//======================================================================
void checkOR(Transliterator t,
UnicodeFilter f1,
UnicodeFilter f2,
String message,
String source,
String expected){
UnicodeFilter filter=UnicodeFilterLogic.or(f1, f2);
t.setFilter(filter);
expect(t, "with FilterOR(" + message + ")", source, expected);
}
void checkAND(Transliterator t,
UnicodeFilter f1,
UnicodeFilter f2,
String message,
String source,
String expected){
UnicodeFilter filter=UnicodeFilterLogic.and(f1, f2);
t.setFilter(filter);
expect(t, "with FilterAND(" + message + ")", source, expected);
}
void checkNOT(Transliterator t,
UnicodeFilter f1,
String message,
String source,
String expected){
UnicodeFilter filter=UnicodeFilterLogic.not(f1);
t.setFilter(filter);
expect(t, "with FilterNOT(" + message + ")", source, expected);
}
void expect(Transliterator t, String message, String source, String expectedResult) {
String rsource = source;
t.transliterate(rsource);
expectAux(t.getID() + ":Replaceable " + message, source + "->" + rsource, expectedResult.equals(rsource), expectedResult);
}
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));
}
}
}