Add string to wstring conversion helper and related unittest
Bug: dawn:766 Change-Id: I318c630df01fcdb302d36873a783fdf1a39c608c Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/48200 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: 陈俊嘉 <cjj19970505@live.cn>
This commit is contained in:
parent
9446154d74
commit
672105aa0a
|
@ -30,3 +30,16 @@ std::string WCharToUTF8(const wchar_t* input) {
|
|||
// This will allocate the returned std::string and then destroy result.
|
||||
return std::string(result.get(), result.get() + (requiredSize - 1));
|
||||
}
|
||||
|
||||
std::wstring UTF8ToWStr(const char* input) {
|
||||
// The -1 argument asks MultiByteToWideChar to use the null terminator to know the size of
|
||||
// input. It will return a size that includes the null terminator.
|
||||
int requiredSize = MultiByteToWideChar(CP_UTF8, 0, input, -1, nullptr, 0);
|
||||
|
||||
// When we can use C++17 this can be changed to use string.data() instead.
|
||||
std::unique_ptr<wchar_t[]> result = std::make_unique<wchar_t[]>(requiredSize);
|
||||
MultiByteToWideChar(CP_UTF8, 0, input, -1, result.get(), requiredSize);
|
||||
|
||||
// This will allocate the returned std::string and then destroy result.
|
||||
return std::wstring(result.get(), result.get() + (requiredSize - 1));
|
||||
}
|
||||
|
|
|
@ -19,4 +19,6 @@
|
|||
|
||||
std::string WCharToUTF8(const wchar_t* input);
|
||||
|
||||
std::wstring UTF8ToWStr(const char* input);
|
||||
|
||||
#endif // COMMON_WINDOWSUTILS_H_
|
||||
|
|
|
@ -31,4 +31,21 @@ TEST(WindowsUtilsTests, WCharToUTF8) {
|
|||
|
||||
// Test three-byte utf8 codepoint
|
||||
ASSERT_EQ("\xe1\x81\x90", WCharToUTF8(L"\x1050"));
|
||||
}
|
||||
|
||||
TEST(WindowsUtilsTests, UTF8ToWStr) {
|
||||
// Test the empty string
|
||||
ASSERT_EQ(L"", UTF8ToWStr(""));
|
||||
|
||||
// Test ASCII characters
|
||||
ASSERT_EQ(L"abc", UTF8ToWStr("abc"));
|
||||
|
||||
// Test ASCII characters
|
||||
ASSERT_EQ(L"abc", UTF8ToWStr("abc"));
|
||||
|
||||
// Test two-byte utf8 character
|
||||
ASSERT_EQ(L"\x450", UTF8ToWStr("\xd1\x90"));
|
||||
|
||||
// Test three-byte utf8 codepoint
|
||||
ASSERT_EQ(L"\x1050", UTF8ToWStr("\xe1\x81\x90"));
|
||||
}
|
Loading…
Reference in New Issue