Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(706)

Unified Diff: source/test/cintltst/capitst.c

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/test/cintltst/callcoll.c ('k') | source/test/cintltst/cbiditst.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/test/cintltst/capitst.c
diff --git a/source/test/cintltst/capitst.c b/source/test/cintltst/capitst.c
index c5097891b92199a51afe7b44409cea43f23802dc..0d2fdccda3193c0d2b5d3b5cacd76d8b12a43cd7 100644
--- a/source/test/cintltst/capitst.c
+++ b/source/test/cintltst/capitst.c
@@ -1,5 +1,5 @@
/********************************************************************
- * Copyright (c) 1997-2013, International Business Machines
+ * Copyright (c) 1997-2014, International Business Machines
* Corporation and others. All Rights Reserved.
********************************************************************/
/*****************************************************************************
@@ -31,6 +31,7 @@
#include "putilimp.h"
#include "cmemory.h"
#include "cstring.h"
+#include "ucol_imp.h"
static void TestAttribute(void);
static void TestDefault(void);
@@ -267,6 +268,7 @@ void TestGetDefaultRules(){
void TestProperty()
{
UCollator *col, *ruled;
+ const UChar *rules;
UChar *disName;
int32_t len = 0;
UChar source[12], target[12];
@@ -310,7 +312,7 @@ void TestProperty()
* rather than hardcoding (and updating each time) a particular UCA version. */
u_getUnicodeVersion(versionUCDArray);
ucol_getUCAVersion(col, versionUCAArray);
- if (0!=uprv_memcmp(versionUCAArray, versionUCDArray, 4) /*TODO: remove the following once UCA is up to date, ticket:9101*/ && !(versionUCDArray[0]==6 && versionUCDArray[1]==3)) {
+ if (0!=uprv_memcmp(versionUCAArray, versionUCDArray, 4)) {
log_err("Testing ucol_getUCAVersion() - unexpected result: %hu.%hu.%hu.%hu\n",
versionUCAArray[0], versionUCAArray[1], versionUCAArray[2], versionUCAArray[3]);
}
@@ -370,9 +372,20 @@ void TestProperty()
log_verbose("Default collation getDisplayName ended.\n");
ruled = ucol_open("da_DK", &status);
+ if(U_FAILURE(status)) {
+ log_data_err("ucol_open(\"da_DK\") failed - %s\n", u_errorName(status));
+ ucol_close(col);
+ return;
+ }
log_verbose("ucol_getRules() testing ...\n");
- ucol_getRules(ruled, &tempLength);
- doAssert( tempLength != 0, "getRules() result incorrect" );
+ rules = ucol_getRules(ruled, &tempLength);
+ if(tempLength == 0) {
+ log_data_err("missing da_DK tailoring rule string\n");
+ } else {
+ UChar aa[2] = { 0x61, 0x61 };
+ doAssert(u_strFindFirst(rules, tempLength, aa, 2) != NULL,
+ "da_DK rules do not contain 'aa'");
+ }
log_verbose("getRules tests end.\n");
{
UChar *buffer = (UChar *)malloc(200000*sizeof(UChar));
@@ -385,8 +398,10 @@ void TestProperty()
log_verbose("ucol_getRulesEx() testing ...\n");
tempLength=ucol_getRulesEx(col,UCOL_FULL_RULES,buffer,bufLen );
- doAssert( tempLength != 0, "getRulesEx() result incorrect" );
- log_verbose("getRules tests end.\n");
+ if(tempLength == 0) {
+ log_data_err("missing *full* rule string\n");
+ }
+ log_verbose("getRulesEx tests end.\n");
free(buffer);
}
ucol_close(ruled);
@@ -435,7 +450,6 @@ void TestRuleBasedColl()
UChar ruleset1[60];
UChar ruleset2[50];
UChar teststr[10];
- UChar teststr2[10];
const UChar *rule1, *rule2, *rule3, *rule4;
int32_t tempLength;
UErrorCode status = U_ZERO_ERROR;
@@ -531,17 +545,13 @@ void TestRuleBasedColl()
ucol_closeElements(iter2);
ucol_close(col1);
ucol_close(col2);
- /* test that we can start a rule without a & or < */
+ /* CLDR 24+ requires a reset before the first relation */
u_uastrcpy(ruleset1, "< z < a");
col1 = ucol_openRules(ruleset1, u_strlen(ruleset1), UCOL_DEFAULT, UCOL_DEFAULT_STRENGTH, NULL, &status);
- if (U_FAILURE(status)) {
- log_err("RuleBased Collator creation failed.: %s\n", myErrorName(status));
- return;
- }
- u_uastrcpy(teststr, "z");
- u_uastrcpy(teststr2, "a");
- if (ucol_greaterOrEqual(col1, teststr, 1, teststr2, 1)) {
- log_err("Rule \"z < a\" fails");
+ if (status != U_PARSE_ERROR && status != U_INVALID_FORMAT_ERROR) {
+ log_err("ucol_openRules(without initial reset: '< z < a') "
+ "should fail with U_PARSE_ERROR or U_INVALID_FORMAT_ERROR but yielded %s\n",
+ myErrorName(status));
}
ucol_close(col1);
}
@@ -966,12 +976,18 @@ void TestOpenVsOpenRules(){
/* grab the rules */
rules = ucol_getRules(c1, &rulesLength);
+ if (rulesLength == 0) {
+ /* The optional tailoring rule string is either empty (boring) or missing. */
+ ucol_close(c1);
+ continue;
+ }
/* use those rules to create a collator from rules */
c2 = ucol_openRules(rules, rulesLength, UCOL_DEFAULT, UCOL_DEFAULT_STRENGTH, NULL, &err);
if (U_FAILURE(err)) {
log_err("ERROR: Creating collator from rules failed with locale: %s : %s\n", curLoc, myErrorName(err));
- return;
+ ucol_close(c1);
+ continue;
}
uld = ulocdata_open(curLoc, &err);
@@ -1179,7 +1195,7 @@ void TestSortKey()
free(sortkEmpty);
log_verbose("testing passing invalid string\n");
- sortklen = ucol_getSortKey(col, NULL, 0, NULL, 0);
+ sortklen = ucol_getSortKey(col, NULL, 10, NULL, 0);
if(sortklen != 0) {
log_err("Invalid string didn't return sortkey size of 0\n");
}
@@ -1389,7 +1405,6 @@ void TestGetLocale() {
int32_t i = 0;
- /* Now that the collation tree is separate, actual==valid at all times. [alan] */
static const struct {
const char* requestedLocale;
const char* validLocale;
@@ -1397,8 +1412,8 @@ void TestGetLocale() {
} testStruct[] = {
{ "sr_RS", "sr_Cyrl_RS", "sr" },
{ "sh_YU", "sr_Latn_RS", "sr_Latn" }, /* was sh, then aliased to hr, now sr_Latn via import per cldrbug 5647: */
- { "en_BE_FOO", "en_BE", "root" },
- { "sv_SE_NONEXISTANT", "sv_SE", "sv" }
+ { "en_BE_FOO", "en", "root" },
+ { "sv_SE_NONEXISTANT", "sv", "sv" }
};
/* test opening collators for different locales */
@@ -1410,10 +1425,16 @@ void TestGetLocale() {
ucol_close(coll);
continue;
}
- locale = ucol_getLocaleByType(coll, ULOC_REQUESTED_LOCALE, &status);
- if(strcmp(locale, testStruct[i].requestedLocale) != 0) {
+ /*
+ * The requested locale may be the same as the valid locale,
+ * or may not be supported at all. See ticket #10477.
+ */
+ locale = ucol_getLocaleByType(coll, ULOC_REQUESTED_LOCALE, &status);
+ if(U_SUCCESS(status) &&
+ strcmp(locale, testStruct[i].requestedLocale) != 0 && strcmp(locale, testStruct[i].validLocale) != 0) {
log_err("[Coll %s]: Error in requested locale, expected %s, got %s\n", testStruct[i].requestedLocale, testStruct[i].requestedLocale, locale);
}
+ status = U_ZERO_ERROR;
locale = ucol_getLocaleByType(coll, ULOC_VALID_LOCALE, &status);
if(strcmp(locale, testStruct[i].validLocale) != 0) {
log_err("[Coll %s]: Error in valid locale, expected %s, got %s\n", testStruct[i].requestedLocale, testStruct[i].validLocale, locale);
@@ -1430,9 +1451,10 @@ void TestGetLocale() {
UCollator *defaultColl = ucol_open(NULL, &status);
coll = ucol_open("blahaha", &status);
if(U_SUCCESS(status)) {
+ /* See comment above about ticket #10477.
if(strcmp(ucol_getLocaleByType(coll, ULOC_REQUESTED_LOCALE, &status), "blahaha")) {
log_err("Nonexisting locale didn't preserve the requested locale\n");
- }
+ } */
if(strcmp(ucol_getLocaleByType(coll, ULOC_VALID_LOCALE, &status),
ucol_getLocaleByType(defaultColl, ULOC_VALID_LOCALE, &status))) {
log_err("Valid locale for nonexisting locale locale collator differs "
@@ -1454,20 +1476,24 @@ void TestGetLocale() {
/* collator instantiated from rules should have all three locales NULL */
coll = ucol_openRules(rlz, rlzLen, UCOL_DEFAULT, UCOL_DEFAULT, NULL, &status);
- locale = ucol_getLocaleByType(coll, ULOC_REQUESTED_LOCALE, &status);
- if(locale != NULL) {
- log_err("For collator instantiated from rules, requested locale returned %s instead of NULL\n", locale);
- }
- locale = ucol_getLocaleByType(coll, ULOC_VALID_LOCALE, &status);
- if(locale != NULL) {
- log_err("For collator instantiated from rules, valid locale returned %s instead of NULL\n", locale);
- }
- locale = ucol_getLocaleByType(coll, ULOC_ACTUAL_LOCALE, &status);
- if(locale != NULL) {
- log_err("For collator instantiated from rules, actual locale returned %s instead of NULL\n", locale);
+ if (coll != NULL) {
+ locale = ucol_getLocaleByType(coll, ULOC_REQUESTED_LOCALE, &status);
+ if(U_SUCCESS(status) && locale != NULL) {
+ log_err("For collator instantiated from rules, requested locale returned %s instead of NULL\n", locale);
+ }
+ status = U_ZERO_ERROR;
+ locale = ucol_getLocaleByType(coll, ULOC_VALID_LOCALE, &status);
+ if(locale != NULL) {
+ log_err("For collator instantiated from rules, valid locale returned %s instead of NULL\n", locale);
+ }
+ locale = ucol_getLocaleByType(coll, ULOC_ACTUAL_LOCALE, &status);
+ if(locale != NULL) {
+ log_err("For collator instantiated from rules, actual locale returned %s instead of NULL\n", locale);
+ }
+ ucol_close(coll);
+ } else {
+ log_data_err("Couldn't get collator from ucol_openRules() - %s\n", u_errorName(status));
}
- ucol_close(coll);
-
}
@@ -1835,13 +1861,13 @@ void TestGetTailoredSet() {
int32_t buffLen = 0;
USet *set = NULL;
- for(i = 0; i < sizeof(setTest)/sizeof(setTest[0]); i++) {
+ for(i = 0; i < UPRV_LENGTHOF(setTest); i++) {
buffLen = u_unescape(setTest[i].rules, buff, 1024);
coll = ucol_openRules(buff, buffLen, UCOL_DEFAULT, UCOL_DEFAULT, &pError, &status);
if(U_SUCCESS(status)) {
set = ucol_getTailoredSet(coll, &status);
- if(uset_size(set) != setTest[i].testsize) {
- log_err("Tailored set size different (%d) than expected (%d)\n", uset_size(set), setTest[i].testsize);
+ if(uset_size(set) < setTest[i].testsize) {
+ log_err("Tailored set size smaller (%d) than expected (%d)\n", uset_size(set), setTest[i].testsize);
}
for(j = 0; j < setTest[i].testsize; j++) {
buffLen = u_unescape(setTest[i].tests[j], buff, 1024);
@@ -2004,15 +2030,21 @@ static void TestShortString(void)
uint32_t expectedIdentifier;
} testCases[] = {
/*
- * The following expectedOutput contains a collation weight (2700 from UCA 6.0)
- * which is the primary weight for the T character (U+0041) in the input.
- * When that character gets a different weight in FractionalUCA.txt,
- * the expectedOutput needs to be adjusted.
- * That is, when we upgrade to a new UCA version or change collation
- * in such a way that the absolute weight for 'A' changes,
- * we will get a test failure here and need to adjust the test case.
+ * Note: The first test case sets variableTop to the dollar sign '$'.
+ * We have agreed to drop support for variableTop in ucol_getShortDefinitionString(),
+ * related to ticket #10372 "deprecate collation APIs for short definition strings",
+ * and because it did not work for most spaces/punctuation/symbols,
+ * as documented in ticket #10386 "collation short definition strings issues":
+ * The old code wrote only 3 hex digits for primary weights below 0x0FFF,
+ * which is a syntax error, and then failed to normalize the result.
+ *
+ * The "B2700" was removed from the expected result ("B2700_KPHONEBOOK_LDE").
+ *
+ * Previously, this test had to be adjusted for root collator changes because the
+ * primary weight of the variable top character naturally changed
+ * but was baked into the expected result.
*/
- {"LDE_RDE_KPHONEBOOK_T0041_ZLATN","B2700_KPHONEBOOK_LDE", "de@collation=phonebook", U_USING_FALLBACK_WARNING, 0, 0 },
+ {"LDE_RDE_KPHONEBOOK_T0024_ZLATN","KPHONEBOOK_LDE", "de@collation=phonebook", U_USING_FALLBACK_WARNING, 0, 0 },
{"LEN_RUS_NO_AS_S4","AS_LROOT_NO_S4", NULL, U_USING_DEFAULT_WARNING, 0, 0 },
{"LDE_VPHONEBOOK_EO_SI","EO_KPHONEBOOK_LDE_SI", "de@collation=phonebook", U_ZERO_ERROR, 0, 0 },
@@ -2084,7 +2116,7 @@ static void TestShortString(void)
static void
doSetsTest(const char *locale, const USet *ref, USet *set, const char* inSet, const char* outSet, UErrorCode *status) {
- UChar buffer[512];
+ UChar buffer[65536];
int32_t bufLen;
uset_clear(set);
@@ -2096,6 +2128,11 @@ doSetsTest(const char *locale, const USet *ref, USet *set, const char* inSet, co
if(!uset_containsAll(ref, set)) {
log_err("%s: Some stuff from %s is not present in the set\n", locale, inSet);
+ uset_removeAll(set, ref);
+ bufLen = uset_toPattern(set, buffer, UPRV_LENGTHOF(buffer), TRUE, status);
+ log_info(" missing: %s\n", aescstrdup(buffer, bufLen));
+ bufLen = uset_toPattern(ref, buffer, UPRV_LENGTHOF(buffer), TRUE, status);
+ log_info(" total: size=%i %s\n", uset_getItemCount(ref), aescstrdup(buffer, bufLen));
}
uset_clear(set);
@@ -2150,7 +2187,19 @@ TestGetContractionsAndUnsafes(void)
"[jabv]"
},
{ "ja",
- "[{\\u3053\\u3099\\u309D}{\\u3053\\u3099\\u309D\\u3099}{\\u3053\\u3099\\u309E}{\\u3053\\u3099\\u30FC}{\\u3053\\u309D}{\\u3053\\u309D\\u3099}{\\u3053\\u309E}{\\u3053\\u30FC}{\\u30B3\\u3099\\u30FC}{\\u30B3\\u3099\\u30FD}{\\u30B3\\u3099\\u30FD\\u3099}{\\u30B3\\u3099\\u30FE}{\\u30B3\\u30FC}{\\u30B3\\u30FD}{\\u30B3\\u30FD\\u3099}{\\u30B3\\u30FE}]",
+ /*
+ * The "collv2" builder omits mappings if the collator maps their
+ * character sequences to the same CEs.
+ * For example, it omits Japanese contractions for NFD forms
+ * of the voiced iteration mark (U+309E = U+309D + U+3099), such as
+ * {\\u3053\\u3099\\u309D\\u3099}{\\u3053\\u309D\\u3099}
+ * {\\u30B3\\u3099\\u30FD\\u3099}{\\u30B3\\u30FD\\u3099}.
+ * It does add mappings for the precomposed forms.
+ */
+ "[{\\u3053\\u3099\\u309D}{\\u3053\\u3099\\u309E}{\\u3053\\u3099\\u30FC}"
+ "{\\u3053\\u309D}{\\u3053\\u309E}{\\u3053\\u30FC}"
+ "{\\u30B3\\u3099\\u30FC}{\\u30B3\\u3099\\u30FD}{\\u30B3\\u3099\\u30FE}"
+ "{\\u30B3\\u30FC}{\\u30B3\\u30FD}{\\u30B3\\u30FE}]",
"[{\\u30FD\\u3099}{\\u309D\\u3099}{\\u3053\\u3099}{\\u30B3\\u3099}{lj}{nj}]",
"[\\u30FE\\u00e6]",
"[a]",
@@ -2159,9 +2208,6 @@ TestGetContractionsAndUnsafes(void)
}
};
-
-
-
UErrorCode status = U_ZERO_ERROR;
UCollator *coll = NULL;
int32_t i = 0;
@@ -2221,6 +2267,20 @@ TestGetContractionsAndUnsafes(void)
static void
TestOpenBinary(void)
{
+ /*
+ * ucol_openBinary() documents:
+ * "The API also takes a base collator which usually should be UCA."
+ * and
+ * "Currently it cannot be NULL."
+ *
+ * However, the check for NULL was commented out in ICU 3.4 (r18149).
+ * Ticket #4355 requested "Make collation work with minimal data.
+ * Optionally without UCA, with relevant parts of UCA copied into the tailoring table."
+ *
+ * The ICU team agreed with ticket #10517 "require base collator in ucol_openBinary() etc."
+ * to require base!=NULL again.
+ */
+#define OPEN_BINARY_ACCEPTS_NULL_BASE 0
UErrorCode status = U_ZERO_ERROR;
/*
char rule[] = "&h < d < c < b";
@@ -2230,7 +2290,9 @@ TestOpenBinary(void)
/* we have to use Cyrillic letters because latin-1 always gets copied */
const char rule[] = "&\\u0452 < \\u0434 < \\u0433 < \\u0432"; /* &dje < d < g < v */
const char *wUCA[] = { "\\u0430", "\\u0452", "\\u0434", "\\u0433", "\\u0432", "\\u0435" }; /* a, dje, d, g, v, e */
+#if OPEN_BINARY_ACCEPTS_NULL_BASE
const char *noUCA[] = {"\\u0434", "\\u0433", "\\u0432", "\\u0430", "\\u0435", "\\u0452" }; /* d, g, v, a, e, dje */
+#endif
UChar uRules[256];
int32_t uRulesLen = u_unescape(rule, uRules, 256);
@@ -2266,11 +2328,18 @@ TestOpenBinary(void)
cloneWUCA = ucol_openBinary(image, imageSize, UCA, &status);
cloneNOUCA = ucol_openBinary(image, imageSize, NULL, &status);
+#if !OPEN_BINARY_ACCEPTS_NULL_BASE
+ if(status != U_ILLEGAL_ARGUMENT_ERROR) {
+ log_err("ucol_openBinary(base=NULL) unexpectedly did not fail - %s\n", u_errorName(status));
+ }
+#endif
genericOrderingTest(coll, wUCA, sizeof(wUCA)/sizeof(wUCA[0]));
genericOrderingTest(cloneWUCA, wUCA, sizeof(wUCA)/sizeof(wUCA[0]));
+#if OPEN_BINARY_ACCEPTS_NULL_BASE
genericOrderingTest(cloneNOUCA, noUCA, sizeof(noUCA)/sizeof(noUCA[0]));
+#endif
if(image != imageBuffer) {
free(image);
@@ -2321,42 +2390,37 @@ static void TestDefaultKeyword(void) {
ucol_close(coll);
}
+static UBool uenum_contains(UEnumeration *e, const char *s, UErrorCode *status) {
+ const char *t;
+ uenum_reset(e, status);
+ while(((t = uenum_next(e, NULL, status)) != NULL) && U_SUCCESS(*status)) {
+ if(uprv_strcmp(s, t) == 0) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
static void TestGetKeywordValuesForLocale(void) {
-#define INCLUDE_UNIHAN_COLLATION 0
-#define PREFERRED_SIZE 16
#define MAX_NUMBER_OF_KEYWORDS 9
- const char *PREFERRED[PREFERRED_SIZE][MAX_NUMBER_OF_KEYWORDS+1] = {
+ const char *PREFERRED[][MAX_NUMBER_OF_KEYWORDS+1] = {
{ "und", "standard", "eor", "search", NULL, NULL, NULL, NULL, NULL, NULL },
{ "en_US", "standard", "eor", "search", NULL, NULL, NULL, NULL, NULL, NULL },
{ "en_029", "standard", "eor", "search", NULL, NULL, NULL, NULL, NULL, NULL },
{ "de_DE", "standard", "phonebook", "search", "eor", NULL, NULL, NULL, NULL, NULL },
{ "de_Latn_DE", "standard", "phonebook", "search", "eor", NULL, NULL, NULL, NULL, NULL },
-#if INCLUDE_UNIHAN_COLLATION
- { "zh", "pinyin", "big5han", "gb2312han", "stroke", "unihan", "zhuyin", "eor", "search", "standard" },
- { "zh_Hans", "pinyin", "big5han", "gb2312han", "stroke", "unihan", "zhuyin", "eor", "search", "standard" },
- { "zh_CN", "pinyin", "big5han", "gb2312han", "stroke", "unihan", "zhuyin", "eor", "search", "standard" },
- { "zh_Hant", "stroke", "big5han", "gb2312han", "pinyin", "unihan", "zhuyin", "eor", "search", "standard" },
- { "zh_TW", "stroke", "big5han", "gb2312han", "pinyin", "unihan", "zhuyin", "eor", "search", "standard" },
- { "zh__PINYIN", "pinyin", "big5han", "gb2312han", "stroke", "unihan", "zhuyin", "eor", "search", "standard" },
-#else
- { "zh", "pinyin", "big5han", "gb2312han", "stroke", "zhuyin", "eor", "search", "standard", NULL },
- { "zh_Hans", "pinyin", "big5han", "gb2312han", "stroke", "zhuyin", "eor", "search", "standard", NULL },
- { "zh_CN", "pinyin", "big5han", "gb2312han", "stroke", "zhuyin", "eor", "search", "standard", NULL },
- { "zh_Hant", "stroke", "big5han", "gb2312han", "pinyin", "zhuyin", "eor", "search", "standard", NULL },
- { "zh_TW", "stroke", "big5han", "gb2312han", "pinyin", "zhuyin", "eor", "search", "standard", NULL },
- { "zh__PINYIN", "pinyin", "big5han", "gb2312han", "stroke", "zhuyin", "eor", "search", "standard", NULL },
-#endif
+ { "zh", "pinyin", "stroke", "eor", "search", "standard", NULL },
+ { "zh_Hans", "pinyin", "stroke", "eor", "search", "standard", NULL },
+ { "zh_CN", "pinyin", "stroke", "eor", "search", "standard", NULL },
+ { "zh_Hant", "stroke", "pinyin", "eor", "search", "standard", NULL },
+ { "zh_TW", "stroke", "pinyin", "eor", "search", "standard", NULL },
+ { "zh__PINYIN", "pinyin", "stroke", "eor", "search", "standard", NULL },
{ "es_ES", "standard", "search", "traditional", "eor", NULL, NULL, NULL, NULL, NULL },
{ "es__TRADITIONAL","traditional", "search", "standard", "eor", NULL, NULL, NULL, NULL, NULL },
{ "und@collation=phonebook", "standard", "eor", "search", NULL, NULL, NULL, NULL, NULL, NULL },
- { "de_DE@collation=big5han", "standard", "phonebook", "search", "eor", NULL, NULL, NULL, NULL, NULL },
+ { "de_DE@collation=pinyin", "standard", "phonebook", "search", "eor", NULL, NULL, NULL, NULL, NULL },
{ "zzz@collation=xxx", "standard", "eor", "search", NULL, NULL, NULL, NULL, NULL, NULL }
};
-#if INCLUDE_UNIHAN_COLLATION
- const int32_t expectedLength[PREFERRED_SIZE] = { 3, 3, 3, 4, 4, 9, 9, 9, 9, 9, 9, 4, 4, 3, 4, 3 };
-#else
- const int32_t expectedLength[PREFERRED_SIZE] = { 3, 3, 3, 4, 4, 8, 8, 8, 8, 8, 8, 4, 4, 3, 4, 3 };
-#endif
UErrorCode status = U_ZERO_ERROR;
UEnumeration *keywordValues = NULL;
@@ -2364,7 +2428,7 @@ static void TestGetKeywordValuesForLocale(void) {
const char *locale = NULL, *value = NULL;
UBool errorOccurred = FALSE;
- for (i = 0; i < PREFERRED_SIZE; i++) {
+ for (i = 0; i < UPRV_LENGTHOF(PREFERRED) && !errorOccurred; i++) {
locale = PREFERRED[i][0];
value = NULL;
valueLength = 0;
@@ -2377,34 +2441,21 @@ static void TestGetKeywordValuesForLocale(void) {
}
size = uenum_count(keywordValues, &status);
- if (size == expectedLength[i]) {
- for (n = 0; n < expectedLength[i]; n++) {
- if ((value = uenum_next(keywordValues, &valueLength, &status)) != NULL && U_SUCCESS(status)) {
- if (uprv_strcmp(value, PREFERRED[i][n+1]) != 0) {
- log_err("Keyword values differ: Got [%s] Expected [%s] for locale: %s\n", value, PREFERRED[i][n+1], locale);
- errorOccurred = TRUE;
- break;
- }
-
+ for (n = 0; (value = PREFERRED[i][n+1]) != NULL; n++) {
+ if (!uenum_contains(keywordValues, value, &status)) {
+ if (U_SUCCESS(status)) {
+ log_err("Keyword value \"%s\" missing for locale: %s\n", value, locale);
} else {
log_err("While getting keyword value from locale: %s got this error: %s\n", locale, u_errorName(status));
errorOccurred = TRUE;
break;
}
}
- if (errorOccurred) {
- break;
- }
- } else {
- log_err("Number of keywords (%d) does not match expected size (%d) for locale: %s\n", size, expectedLength[i], locale);
- break;
}
uenum_close(keywordValues);
keywordValues = NULL;
}
- if (keywordValues != NULL) {
- uenum_close(keywordValues);
- }
+ uenum_close(keywordValues);
}
static void TestStrcollNull(void) {
@@ -2417,10 +2468,10 @@ static void TestStrcollNull(void) {
const UChar u16han[] = {0x5c71, 0x5ddd, 0};
const int32_t u16hanLen = 2;
- const char u8asc[] = {0x49, 0x42, 0x4D, 0};
+ const char *u8asc = "\x49\x42\x4D";
const int32_t u8ascLen = 3;
- const char u8han[] = {0xE5, 0xB1, 0xB1, 0xE5, 0xB7, 0x9D, 0};
+ const char *u8han = "\xE5\xB1\xB1\xE5\xB7\x9D";
const int32_t u8hanLen = 6;
coll = ucol_open(NULL, &status);
« no previous file with comments | « source/test/cintltst/callcoll.c ('k') | source/test/cintltst/cbiditst.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698