/***************************************************************************************** * * * COPYRIGHT: * * (C) Copyright International Business Machines Corporation, 2001 * * Licensed Material - Program-Property of IBM - All Rights Reserved. * * US Government Users Restricted Rights - Use, duplication, or disclosure * * restricted by GSA ADP Schedule Contract with IBM Corp. * * * ***************************************************************************************** ************************************************************************ * Date Name Description * 03/22/2000 Madhu Creation. ************************************************************************/ #include "unicode/utypes.h" #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*/ } } class Filter1: public UnicodeFilter{ virtual UnicodeMatcher* 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; } }; class Filter2: public UnicodeFilter{ virtual UnicodeMatcher* 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; } }; 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)); } }