ICU-3100 Add tests for getContractions and getUnsafeSet

X-SVN-Rev: 15685
This commit is contained in:
Vladimir Weinstein 2004-06-03 20:13:58 +00:00
parent dd221c3945
commit b32214b04a
2 changed files with 110 additions and 3 deletions

View file

@ -121,6 +121,7 @@ void addCollAPITest(TestNode** root)
addTest(root, &TestGetTailoredSet, "tscoll/capitst/TestGetTailoredSet");
addTest(root, &TestMergeSortKeys, "tscoll/capitst/TestMergeSortKeys");
addTest(root, &TestShortString, "tscoll/capitst/TestShortString");
addTest(root, &TestGetContractionsAndUnsafes, "tscoll/capitst/TestGetContractionsAndUnsafes");
}
void TestGetSetAttr(void) {
@ -1744,10 +1745,7 @@ static void TestShortString(void)
UParseError parseError;
UErrorCode status = U_ZERO_ERROR;
char fromShortBuffer[256], fromIDBuffer[256], fromIDRoundtrip[256], normalizedBuffer[256], fromNormalizedBuffer[256];
/*char buffer[256];*/
int32_t len = 0;
uint32_t identifier = 0, idFromSS = 0;
UBool available = FALSE;
const char* locale = NULL;
@ -1830,4 +1828,107 @@ static void TestShortString(void)
}
static void
doSetsTest(const USet *ref, USet *set, const char* inSet, const char* outSet, UErrorCode *status) {
UChar buffer[512];
int32_t bufLen;
uset_clear(set);
bufLen = u_unescape(inSet, buffer, 512);
uset_applyPattern(set, buffer, bufLen, 0, status);
if(U_FAILURE(*status)) {
log_err("Failure setting pattern %s\n", u_errorName(*status));
}
if(!uset_containsAll(ref, set)) {
log_err("Some stuff from %s is not present in the set\n", inSet);
}
uset_clear(set);
bufLen = u_unescape(outSet, buffer, 512);
uset_applyPattern(set, buffer, bufLen, 0, status);
if(U_FAILURE(*status)) {
log_err("Failure setting pattern %s\n", u_errorName(*status));
}
if(!uset_containsNone(ref, set)) {
log_err("Some stuff from %s is present in the set\n", outSet);
}
}
static void
TestGetContractionsAndUnsafes(void)
{
static struct {
const char* locale;
const char* inConts;
const char* outConts;
const char* unsafeCodeUnits;
const char* safeCodeUnits;
} tests[] = {
{ "ru",
"[{\\u0474\\u030F}{\\u0475\\u030F}{\\u04D8\\u0308}{\\u04D9\\u0308}{\\u04E8\\u0308}{\\u04E9\\u0308}]",
"[{\\u0430\\u0306}{\\u0410\\u0306}{\\u0430\\u0308}{\\u0410\\u0306}{\\u0433\\u0301}{\\u0413\\u0301}]",
"[\\u0306\\u0308]",
"[\\u0474\\u0430\\u0410\\u0433\\u0413aAbB]"
},
{ "uk",
"[{\\u0474\\u030F}{\\u0475\\u030F}{\\u04D8\\u0308}{\\u04D9\\u0308}{\\u04E8\\u0308}{\\u04E9\\u0308}"
"{\\u0430\\u0306}{\\u0410\\u0306}{\\u0430\\u0308}{\\u0410\\u0306}{\\u0433\\u0301}{\\u0413\\u0301}]",
"[]",
"[\\u0306\\u030f\\u0308]",
"[\\u0474\\u0475\\u04D8\\u04D9\\u04E8\\u04E9\\u0430\\u0410\\u0433\\u0413aAbBxv]"
},
{ "ja",
"[{\\u309d\\u3099}{\\u30fd\\u3099}]",
"[{lj}{nj}]",
"[\\u3099]",
"[\\u30a6\\u3044\\uff73]"
},
{ "sh",
"[{C\\u0301}{C\\u030C}{C\\u0341}{DZ\\u030C}{Dz\\u030C}{D\\u017D}{D\\u017E}{lj}{nj}]",
"[{\\u309d\\u3099}{\\u30fd\\u3099}]",
"[j]",
"[n]"
}
};
UErrorCode status = U_ZERO_ERROR;
UCollator *coll = NULL;
int32_t i = 0;
int32_t noConts = 0;
USet *conts = uset_open(0,0);
USet *set = uset_open(0,0);
UChar buffer[32768];
int32_t setLen = 0;
for(i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) {
log_verbose("Testing locale: %s\n", tests[i].locale);
coll = ucol_open(tests[i].locale, &status);
noConts = ucol_getContractions(coll, conts, &status);
doSetsTest(conts, set, tests[i].inConts, tests[i].outConts, &status);
setLen = uset_toPattern(conts, buffer, 32768, TRUE, &status);
if(U_SUCCESS(status)) {
log_verbose("%i: %s\n", noConts, aescstrdup(buffer, setLen));
} else {
log_err("error %s. %i\n", u_errorName(status), setLen);
}
noConts = ucol_getUnsafeSet(coll, conts, &status);
doSetsTest(conts, set, tests[i].unsafeCodeUnits, tests[i].safeCodeUnits, &status);
ucol_close(coll);
}
uset_close(conts);
uset_close(set);
}
#endif /* #if !UCONFIG_NO_COLLATION */

View file

@ -110,6 +110,12 @@
*/
static void TestShortString(void);
/**
* test getContractions and getUnsafeSet
*/
static void TestGetContractionsAndUnsafes(void);
#endif /* #if !UCONFIG_NO_COLLATION */
#endif