1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*************************************************************************** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho* Copyright (C) 2000-2009, International Business Machines 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru************************************************************************ 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 03/09/2000 Madhu Creation. 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru************************************************************************/ 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_TRANSLITERATION 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cpdtrtst.h" 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/translit.h" 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/uniset.h" 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cpdtrans.h" 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cmemory.h" 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//--------------------------------------------- 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// runIndexedTest 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//--------------------------------------------- 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruCompoundTransliteratorTest::runIndexedTest(int32_t index, UBool exec, 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* &name, char* /*par*/) { 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru switch (index) { 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(0,TestConstruction); 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(1,TestCloneEqual); 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(2,TestGetCount); 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(3,TestGetSetAdoptTransliterator); 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TESTCASE(4,TestTransliterate); 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru default: name = ""; break; 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CompoundTransliteratorTest::TestConstruction(){ 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("Testing the construction of the compound Transliterator"); 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString names[]={"Greek-Latin", "Latin-Devanagari", "Devanagari-Latin", "Latin-Greek"}; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UParseError parseError; 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator* t1=Transliterator::createInstance(names[0], UTRANS_FORWARD, parseError, status); 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator* t2=Transliterator::createInstance(names[1], UTRANS_FORWARD, parseError, status); 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator* t3=Transliterator::createInstance(names[2], UTRANS_FORWARD, parseError, status); 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator* t4=Transliterator::createInstance(names[3], UTRANS_FORWARD, parseError, status); 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 4985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dataerrln("Transliterator construction failed - %s", u_errorName(status)); 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator* transarray1[]={t1}; 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator* transarray2[]={t1, t4}; 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator* transarray3[]={t4, t1, t2}; 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator* transarray4[]={t1, t2, t3, t4}; 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator** transarray[4]; 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru transarray[0] = transarray1; 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru transarray[1] = transarray2; 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru transarray[2] = transarray3; 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru transarray[3] = transarray4; 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString IDs[]={ 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru names[0], 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru names[0]+";"+names[3], 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru names[3]+";"+names[1]+";"+names[2], 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru names[0]+";"+names[1]+";"+names[2]+";"+names[3] 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint16_t i=0; 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0; i<4; i++){ 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *cpdtrans=new CompoundTransliterator(IDs[i],parseError, status); 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) { 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Construction using CompoundTransliterator(UnicodeString&, Direction, UnicodeFilter*) failed"); 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete cpdtrans; 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *cpdtrans2=new CompoundTransliterator(transarray[i], i+1); 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(cpdtrans2 == 0){ 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Construction using CompoundTransliterator(Transliterator* const transliterators[], " 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "int32_t count, UnicodeFilter* adoptedFilter = 0) failed"); 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru continue; 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *copycpd=new CompoundTransliterator(*cpdtrans2); 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(copycpd->getCount() != cpdtrans2->getCount() || copycpd->getID() != cpdtrans2->getID()) { 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Copy construction failed"); 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru continue; 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete copycpd; 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete cpdtrans2; 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*Test Jitterbug 914 */ 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator cpdTrans(UnicodeString("Latin-Hangul"),UTRANS_REVERSE,NULL,parseError,err); 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString newID =cpdTrans.getID(); 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(newID!=UnicodeString("Hangul-Latin")){ 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(UnicodeString("Test for Jitterbug 914 for cpdTrans(UnicodeString(\"Latin-Hangul\"),UTRANS_REVERSE,NULL,err) failed")); 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete t1; 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete t2; 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete t3; 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete t4; 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CompoundTransliteratorTest::TestCloneEqual(){ 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("Testing the clone() and equality operator functions of Compound Transliterator"); 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UParseError parseError; 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct1=new CompoundTransliterator("Greek-Latin;Latin-Devanagari",parseError,status); 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 12085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dataerrln("construction failed - %s", u_errorName(status)); 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct1; 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct2=new CompoundTransliterator("Greek-Latin", parseError, status); 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("construction failed"); 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct1; 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct2; 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *copyct1=new CompoundTransliterator(*ct1); 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(copyct1 == 0){ 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("copy construction failed"); 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *copyct2=new CompoundTransliterator(*ct2); 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(copyct2 == 0){ 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("copy construction failed"); 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator equalct1=*copyct1; 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator equalct2=*copyct2; 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(copyct1->getID() != ct1->getID() || copyct2->getID() != ct2->getID() || 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru copyct1->getCount() != ct1->getCount() || copyct2->getCount() != ct2->getCount() || 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru copyct2->getID() == ct1->getID() || copyct1->getID() == ct2->getID() || 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru copyct2->getCount() == ct1->getCount() || copyct1->getCount() == ct2->getCount() ){ 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error: copy constructors failed"); 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(equalct1.getID() != ct1->getID() || equalct2.getID() != ct2->getID() || 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru equalct1.getID() != copyct1->getID() || equalct2.getID() != copyct2->getID() || 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru equalct1.getCount() != ct1->getCount() || equalct2.getCount() != ct2->getCount() || 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru copyct2->getID() == ct1->getID() || copyct1->getID() == ct2->getID() || 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru equalct1.getCount() != copyct1->getCount() || equalct2.getCount() != copyct2->getCount() || 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru equalct2.getCount() == ct1->getCount() || equalct1.getCount() == ct2->getCount() ) { 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error: =operator or copy constructor failed"); 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *clonect1a=(CompoundTransliterator*)ct1->clone(); 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *clonect1b=(CompoundTransliterator*)equalct1.clone(); 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *clonect2a=(CompoundTransliterator*)ct2->clone(); 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *clonect2b=(CompoundTransliterator*)copyct2->clone(); 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(clonect1a->getID() != ct1->getID() || clonect1a->getCount() != ct1->getCount() || 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru clonect1a->getID() != clonect1b->getID() || clonect1a->getCount() != clonect1b->getCount() || 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru clonect1a->getID() != equalct1.getID() || clonect1a->getCount() != equalct1.getCount() || 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru clonect1a->getID() != copyct1->getID() || clonect1a->getCount() != copyct1->getCount() || 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru clonect2b->getID() != ct2->getID() || clonect2a->getCount() != ct2->getCount() || 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru clonect2a->getID() != clonect2b->getID() || clonect2a->getCount() != clonect2b->getCount() || 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru clonect2a->getID() != equalct2.getID() || clonect2a->getCount() != equalct2.getCount() || 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru clonect2b->getID() != copyct2->getID() || clonect2b->getCount() != copyct2->getCount() ) { 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error: clone() failed"); 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct1; 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct2; 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete copyct1; 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete copyct2; 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete clonect1a; 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete clonect1b; 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete clonect2a; 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete clonect2b; 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CompoundTransliteratorTest::TestGetCount(){ 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("Testing the getCount() API of CompoundTransliterator"); 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UParseError parseError; 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct1=new CompoundTransliterator("Halfwidth-Fullwidth;Fullwidth-Halfwidth", parseError, status); 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct2=new CompoundTransliterator("Any-Hex;Hex-Any;Cyrillic-Latin;Latin-Cyrillic", parseError, status); 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct3=(CompoundTransliterator*)ct1; 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) { 19785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dataerrln("FAILED: CompoundTransliterator constructor failed - %s", u_errorName(status)); 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct4=new CompoundTransliterator("Latin-Devanagari", parseError, status); 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct5=new CompoundTransliterator(*ct4); 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) { 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("FAILED: CompoundTransliterator constructor failed"); 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(ct1->getCount() == ct2->getCount() || ct1->getCount() != ct3->getCount() || 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ct2->getCount() == ct3->getCount() || 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ct4->getCount() != ct5->getCount() || ct4->getCount() == ct1->getCount() || 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ct4->getCount() == ct2->getCount() || ct4->getCount() == ct3->getCount() || 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ct5->getCount() == ct2->getCount() || ct5->getCount() == ct3->getCount() ) { 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error: getCount() failed"); 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Quick test getTargetSet(), only test that it doesn't die. TODO: a better test. */ 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeSet ts; 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeSet *retUS = NULL; 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru retUS = &ct1->getTargetSet(ts); 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (retUS != &ts || ts.size() == 0) { 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("CompoundTransliterator::getTargetSet() failed.\n"); 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Quick test getSourceSet(), only test that it doesn't die. TODO: a better test. */ 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeSet ss; 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru retUS = NULL; 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru retUS = &ct1->getSourceSet(ss); 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (retUS != &ss || ss.size() == 0) { 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("CompoundTransliterator::getSourceSet() failed.\n"); 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct1; 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct2; 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct4; 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct5; 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CompoundTransliteratorTest::TestGetSetAdoptTransliterator(){ 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("Testing the getTransliterator() API of CompoundTransliterator"); 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString ID("Latin-Greek;Greek-Latin;Latin-Devanagari;Devanagari-Latin;Latin-Cyrillic;Cyrillic-Latin;Any-Hex;Hex-Any"); 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UParseError parseError; 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct1=new CompoundTransliterator(ID, parseError, status); 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 24485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dataerrln("CompoundTransliterator construction failed - %s", u_errorName(status)); 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t count=ct1->getCount(); 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString *array=split(ID, 0x003b, count); 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int i; 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0; i < count; i++){ 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString child= ct1->getTransliterator(i).getID(); 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(child != *(array+i)){ 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error getTransliterator() failed: Expected->" + *(array+i) + " Got->" + child); 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else { 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("OK: getTransliterator() passed: Expected->" + *(array+i) + " Got->" + child); 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete []array; 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("Testing setTransliterator() API of CompoundTransliterator"); 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString ID2("Hex-Any;Any-Hex;Latin-Cyrillic;Cyrillic-Latin;Halfwidth-Fullwidth;Fullwidth-Halfwidth"); 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru array=split(ID2, 0x003b, count); 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator** transarray=new Transliterator*[count]; 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0;i<count;i++){ 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru transarray[i]=Transliterator::createInstance(*(array+i), UTRANS_FORWARD, parseError, status); 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error could not create Transliterator with ID :"+*(array+i)); 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else{ 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("The ID for the transltierator created is " + transarray[i]->getID()); 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*setTransliterator and adoptTransliterator */ 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ct1->setTransliterators(transarray, count); 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(ct1->getCount() != count || ct1->getID() != ID2){ 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln((UnicodeString)"Error: setTransliterators() failed.\n\t Count:- expected->" + count + (UnicodeString)". got->" + ct1->getCount() + 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (UnicodeString)"\n\tID :- expected->" + ID2 + (UnicodeString)". got->" + ct1->getID()); 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else{ 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("OK: setTransliterators() passed"); 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*UnicodeString temp; 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0;i<count-1;i++){ 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp.append(ct1->getTransliterator(i).getID()); 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp.append(";"); 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru temp.append(ct1->getTransliterator(i).getID()); 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(temp != ID2){ 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("Error: setTransliterator() failed. Expected->" + ID2 + "\nGot->" + temp); 292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else{ 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("OK: setTransliterator() passed"); 295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }*/ 296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("Testing adoptTransliterator() API of CompoundTransliterator"); 297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString ID3("Latin-Katakana"); 298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Transliterator **transarray2=(Transliterator **)uprv_malloc(sizeof(Transliterator*)*1); 299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru transarray2[0] = Transliterator::createInstance(ID3,UTRANS_FORWARD,parseError,status); 300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (transarray2[0] != 0) { 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ct1->adoptTransliterators(transarray2, 1); 302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(ct1->getCount() != 1 || ct1->getID() != ID3){ 304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln((UnicodeString)"Error: adoptTransliterators() failed.\n\t Count:- expected->1" + (UnicodeString)". got->" + ct1->getCount() + 305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru (UnicodeString)"\n\tID :- expected->" + ID3 + (UnicodeString)". got->" + ct1->getID()); 306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else{ 308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("OK: adoptTranslterator() passed"); 309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct1; 311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0;i<count;i++){ 312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete transarray[i]; 313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete []transarray; 315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete []array; 316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Splits a UnicodeString 320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUnicodeString* CompoundTransliteratorTest::split(const UnicodeString& str, UChar seperator, int32_t& count) { 322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //get the count 324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t i; 325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru count =1; 326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0; i<str.length(); i++){ 327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(str.charAt(i) == seperator) 328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru count++; 329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // make an array 331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString* result = new UnicodeString[count]; 332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t last = 0; 333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t current = 0; 334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (i = 0; i < str.length(); ++i) { 335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (str.charAt(i) == seperator) { 336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru str.extractBetween(last, i, result[current]); 337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru last = i+1; 338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru current++; 339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru str.extractBetween(last, i, result[current]); 342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return result; 343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CompoundTransliteratorTest::TestTransliterate(){ 345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln("Testing the handleTransliterate() API of CompoundTransliterator"); 346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UParseError parseError; 348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct1=new CompoundTransliterator("Any-Hex;Hex-Any",parseError, status); 349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("CompoundTransliterator construction failed"); 351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }else { 352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if 0 353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // handleTransliterate is a protected method that was erroneously made 354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // public. It is not public API that needs to be tested. 355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString s("abcabc"); 356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expect(*ct1, s, s); 357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UTransPosition index = { 0, 0, 0, 0 }; 358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString rsource2(s); 359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString expectedResult=s; 360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ct1->handleTransliterate(rsource2, index, FALSE); 361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expectAux(ct1->getID() + ":String, index(0,0,0), incremental=FALSE", rsource2 + "->" + rsource2, rsource2==expectedResult, expectedResult); 362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UTransPosition _index = {1,3,2,3}; 363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memcpy(&index, &_index, sizeof(index)); 364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString rsource3(s); 365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ct1->handleTransliterate(rsource3, index, TRUE); 366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expectAux(ct1->getID() + ":String, index(1,2,3), incremental=TRUE", rsource3 + "->" + rsource3, rsource3==expectedResult, expectedResult); 367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct1; 370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString Data[]={ 371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //ID, input string, transliterated string 372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "Any-Hex;Hex-Any;Any-Hex", "hello", UnicodeString("\\u0068\\u0065\\u006C\\u006C\\u006F", ""), 373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "Any-Hex;Hex-Any", "hello! How are you?", "hello! How are you?", 374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //"Devanagari-Latin;Latin-Devanagari", CharsToUnicodeString("\\u092D\\u0948'\\u0930'\\u0935"), CharsToUnicodeString("\\u092D\\u0948\\u0930\\u0935"), // quotes lost 375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "Latin-Cyrillic;Cyrillic-Latin", "a'b'k'd'e'f'g'h'i'j'Shch'shch'zh'h", "a'b'k'd'e'f'g'h'i'j'Shch'shch'zh'h", //"abkdefghijShchshchzhh", 376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "Latin-Greek;Greek-Latin", "ABGabgAKLMN", "ABGabgAKLMN", 377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru //"Latin-Arabic;Arabic-Latin", "Ad'r'a'b'i'k'dh'dd'gh", "Adrabikdhddgh", 378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "Hiragana-Katakana", CharsToUnicodeString("\\u3041\\u308f\\u3099\\u306e\\u304b\\u3092\\u3099"), 379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CharsToUnicodeString("\\u30A1\\u30f7\\u30ce\\u30ab\\u30fa"), 380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "Hiragana-Katakana;Katakana-Hiragana", CharsToUnicodeString("\\u3041\\u308f\\u3099\\u306e\\u304b\\u3051"), 381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CharsToUnicodeString("\\u3041\\u308f\\u3099\\u306e\\u304b\\u3051"), 382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "Katakana-Hiragana;Hiragana-Katakana", CharsToUnicodeString("\\u30A1\\u30f7\\u30ce\\u30f5\\u30f6"), 383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CharsToUnicodeString("\\u30A1\\u30f7\\u30ce\\u30ab\\u30b1"), 384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "Latin-Katakana;Katakana-Latin", CharsToUnicodeString("vavivuvevohuzizuzonyinyunyasesuzezu"), 385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CharsToUnicodeString("vavivuvevohuzizuzonyinyunyasesuzezu"), 386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t i; 388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0; i<sizeof(Data)/sizeof(Data[0]); i=i+3){ 389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru CompoundTransliterator *ct2=new CompoundTransliterator(Data[i+0], parseError, status); 392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 39385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dataerrln("CompoundTransliterator construction failed for " + Data[i+0] + " - " + u_errorName(status)); 394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expect(*ct2, Data[i+1], Data[i+2]); 396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru delete ct2; 398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//====================================================================== 405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// Support methods 406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//====================================================================== 407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CompoundTransliteratorTest::expect(const CompoundTransliterator& t, 408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString& source, 409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString& expectedResult) { 410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString rsource(source); 412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru t.transliterate(rsource); 413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expectAux(t.getID() + ":Replaceable", source + "->" + rsource, rsource==expectedResult, expectedResult); 414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // Test transliterate (incremental) transliteration -- 416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru rsource.remove(); 417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru rsource.append(source); 418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UTransPosition index; 419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru index.contextStart =0; 420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru index.contextLimit = source.length(); 421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru index.start = 0; 422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru index.limit = source.length(); 423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru t.transliterate(rsource, index, ec); 425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru t.finishTransliteration(rsource,index); 426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expectAux(t.getID() + ":handleTransliterate ", source + "->" + rsource, rsource==expectedResult, expectedResult); 427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid CompoundTransliteratorTest::expectAux(const UnicodeString& tag, 431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString& summary, UBool pass, 432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UnicodeString& expectedResult) { 433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (pass) { 434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru logln(UnicodeString("(")+tag+") " + prettify(summary)); 435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln(UnicodeString("FAIL: (")+tag+") " 437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru + prettify(summary) 438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru + ", expected " + prettify(expectedResult)); 439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_TRANSLITERATION */ 443