Skip to content

Instantly share code, notes, and snippets.

@allstarschh
Last active December 9, 2021 11:21
Show Gist options
  • Save allstarschh/05a14381b9f6dc4ddd54567ed5c6e48b to your computer and use it in GitHub Desktop.
Save allstarschh/05a14381b9f6dc4ddd54567ed5c6e48b to your computer and use it in GitHub Desktop.
Test code for format two strings (one is empty) with ulistfmt_formatStringsToResult
void test_A_Empty()
{
UErrorCode status = U_ZERO_ERROR;
UListFormatter* fmt =
ulistfmt_openForType("en", ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_WIDE, &status);
ASSERT_TRUE(U_SUCCESS(status));
const char16_t* strings[] = {u"A", u""};
const int32_t len[] = {1, 0};
UFormattedList* fl = ulistfmt_openResult(&status);
ASSERT_TRUE(U_SUCCESS(status));
ulistfmt_formatStringsToResult(fmt, strings, len, 2, fl, &status);
ASSERT_TRUE(U_SUCCESS(status));
const UFormattedValue* value = ulistfmt_resultAsValue(fl, &status);
ASSERT_TRUE(U_SUCCESS(status));
{
char buf[128];
int32_t len;
const char16_t* str = ufmtval_getString(value, &len, &status);
char* s = u_strToUTF8(buf, 128, &len, str, len, &status);
fprintf(stderr, "TEST ufmtval_getString buff =%s len=%d\n", s, len);
}
UConstrainedFieldPosition* fpos = ucfpos_open(&status);
ASSERT_TRUE(U_SUCCESS(status));
ucfpos_constrainField(fpos, UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD,
&status);
ASSERT_TRUE(U_SUCCESS(status));
while (true) {
bool hasMore = ufmtval_nextPosition(value, fpos, &status);
ASSERT_TRUE(U_SUCCESS(status));
if (!hasMore) {
break;
}
int32_t beginIndex, endIndex;
ucfpos_getIndexes(fpos, &beginIndex, &endIndex, &status);
ASSERT_TRUE(U_SUCCESS(status));
fprintf(stderr, "TEST beginIndex=%d endIndex=%d\n", beginIndex, endIndex);
}
ucfpos_close(fpos);
ulistfmt_closeResult(fl);
ulistfmt_close(fmt);
}
void test_Empty_B()
{
UErrorCode status = U_ZERO_ERROR;
UListFormatter* fmt =
ulistfmt_openForType("en", ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_WIDE, &status);
ASSERT_TRUE(U_SUCCESS(status));
const char16_t* strings[] = {u"", u"B"};
const int32_t len[] = {0, 1};
UFormattedList* fl = ulistfmt_openResult(&status);
ASSERT_TRUE(U_SUCCESS(status));
ulistfmt_formatStringsToResult(fmt, strings, len, 2, fl, &status);
ASSERT_TRUE(U_SUCCESS(status));
const UFormattedValue* value = ulistfmt_resultAsValue(fl, &status);
ASSERT_TRUE(U_SUCCESS(status));
{
char buf[128];
int32_t len;
const char16_t* str = ufmtval_getString(value, &len, &status);
char* s = u_strToUTF8(buf, 128, &len, str, len, &status);
fprintf(stderr, "TEST ufmtval_getString buff =%s len=%d\n", s, len);
}
UConstrainedFieldPosition* fpos = ucfpos_open(&status);
ASSERT_TRUE(U_SUCCESS(status));
ucfpos_constrainField(fpos, UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD,
&status);
ASSERT_TRUE(U_SUCCESS(status));
while (true) {
bool hasMore = ufmtval_nextPosition(value, fpos, &status);
ASSERT_TRUE(U_SUCCESS(status));
if (!hasMore) {
break;
}
int32_t beginIndex, endIndex;
ucfpos_getIndexes(fpos, &beginIndex, &endIndex, &status);
ASSERT_TRUE(U_SUCCESS(status));
fprintf(stderr, "TEST beginIndex=%d endIndex=%d\n", beginIndex, endIndex);
}
ucfpos_close(fpos);
ulistfmt_closeResult(fl);
ulistfmt_close(fmt);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment