|
@@ -87,34 +87,38 @@ TEST_CASE("[String] UTF8") {
|
|
/* how can i embed UTF in here? */
|
|
/* how can i embed UTF in here? */
|
|
static const char32_t u32str[] = { 0x0045, 0x0020, 0x304A, 0x360F, 0x3088, 0x3046, 0x1F3A4, 0 };
|
|
static const char32_t u32str[] = { 0x0045, 0x0020, 0x304A, 0x360F, 0x3088, 0x3046, 0x1F3A4, 0 };
|
|
static const uint8_t u8str[] = { 0x45, 0x20, 0xE3, 0x81, 0x8A, 0xE3, 0x98, 0x8F, 0xE3, 0x82, 0x88, 0xE3, 0x81, 0x86, 0xF0, 0x9F, 0x8E, 0xA4, 0 };
|
|
static const uint8_t u8str[] = { 0x45, 0x20, 0xE3, 0x81, 0x8A, 0xE3, 0x98, 0x8F, 0xE3, 0x82, 0x88, 0xE3, 0x81, 0x86, 0xF0, 0x9F, 0x8E, 0xA4, 0 };
|
|
- String s = u32str;
|
|
|
|
- Error err = s.parse_utf8(s.utf8().get_data());
|
|
|
|
|
|
+ String expected = u32str;
|
|
|
|
+ String parsed;
|
|
|
|
+ Error err = parsed.append_utf8(expected.utf8().get_data());
|
|
CHECK(err == OK);
|
|
CHECK(err == OK);
|
|
- CHECK(s == u32str);
|
|
|
|
|
|
+ CHECK(parsed == u32str);
|
|
|
|
|
|
- err = s.parse_utf8((const char *)u8str);
|
|
|
|
|
|
+ parsed.clear();
|
|
|
|
+ err = parsed.append_utf8((const char *)u8str);
|
|
CHECK(err == OK);
|
|
CHECK(err == OK);
|
|
- CHECK(s == u32str);
|
|
|
|
|
|
+ CHECK(parsed == u32str);
|
|
|
|
|
|
CharString cs = (const char *)u8str;
|
|
CharString cs = (const char *)u8str;
|
|
- CHECK(String::utf8(cs) == s);
|
|
|
|
|
|
+ CHECK(String::utf8(cs) == parsed);
|
|
}
|
|
}
|
|
|
|
|
|
TEST_CASE("[String] UTF16") {
|
|
TEST_CASE("[String] UTF16") {
|
|
/* how can i embed UTF in here? */
|
|
/* how can i embed UTF in here? */
|
|
static const char32_t u32str[] = { 0x0045, 0x0020, 0x304A, 0x360F, 0x3088, 0x3046, 0x1F3A4, 0 };
|
|
static const char32_t u32str[] = { 0x0045, 0x0020, 0x304A, 0x360F, 0x3088, 0x3046, 0x1F3A4, 0 };
|
|
static const char16_t u16str[] = { 0x0045, 0x0020, 0x304A, 0x360F, 0x3088, 0x3046, 0xD83C, 0xDFA4, 0 };
|
|
static const char16_t u16str[] = { 0x0045, 0x0020, 0x304A, 0x360F, 0x3088, 0x3046, 0xD83C, 0xDFA4, 0 };
|
|
- String s = u32str;
|
|
|
|
- Error err = s.parse_utf16(s.utf16().get_data());
|
|
|
|
|
|
+ String expected = u32str;
|
|
|
|
+ String parsed;
|
|
|
|
+ Error err = parsed.append_utf16(expected.utf16().get_data());
|
|
CHECK(err == OK);
|
|
CHECK(err == OK);
|
|
- CHECK(s == u32str);
|
|
|
|
|
|
+ CHECK(parsed == u32str);
|
|
|
|
|
|
- err = s.parse_utf16(u16str);
|
|
|
|
|
|
+ parsed.clear();
|
|
|
|
+ err = parsed.append_utf16(u16str);
|
|
CHECK(err == OK);
|
|
CHECK(err == OK);
|
|
- CHECK(s == u32str);
|
|
|
|
|
|
+ CHECK(parsed == u32str);
|
|
|
|
|
|
Char16String cs = u16str;
|
|
Char16String cs = u16str;
|
|
- CHECK(String::utf16(cs) == s);
|
|
|
|
|
|
+ CHECK(String::utf16(cs) == parsed);
|
|
}
|
|
}
|
|
|
|
|
|
TEST_CASE("[String] UTF8 with BOM") {
|
|
TEST_CASE("[String] UTF8 with BOM") {
|
|
@@ -122,7 +126,7 @@ TEST_CASE("[String] UTF8 with BOM") {
|
|
static const char32_t u32str[] = { 0x0045, 0x0020, 0x304A, 0x360F, 0x3088, 0x3046, 0x1F3A4, 0 };
|
|
static const char32_t u32str[] = { 0x0045, 0x0020, 0x304A, 0x360F, 0x3088, 0x3046, 0x1F3A4, 0 };
|
|
static const uint8_t u8str[] = { 0xEF, 0xBB, 0xBF, 0x45, 0x20, 0xE3, 0x81, 0x8A, 0xE3, 0x98, 0x8F, 0xE3, 0x82, 0x88, 0xE3, 0x81, 0x86, 0xF0, 0x9F, 0x8E, 0xA4, 0 };
|
|
static const uint8_t u8str[] = { 0xEF, 0xBB, 0xBF, 0x45, 0x20, 0xE3, 0x81, 0x8A, 0xE3, 0x98, 0x8F, 0xE3, 0x82, 0x88, 0xE3, 0x81, 0x86, 0xF0, 0x9F, 0x8E, 0xA4, 0 };
|
|
String s;
|
|
String s;
|
|
- Error err = s.parse_utf8((const char *)u8str);
|
|
|
|
|
|
+ Error err = s.append_utf8((const char *)u8str);
|
|
CHECK(err == OK);
|
|
CHECK(err == OK);
|
|
CHECK(s == u32str);
|
|
CHECK(s == u32str);
|
|
|
|
|
|
@@ -136,11 +140,12 @@ TEST_CASE("[String] UTF16 with BOM") {
|
|
static const char16_t u16str[] = { 0xFEFF, 0x0020, 0x0045, 0x304A, 0x360F, 0x3088, 0x3046, 0xD83C, 0xDFA4, 0 };
|
|
static const char16_t u16str[] = { 0xFEFF, 0x0020, 0x0045, 0x304A, 0x360F, 0x3088, 0x3046, 0xD83C, 0xDFA4, 0 };
|
|
static const char16_t u16str_swap[] = { 0xFFFE, 0x2000, 0x4500, 0x4A30, 0x0F36, 0x8830, 0x4630, 0x3CD8, 0xA4DF, 0 };
|
|
static const char16_t u16str_swap[] = { 0xFFFE, 0x2000, 0x4500, 0x4A30, 0x0F36, 0x8830, 0x4630, 0x3CD8, 0xA4DF, 0 };
|
|
String s;
|
|
String s;
|
|
- Error err = s.parse_utf16(u16str);
|
|
|
|
|
|
+ Error err = s.append_utf16(u16str);
|
|
CHECK(err == OK);
|
|
CHECK(err == OK);
|
|
CHECK(s == u32str);
|
|
CHECK(s == u32str);
|
|
|
|
|
|
- err = s.parse_utf16(u16str_swap);
|
|
|
|
|
|
+ s.clear();
|
|
|
|
+ err = s.append_utf16(u16str_swap);
|
|
CHECK(err == OK);
|
|
CHECK(err == OK);
|
|
CHECK(s == u32str);
|
|
CHECK(s == u32str);
|
|
|
|
|
|
@@ -155,12 +160,12 @@ TEST_CASE("[String] UTF8 with CR") {
|
|
const String base = U"Hello darkness\r\nMy old friend\nI've come to talk\rWith you again";
|
|
const String base = U"Hello darkness\r\nMy old friend\nI've come to talk\rWith you again";
|
|
|
|
|
|
String keep_cr;
|
|
String keep_cr;
|
|
- Error err = keep_cr.parse_utf8(base.utf8().get_data());
|
|
|
|
|
|
+ Error err = keep_cr.append_utf8(base.utf8().get_data());
|
|
CHECK(err == OK);
|
|
CHECK(err == OK);
|
|
CHECK(keep_cr == base);
|
|
CHECK(keep_cr == base);
|
|
|
|
|
|
String no_cr;
|
|
String no_cr;
|
|
- err = no_cr.parse_utf8(base.utf8().get_data(), -1, true); // Skip CR.
|
|
|
|
|
|
+ err = no_cr.append_utf8(base.utf8().get_data(), -1, true); // Skip CR.
|
|
CHECK(err == OK);
|
|
CHECK(err == OK);
|
|
CHECK(no_cr == base.replace("\r", ""));
|
|
CHECK(no_cr == base.replace("\r", ""));
|
|
}
|
|
}
|
|
@@ -171,7 +176,7 @@ TEST_CASE("[String] Invalid UTF8 (non shortest form sequence)") {
|
|
static const uint8_t u8str[] = { 0xC0, 0xAF, 0xE0, 0x80, 0xBF, 0xF0, 0x81, 0x82, 0x41, 0 };
|
|
static const uint8_t u8str[] = { 0xC0, 0xAF, 0xE0, 0x80, 0xBF, 0xF0, 0x81, 0x82, 0x41, 0 };
|
|
static const char32_t u32str[] = { 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0 };
|
|
static const char32_t u32str[] = { 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0 };
|
|
String s;
|
|
String s;
|
|
- Error err = s.parse_utf8((const char *)u8str);
|
|
|
|
|
|
+ Error err = s.append_utf8((const char *)u8str);
|
|
CHECK(err == ERR_INVALID_DATA);
|
|
CHECK(err == ERR_INVALID_DATA);
|
|
CHECK(s == u32str);
|
|
CHECK(s == u32str);
|
|
|
|
|
|
@@ -186,7 +191,7 @@ TEST_CASE("[String] Invalid UTF8 (ill formed sequences for surrogates)") {
|
|
static const uint8_t u8str[] = { 0xED, 0xA0, 0x80, 0xED, 0xBF, 0xBF, 0xED, 0xAF, 0x41, 0 };
|
|
static const uint8_t u8str[] = { 0xED, 0xA0, 0x80, 0xED, 0xBF, 0xBF, 0xED, 0xAF, 0x41, 0 };
|
|
static const char32_t u32str[] = { 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0 };
|
|
static const char32_t u32str[] = { 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0 };
|
|
String s;
|
|
String s;
|
|
- Error err = s.parse_utf8((const char *)u8str);
|
|
|
|
|
|
+ Error err = s.append_utf8((const char *)u8str);
|
|
CHECK(err == ERR_INVALID_DATA);
|
|
CHECK(err == ERR_INVALID_DATA);
|
|
CHECK(s == u32str);
|
|
CHECK(s == u32str);
|
|
|
|
|
|
@@ -201,7 +206,7 @@ TEST_CASE("[String] Invalid UTF8 (other ill formed sequences)") {
|
|
static const uint8_t u8str[] = { 0xF4, 0x91, 0x92, 0x93, 0xFF, 0x41, 0x80, 0xBF, 0x42, 0 };
|
|
static const uint8_t u8str[] = { 0xF4, 0x91, 0x92, 0x93, 0xFF, 0x41, 0x80, 0xBF, 0x42, 0 };
|
|
static const char32_t u32str[] = { 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0xFFFD, 0xFFFD, 0x42, 0 };
|
|
static const char32_t u32str[] = { 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0xFFFD, 0xFFFD, 0x42, 0 };
|
|
String s;
|
|
String s;
|
|
- Error err = s.parse_utf8((const char *)u8str);
|
|
|
|
|
|
+ Error err = s.append_utf8((const char *)u8str);
|
|
CHECK(err == ERR_INVALID_DATA);
|
|
CHECK(err == ERR_INVALID_DATA);
|
|
CHECK(s == u32str);
|
|
CHECK(s == u32str);
|
|
|
|
|
|
@@ -216,7 +221,7 @@ TEST_CASE("[String] Invalid UTF8 (truncated sequences)") {
|
|
static const uint8_t u8str[] = { 0xE1, 0x80, 0xE2, 0xF0, 0x91, 0x92, 0xF1, 0xBF, 0x41, 0 };
|
|
static const uint8_t u8str[] = { 0xE1, 0x80, 0xE2, 0xF0, 0x91, 0x92, 0xF1, 0xBF, 0x41, 0 };
|
|
static const char32_t u32str[] = { 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0 };
|
|
static const char32_t u32str[] = { 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0 };
|
|
String s;
|
|
String s;
|
|
- Error err = s.parse_utf8((const char *)u8str);
|
|
|
|
|
|
+ Error err = s.append_utf8((const char *)u8str);
|
|
CHECK(err == ERR_INVALID_DATA);
|
|
CHECK(err == ERR_INVALID_DATA);
|
|
CHECK(s == u32str);
|
|
CHECK(s == u32str);
|
|
|
|
|
|
@@ -231,7 +236,7 @@ TEST_CASE("[String] Invalid UTF16 (non-standard)") {
|
|
// + + + + unpaired
|
|
// + + + + unpaired
|
|
static const char32_t u32str[] = { 0x0045, 0x304A, 0x3088, 0x3046, 0xDFA4, 0 };
|
|
static const char32_t u32str[] = { 0x0045, 0x304A, 0x3088, 0x3046, 0xDFA4, 0 };
|
|
String s;
|
|
String s;
|
|
- Error err = s.parse_utf16(u16str);
|
|
|
|
|
|
+ Error err = s.append_utf16(u16str);
|
|
CHECK(err == ERR_PARSE_ERROR);
|
|
CHECK(err == ERR_PARSE_ERROR);
|
|
CHECK(s == u32str);
|
|
CHECK(s == u32str);
|
|
|
|
|
|
@@ -1604,9 +1609,9 @@ TEST_CASE("[String] lstrip and rstrip") {
|
|
#undef STRIP_TEST
|
|
#undef STRIP_TEST
|
|
}
|
|
}
|
|
|
|
|
|
-TEST_CASE("[String] Ensuring empty string into parse_utf8 passes empty string") {
|
|
|
|
|
|
+TEST_CASE("[String] Ensuring empty string into extend_utf8 passes empty string") {
|
|
String empty;
|
|
String empty;
|
|
- CHECK(empty.parse_utf8(nullptr, -1) == ERR_INVALID_DATA);
|
|
|
|
|
|
+ CHECK(empty.append_utf8(nullptr, -1) == ERR_INVALID_DATA);
|
|
}
|
|
}
|
|
|
|
|
|
TEST_CASE("[String] Cyrillic to_lower()") {
|
|
TEST_CASE("[String] Cyrillic to_lower()") {
|