Index: base/win_util_unittest.cc |
=================================================================== |
--- base/win_util_unittest.cc (revision 14435) |
+++ base/win_util_unittest.cc (working copy) |
@@ -9,44 +9,9 @@ |
#include "base/string_util.h" |
#include "base/win_util.h" |
-class BaseWinUtilTest: public testing::Test { |
- protected: |
- // Retrieve the OS primary language |
- static unsigned GetSystemLanguage() { |
- std::wstring language; |
- |
- typedef BOOL (WINAPI *fnGetThreadPreferredUILanguages)( |
- DWORD dwFlags, |
- PULONG pulNumLanguages, |
- PWSTR pwszLanguagesBuffer, |
- PULONG pcchLanguagesBuffer); |
- fnGetThreadPreferredUILanguages pGetThreadPreferredUILanguages = NULL; |
- pGetThreadPreferredUILanguages = |
- reinterpret_cast<fnGetThreadPreferredUILanguages>( |
- GetProcAddress(GetModuleHandle(L"kernel32.dll"), |
- "GetThreadPreferredUILanguages")); |
- if (pGetThreadPreferredUILanguages) { |
- // Vista, MUI-aware. |
- ULONG number = 0; |
- wchar_t buffer[256] = {0}; |
- ULONG buffer_size = sizeof(buffer); |
- EXPECT_TRUE(pGetThreadPreferredUILanguages(MUI_LANGUAGE_ID, &number, |
- buffer, &buffer_size)); |
- language = buffer; |
- } else { |
- // XP |
- RegKey language_key(HKEY_LOCAL_MACHINE, |
- L"SYSTEM\\CurrentControlSet\\Control\\Nls\\Language"); |
- language_key.ReadValue(L"InstallLanguage", &language); |
- } |
- wchar_t * unused_endptr; |
- return PRIMARYLANGID(wcstol(language.c_str(), &unused_endptr, 16)); |
- } |
-}; |
- |
// The test is somewhat silly, because the Vista bots some have UAC enabled |
// and some have it disabled. At least we check that it does not crash. |
-TEST_F(BaseWinUtilTest, TestIsUACEnabled) { |
+TEST(BaseWinUtilTest, TestIsUACEnabled) { |
if (win_util::GetWinVersion() >= win_util::WINVERSION_VISTA) { |
win_util::UserAccountControlIsEnabled(); |
} else { |
@@ -54,13 +19,13 @@ |
} |
} |
-TEST_F(BaseWinUtilTest, TestGetUserSidString) { |
+TEST(BaseWinUtilTest, TestGetUserSidString) { |
std::wstring user_sid; |
EXPECT_TRUE(win_util::GetUserSidString(&user_sid)); |
EXPECT_TRUE(!user_sid.empty()); |
} |
-TEST_F(BaseWinUtilTest, TestGetNonClientMetrics) { |
+TEST(BaseWinUtilTest, TestGetNonClientMetrics) { |
NONCLIENTMETRICS metrics = {0}; |
win_util::GetNonClientMetrics(&metrics); |
EXPECT_TRUE(metrics.cbSize > 0); |
@@ -68,27 +33,38 @@ |
EXPECT_TRUE(metrics.iScrollHeight > 0); |
} |
-TEST_F(BaseWinUtilTest, FormatMessage) { |
- unsigned language = GetSystemLanguage(); |
- ASSERT_TRUE(language); |
+namespace { |
+// Saves the current thread's locale ID when initialized, and restores it when |
+// the instance is going out of scope. |
+class ThreadLocaleSaver { |
+ public: |
+ ThreadLocaleSaver() : original_locale_id_(GetThreadLocale()) {} |
+ ~ThreadLocaleSaver() { SetThreadLocale(original_locale_id_); } |
+ |
+ private: |
+ LCID original_locale_id_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ThreadLocaleSaver); |
+}; |
+ |
+} // namespace |
+ |
+TEST(BaseWinUtilTest, FormatMessage) { |
+ // Because we cannot write tests of every language, we only test the message |
+ // of en-US locale. Here, we change the current locale temporarily. |
+ ThreadLocaleSaver thread_locale_saver; |
+ WORD language_id = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US); |
+ LCID locale_id = MAKELCID(language_id, SORT_DEFAULT); |
+ ASSERT_TRUE(SetThreadLocale(locale_id)); |
+ |
const int kAccessDeniedErrorCode = 5; |
SetLastError(kAccessDeniedErrorCode); |
ASSERT_EQ(GetLastError(), kAccessDeniedErrorCode); |
std::wstring value; |
+ TrimWhitespace(win_util::FormatLastWin32Error(), TRIM_ALL, &value); |
+ EXPECT_EQ(std::wstring(L"Access is denied."), value); |
- if (language == LANG_ENGLISH) { |
- // This test would fail on non-English system. |
- TrimWhitespace(win_util::FormatLastWin32Error(), TRIM_ALL, &value); |
- EXPECT_EQ(std::wstring(L"Access is denied."), value); |
- } else if (language == LANG_FRENCH) { |
- // This test would fail on non-French system. |
- TrimWhitespace(win_util::FormatLastWin32Error(), TRIM_ALL, &value); |
- EXPECT_EQ(std::wstring(L"Acc\u00e8s refus\u00e9."), value); |
- } else { |
- EXPECT_TRUE(0) << "Please implement the test for your OS language."; |
- } |
- |
// Manually call the OS function |
wchar_t * string_buffer = NULL; |
unsigned string_length = |