+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/********************************************************************
* COPYRIGHT:
- * Copyright (c) 1997-2015, International Business Machines Corporation and
+ * Copyright (c) 1997-2016, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
//===============================================================================
#include "apicoll.h"
#include "unicode/chariter.h"
#include "unicode/schriter.h"
+#include "unicode/strenum.h"
#include "unicode/ustring.h"
#include "unicode/ucol.h"
logln("Test ctors : ");
col = Collator::createInstance(Locale::getEnglish(), success);
if (U_FAILURE(success)){
- errcheckln(success, "Default Collator creation failed. - %s", u_errorName(success));
+ errcheckln(success, "English Collator creation failed. - %s", u_errorName(success));
return;
}
- StringEnumeration* kwEnum = col->getKeywordValuesForLocale("", Locale::getEnglish(),true,success);
- if (U_FAILURE(success)){
- errcheckln(success, "Get Keyword Values for Locale failed. - %s", u_errorName(success));
- return;
- }
- delete kwEnum;
-
col->getVersion(versionArray);
// Check for a version greater than some value rather than equality
// so that we need not update the expected version each time.
delete junk;
}
+void CollationAPITest::TestKeywordValues() {
+ IcuTestErrorCode errorCode(*this, "TestKeywordValues");
+ LocalPointer<Collator> col(Collator::createInstance(Locale::getEnglish(), errorCode));
+ if (errorCode.logIfFailureAndReset("English Collator creation failed")) {
+ return;
+ }
+
+ LocalPointer<StringEnumeration> kwEnum(
+ col->getKeywordValuesForLocale("collation", Locale::getEnglish(), TRUE, errorCode));
+ if (errorCode.logIfFailureAndReset("Get Keyword Values for English Collator failed")) {
+ return;
+ }
+ assertTrue("expect at least one collation tailoring for English", kwEnum->count(errorCode) > 0);
+ const char *kw;
+ UBool hasStandard = FALSE;
+ while ((kw = kwEnum->next(NULL, errorCode)) != NULL) {
+ if (strcmp(kw, "standard") == 0) {
+ hasStandard = TRUE;
+ }
+ }
+ assertTrue("expect at least the 'standard' collation tailoring for English", hasStandard);
+}
+
void
CollationAPITest::TestRuleBasedColl()
{
(int64_t)newVarTop2, (int64_t)newVarTop);
coll->setAttribute(UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, status);
- assertEquals("empty==dollar", UCOL_EQUAL, coll->compare(UnicodeString(), dollar));
- assertEquals("empty==euro", UCOL_EQUAL, coll->compare(UnicodeString(), euro));
- assertEquals("dollar<zero", UCOL_LESS, coll->compare(dollar, UnicodeString((UChar)0x30)));
+ assertEquals("empty==dollar", (int32_t)UCOL_EQUAL, (int32_t)coll->compare(UnicodeString(), dollar));
+ assertEquals("empty==euro", (int32_t)UCOL_EQUAL, (int32_t)coll->compare(UnicodeString(), euro));
+ assertEquals("dollar<zero", (int32_t)UCOL_LESS, (int32_t)coll->compare(dollar, UnicodeString((UChar)0x30)));
coll->setVariableTop(oldVarTop, status);
}
coll->setAttribute(UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, errorCode);
- assertEquals("empty==dollar", UCOL_EQUAL, coll->compare(UnicodeString(), UnicodeString((UChar)0x24)));
- assertEquals("empty==euro", UCOL_EQUAL, coll->compare(UnicodeString(), UnicodeString((UChar)0x20AC)));
- assertEquals("dollar<zero", UCOL_LESS, coll->compare(UnicodeString((UChar)0x24), UnicodeString((UChar)0x30)));
+ assertEquals("empty==dollar", (int32_t)UCOL_EQUAL, (int32_t)coll->compare(UnicodeString(), UnicodeString((UChar)0x24)));
+ assertEquals("empty==euro", (int32_t)UCOL_EQUAL, (int32_t)coll->compare(UnicodeString(), UnicodeString((UChar)0x20AC)));
+ assertEquals("dollar<zero", (int32_t)UCOL_LESS, (int32_t)coll->compare(UnicodeString((UChar)0x24), UnicodeString((UChar)0x30)));
}
void CollationAPITest::TestGetLocale() {
// zh_Hant has default=stroke but the data is in zh.
{ "zh_TW", "zh_Hant_TW", "zh@collation=stroke" },
{ "zh_TW@collation=pinyin", "zh_Hant_TW@collation=pinyin", "zh" },
- { "zh_CN@collation=stroke", "zh_Hans_CN@collation=stroke", "zh@collation=stroke" }
+ { "zh_CN@collation=stroke", "zh_Hans_CN@collation=stroke", "zh@collation=stroke" },
+ // yue/yue_Hant aliased to zh_Hant, yue_Hans aliased to zh_Hans.
+ // requested valid actual
+ { "yue", "zh_Hant", "zh@collation=stroke" },
+ { "yue_HK", "zh_Hant", "zh@collation=stroke" },
+ { "yue_Hant", "zh_Hant", "zh@collation=stroke" },
+ { "yue_HK@collation=pinyin", "zh_Hant@collation=pinyin", "zh" },
+ { "yue_CN", "zh_Hans", "zh" },
+ { "yue_Hans", "zh_Hans", "zh" },
+ { "yue_CN@collation=stroke", "zh_Hans@collation=stroke", "zh@collation=stroke" }
};
u_unescape(rules, rlz, 256);
/* test opening collators for different locales */
- for(i = 0; i<(int32_t)UPRV_LENGTHOF(testStruct); i++) {
+ for(i = 0; i<UPRV_LENGTHOF(testStruct); i++) {
status = U_ZERO_ERROR;
coll = Collator::createInstance(testStruct[i].requestedLocale, status);
if(U_FAILURE(status)) {
int32_t i = 0, j = 0, k = 0, buffSize = 0, skSize = 0, lowerSize = 0, upperSize = 0;
- int32_t arraySize = sizeof(tests)/sizeof(tests[0]);
+ int32_t arraySize = UPRV_LENGTHOF(tests);
(void)lowerSize; // Suppress unused variable warnings.
(void)upperSize;
}
- for(i = 0; i<(int32_t)(sizeof(test)/sizeof(test[0])); i++) {
+ for(i = 0; i<UPRV_LENGTHOF(test); i++) {
buffSize = u_unescape(test[i], buffer, 512);
skSize = coll->getSortKey(buffer, buffSize, sortkey, 512);
lowerSize = ucol_getBound(sortkey, skSize, UCOL_BOUND_LOWER, 1, lower, 512, &status);
upperSize = ucol_getBound(sortkey, skSize, UCOL_BOUND_UPPER_LONG, 1, upper, 512, &status);
- for(j = i+1; j<(int32_t)(sizeof(test)/sizeof(test[0])); j++) {
+ for(j = i+1; j<UPRV_LENGTHOF(test); j++) {
buffSize = u_unescape(test[j], buffer, 512);
skSize = coll->getSortKey(buffer, buffSize, sortkey, 512);
if(strcmp((const char *)lower, (const char *)sortkey) > 0) {
rbc->setAttribute(UCOL_STRENGTH, UCOL_PRIMARY, errorCode);
UnicodeString uUmlaut((UChar)0xfc);
UnicodeString ue = UNICODE_STRING_SIMPLE("ue");
- assertEquals("rbc/primary: u-umlaut==ue", UCOL_EQUAL, rbc->compare(uUmlaut, ue, errorCode));
+ assertEquals("rbc/primary: u-umlaut==ue", (int32_t)UCOL_EQUAL, rbc->compare(uUmlaut, ue, errorCode));
uint8_t bin[25000];
int32_t binLength = rbc->cloneBinary(bin, UPRV_LENGTHOF(bin), errorCode);
if(errorCode.logDataIfFailureAndReset("rbc->cloneBinary()")) {
if(errorCode.logDataIfFailureAndReset("RuleBasedCollator(rbc binary)")) {
return;
}
- assertEquals("rbc2.strength==primary", UCOL_PRIMARY, rbc2.getAttribute(UCOL_STRENGTH, errorCode));
- assertEquals("rbc2: u-umlaut==ue", UCOL_EQUAL, rbc2.compare(uUmlaut, ue, errorCode));
+ assertEquals("rbc2.strength==primary", (int32_t)UCOL_PRIMARY, rbc2.getAttribute(UCOL_STRENGTH, errorCode));
+ assertEquals("rbc2: u-umlaut==ue", (int32_t)UCOL_EQUAL, rbc2.compare(uUmlaut, ue, errorCode));
assertTrue("rbc==rbc2", *rbc == rbc2);
uint8_t bin2[25000];
int32_t bin2Length = rbc2.cloneBinary(bin2, UPRV_LENGTHOF(bin2), errorCode);
if(errorCode.logDataIfFailureAndReset("RuleBasedCollator(rbc binary, length<0)")) {
return;
}
- assertEquals("rbc3.strength==primary", UCOL_PRIMARY, rbc3.getAttribute(UCOL_STRENGTH, errorCode));
- assertEquals("rbc3: u-umlaut==ue", UCOL_EQUAL, rbc3.compare(uUmlaut, ue, errorCode));
+ assertEquals("rbc3.strength==primary", (int32_t)UCOL_PRIMARY, rbc3.getAttribute(UCOL_STRENGTH, errorCode));
+ assertEquals("rbc3: u-umlaut==ue", (int32_t)UCOL_EQUAL, rbc3.compare(uUmlaut, ue, errorCode));
assertTrue("rbc==rbc3", *rbc == rbc3);
}
if (exec) logln("TestSuite CollationAPITest: ");
TESTCASE_AUTO_BEGIN;
TESTCASE_AUTO(TestProperty);
+ TESTCASE_AUTO(TestKeywordValues);
TESTCASE_AUTO(TestOperators);
TESTCASE_AUTO(TestDuplicate);
TESTCASE_AUTO(TestCompare);