| /***************************************************************************************** |
| * * |
| * COPYRIGHT: * |
| * (C) Copyright International Business Machines Corporation, 2000 * |
| * 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/20/2000 Madhu Creation. |
| ************************************************************************/ |
| |
| #include "ittrans.h" |
| #include "jahatrts.h" |
| #include "unicode/utypes.h" |
| #include "unicode/translit.h" |
| #include "unicode/jamohang.h" |
| #include "unicode/unifilt.h" |
| #include "unicode/unicode.h" |
| #include "intltest.h" |
| #include <stdio.h> |
| #include <string.h> |
| /*converts a Unicodestring to integer*/ |
| static int32_t getInt(UnicodeString str) |
| { |
| int32_t result = 0; |
| int32_t len = str.length(); |
| int32_t i = 0; |
| for(i=0; i<len; i++) { |
| result = result*10+u_charDigitValue(str.char32At(i)); |
| } |
| return result; |
| } |
| //--------------------------------------------- |
| // runIndexedTest |
| //--------------------------------------------- |
| |
| void JamoToHangTransliteratorTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) |
| { |
| if (exec) logln((UnicodeString)"TestSuite JamoToHangul Transliterator API "); |
| switch (index) { |
| |
| case 0: name = "TestConstruction"; if (exec) TestConstruction(); break; |
| case 1: name = "TestCloneEqual"; if (exec) TestCloneEqual(); break; |
| case 2: name = "TestSimpleTransliterate"; if (exec) TestSimpleTransliterate(); break; |
| case 3: name = "TestTransliterate"; if (exec) TestTransliterate(); break; |
| case 4: name = "TestTransliterate2"; if (exec) TestTransliterate2(); break; |
| default: name = ""; break; /*needed to end loop*/ |
| } |
| } |
| /** |
| * Used by TestConstruction() and TestTransliterate. |
| */ |
| class TestJamoFilter : public UnicodeFilter { |
| virtual UnicodeFilter* clone() const { |
| return new TestJamoFilter(*this); |
| } |
| virtual UBool contains(UChar c) const { |
| if(c == 0x1101 ) |
| return FALSE; |
| else |
| return TRUE; |
| } |
| }; |
| void JamoToHangTransliteratorTest::TestConstruction(){ |
| logln("Testing the construction JamoHangulTransliterator()"); |
| JamoHangulTransliterator *trans1=new JamoHangulTransliterator(); |
| if(trans1 == 0){ |
| errln("JamoHangulTransliterator() construction failed."); |
| return; |
| } |
| |
| JamoHangulTransliterator *trans2=new JamoHangulTransliterator(new TestJamoFilter); |
| if(trans2 == 0){ |
| errln("JamoHangulTransliterator(UnicodeFilter) construction failed."); |
| return; |
| } |
| logln("Testing copy construction"); |
| JamoHangulTransliterator *trans2copy=new JamoHangulTransliterator(*trans2); |
| if(trans2copy == 0){ |
| errln("JamoHangulTransliterator copy construction failed"); |
| delete trans2; |
| } |
| |
| if(trans2copy->getID() != trans2->getID() || |
| trans2copy->getFilter() == NULL || |
| trans2copy->getFilter()->contains(0x1101) != trans2->getFilter()->contains(0x1101) ) { |
| errln("Copy construction failed"); |
| } |
| |
| |
| delete trans1; |
| delete trans2copy; |
| delete trans2; |
| |
| } |
| void JamoToHangTransliteratorTest::TestCloneEqual(){ |
| logln("Testing the clone and =operator of JamoHangulTransliterator"); |
| JamoHangulTransliterator *trans1=new JamoHangulTransliterator(); |
| if(trans1 == 0){ |
| errln("JamoHangulTransliterator() construction failed."); |
| return; |
| } |
| JamoHangulTransliterator *trans2=new JamoHangulTransliterator(new TestJamoFilter); |
| if(trans2 == 0){ |
| errln("JamoHangulTransliterator(UnicodeFilter) construction failed."); |
| return; |
| } |
| |
| JamoHangulTransliterator *trans1equal=new JamoHangulTransliterator(); |
| JamoHangulTransliterator *trans2equal=new JamoHangulTransliterator(); |
| *trans1equal=*trans1; |
| *trans2equal=*trans2; |
| if(trans1equal == 0 || trans2equal==0 ){ |
| errln("=Operator failed"); |
| delete trans1; |
| delete trans2; |
| return; |
| } |
| if(trans1->getID() != trans1equal->getID() || |
| trans1equal->getFilter() != NULL || |
| trans2->getID() != trans2equal->getID() || |
| trans2equal->getFilter() == NULL || |
| trans2equal->getFilter()->contains(0x1101) != trans2->getFilter()->contains(0x1101) ) { |
| errln("=Operator failed"); |
| } |
| |
| |
| JamoHangulTransliterator *trans1clone=(JamoHangulTransliterator*)trans1->clone(); |
| JamoHangulTransliterator *trans2clone=(JamoHangulTransliterator*)trans2->clone(); |
| if(trans1clone == 0 || trans2clone==0 ){ |
| errln("clone() failed"); |
| delete trans1; |
| delete trans2; |
| return; |
| } |
| if(trans1->getID() != trans1clone->getID() || |
| trans1clone->getFilter() != NULL || |
| trans2->getID() != trans2clone->getID() || |
| trans2clone->getFilter() == NULL || |
| trans2clone->getFilter()->contains(0x1101) != trans2->getFilter()->contains(0x1101) ) { |
| errln("=Operator failed"); |
| } |
| |
| delete trans1; |
| delete trans2; |
| delete trans1equal; |
| delete trans2equal; |
| } |
| |
| void JamoToHangTransliteratorTest::TestSimpleTransliterate(){ |
| logln("Testing the handleTransliterate() of JamoHangulTransliterator"); |
| JamoHangulTransliterator *trans1=new JamoHangulTransliterator(); |
| if(trans1==0){ |
| errln("JamoHangulTransliterator construction failed"); |
| return; |
| } |
| UChar src[]={ 0x1101, 0x1109, 0x1166, 0x11A8, 0x11AD, 0x116D, 0}; |
| UnicodeString source(src); |
| UnicodeString expected(CharsToUnicodeString("\\uAE4C\\uC139\\uC54A\\uC694")); |
| expect(*trans1, "", source, expected); |
| |
| JamoHangulTransliterator *trans2=new JamoHangulTransliterator(new TestJamoFilter); |
| if(trans2==0){ |
| errln("JamoHangulTransliterator(UnicodeFilter) construction failed"); |
| return; |
| } |
| expect(*trans2, " with Filter(0x1101) ", source, CharsToUnicodeString("\\u1101\\uC139\\uC54A\\uC694")); |
| |
| |
| } |
| void JamoToHangTransliteratorTest::TestTransliterate2(){ |
| logln("Testing the handleTransliterate() of JamoHangulTransliterator"); |
| JamoHangulTransliterator *trans1=new JamoHangulTransliterator(); |
| if(trans1==0){ |
| errln("JamoHangulTransliterator construction failed"); |
| return; |
| } |
| UnicodeString source, expected, temp; |
| UChar choseong=0x1100; |
| UChar jungseong=0x1161; |
| UChar jongseong=0x11a8; |
| for(UChar c=0xac01;c<0xacff;++c){ |
| source.append(choseong); |
| if(jongseong > 0x11c2){ |
| jongseong=0x11a8; |
| jungseong++; |
| source.append(jungseong); |
| } |
| else { |
| source.append(jungseong); |
| source.append(jongseong++); |
| } |
| expected.append(c); |
| |
| expect(*trans1, "", source, expected); |
| source.remove(); |
| expected.remove(); |
| |
| } |
| } |
| void JamoToHangTransliteratorTest::TestTransliterate(){ |
| UnicodeString Data[]={ |
| // source, index.contextStart, index.contextLimit, index.start, expectedResult, expectedResult using Filter(TestJamoFilter) |
| CharsToUnicodeString("\\u1100\\u1101\\u1102"), "1", "3", "1", CharsToUnicodeString("\\u1100\\uAE4C\\uB098"), CharsToUnicodeString("\\u1100\\u1101\\uB098"), |
| CharsToUnicodeString("\\u1167\\u1101"), "0", "1", "0", CharsToUnicodeString("\\uc5ec\\u1101"), CharsToUnicodeString("\\uc5ec\\u1101"), |
| CharsToUnicodeString("\\u1167\\u1101"), "0", "2", "0", CharsToUnicodeString("\\uc5ec\\uae4c"), CharsToUnicodeString("\\uc5ec\\u1101"), |
| |
| }; |
| uint32_t i; |
| JamoHangulTransliterator *trans1=new JamoHangulTransliterator(); |
| if(trans1 == 0){ |
| errln("JamoHangulTransliterator construction failed"); |
| return; |
| } |
| JamoHangulTransliterator *trans2=new JamoHangulTransliterator(new TestJamoFilter); |
| if(trans2 == 0){ |
| errln("JamoHangulTransliterator(UnicodeFilter) construction failed"); |
| return; |
| } |
| for(i=0;i<sizeof(Data)/sizeof(Data[0]);i=i+6){ |
| expectTranslit(*trans1, ":", Data[i+0], getInt(Data[i+1]), getInt(Data[i+2]), getInt(Data[i+3]), Data[i+4] ); |
| expectTranslit(*trans2, " with Filter(0x1101):", Data[i+0], getInt(Data[i+1]), getInt(Data[i+2]), getInt(Data[i+3]), Data[i+5] ); |
| |
| } |
| delete trans1; |
| delete trans2; |
| |
| } |
| //====================================================================== |
| // Support methods |
| //====================================================================== |
| |
| void JamoToHangTransliteratorTest::expectTranslit(const JamoHangulTransliterator& t, |
| const UnicodeString& message, |
| const UnicodeString& source, |
| int32_t start, int32_t limit, int32_t cursor, |
| const UnicodeString& expectedResult) |
| { |
| |
| |
| UTransPosition _index; |
| _index.contextStart= start; |
| _index.contextLimit = limit; |
| _index.start = cursor; |
| _index.limit = limit; |
| UTransPosition index; |
| index = _index; |
| UnicodeString rsource(source); |
| t.handleTransliterate(rsource, index, FALSE); |
| expectAux(t.getID() + ":handleTransliterator(increment=FALSE) " + message, source + "-->" + rsource, rsource==expectedResult, expectedResult); |
| |
| UnicodeString rsource2(source); |
| index=_index; |
| t.handleTransliterate(rsource2, index, TRUE); |
| expectAux(t.getID() + ":handleTransliterator(increment=TRUE) " + message, source + "-->" + rsource2, rsource2==expectedResult, expectedResult); |
| |
| /*ceates a copy constructor and checks the transliteration*/ |
| JamoHangulTransliterator *copy=new JamoHangulTransliterator(t); |
| rsource2.remove(); |
| rsource2.append(source); |
| index=_index; |
| copy->handleTransliterate(rsource2, index, FALSE); |
| expectAux(t.getID() + "COPY:handleTransliterator(increment=FALSE) "+ message, source + "-->" + rsource2, rsource2==expectedResult, expectedResult); |
| |
| rsource2.remove(); |
| rsource2.append(source); |
| index=_index; |
| copy->handleTransliterate(rsource2, index, TRUE); |
| expectAux(t.getID() + "COPY:handleTransliterator(increment=TRUE) "+ message, source + "-->" + rsource2, rsource2==expectedResult, expectedResult); |
| delete copy; |
| |
| /*creates a clone and tests transliteration*/ |
| JamoHangulTransliterator *clone=(JamoHangulTransliterator*)t.clone(); |
| rsource2.remove(); |
| rsource2.append(source); |
| index=_index; |
| clone->handleTransliterate(rsource2, index, FALSE); |
| expectAux(t.getID() + "CLONE:handleTransliterator(increment=FALSE) "+ message, source + "-->" + rsource2, rsource2==expectedResult, expectedResult); |
| |
| rsource2.remove(); |
| rsource2.append(source); |
| index=_index; |
| clone->handleTransliterate(rsource2, index, TRUE); |
| expectAux(t.getID() + "CLONE:handleTransliterator(increment=TRUE) "+ message, source + "-->" + rsource2, rsource2==expectedResult, expectedResult); |
| |
| /*Uses the assignment operator to create a transliterator and tests transliteration*/ |
| JamoHangulTransliterator equal=t; |
| rsource2.remove(); |
| rsource2.append(source); |
| index=_index; |
| equal.handleTransliterate(rsource2, index, FALSE); |
| expectAux(t.getID() + "=OPERATOR:handleTransliterator(increment=FALSE) "+ message, source + "-->" + rsource2, rsource2==expectedResult, expectedResult); |
| |
| rsource2.remove(); |
| rsource2.append(source); |
| index=_index; |
| equal.handleTransliterate(rsource2, index, TRUE); |
| expectAux(t.getID() + "=OPERATOR:handleTransliterator(increment=TRUE) "+ message, source + "-->" + rsource2, rsource2==expectedResult, expectedResult); |
| |
| delete clone; |
| |
| } |
| void JamoToHangTransliteratorTest::expect(const JamoHangulTransliterator& 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); |
| |
| // Test handleTransliterate (incremental) transliteration -- |
| rsource.remove(); |
| rsource.append(source); |
| UTransPosition index; |
| index.contextStart =0; |
| index.contextLimit=source.length(); |
| index.start=0; |
| index.limit=source.length(); |
| t.handleTransliterate(rsource, index, TRUE); |
| expectAux(t.getID() + ":handleTransliterate " + message, source + "->" + rsource, rsource==expectedResult, expectedResult); |
| |
| } |
| void JamoToHangTransliteratorTest::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)); |
| } |
| } |