0a10259eba
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
89 linhas
2.9 KiB
C++
89 linhas
2.9 KiB
C++
// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include <windows.h>
|
|
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
#include "base/registry.h"
|
|
#include "base/string_util.h"
|
|
#include "base/win_util.h"
|
|
|
|
// 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(BaseWinUtilTest, TestIsUACEnabled) {
|
|
if (win_util::GetWinVersion() >= win_util::WINVERSION_VISTA) {
|
|
win_util::UserAccountControlIsEnabled();
|
|
} else {
|
|
EXPECT_TRUE(win_util::UserAccountControlIsEnabled());
|
|
}
|
|
}
|
|
|
|
TEST(BaseWinUtilTest, TestGetUserSidString) {
|
|
std::wstring user_sid;
|
|
EXPECT_TRUE(win_util::GetUserSidString(&user_sid));
|
|
EXPECT_TRUE(!user_sid.empty());
|
|
}
|
|
|
|
TEST(BaseWinUtilTest, TestGetNonClientMetrics) {
|
|
NONCLIENTMETRICS metrics = {0};
|
|
win_util::GetNonClientMetrics(&metrics);
|
|
EXPECT_TRUE(metrics.cbSize > 0);
|
|
EXPECT_TRUE(metrics.iScrollWidth > 0);
|
|
EXPECT_TRUE(metrics.iScrollHeight > 0);
|
|
}
|
|
|
|
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);
|
|
|
|
// Manually call the OS function
|
|
wchar_t * string_buffer = NULL;
|
|
unsigned string_length =
|
|
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
|
|
kAccessDeniedErrorCode, 0,
|
|
reinterpret_cast<wchar_t *>(&string_buffer), 0, NULL);
|
|
|
|
// Verify the call succeeded
|
|
ASSERT_TRUE(string_length);
|
|
ASSERT_TRUE(string_buffer);
|
|
|
|
// Verify the string is the same by different calls
|
|
EXPECT_EQ(win_util::FormatLastWin32Error(), std::wstring(string_buffer));
|
|
EXPECT_EQ(win_util::FormatMessage(kAccessDeniedErrorCode),
|
|
std::wstring(string_buffer));
|
|
|
|
// Done with the buffer allocated by ::FormatMessage()
|
|
LocalFree(string_buffer);
|
|
}
|