7510d87888
X-SVN-Rev: 10684
248 lines
12 KiB
C++
248 lines
12 KiB
C++
/***************************************************************************
|
|
*
|
|
* Copyright (C) 2000-2002, International Business Machines
|
|
* Corporation and others. All Rights Reserved.
|
|
*
|
|
***************************************************************************************************************************************************
|
|
* Date Name Description
|
|
* 03/22/2000 Madhu Creation.
|
|
************************************************************************/
|
|
|
|
#include "unicode/utypes.h"
|
|
|
|
#if !UCONFIG_NO_TRANSLITERATION
|
|
|
|
#include "unicode/translit.h"
|
|
#include "unicode/unifilt.h"
|
|
#include "unicode/unifltlg.h"
|
|
#include "intltest.h"
|
|
#include "ittrans.h"
|
|
#include "ufltlgts.h"
|
|
|
|
//---------------------------------------------
|
|
// runIndexedTest
|
|
//---------------------------------------------
|
|
|
|
void UnicodeFilterLogicTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
|
|
{
|
|
if (exec) logln((UnicodeString)"TestSuite UnicodeFilterLogic API ");
|
|
switch (index) {
|
|
|
|
case 0: name = "TestAll"; if (exec) TestAll(); break;
|
|
|
|
default: name = ""; break; /*needed to end loop*/
|
|
}
|
|
}
|
|
int32_t gFilter1ClassID;
|
|
class Filter1: public UnicodeFilter{
|
|
virtual UClassID getDynamicClassID() const { return (UClassID)&gFilter1ClassID; }
|
|
virtual UnicodeFunctor* clone() const{
|
|
return new Filter1(*this);
|
|
}
|
|
virtual UBool contains(UChar32 c) const {
|
|
if(c == 0x0061 || c == 0x0041 || c == 0x0063 || c == 0x0043)
|
|
return FALSE;
|
|
else
|
|
return TRUE;
|
|
}
|
|
// Stubs
|
|
virtual UnicodeString& toPattern(UnicodeString& result,
|
|
UBool escapeUnprintable) const {
|
|
return result;
|
|
}
|
|
virtual UBool matchesIndexValue(uint8_t v) const {
|
|
return FALSE;
|
|
}
|
|
virtual void addMatchSetTo(UnicodeSet& toUnionTo) const {}
|
|
};
|
|
uint32_t gFilter2ClassID = 0;
|
|
class Filter2: public UnicodeFilter{
|
|
virtual UClassID getDynamicClassID() const { return (UClassID)&gFilter2ClassID; }
|
|
virtual UnicodeFunctor* clone() const{
|
|
return new Filter2(*this);
|
|
}
|
|
virtual UBool contains(UChar32 c) const {
|
|
if(c == 0x0079 || c == 0x0059 || c == 0x007a || c == 0x005a || c == 0x0061 || c == 0x0063)
|
|
return FALSE;
|
|
else
|
|
return TRUE;
|
|
}
|
|
// Stubs
|
|
virtual UnicodeString& toPattern(UnicodeString& result,
|
|
UBool escapeUnprintable) const {
|
|
return result;
|
|
}
|
|
virtual UBool matchesIndexValue(uint8_t v) const {
|
|
return FALSE;
|
|
}
|
|
virtual void addMatchSetTo(UnicodeSet& toUnionTo) const {}
|
|
};
|
|
|
|
|
|
void UnicodeFilterLogicTest::TestAll(){
|
|
UParseError parseError;
|
|
UErrorCode status = U_ZERO_ERROR;
|
|
Transliterator *t1=Transliterator::createInstance("Any-Hex", UTRANS_FORWARD, parseError, status);
|
|
if(t1 == 0){
|
|
errln("FAIL: Error in instantiation.");
|
|
return;
|
|
}
|
|
UnicodeString source("abcdABCDyzYZ");
|
|
Filter1 filter1;
|
|
Filter2 filter2;
|
|
|
|
//sanity testing wihtout any filter
|
|
expect(*t1, "without any Filter", source, UnicodeString("\\u0061\\u0062\\u0063\\u0064\\u0041\\u0042\\u0043\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
//sanity testing using the Filter1(acAC) and Filter2(acyzYZ)
|
|
t1->adoptFilter(new Filter1);
|
|
expect(*t1, "with Filter(acAC)", source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
t1->adoptFilter(new Filter2);
|
|
expect(*t1, "with Filter2(acyzYZ)", source, UnicodeString("a\\u0062c\\u0064\\u0041\\u0042\\u0043\\u0044yzYZ", ""));
|
|
|
|
|
|
UnicodeFilter *filterNOT=UnicodeFilterLogic::createNot(&filter1);
|
|
UnicodeFilter *filterAND=UnicodeFilterLogic::createAnd(&filter1, &filter2);
|
|
UnicodeFilter *filterOR=UnicodeFilterLogic::createOr(&filter1, &filter2);
|
|
|
|
TestNOT(*t1, &filter1, "Filter(acAC)",
|
|
source, UnicodeString("\\u0061b\\u0063d\\u0041B\\u0043DyzYZ", ""));
|
|
TestNOT(*t1, &filter2, "Filter(acyzYZ)",
|
|
source, UnicodeString("\\u0061b\\u0063dABCD\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestNOT(*t1, NULL, "NULL",
|
|
source, UnicodeString("abcdABCDyzYZ", ""));
|
|
TestNOT(*t1, filterNOT, "FilterNOT(Fitler1(acAC))",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestNOT(*t1, filterAND, "FilterAND(Fitler1(acAC), Filter2(acyzYZ))",
|
|
source, UnicodeString("\\u0061b\\u0063d\\u0041B\\u0043D\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestNOT(*t1, filterOR, "FilterOR(Fitler1(acAC), Filter2(acyzYZ))",
|
|
source, UnicodeString("\\u0061b\\u0063dABCDyzYZ", ""));
|
|
|
|
TestAND(*t1, &filter1, &filter2, "Filter1(a,c,A,C), Filter2(acyzYZ)",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044yzYZ", ""));
|
|
TestAND(*t1, &filter2, &filter1, "Filter2(acyzYZ), Filter1(a,c,A,C), ",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044yzYZ", ""));
|
|
TestAND(*t1, &filter1, NULL, "Filter1(a,c,A,C), NULL",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestAND(*t1, NULL, &filter2, "NULL, Filter2(acyzYZ)",
|
|
source, UnicodeString("a\\u0062c\\u0064\\u0041\\u0042\\u0043\\u0044yzYZ", ""));
|
|
TestAND(*t1, NULL, NULL, "NULL, NULL",
|
|
source, UnicodeString("\\u0061\\u0062\\u0063\\u0064\\u0041\\u0042\\u0043\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestAND(*t1, filterAND, NULL, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), NULL",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044yzYZ", ""));
|
|
TestAND(*t1, filterAND, &filter1, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), Filter1(acAC)",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044yzYZ", ""));
|
|
TestAND(*t1, filterAND, &filter2, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), Filter2(acyzYZ)",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044yzYZ", ""));
|
|
TestAND(*t1, &filter1, filterAND, "Filter1(acAC), FilterAND(Filter1(acAC), Fitler1(acAC))",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044yzYZ", ""));
|
|
TestAND(*t1, &filter2, filterAND, "Filter2(acyzYZ), FilterAND(Filter1(acAC), Fitler1(acAC))",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044yzYZ", ""));
|
|
TestAND(*t1, filterOR, NULL, "FilterOR(Fitler1(acAC), Filter2(acyzYZ)), NULL",
|
|
source, UnicodeString("a\\u0062c\\u0064\\u0041\\u0042\\u0043\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestAND(*t1, filterOR, &filter1, "FilterOR(Fitler1(acAC), Filter2(acyzYZ)), Fitler1(acAC)",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestAND(*t1, filterOR, &filter2, "FilterOR(Fitler1(acAC), Filter2(acyzYZ)), Fitler2(acyzYZ)",
|
|
source, UnicodeString("a\\u0062c\\u0064\\u0041\\u0042\\u0043\\u0044yzYZ", ""));
|
|
TestAND(*t1, filterNOT, &filter1, "FilterNOT(Fitler1(acAC)), Fitler1(acAC)",
|
|
source, UnicodeString("abcdABCDyzYZ", ""));
|
|
TestAND(*t1, &filter1, filterNOT, "Fitler1(acAC), FilterNOT(Fitler1(acAC))",
|
|
source, UnicodeString("abcdABCDyzYZ", ""));
|
|
TestAND(*t1, filterNOT, &filter2, "FilterNOT(Fitler1(acAC)), Fitler2(acyzYZ)",
|
|
source, UnicodeString("abcd\\u0041B\\u0043DyzYZ", ""));
|
|
TestAND(*t1, &filter2, filterNOT, "Fitler2(acyzYZ), FilterNOT(Fitler1(acAC))",
|
|
source, UnicodeString("abcd\\u0041B\\u0043DyzYZ", ""));
|
|
|
|
TestOR(*t1, &filter1, &filter2, "Filter1(a,c,A,C), Filter2(acyzYZ)",
|
|
source, UnicodeString("a\\u0062c\\u0064\\u0041\\u0042\\u0043\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestOR(*t1, &filter2, &filter1, "Filter2(acyzYZ), Filter1(a,c,A,C)",
|
|
source, UnicodeString("a\\u0062c\\u0064\\u0041\\u0042\\u0043\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestOR(*t1, &filter1, NULL, "Filter1(a,c,A,C), NULL",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestOR(*t1, NULL, &filter2, "NULL, Filter2(acyzYZ)",
|
|
source, UnicodeString("a\\u0062c\\u0064\\u0041\\u0042\\u0043\\u0044yzYZ", ""));
|
|
TestOR(*t1, NULL, NULL, "NULL, NULL",
|
|
source, UnicodeString("\\u0061\\u0062\\u0063\\u0064\\u0041\\u0042\\u0043\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestOR(*t1, filterAND, NULL, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), NULL",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044yzYZ", ""));
|
|
TestOR(*t1, filterAND, &filter1, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), Filter1(acAC)",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestOR(*t1, filterAND, &filter2, "FilterAND(Fitler1(acAC), Filter2(acyzYZ)), Filter2(acyzYZ)",
|
|
source, UnicodeString("a\\u0062c\\u0064\\u0041\\u0042\\u0043\\u0044yzYZ", ""));
|
|
TestOR(*t1, &filter1, filterAND, "Filter1(acAC), FilterAND(Filter1(acAC), Fitler1(acAC))",
|
|
source, UnicodeString("a\\u0062c\\u0064A\\u0042C\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestOR(*t1, &filter2, filterAND, "Filter2(acyzYZ), FilterAND(Filter1(acAC), Fitler1(acAC))",
|
|
source, UnicodeString("a\\u0062c\\u0064\\u0041\\u0042\\u0043\\u0044yzYZ", ""));
|
|
TestOR(*t1, filterNOT, &filter1, "FilterNOT(Fitler1(acAC)), Fitler1(acAC)",
|
|
source, UnicodeString("\\u0061\\u0062\\u0063\\u0064\\u0041\\u0042\\u0043\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestOR(*t1, &filter1, filterNOT, "Fitler1(acAC), FilterNOT(Fitler1(acAC))",
|
|
source, UnicodeString("\\u0061\\u0062\\u0063\\u0064\\u0041\\u0042\\u0043\\u0044\\u0079\\u007A\\u0059\\u005A", ""));
|
|
TestOR(*t1, filterNOT, &filter2, "FilterNOT(Fitler1(acAC)), Fitler1(acyzYZ)",
|
|
source, UnicodeString("\\u0061\\u0062\\u0063\\u0064\\u0041\\u0042\\u0043\\u0044yzYZ", ""));
|
|
TestOR(*t1, &filter2, filterNOT, "Fitler2(acyzYZ), FilterNOT(Fitler1(acAC))",
|
|
source, UnicodeString("\\u0061\\u0062\\u0063\\u0064\\u0041\\u0042\\u0043\\u0044yzYZ", ""));
|
|
|
|
|
|
delete filterNOT;
|
|
delete filterAND;
|
|
delete filterOR;
|
|
delete t1;
|
|
|
|
}
|
|
void UnicodeFilterLogicTest::TestNOT(Transliterator& t,
|
|
const UnicodeFilter* f1,
|
|
const UnicodeString& message,
|
|
const UnicodeString& source,
|
|
const UnicodeString& expected){
|
|
UnicodeFilter *filter=UnicodeFilterLogic::createNot(f1);
|
|
t.adoptFilter(filter);
|
|
expect(t, "with FilterNOT(" + message + ")", source, expected);
|
|
|
|
}
|
|
void UnicodeFilterLogicTest::TestAND(Transliterator& t,
|
|
const UnicodeFilter* f1,
|
|
const UnicodeFilter* f2,
|
|
const UnicodeString& message,
|
|
const UnicodeString& source,
|
|
const UnicodeString& expected){
|
|
UnicodeFilter *filter=UnicodeFilterLogic::createAnd(f1, f2);
|
|
t.adoptFilter(filter);
|
|
expect(t, "with FilterAND(" + message + ")", source, expected);
|
|
|
|
}
|
|
void UnicodeFilterLogicTest::TestOR(Transliterator& t,
|
|
const UnicodeFilter* f1,
|
|
const UnicodeFilter* f2,
|
|
const UnicodeString& message,
|
|
const UnicodeString& source,
|
|
const UnicodeString& expected){
|
|
UnicodeFilter *filter=UnicodeFilterLogic::createOr(f1, f2);
|
|
t.adoptFilter(filter);
|
|
expect(t, "with FilterOR(" + message + ")", source, expected);
|
|
|
|
}
|
|
|
|
void UnicodeFilterLogicTest::expect(const Transliterator& t,
|
|
const UnicodeString& message,
|
|
const UnicodeString& source,
|
|
const UnicodeString& expectedResult) {
|
|
|
|
|
|
UnicodeString rsource(source);
|
|
t.transliterate(rsource);
|
|
expectAux(t.getID() + ":Replaceable " + message, source + "->" + rsource, rsource==expectedResult, expectedResult);
|
|
|
|
}
|
|
void UnicodeFilterLogicTest::expectAux(const UnicodeString& tag,
|
|
const UnicodeString& summary, UBool pass,
|
|
const UnicodeString& expectedResult) {
|
|
if (pass) {
|
|
logln(UnicodeString("(")+tag+") " + prettify(summary));
|
|
} else {
|
|
errln(UnicodeString("FAIL: (")+tag+") "
|
|
+ prettify(summary)
|
|
+ ", expected " + prettify(expectedResult));
|
|
}
|
|
}
|
|
|
|
#endif /* #if !UCONFIG_NO_TRANSLITERATION */
|