1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 41b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert* Copyright (C) 2002-2015, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: cstrcase.c 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created on: 2002feb21 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: Markus W. Scherer 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Test file for string casing C API functions. 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ubrk.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucasemap.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#include "ustr_imp.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test string case mapping functions --------------------------------------- */ 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseLower(void) { 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower[]= { 0x61, 0x42, 0x49, 0x3a3, 0xdf, 0x3a3, 0x2f, 0xd93f, 0xdfff }, 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lowerRoot[]= { 0x61, 0x62, 0x69, 0x3c3, 0xdf, 0x3c2, 0x2f, 0xd93f, 0xdfff }, 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lowerTurkish[]={ 0x61, 0x62, 0x131, 0x3c3, 0xdf, 0x3c2, 0x2f, 0xd93f, 0xdfff }; 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* lowercase with root locale and separate buffers */ 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(lowerRoot)/U_SIZEOF_UCHAR) || 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerRoot, buffer, length*U_SIZEOF_UCHAR)!=0 || 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(root locale)=%ld error=%s string matches: %s\t\nlowerRoot=%s\t\nbuffer=%s\n", 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerRoot, buffer, length*U_SIZEOF_UCHAR)==0 && 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querubuffer[length]==0 ? "yes" : "no", 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aescstrdup(lowerRoot,-1), 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aescstrdup(buffer,-1)); 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* lowercase with turkish locale and in the same buffer */ 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, beforeLower, sizeof(beforeLower)); 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[sizeof(beforeLower)/U_SIZEOF_UCHAR]=0; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, -1, /* implicit srcLength */ 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(lowerTurkish)/U_SIZEOF_UCHAR) || 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerTurkish, buffer, length*U_SIZEOF_UCHAR)!=0 || 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(turkish locale)=%ld error=%s string matches: %s\n", 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerTurkish, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test preflighting */ 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=buffer[2]=0xabcd; 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(buffer, 2, /* set destCapacity=2 */ 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(lowerRoot)/U_SIZEOF_UCHAR) || 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerRoot, buffer, 2*U_SIZEOF_UCHAR)!=0 || 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[2]!=0xabcd 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(root locale preflighting)=%ld error=%s string matches: %s\n", 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(lowerRoot, buffer, 2*U_SIZEOF_UCHAR)==0 && buffer[2]==0xabcd ? "yes" : "no"); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test error handling */ 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(NULL, sizeof(buffer)/U_SIZEOF_UCHAR, 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) { 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(root locale dest=NULL)=%ld error=%s\n", 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToLower(buffer, -1, 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToLower(root locale destCapacity=-1)=%ld error=%s buffer[0]==0x%lx\n", 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseUpper(void) { 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeUpper[]= { 0x61, 0x42, 0x69, 0x3c2, 0xdf, 0x3c3, 0x2f, 0xfb03, 0xd93f, 0xdfff }, 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru upperRoot[]= { 0x41, 0x42, 0x49, 0x3a3, 0x53, 0x53, 0x3a3, 0x2f, 0x46, 0x46, 0x49, 0xd93f, 0xdfff }, 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru upperTurkish[]={ 0x41, 0x42, 0x130, 0x3a3, 0x53, 0x53, 0x3a3, 0x2f, 0x46, 0x46, 0x49, 0xd93f, 0xdfff }; 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* uppercase with root locale and in the same buffer */ 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, beforeUpper, sizeof(beforeUpper)); 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, sizeof(beforeUpper)/U_SIZEOF_UCHAR, 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(upperRoot)/U_SIZEOF_UCHAR) || 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(upperRoot, buffer, length*U_SIZEOF_UCHAR)!=0 || 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(root locale)=%ld error=%s string matches: %s\n", 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(upperRoot, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* uppercase with turkish locale and separate buffers */ 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeUpper, sizeof(beforeUpper)/U_SIZEOF_UCHAR, 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(upperTurkish)/U_SIZEOF_UCHAR) || 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(upperTurkish, buffer, length*U_SIZEOF_UCHAR)!=0 || 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(turkish locale)=%ld error=%s string matches: %s\n", 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(upperTurkish, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test preflighting */ 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(NULL, 0, 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeUpper, sizeof(beforeUpper)/U_SIZEOF_UCHAR, 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(upperTurkish)/U_SIZEOF_UCHAR) 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(turkish locale pure preflighting)=%ld error=%s\n", 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test error handling */ 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, sizeof(beforeUpper)/U_SIZEOF_UCHAR, 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(turkish locale src=NULL)=%ld error=%s buffer[0]==0x%lx\n", 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeUpper, -2, 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "tr", 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToUpper(turkish locale srcLength=-2)=%ld error=%s buffer[0]==0x%lx\n", 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseTitle(void) { 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle[]= { 0x61, 0x42, 0x20, 0x69, 0x3c2, 0x20, 0xdf, 0x3c3, 0x2f, 0xfb03, 0xd93f, 0xdfff }, 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleWord[]= { 0x41, 0x62, 0x20, 0x49, 0x3c2, 0x20, 0x53, 0x73, 0x3c3, 0x2f, 0x46, 0x66, 0x69, 0xd93f, 0xdfff }, 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleChar[]= { 0x41, 0x42, 0x20, 0x49, 0x3a3, 0x20, 0x53, 0x73, 0x3a3, 0x2f, 0x46, 0x66, 0x69, 0xd93f, 0xdfff }; 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *titleIterChars; 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars=ubrk_open(UBRK_CHARACTER, "", beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, &errorCode); 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 2426d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(errorCode, "error: ubrk_open(UBRK_CHARACTER)->%s\n", u_errorName(errorCode)); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* titlecase with standard break iterator and in the same buffer */ 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, beforeTitle, sizeof(beforeTitle)); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, "", 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(titleWord)/U_SIZEOF_UCHAR) || 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(titleWord, buffer, length*U_SIZEOF_UCHAR)!=0 || 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(standard iterator)=%ld error=%s string matches: %s\n", 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(titleWord, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* titlecase with UBRK_CHARACTERS and separate buffers */ 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars, "", 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(titleChar)/U_SIZEOF_UCHAR) || 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(titleChar, buffer, length*U_SIZEOF_UCHAR)!=0 || 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS)=%ld error=%s string matches: %s\n", 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(titleChar, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test preflighting */ 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(NULL, 0, 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars, "", 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(titleChar)/U_SIZEOF_UCHAR) 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS pure preflighting)=%ld error=%s\n", 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test error handling */ 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars, "", 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS src=NULL)=%ld error=%s buffer[0]==0x%lx\n", 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle, -2, 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleIterChars, "", 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS srcLength=-2)=%ld error=%s buffer[0]==0x%lx\n", 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ubrk_close(titleIterChars); 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 330c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic void 331c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste QueruTestCaseDutchTitle(void) { 332c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru static const UChar 333c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 334c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru beforeTitle[]= { 0x69, 0x6A, 0x73, 0x73, 0x45, 0x6c, 0x20, 0x69, 0x67, 0x6c, 0x4f, 0x6f , 0x20 , 0x49, 0x4A, 0x53, 0x53, 0x45, 0x4C }, 335c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru titleRoot[]= { 0x49, 0x6A, 0x73, 0x73, 0x65, 0x6c, 0x20, 0x49, 0x67, 0x6c, 0x6f, 0x6f , 0x20 , 0x49, 0x6A, 0x73, 0x73, 0x65, 0x6C }, 336c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru titleDutch[]= { 0x49, 0x4A, 0x73, 0x73, 0x65, 0x6c, 0x20, 0x49, 0x67, 0x6c, 0x6f, 0x6f , 0x20 , 0x49, 0x4A, 0x73, 0x73, 0x65, 0x6C }; 337c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 338c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar buffer[32]; 339c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UBreakIterator *titleIterWord; 340c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t length; 341c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode errorCode; 342c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 343c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 344c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru titleIterWord=ubrk_open(UBRK_WORD, "", beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, &errorCode); 345c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 3466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(errorCode, "error: ubrk_open(UBRK_WORD)->%s\n", u_errorName(errorCode)); 347c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 348c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 349c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* titlecase with default locale */ 351c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer[0]=0xabcd; 352c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 353c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 354c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 355c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru titleIterWord, "", 356c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru &errorCode); 357c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if( U_FAILURE(errorCode) || 358c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru length!=(sizeof(titleRoot)/U_SIZEOF_UCHAR) || 359c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_memcmp(titleRoot, buffer, length*U_SIZEOF_UCHAR)!=0 || 360c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer[length]!=0 361c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ) { 362c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru char charsOut[21]; 363c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru u_UCharsToChars(buffer,charsOut,sizeof(charsOut)); 364c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS)=%ld error=%s root locale string matches: %s\noutput buffer is {%s}\n", 365c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru length, 366c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru u_errorName(errorCode), 367c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_memcmp(titleRoot, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no", charsOut); 368c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 369c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /* titlecase with Dutch locale */ 370c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer[0]=0xabcd; 371c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 372c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 373c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, 374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru titleIterWord, "nl", 375c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru &errorCode); 376c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if( U_FAILURE(errorCode) || 377c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru length!=(sizeof(titleDutch)/U_SIZEOF_UCHAR) || 378c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_memcmp(titleDutch, buffer, length*U_SIZEOF_UCHAR)!=0 || 379c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru buffer[length]!=0 380c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ) { 381c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru char charsOut[21]; 382c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru u_UCharsToChars(buffer,charsOut,sizeof(charsOut)); 383c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("error in u_strToTitle(UBRK_CHARACTERS)=%ld error=%s dutch locale string matches: %s\noutput buffer is {%s}\n", 384c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru length, 385c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru u_errorName(errorCode), 386c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru uprv_memcmp(titleDutch, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no", charsOut); 387c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 388c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 389c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ubrk_close(titleIterWord); 390c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 391c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test case folding and case-insensitive string compare -------------------- */ 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseFolding(void) { 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * CaseFolding.txt says about i and its cousins: 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0049; C; 0069; # LATIN CAPITAL LETTER I 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0049; T; 0131; # LATIN CAPITAL LETTER I 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * That's all. 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * See CaseFolding.txt and the Unicode Standard for how to apply the case foldings. 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar32 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru simple[]={ 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* input, default, exclude special i */ 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x61, 0x61, 0x61, 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x49, 0x69, 0x131, 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x130, 0x130, 0x69, 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x131, 0x131, 0x131, 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xdf, 0xdf, 0xdf, 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0xfb03, 0xfb03, 0xfb03, 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x1040e,0x10436,0x10436, 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0x5ffff,0x5ffff,0x5ffff 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed[]= { 0x61, 0x42, 0x130, 0x49, 0x131, 0x3d0, 0xdf, 0xfb03, 0xd93f, 0xdfff }, 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru foldedDefault[]= { 0x61, 0x62, 0x69, 0x307, 0x69, 0x131, 0x3b2, 0x73, 0x73, 0x66, 0x66, 0x69, 0xd93f, 0xdfff }, 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru foldedExcludeSpecialI[]={ 0x61, 0x62, 0x69, 0x131, 0x131, 0x3b2, 0x73, 0x73, 0x66, 0x66, 0x69, 0xd93f, 0xdfff }; 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UVersionInfo unicodeVersion={ 0, 0, 17, 89 }, unicode_3_1={ 3, 1, 0, 0 }; 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar32 *p; 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isUnicode_3_1; 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* if unicodeVersion()>=3.1 then test exclude-special-i cases as well */ 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_getUnicodeVersion(unicodeVersion); 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isUnicode_3_1= uprv_memcmp(unicodeVersion, unicode_3_1, 4)>=0; 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test simple case folding */ 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p=simple; 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0; i<sizeof(simple)/12; p+=3, ++i) { 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_foldCase(p[0], U_FOLD_CASE_DEFAULT)!=p[1]) { 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_foldCase(0x%04lx, default)=0x%04lx instead of 0x%04lx\n", 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p[0], u_foldCase(p[0], U_FOLD_CASE_DEFAULT), p[1]); 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isUnicode_3_1 && u_foldCase(p[0], U_FOLD_CASE_EXCLUDE_SPECIAL_I)!=p[2]) { 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_foldCase(0x%04lx, exclude special i)=0x%04lx instead of 0x%04lx\n", 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p[0], u_foldCase(p[0], U_FOLD_CASE_EXCLUDE_SPECIAL_I), p[2]); 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test full string case folding with default option and separate buffers */ 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) || 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)!=0 || 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default)=%ld error=%s string matches: %s\n", 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* exclude special i */ 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isUnicode_3_1) { 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_EXCLUDE_SPECIAL_I, 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedExcludeSpecialI)/U_SIZEOF_UCHAR) || 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)!=0 || 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(exclude special i)=%ld error=%s string matches: %s\n", 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test full string case folding with default option and in the same buffer */ 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, mixed, sizeof(mixed)); 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[sizeof(mixed)/U_SIZEOF_UCHAR]=0; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, -1, /* implicit srcLength */ 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) || 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)!=0 || 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default same buffer)=%ld error=%s string matches: %s\n", 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test full string case folding, exclude special i, in the same buffer */ 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(isUnicode_3_1) { 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(buffer, mixed, sizeof(mixed)); 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer, sizeof(mixed)/U_SIZEOF_UCHAR, 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_EXCLUDE_SPECIAL_I, 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedExcludeSpecialI)/U_SIZEOF_UCHAR) || 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)!=0 || 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(exclude special i same buffer)=%ld error=%s string matches: %s\n", 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)==0 && buffer[length]==0 ? "yes" : "no"); 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test preflighting */ 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=buffer[2]=0xabcd; 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, 2, /* set destCapacity=2 */ 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) || 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, 2*U_SIZEOF_UCHAR)!=0 || 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[2]!=0xabcd 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default preflighting)=%ld error=%s string matches: %s\n", 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcmp(foldedDefault, buffer, 2*U_SIZEOF_UCHAR)==0 && buffer[2]==0xabcd ? "yes" : "no"); 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(NULL, 0, 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default pure preflighting)=%ld error=%s\n", 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test error handling */ 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(NULL, sizeof(buffer)/U_SIZEOF_UCHAR, 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) { 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default dest=NULL)=%ld error=%s\n", 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, -1, 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, sizeof(mixed)/U_SIZEOF_UCHAR, 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_DEFAULT, 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(default destCapacity=-1)=%ld error=%s buffer[0]==0x%lx\n", 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, sizeof(mixed)/U_SIZEOF_UCHAR, 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_EXCLUDE_SPECIAL_I, 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(exclude special i src=NULL)=%ld error=%s buffer[0]==0x%lx\n", 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0xabcd; 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed, -2, 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FOLD_CASE_EXCLUDE_SPECIAL_I, 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &errorCode); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]!=0xabcd 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in u_strFoldCase(exclude special i srcLength=-2)=%ld error=%s buffer[0]==0x%lx\n", 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length, 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode), 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]); 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestCaseCompare(void) { 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mixed[]= { 0x61, 0x42, 0x131, 0x3a3, 0xdf, 0xfb03, 0xd93f, 0xdfff, 0 }, 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru otherDefault[]= { 0x41, 0x62, 0x131, 0x3c3, 0x73, 0x53, 0x46, 0x66, 0x49, 0xd93f, 0xdfff, 0 }, 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru otherExcludeSpecialI[]={ 0x41, 0x62, 0x131, 0x3c3, 0x53, 0x73, 0x66, 0x46, 0x69, 0xd93f, 0xdfff, 0 }, 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru different[]= { 0x41, 0x62, 0x131, 0x3c3, 0x73, 0x53, 0x46, 0x66, 0x49, 0xd93f, 0xdffd, 0 }; 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UVersionInfo unicodeVersion={ 0, 0, 17, 89 }, unicode_3_1={ 3, 1, 0, 0 }; 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t result, lenMixed, lenOtherDefault, lenOtherExcludeSpecialI, lenDifferent; 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isUnicode_3_1; 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lenMixed=u_strlen(mixed); 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lenOtherDefault=u_strlen(otherDefault); 64159d709d503bab6e2b61931737e662dd293b40578ccornelius (void)lenOtherDefault; /* Suppress set but not used warning. */ 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lenOtherExcludeSpecialI=u_strlen(otherExcludeSpecialI); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lenDifferent=u_strlen(different); 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* if unicodeVersion()>=3.1 then test exclude-special-i cases as well */ 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_getUnicodeVersion(unicodeVersion); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isUnicode_3_1= uprv_memcmp(unicodeVersion, unicode_3_1, 4)>=0; 64859d709d503bab6e2b61931737e662dd293b40578ccornelius (void)isUnicode_3_1; /* Suppress set but not used warning. */ 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strcasecmp() */ 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strcasecmp(mixed, otherDefault, U_FOLD_CASE_DEFAULT); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strcasecmp(mixed, other, default)=%ld instead of 0\n", result); 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, -1, otherDefault, -1, U_FOLD_CASE_DEFAULT, &errorCode); 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, other, default)=%ld instead of 0\n", result); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strcasecmp() - exclude special i */ 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strcasecmp(mixed, otherExcludeSpecialI, U_FOLD_CASE_EXCLUDE_SPECIAL_I); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strcasecmp(mixed, other, exclude special i)=%ld instead of 0\n", result); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, lenMixed, otherExcludeSpecialI, lenOtherExcludeSpecialI, U_FOLD_CASE_EXCLUDE_SPECIAL_I, &errorCode); 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, other, exclude special i)=%ld instead of 0\n", result); 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strcasecmp() */ 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strcasecmp(mixed, different, U_FOLD_CASE_DEFAULT); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strcasecmp(mixed, different, default)=%ld instead of positive\n", result); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, -1, different, lenDifferent, U_FOLD_CASE_DEFAULT, &errorCode); 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, different, default)=%ld instead of positive\n", result); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strncasecmp() - stop before the sharp s (U+00df) */ 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strncasecmp(mixed, different, 4, U_FOLD_CASE_DEFAULT); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strncasecmp(mixed, different, 4, default)=%ld instead of 0\n", result); 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, 4, different, 4, U_FOLD_CASE_DEFAULT, &errorCode); 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, 4, different, 4, default)=%ld instead of 0\n", result); 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_strncasecmp() - stop in the middle of the sharp s (U+00df) */ 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strncasecmp(mixed, different, 5, U_FOLD_CASE_DEFAULT); 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strncasecmp(mixed, different, 5, default)=%ld instead of positive\n", result); 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_strCaseCompare(mixed, 5, different, 5, U_FOLD_CASE_DEFAULT, &errorCode); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_strCaseCompare(mixed, 5, different, 5, default)=%ld instead of positive\n", result); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_memcasecmp() - stop before the sharp s (U+00df) */ 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_memcasecmp(mixed, different, 4, U_FOLD_CASE_DEFAULT); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=0) { 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_memcasecmp(mixed, different, 4, default)=%ld instead of 0\n", result); 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test u_memcasecmp() - stop in the middle of the sharp s (U+00df) */ 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=u_memcasecmp(mixed, different, 5, U_FOLD_CASE_DEFAULT); 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result<=0) { 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: u_memcasecmp(mixed, different, 5, default)=%ld instead of positive\n", result); 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test UCaseMap ------------------------------------------------------------ */ 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * API test for UCaseMap; 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * test cases for actual case mappings using UCaseMap see 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * intltest utility/UnicodeStringTest/StringCaseTest/TestCasing 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestUCaseMap(void) { 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru aBc[] ={ 0x61, 0x42, 0x63, 0 }, 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru abc[] ={ 0x61, 0x62, 0x63, 0 }, 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ABCg[]={ 0x41, 0x42, 0x43, 0x67, 0 }, 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru defg[]={ 0x64, 0x65, 0x66, 0x67, 0 }; 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char utf8Out[8]; 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCaseMap *csm; 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *locale; 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t options; 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru csm=ucasemap_open("tur", 0xa5, &errorCode); 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_open(\"tur\") failed - %s\n", u_errorName(errorCode)); 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale=ucasemap_getLocale(csm); 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(0!=strcmp(locale, "tr")) { 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getLocale(ucasemap_open(\"tur\"))==%s!=\"tr\"\n", locale); 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* overly long locale IDs get truncated to their language code to avoid unnecessary allocation */ 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setLocale(csm, "I-kLInGOn-the-quick-brown-fox-jumps-over-the-lazy-dog", &errorCode); 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale=ucasemap_getLocale(csm); 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(0!=strcmp(locale, "i-klingon")) { 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getLocale(ucasemap_setLocale(\"I-kLInGOn-the-quick-br...\"))==%s!=\"i-klingon\"\n", locale); 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options=ucasemap_getOptions(csm); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options!=0xa5) { 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getOptions(ucasemap_open(0xa5))==0x%lx!=0xa5\n", (long)options); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setOptions(csm, 0x333333, &errorCode); 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru options=ucasemap_getOptions(csm); 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(options!=0x333333) { 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getOptions(ucasemap_setOptions(0x333333))==0x%lx!=0x333333\n", (long)options); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test case mapping API; not all permutations necessary due to shared implementation code */ 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* NUL terminated source */ 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, -1, &errorCode); 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode) || length!=3 || 0!=strcmp(abc, utf8Out)) { 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(aBc\\0) failed\n"); 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* incoming failure code */ 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_PARSE_ERROR; 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, -1, &errorCode); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_PARSE_ERROR || 0!=strcmp(defg, utf8Out)) { 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(failure) failed\n"); 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* overlapping input & output */ 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, aBc); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToUpper(csm, utf8Out, 2, utf8Out+1, 2, &errorCode); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(aBc, utf8Out)) { 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToUpper(overlap 1) failed\n"); 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* overlap in the other direction */ 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, aBc); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToUpper(csm, utf8Out+1, 2, utf8Out, 2, &errorCode); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(aBc, utf8Out)) { 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToUpper(overlap 2) failed\n"); 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* NULL destination */ 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, NULL, (int32_t)sizeof(utf8Out), aBc, -1, &errorCode); 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(dest=NULL) failed\n"); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* destCapacity<0 */ 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, -2, aBc, -1, &errorCode); 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(destCapacity<0) failed\n"); 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* NULL source */ 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), NULL, -1, &errorCode); 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(src=NULL) failed\n"); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* srcLength<-1 */ 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToLower(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, -2, &errorCode); 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || 0!=strcmp(defg, utf8Out)) { 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToLower(srcLength<-1) failed\n"); 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* buffer overflow */ 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToUpper(csm, utf8Out, 2, aBc, 3, &errorCode); 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_BUFFER_OVERFLOW_ERROR || length!=3 || 0!=strcmp(defg+2, utf8Out+2)) { 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToUpper(overflow) failed\n"); 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* dest not terminated (leaves g from defg alone) */ 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(utf8Out, defg); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToUpper(csm, utf8Out, 3, aBc, 3, &errorCode); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode!=U_STRING_NOT_TERMINATED_WARNING || length!=3 || 0!=strcmp(ABCg, utf8Out)) { 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToUpper(overflow) failed\n"); 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* C API coverage for case folding. More thorough test via C++ intltest's StringCaseTest::TestCasing(). */ 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utf8Out[0]=0; 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8FoldCase(csm, utf8Out, (int32_t)sizeof(utf8Out), aBc, 3, &errorCode); 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode) || length!=3 || 0!=strcmp(abc, utf8Out)) { 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8FoldCase(aBc) failed\n"); 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_close(csm); 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Try titlecasing with options. */ 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestUCaseMapToTitle(void) { 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* "a 'CaT. A 'dOg! 'eTc." where '=U+02BB */ 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Note: The sentence BreakIterator does not recognize a '.' 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * as a sentence terminator if it is followed by lowercase. 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * That is why the example has the '!'. 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru beforeTitle[]= { 0x61, 0x20, 0x2bb, 0x43, 0x61, 0x54, 0x2e, 0x20, 0x41, 0x20, 0x2bb, 0x64, 0x4f, 0x67, 0x21, 0x20, 0x2bb, 0x65, 0x54, 0x63, 0x2e }, 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleWord[]= { 0x41, 0x20, 0x2bb, 0x43, 0x61, 0x74, 0x2e, 0x20, 0x41, 0x20, 0x2bb, 0x44, 0x6f, 0x67, 0x21, 0x20, 0x2bb, 0x45, 0x74, 0x63, 0x2e }, 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleWordNoAdjust[]={ 0x41, 0x20, 0x2bb, 0x63, 0x61, 0x74, 0x2e, 0x20, 0x41, 0x20, 0x2bb, 0x64, 0x6f, 0x67, 0x21, 0x20, 0x2bb, 0x65, 0x74, 0x63, 0x2e }, 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru titleSentNoLower[]= { 0x41, 0x20, 0x2bb, 0x43, 0x61, 0x54, 0x2e, 0x20, 0x41, 0x20, 0x2bb, 0x64, 0x4f, 0x67, 0x21, 0x20, 0x2bb, 0x45, 0x54, 0x63, 0x2e }; 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[32]; 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCaseMap *csm; 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBreakIterator *sentenceIter; 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UBreakIterator *iter; 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode; 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru csm=ucasemap_open("", 0, &errorCode); 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_open(\"\") failed - %s\n", u_errorName(errorCode)); 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iter=ucasemap_getBreakIterator(csm); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(iter!=NULL) { 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getBreakIterator() returns %p!=NULL before setting any iterator or titlecasing\n", iter); 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Use default UBreakIterator: Word breaks. */ 893f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length=ucasemap_toTitle(csm, buffer, UPRV_LENGTHOF(buffer), beforeTitle, UPRV_LENGTHOF(beforeTitle), &errorCode); 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 895f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length!=UPRV_LENGTHOF(titleWord) || 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0!=u_memcmp(buffer, titleWord, length) || 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 8996d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(errorCode, "ucasemap_toTitle(default iterator)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 9016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_SUCCESS(errorCode)) { 9026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru iter=ucasemap_getBreakIterator(csm); 9036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if(iter==NULL) { 9046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("ucasemap_getBreakIterator() returns NULL after titlecasing\n"); 9056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Try U_TITLECASE_NO_BREAK_ADJUSTMENT. */ 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setOptions(csm, U_TITLECASE_NO_BREAK_ADJUSTMENT, &errorCode); 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 9116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(errorCode, "error: ucasemap_setOptions(U_TITLECASE_NO_BREAK_ADJUSTMENT) failed - %s\n", u_errorName(errorCode)); 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 915f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length=ucasemap_toTitle(csm, buffer, UPRV_LENGTHOF(buffer), beforeTitle, UPRV_LENGTHOF(beforeTitle), &errorCode); 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 917f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length!=UPRV_LENGTHOF(titleWordNoAdjust) || 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0!=u_memcmp(buffer, titleWordNoAdjust, length) || 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_toTitle(default iterator, no break adjustment)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Set a sentence break iterator. */ 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sentenceIter=ubrk_open(UBRK_SENTENCE, "", NULL, 0, &errorCode); 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: ubrk_open(UBRK_SENTENCE) failed - %s\n", u_errorName(errorCode)); 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_close(csm); 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setBreakIterator(csm, sentenceIter, &errorCode); 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: ucasemap_setBreakIterator(sentence iterator) failed - %s\n", u_errorName(errorCode)); 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ubrk_close(sentenceIter); 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_close(csm); 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru iter=ucasemap_getBreakIterator(csm); 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(iter!=sentenceIter) { 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_getBreakIterator() returns %p!=%p after setting the iterator\n", iter, sentenceIter); 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_setOptions(csm, U_TITLECASE_NO_LOWERCASE, &errorCode); 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error: ucasemap_setOptions(U_TITLECASE_NO_LOWERCASE) failed - %s\n", u_errorName(errorCode)); 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Use the sentence break iterator with the option. Preflight first. */ 951f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length=ucasemap_toTitle(csm, NULL, 0, beforeTitle, UPRV_LENGTHOF(beforeTitle), &errorCode); 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( errorCode!=U_BUFFER_OVERFLOW_ERROR || 953f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length!=UPRV_LENGTHOF(titleSentNoLower) 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_toTitle(preflight sentence break iterator, no lowercasing)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[0]=0; 960f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length=ucasemap_toTitle(csm, buffer, UPRV_LENGTHOF(buffer), beforeTitle, UPRV_LENGTHOF(beforeTitle), &errorCode); 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 962f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius length!=UPRV_LENGTHOF(titleSentNoLower) || 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0!=u_memcmp(buffer, titleSentNoLower, length) || 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[length]!=0 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_toTitle(sentence break iterator, no lowercasing)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* UTF-8 C API coverage. More thorough test via C++ intltest's StringCaseTest::TestCasing(). */ 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char utf8BeforeTitle[64], utf8TitleSentNoLower[64], utf8[64]; 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t utf8BeforeTitleLength, utf8TitleSentNoLowerLength; 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 975f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius u_strToUTF8(utf8BeforeTitle, (int32_t)sizeof(utf8BeforeTitle), &utf8BeforeTitleLength, beforeTitle, UPRV_LENGTHOF(beforeTitle), &errorCode); 976f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius u_strToUTF8(utf8TitleSentNoLower, (int32_t)sizeof(utf8TitleSentNoLower), &utf8TitleSentNoLowerLength, titleSentNoLower, UPRV_LENGTHOF(titleSentNoLower), &errorCode); 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=ucasemap_utf8ToTitle(csm, utf8, (int32_t)sizeof(utf8), utf8BeforeTitle, utf8BeforeTitleLength, &errorCode); 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( U_FAILURE(errorCode) || 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length!=utf8TitleSentNoLowerLength || 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0!=uprv_memcmp(utf8, utf8TitleSentNoLower, length) || 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utf8[length]!=0 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucasemap_utf8ToTitle(sentence break iterator, no lowercasing)=%ld failed - %s\n", (long)length, u_errorName(errorCode)); 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucasemap_close(csm); 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert/* Test case for internal API u_caseInsensitivePrefixMatch */ 9941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertstatic void 9951b7d32f919554dda9c193b32188251337bc756f1Fredrik RoubertTestUCaseInsensitivePrefixMatch(void) { 9961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert struct { 9971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const char *s1; 9981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert const char *s2; 9991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t r1; 10001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t r2; 10011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } testCases[] = { 10021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ABC", "ab", 2, 2}, 10031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ABCD", "abcx", 3, 3}, 10041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ABC", "xyz", 0, 0}, 10051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert /* U+00DF LATIN SMALL LETTER SHARP S */ 10061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"A\\u00dfBC", "Ass", 2, 3}, 10071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"Fust", "Fu\\u00dfball", 2, 2}, 10081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"\\u00dfsA", "s\\u00dfB", 2, 2}, 10091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"\\u00dfs", "s\\u00df", 2, 2}, 10101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */ 10111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"XYZ\\u0130i\\u0307xxx", "xyzi\\u0307\\u0130yyy", 6, 6}, 10121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {0, 0, 0, 0} 10131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert }; 10141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t i; 10151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 10161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for (i = 0; testCases[i].s1 != 0; i++) { 10171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode sts = U_ZERO_ERROR; 10181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UChar u1[64], u2[64]; 10191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int32_t matchLen1, matchLen2; 10201b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 10211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert u_unescape(testCases[i].s1, u1, 64); 10221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert u_unescape(testCases[i].s2, u2, 64); 10231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 10241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert u_caseInsensitivePrefixMatch(u1, -1, u2, -1, 0, &matchLen1, &matchLen2, &sts); 10251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(sts)) { 10261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert log_err("error: %s, s1=%s, s2=%s", u_errorName(sts), testCases[i].s1, testCases[i].s2); 10271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } else if (matchLen1 != testCases[i].r1 || matchLen2 != testCases[i].r2) { 10281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert log_err("s1=%s, s2=%2 / match len1=%d, len2=%d / expected len1=%d, len2=%d", 10291b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert testCases[i].s1, testCases[i].s2, 10301b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert matchLen1, matchLen2, 10311b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert testCases[i].r1, testCases[i].r2); 10321b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 10331b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 10341b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 10351b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addCaseTest(TestNode** root); 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addCaseTest(TestNode** root) { 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* cstrcase.c functions, declared in cucdtst.h */ 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseLower, "tsutil/cstrcase/TestCaseLower"); 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseUpper, "tsutil/cstrcase/TestCaseUpper"); 104250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILE_IO 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseTitle, "tsutil/cstrcase/TestCaseTitle"); 1044c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru addTest(root, &TestCaseDutchTitle, "tsutil/cstrcase/TestCaseDutchTitle"); 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseFolding, "tsutil/cstrcase/TestCaseFolding"); 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCaseCompare, "tsutil/cstrcase/TestCaseCompare"); 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestUCaseMap, "tsutil/cstrcase/TestUCaseMap"); 104950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILE_IO 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestUCaseMapToTitle, "tsutil/cstrcase/TestUCaseMapToTitle"); 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 10521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert addTest(root, &TestUCaseInsensitivePrefixMatch, "tsutil/cstrcase/TestUCaseInsensitivePrefixMatch"); 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1054