X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/b331163bffd790ced0e88b73f44f86d49ccc48a5..1a147d096ae81f4c8262f7bfc56bd19fc2dee932:/icuSources/test/cintltst/cstrcase.c diff --git a/icuSources/test/cintltst/cstrcase.c b/icuSources/test/cintltst/cstrcase.c index 5f7a6e31..e526b54f 100644 --- a/icuSources/test/cintltst/cstrcase.c +++ b/icuSources/test/cintltst/cstrcase.c @@ -1,12 +1,14 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * -* Copyright (C) 2002-2015, International Business Machines +* Copyright (C) 2002-2016, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* * file name: cstrcase.c -* encoding: US-ASCII +* encoding: UTF-8 * tab size: 8 (not used) * indentation:4 * @@ -25,6 +27,7 @@ #include "unicode/ucasemap.h" #include "cmemory.h" #include "cintltst.h" +#include "ucasemap_imp.h" #include "ustr_imp.h" /* test string case mapping functions --------------------------------------- */ @@ -44,12 +47,12 @@ TestCaseLower(void) { /* lowercase with root locale and separate buffers */ buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strToLower(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, + length=u_strToLower(buffer, UPRV_LENGTHOF(buffer), + beforeLower, UPRV_LENGTHOF(beforeLower), "", &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(lowerRoot)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(lowerRoot)) || uprv_memcmp(lowerRoot, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -64,14 +67,14 @@ buffer[length]==0 ? "yes" : "no", /* lowercase with turkish locale and in the same buffer */ uprv_memcpy(buffer, beforeLower, sizeof(beforeLower)); - buffer[sizeof(beforeLower)/U_SIZEOF_UCHAR]=0; + buffer[UPRV_LENGTHOF(beforeLower)]=0; errorCode=U_ZERO_ERROR; - length=u_strToLower(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, + length=u_strToLower(buffer, UPRV_LENGTHOF(buffer), buffer, -1, /* implicit srcLength */ "tr", &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(lowerTurkish)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(lowerTurkish)) || uprv_memcmp(lowerTurkish, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -85,11 +88,11 @@ buffer[length]==0 ? "yes" : "no", buffer[0]=buffer[2]=0xabcd; errorCode=U_ZERO_ERROR; length=u_strToLower(buffer, 2, /* set destCapacity=2 */ - beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, + beforeLower, UPRV_LENGTHOF(beforeLower), "", &errorCode); if( errorCode!=U_BUFFER_OVERFLOW_ERROR || - length!=(sizeof(lowerRoot)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(lowerRoot)) || uprv_memcmp(lowerRoot, buffer, 2*U_SIZEOF_UCHAR)!=0 || buffer[2]!=0xabcd ) { @@ -101,8 +104,8 @@ buffer[length]==0 ? "yes" : "no", /* test error handling */ errorCode=U_ZERO_ERROR; - length=u_strToLower(NULL, sizeof(buffer)/U_SIZEOF_UCHAR, - beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, + length=u_strToLower(NULL, UPRV_LENGTHOF(buffer), + beforeLower, UPRV_LENGTHOF(beforeLower), "", &errorCode); if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) { @@ -114,7 +117,7 @@ buffer[length]==0 ? "yes" : "no", buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; length=u_strToLower(buffer, -1, - beforeLower, sizeof(beforeLower)/U_SIZEOF_UCHAR, + beforeLower, UPRV_LENGTHOF(beforeLower), "", &errorCode); if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || @@ -142,12 +145,12 @@ TestCaseUpper(void) { /* uppercase with root locale and in the same buffer */ uprv_memcpy(buffer, beforeUpper, sizeof(beforeUpper)); errorCode=U_ZERO_ERROR; - length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - buffer, sizeof(beforeUpper)/U_SIZEOF_UCHAR, + length=u_strToUpper(buffer, UPRV_LENGTHOF(buffer), + buffer, UPRV_LENGTHOF(beforeUpper), "", &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(upperRoot)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(upperRoot)) || uprv_memcmp(upperRoot, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -160,12 +163,12 @@ TestCaseUpper(void) { /* uppercase with turkish locale and separate buffers */ buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - beforeUpper, sizeof(beforeUpper)/U_SIZEOF_UCHAR, + length=u_strToUpper(buffer, UPRV_LENGTHOF(buffer), + beforeUpper, UPRV_LENGTHOF(beforeUpper), "tr", &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(upperTurkish)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(upperTurkish)) || uprv_memcmp(upperTurkish, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -178,11 +181,11 @@ TestCaseUpper(void) { /* test preflighting */ errorCode=U_ZERO_ERROR; length=u_strToUpper(NULL, 0, - beforeUpper, sizeof(beforeUpper)/U_SIZEOF_UCHAR, + beforeUpper, UPRV_LENGTHOF(beforeUpper), "tr", &errorCode); if( errorCode!=U_BUFFER_OVERFLOW_ERROR || - length!=(sizeof(upperTurkish)/U_SIZEOF_UCHAR) + length!=(UPRV_LENGTHOF(upperTurkish)) ) { log_err("error in u_strToUpper(turkish locale pure preflighting)=%ld error=%s\n", length, @@ -192,8 +195,8 @@ TestCaseUpper(void) { /* test error handling */ buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - NULL, sizeof(beforeUpper)/U_SIZEOF_UCHAR, + length=u_strToUpper(buffer, UPRV_LENGTHOF(buffer), + NULL, UPRV_LENGTHOF(beforeUpper), "tr", &errorCode); if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || @@ -207,7 +210,7 @@ TestCaseUpper(void) { buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strToUpper(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, + length=u_strToUpper(buffer, UPRV_LENGTHOF(buffer), beforeUpper, -2, "tr", &errorCode); @@ -237,7 +240,7 @@ TestCaseTitle(void) { UErrorCode errorCode; errorCode=U_ZERO_ERROR; - titleIterChars=ubrk_open(UBRK_CHARACTER, "", beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, &errorCode); + titleIterChars=ubrk_open(UBRK_CHARACTER, "", beforeTitle, UPRV_LENGTHOF(beforeTitle), &errorCode); if(U_FAILURE(errorCode)) { log_err_status(errorCode, "error: ubrk_open(UBRK_CHARACTER)->%s\n", u_errorName(errorCode)); return; @@ -246,12 +249,12 @@ TestCaseTitle(void) { /* titlecase with standard break iterator and in the same buffer */ uprv_memcpy(buffer, beforeTitle, sizeof(beforeTitle)); errorCode=U_ZERO_ERROR; - length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - buffer, sizeof(beforeTitle)/U_SIZEOF_UCHAR, + length=u_strToTitle(buffer, UPRV_LENGTHOF(buffer), + buffer, UPRV_LENGTHOF(beforeTitle), NULL, "", &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(titleWord)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(titleWord)) || uprv_memcmp(titleWord, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -264,12 +267,12 @@ TestCaseTitle(void) { /* titlecase with UBRK_CHARACTERS and separate buffers */ buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, + length=u_strToTitle(buffer, UPRV_LENGTHOF(buffer), + beforeTitle, UPRV_LENGTHOF(beforeTitle), titleIterChars, "", &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(titleChar)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(titleChar)) || uprv_memcmp(titleChar, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -282,11 +285,11 @@ TestCaseTitle(void) { /* test preflighting */ errorCode=U_ZERO_ERROR; length=u_strToTitle(NULL, 0, - beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, + beforeTitle, UPRV_LENGTHOF(beforeTitle), titleIterChars, "", &errorCode); if( errorCode!=U_BUFFER_OVERFLOW_ERROR || - length!=(sizeof(titleChar)/U_SIZEOF_UCHAR) + length!=(UPRV_LENGTHOF(titleChar)) ) { log_err("error in u_strToTitle(UBRK_CHARACTERS pure preflighting)=%ld error=%s\n", length, @@ -296,8 +299,8 @@ TestCaseTitle(void) { /* test error handling */ buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - NULL, sizeof(beforeTitle)/U_SIZEOF_UCHAR, + length=u_strToTitle(buffer, UPRV_LENGTHOF(buffer), + NULL, UPRV_LENGTHOF(beforeTitle), titleIterChars, "", &errorCode); if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || @@ -311,7 +314,7 @@ TestCaseTitle(void) { buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, + length=u_strToTitle(buffer, UPRV_LENGTHOF(buffer), beforeTitle, -2, titleIterChars, "", &errorCode); @@ -341,7 +344,7 @@ TestCaseDutchTitle(void) { UErrorCode errorCode; errorCode=U_ZERO_ERROR; - titleIterWord=ubrk_open(UBRK_WORD, "", beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, &errorCode); + titleIterWord=ubrk_open(UBRK_WORD, "", beforeTitle, UPRV_LENGTHOF(beforeTitle), &errorCode); if(U_FAILURE(errorCode)) { log_err_status(errorCode, "error: ubrk_open(UBRK_WORD)->%s\n", u_errorName(errorCode)); return; @@ -350,12 +353,12 @@ TestCaseDutchTitle(void) { /* titlecase with default locale */ buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, + length=u_strToTitle(buffer, UPRV_LENGTHOF(buffer), + beforeTitle, UPRV_LENGTHOF(beforeTitle), titleIterWord, "", &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(titleRoot)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(titleRoot)) || uprv_memcmp(titleRoot, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -369,12 +372,12 @@ TestCaseDutchTitle(void) { /* titlecase with Dutch locale */ buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strToTitle(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - beforeTitle, sizeof(beforeTitle)/U_SIZEOF_UCHAR, + length=u_strToTitle(buffer, UPRV_LENGTHOF(buffer), + beforeTitle, UPRV_LENGTHOF(beforeTitle), titleIterWord, "nl", &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(titleDutch)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(titleDutch)) || uprv_memcmp(titleDutch, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -456,12 +459,12 @@ TestCaseFolding(void) { /* test full string case folding with default option and separate buffers */ buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - mixed, sizeof(mixed)/U_SIZEOF_UCHAR, + length=u_strFoldCase(buffer, UPRV_LENGTHOF(buffer), + mixed, UPRV_LENGTHOF(mixed), U_FOLD_CASE_DEFAULT, &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(foldedDefault)) || uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -475,12 +478,12 @@ TestCaseFolding(void) { if(isUnicode_3_1) { buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - mixed, sizeof(mixed)/U_SIZEOF_UCHAR, + length=u_strFoldCase(buffer, UPRV_LENGTHOF(buffer), + mixed, UPRV_LENGTHOF(mixed), U_FOLD_CASE_EXCLUDE_SPECIAL_I, &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(foldedExcludeSpecialI)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(foldedExcludeSpecialI)) || uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -493,14 +496,14 @@ TestCaseFolding(void) { /* test full string case folding with default option and in the same buffer */ uprv_memcpy(buffer, mixed, sizeof(mixed)); - buffer[sizeof(mixed)/U_SIZEOF_UCHAR]=0; + buffer[UPRV_LENGTHOF(mixed)]=0; errorCode=U_ZERO_ERROR; - length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, + length=u_strFoldCase(buffer, UPRV_LENGTHOF(buffer), buffer, -1, /* implicit srcLength */ U_FOLD_CASE_DEFAULT, &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) || + length!=(UPRV_LENGTHOF(foldedDefault)) || uprv_memcmp(foldedDefault, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -514,12 +517,12 @@ TestCaseFolding(void) { if(isUnicode_3_1) { uprv_memcpy(buffer, mixed, sizeof(mixed)); errorCode=U_ZERO_ERROR; - length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - buffer, sizeof(mixed)/U_SIZEOF_UCHAR, + length=u_strFoldCase(buffer, UPRV_LENGTHOF(buffer), + buffer, UPRV_LENGTHOF(mixed), U_FOLD_CASE_EXCLUDE_SPECIAL_I, &errorCode); if( U_FAILURE(errorCode) || - length!=(sizeof(foldedExcludeSpecialI)/U_SIZEOF_UCHAR) || + length!=UPRV_LENGTHOF(foldedExcludeSpecialI) || uprv_memcmp(foldedExcludeSpecialI, buffer, length*U_SIZEOF_UCHAR)!=0 || buffer[length]!=0 ) { @@ -534,11 +537,11 @@ TestCaseFolding(void) { buffer[0]=buffer[2]=0xabcd; errorCode=U_ZERO_ERROR; length=u_strFoldCase(buffer, 2, /* set destCapacity=2 */ - mixed, sizeof(mixed)/U_SIZEOF_UCHAR, + mixed, UPRV_LENGTHOF(mixed), U_FOLD_CASE_DEFAULT, &errorCode); if( errorCode!=U_BUFFER_OVERFLOW_ERROR || - length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) || + length!=UPRV_LENGTHOF(foldedDefault) || uprv_memcmp(foldedDefault, buffer, 2*U_SIZEOF_UCHAR)!=0 || buffer[2]!=0xabcd ) { @@ -550,11 +553,11 @@ TestCaseFolding(void) { errorCode=U_ZERO_ERROR; length=u_strFoldCase(NULL, 0, - mixed, sizeof(mixed)/U_SIZEOF_UCHAR, + mixed, UPRV_LENGTHOF(mixed), U_FOLD_CASE_DEFAULT, &errorCode); if( errorCode!=U_BUFFER_OVERFLOW_ERROR || - length!=(sizeof(foldedDefault)/U_SIZEOF_UCHAR) + length!=UPRV_LENGTHOF(foldedDefault) ) { log_err("error in u_strFoldCase(default pure preflighting)=%ld error=%s\n", length, @@ -563,8 +566,8 @@ TestCaseFolding(void) { /* test error handling */ errorCode=U_ZERO_ERROR; - length=u_strFoldCase(NULL, sizeof(buffer)/U_SIZEOF_UCHAR, - mixed, sizeof(mixed)/U_SIZEOF_UCHAR, + length=u_strFoldCase(NULL, UPRV_LENGTHOF(buffer), + mixed, UPRV_LENGTHOF(mixed), U_FOLD_CASE_DEFAULT, &errorCode); if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) { @@ -576,7 +579,7 @@ TestCaseFolding(void) { buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; length=u_strFoldCase(buffer, -1, - mixed, sizeof(mixed)/U_SIZEOF_UCHAR, + mixed, UPRV_LENGTHOF(mixed), U_FOLD_CASE_DEFAULT, &errorCode); if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || @@ -590,8 +593,8 @@ TestCaseFolding(void) { buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, - NULL, sizeof(mixed)/U_SIZEOF_UCHAR, + length=u_strFoldCase(buffer, UPRV_LENGTHOF(buffer), + NULL, UPRV_LENGTHOF(mixed), U_FOLD_CASE_EXCLUDE_SPECIAL_I, &errorCode); if( errorCode!=U_ILLEGAL_ARGUMENT_ERROR || @@ -605,7 +608,7 @@ TestCaseFolding(void) { buffer[0]=0xabcd; errorCode=U_ZERO_ERROR; - length=u_strFoldCase(buffer, sizeof(buffer)/U_SIZEOF_UCHAR, + length=u_strFoldCase(buffer, UPRV_LENGTHOF(buffer), mixed, -2, U_FOLD_CASE_EXCLUDE_SPECIAL_I, &errorCode); @@ -742,11 +745,15 @@ TestUCaseMap(void) { if(0!=strcmp(locale, "tr")) { log_err("ucasemap_getLocale(ucasemap_open(\"tur\"))==%s!=\"tr\"\n", locale); } - /* overly long locale IDs get truncated to their language code to avoid unnecessary allocation */ + /* overly long locale IDs may get truncated to their language code to avoid unnecessary allocation */ ucasemap_setLocale(csm, "I-kLInGOn-the-quick-brown-fox-jumps-over-the-lazy-dog", &errorCode); locale=ucasemap_getLocale(csm); - if(0!=strcmp(locale, "i-klingon")) { - log_err("ucasemap_getLocale(ucasemap_setLocale(\"I-kLInGOn-the-quick-br...\"))==%s!=\"i-klingon\"\n", locale); + // "I-kLInGOn-the-quick-brown-fox-jumps-over-the-lazy-dog" is canonicalized + // into "tlh-the-quick-brown-fox-jumps-over-the-lazy-dog" + // and "the" will be treated as an extlang which replaces "tlh". + if(0!=strncmp(locale, "the", 3)) { + log_err("ucasemap_getLocale(ucasemap_setLocale(\"I-kLInGOn-the-quick-br...\"))==%s\n" + " does not start with \"the\"\n", locale); } errorCode=U_ZERO_ERROR;