diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-27 23:35:25 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-27 23:35:25 +0000 |
commit | 61692dda19134d267a15d926fe97d7061aeaaea0 (patch) | |
tree | 21599f4c2fefea1358e52d55aedd4eaa7487e8e1 /base | |
parent | 0a12f6747c9ca2f6c8766f56ec11e0ab3e3b4320 (diff) | |
download | chromium_src-61692dda19134d267a15d926fe97d7061aeaaea0.zip chromium_src-61692dda19134d267a15d926fe97d7061aeaaea0.tar.gz chromium_src-61692dda19134d267a15d926fe97d7061aeaaea0.tar.bz2 |
Lands http://codereview.chromium.org/99007 for Yuta.
BUG=11003
TEST=none
Review URL: http://codereview.chromium.org/100079
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14685 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r-- | base/win_util_unittest.cc | 82 |
1 files changed, 29 insertions, 53 deletions
diff --git a/base/win_util_unittest.cc b/base/win_util_unittest.cc index 8fd8c5c..39162a5 100644 --- a/base/win_util_unittest.cc +++ b/base/win_util_unittest.cc @@ -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, TestIsUACEnabled) { } } -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,26 +33,37 @@ TEST_F(BaseWinUtilTest, TestGetNonClientMetrics) { 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; - - 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."; - } + TrimWhitespace(win_util::FormatLastWin32Error(), TRIM_ALL, &value); + EXPECT_EQ(std::wstring(L"Access is denied."), value); // Manually call the OS function wchar_t * string_buffer = NULL; |