1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Copyright (C) 2002-2003, International Business Machines 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* file name: uenumtst.c 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* encoding: US-ASCII 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* tab size: 8 (not used) 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* indentation:2 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* created on: 2002jul08 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* created by: Vladimir Weinstein 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cintltst.h" 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "uenumimp.h" 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cmemory.h" 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cstring.h" 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h" 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic char quikBuf[256]; 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic char* quikU2C(const UChar* str, int32_t len) { 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_UCharsToChars(str, quikBuf, len); 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru quikBuf[len] = 0; 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return quikBuf; 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char* test1[] = { 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "first", 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "second", 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "third", 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "fourth" 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustruct chArrayContext { 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t currIndex; 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t maxIndex; 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *currChar; 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar *currUChar; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char **array; 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef struct chArrayContext chArrayContext; 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define cont ((chArrayContext *)en->context) 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void U_CALLCONV 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruchArrayClose(UEnumeration *en) { 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(cont->currUChar != NULL) { 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru free(cont->currUChar); 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru cont->currUChar = NULL; 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru free(en); 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic int32_t U_CALLCONV 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruchArrayCount(UEnumeration *en, UErrorCode *status) { 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return cont->maxIndex; 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UChar* U_CALLCONV 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruchArrayUNext(UEnumeration *en, int32_t *resultLength, UErrorCode *status) { 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(cont->currIndex >= cont->maxIndex) { 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(cont->currUChar == NULL) { 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru cont->currUChar = (UChar *)malloc(1024*sizeof(UChar)); 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru cont->currChar = (cont->array)[cont->currIndex]; 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *resultLength = (int32_t)strlen(cont->currChar); 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_charsToUChars(cont->currChar, cont->currUChar, *resultLength); 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru cont->currIndex++; 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return cont->currUChar; 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char* U_CALLCONV 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruchArrayNext(UEnumeration *en, int32_t *resultLength, UErrorCode *status) { 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(cont->currIndex >= cont->maxIndex) { 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru cont->currChar = (cont->array)[cont->currIndex]; 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *resultLength = (int32_t)strlen(cont->currChar); 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru cont->currIndex++; 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return cont->currChar; 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void U_CALLCONV 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruchArrayReset(UEnumeration *en, UErrorCode *status) { 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru cont->currIndex = 0; 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruchArrayContext myCont = { 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 0, 0, 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, NULL, 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUEnumeration chEnum = { 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru &myCont, 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru chArrayClose, 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru chArrayCount, 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru chArrayUNext, 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru chArrayNext, 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru chArrayReset 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UEnumeration emptyEnumerator = { 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UEnumeration emptyPartialEnumerator = { 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_unextDefault, 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/********************************************************************/ 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UChar _first[] = {102,105,114,115,116,0}; /* "first" */ 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UChar _second[]= {115,101,99,111,110,100,0}; /* "second" */ 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UChar _third[] = {116,104,105,114,100,0}; /* "third" */ 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UChar _fourth[]= {102,111,117,114,116,104,0};/* "fourth" */ 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UChar* test2[] = { 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru _first, _second, _third, _fourth 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustruct uchArrayContext { 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t currIndex; 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t maxIndex; 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar *currUChar; 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar **array; 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef struct uchArrayContext uchArrayContext; 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define ucont ((uchArrayContext *)en->context) 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void U_CALLCONV 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruuchArrayClose(UEnumeration *en) { 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru free(en); 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic int32_t U_CALLCONV 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruuchArrayCount(UEnumeration *en, UErrorCode *status) { 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return ucont->maxIndex; 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UChar* U_CALLCONV 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruuchArrayUNext(UEnumeration *en, int32_t *resultLength, UErrorCode *status) { 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(ucont->currIndex >= ucont->maxIndex) { 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return NULL; 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ucont->currUChar = (ucont->array)[ucont->currIndex]; 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *resultLength = u_strlen(ucont->currUChar); 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ucont->currIndex++; 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return ucont->currUChar; 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void U_CALLCONV 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruuchArrayReset(UEnumeration *en, UErrorCode *status) { 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ucont->currIndex = 0; 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruuchArrayContext myUCont = { 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 0, 0, 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, NULL 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUEnumeration uchEnum = { 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru NULL, 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru &myUCont, 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uchArrayClose, 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uchArrayCount, 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uchArrayUNext, 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_nextDefault, 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uchArrayReset 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/********************************************************************/ 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UEnumeration *getchArrayEnum(const char** source, int32_t size) { 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UEnumeration *en = (UEnumeration *)malloc(sizeof(UEnumeration)); 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru memcpy(en, &chEnum, sizeof(UEnumeration)); 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru cont->array = (char **)source; 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru cont->maxIndex = size; 203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return en; 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void EnumerationTest(void) { 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t len = 0; 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UEnumeration *en = getchArrayEnum(test1, sizeof(test1)/sizeof(test1[0])); 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *string = NULL; 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *uString = NULL; 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while ((string = uenum_next(en, &len, &status))) { 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("read \"%s\", length %i\n", string, len); 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_reset(en, &status); 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while ((uString = uenum_unext(en, &len, &status))) { 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("read \"%s\" (UChar), length %i\n", quikU2C(uString, len), len); 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_close(en); 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void EmptyEnumerationTest(void) { 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UEnumeration *emptyEnum = uprv_malloc(sizeof(UEnumeration)); 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memcpy(emptyEnum, &emptyEnumerator, sizeof(UEnumeration)); 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (uenum_count(emptyEnum, &status) != -1 || status != U_UNSUPPORTED_ERROR) { 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uenum_count failed\n"); 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (uenum_next(emptyEnum, NULL, &status) != NULL || status != U_UNSUPPORTED_ERROR) { 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uenum_next failed\n"); 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (uenum_unext(emptyEnum, NULL, &status) != NULL || status != U_UNSUPPORTED_ERROR) { 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uenum_unext failed\n"); 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_reset(emptyEnum, &status); 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (status != U_UNSUPPORTED_ERROR) { 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uenum_reset failed\n"); 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_close(emptyEnum); 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (uenum_next(NULL, NULL, &status) != NULL || status != U_ZERO_ERROR) { 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uenum_next(NULL) failed\n"); 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (uenum_unext(NULL, NULL, &status) != NULL || status != U_ZERO_ERROR) { 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uenum_unext(NULL) failed\n"); 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_reset(NULL, &status); 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (status != U_ZERO_ERROR) { 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uenum_reset(NULL) failed\n"); 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru emptyEnum = uprv_malloc(sizeof(UEnumeration)); 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_memcpy(emptyEnum, &emptyPartialEnumerator, sizeof(UEnumeration)); 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (uenum_unext(emptyEnum, NULL, &status) != NULL || status != U_UNSUPPORTED_ERROR) { 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("partial uenum_unext failed\n"); 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_close(emptyEnum); 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UEnumeration *getuchArrayEnum(const UChar** source, int32_t size) { 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UEnumeration *en = (UEnumeration *)malloc(sizeof(UEnumeration)); 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru memcpy(en, &uchEnum, sizeof(UEnumeration)); 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ucont->array = (UChar **)source; 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ucont->maxIndex = size; 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return en; 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void DefaultNextTest(void) { 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t len = 0; 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UEnumeration *en = getuchArrayEnum(test2, sizeof(test2)/sizeof(test2[0])); 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char *string = NULL; 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const UChar *uString = NULL; 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while ((uString = uenum_unext(en, &len, &status))) { 284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("read \"%s\" (UChar), length %i\n", quikU2C(uString, len), len); 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) { 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: uenum_unext => %s\n", u_errorName(status)); 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_reset(en, &status); 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru while ((string = uenum_next(en, &len, &status))) { 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("read \"%s\", length %i\n", string, len); 292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(status)) { 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: uenum_next => %s\n", u_errorName(status)); 295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uenum_close(en); 298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid addEnumerationTest(TestNode** root); 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid addEnumerationTest(TestNode** root) 303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru addTest(root, &EnumerationTest, "tsutil/uenumtst/EnumerationTest"); 305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru addTest(root, &EmptyEnumerationTest, "tsutil/uenumtst/EmptyEnumerationTest"); 306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru addTest(root, &DefaultNextTest, "tsutil/uenumtst/DefaultNextTest"); 307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 308