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