diff options
author | Pierre Ossman <ossman@cendio.se> | 2023-03-18 13:53:26 +0100 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2023-06-30 21:39:44 +0200 |
commit | c061a78dc1f7242cfcaf42049d5248e4eed39ff4 (patch) | |
tree | 6126e1d9944e1cc3208514eb3369a8b7f3d45759 /tests/unit | |
parent | 19df176862ff0687cabc435056061a1b6cbe9ff2 (diff) | |
download | tigervnc-c061a78dc1f7242cfcaf42049d5248e4eed39ff4.tar.gz tigervnc-c061a78dc1f7242cfcaf42049d5248e4eed39ff4.zip |
Clean up string encoding handling
We should handle this in the low-level protocol code as much as possible
to avoid mistakes. This way the rest of the code can assume that strings
are always UTF-8 with \n line endings.
Diffstat (limited to 'tests/unit')
-rw-r--r-- | tests/unit/unicode.cxx | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/unit/unicode.cxx b/tests/unit/unicode.cxx index 4618135d..d4e567e9 100644 --- a/tests/unit/unicode.cxx +++ b/tests/unit/unicode.cxx @@ -84,6 +84,27 @@ struct _utf8utf16 utf8utf16[] = { { "\xed\xa1\xbf", L"\xfffd" }, }; +const char *validutf8[] = { + "abc", + "\xc3\xa5\xc3\xa4\xc3\xb6", + "\xf0\xad\x80\x86", +}; + +const char *invalidutf8[] = { + "\xe5\xe4\xf6", + "\xf8\xa1\xa1\xa1\xa1", +}; + +const wchar_t *validutf16[] = { + L"abc", + L"\xe5\xe4\xf6", + L"\xd83d\xde38\xd83d\xde41\xd83d\xde42", +}; + +const wchar_t *invalidutf16[] = { + L"\xdc40\xdc12", +}; + #define ARRAY_SIZE(a) (sizeof(a)/sizeof(*a)) int main(int /*argc*/, char** /*argv*/) @@ -196,6 +217,34 @@ int main(int /*argc*/, char** /*argv*/) } } + for (i = 0;i < ARRAY_SIZE(validutf8);i++) { + if (!rfb::isValidUTF8(validutf8[i])) { + printf("FAILED: isValidUTF8() #%d\n", (int)i+1); + failures++; + } + } + + for (i = 0;i < ARRAY_SIZE(invalidutf8);i++) { + if (rfb::isValidUTF8(invalidutf8[i])) { + printf("FAILED: ! isValidUTF8() #%d\n", (int)i+1); + failures++; + } + } + + for (i = 0;i < ARRAY_SIZE(validutf16);i++) { + if (!rfb::isValidUTF16(validutf16[i])) { + printf("FAILED: isValidUTF16() #%d\n", (int)i+1); + failures++; + } + } + + for (i = 0;i < ARRAY_SIZE(invalidutf16);i++) { + if (rfb::isValidUTF16(invalidutf16[i])) { + printf("FAILED: ! isValidUTF16() #%d\n", (int)i+1); + failures++; + } + } + if (failures == 0) { printf("OK\n"); } else { |