From c16217bf9b4fa78df058e698611cfcf9e1f19fe9 Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Wed, 30 Apr 2014 07:38:43 -0700 Subject: [PATCH] Test UTF8ToUTF16 and UTF16ToUTF8. --- format-test.cc | 18 ++++++++++++++++++ format.cc | 2 +- format.h | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/format-test.cc b/format-test.cc index 7c62ddbb..ecc2ff4f 100644 --- a/format-test.cc +++ b/format-test.cc @@ -230,6 +230,24 @@ TEST(UtilTest, CountDigits) { TestCountDigits(uint64_t()); } +#ifdef _WIN32 +TEST(UtilTest, UTF16ToUTF8) { + std::string s = "ёжик"; + UTF16ToUTF8 u(L"\x0451\x0436\x0438\x043A"); + EXPECT_EQ(s, str(u)); + EXPECT_EQ(s.size(), u.size()); +} + +TEST(UtilTest, UTF8ToUTF16) { + std::string s = "лошадка"; + UTF8ToUTF16 u(s.c_str()); + EXPECT_EQ(L"\x043B\x043E\x0448\x0430\x0434\x043A\x0430", str(u)); + EXPECT_EQ(7, u.size()); +} + +// TODO: test UTF16ToUTF8::Convert +#endif // _WIN32 + class TestString { private: std::string value_; diff --git a/format.cc b/format.cc index 3daa1674..007f235c 100644 --- a/format.cc +++ b/format.cc @@ -244,7 +244,7 @@ void fmt::internal::FormatSystemErrorMessage( reinterpret_cast(system_message.ptr()), 0, 0)) { UTF16ToUTF8 utf8_message; if (!utf8_message.Convert(system_message.c_str())) { - out << message << ": " << utf8_message; + out << message << ": " << c_str(utf8_message); return; } } diff --git a/format.h b/format.h index b269824f..82130656 100644 --- a/format.h +++ b/format.h @@ -467,7 +467,7 @@ class UTF8ToUTF16 { public: explicit UTF8ToUTF16(StringRef s); - operator const wchar_t*() const { return &buffer_[0]; } + operator WStringRef() const { return WStringRef(&buffer_[0], size()); } size_t size() const { return buffer_.size() - 1; } }; @@ -480,7 +480,7 @@ class UTF16ToUTF8 { public: UTF16ToUTF8() {} explicit UTF16ToUTF8(WStringRef s); - operator const char*() const { return &buffer_[0]; } + operator StringRef() const { return StringRef(&buffer_[0], size()); } size_t size() const { return buffer_.size() - 1; } // Performs conversion returning a system error code instead of