// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/win/window_enumerator.h" #include #include #include #include "base/test/bind.h" #include "testing/gtest/include/gtest/gtest.h" namespace base::win { TEST(WindowEnumeratorTest, EnumerateTopLevelWindows) { EnumerateChildWindows( ::GetDesktopWindow(), base::BindLambdaForTesting([&](HWND hwnd) { const std::wstring window_class = GetWindowClass(hwnd); EXPECT_EQ(window_class, [&]() { constexpr int kMaxWindowClassNameLength = 256; wchar_t buffer[kMaxWindowClassNameLength + 1] = {0}; const int name_len = ::GetClassName(hwnd, buffer, std::size(buffer)); if (name_len <= 0 || name_len > kMaxWindowClassNameLength) { return std::wstring(); } return std::wstring(&buffer[0], static_cast(name_len)); }()); EXPECT_EQ(IsTopmostWindow(hwnd), (::GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0); EXPECT_EQ(IsSystemDialog(hwnd), window_class == L"#32770"); EXPECT_EQ(IsShellWindow(hwnd), window_class == L"Button" || window_class == L"Shell_TrayWnd" || window_class == L"Shell_SecondaryTrayWnd"); EXPECT_EQ(GetWindowTextString(hwnd), [&]() { const int num_chars = ::GetWindowTextLength(hwnd); if (!num_chars) { return std::wstring(); } std::vector text(static_cast(num_chars) + 1); if (!::GetWindowText(hwnd, &text.front(), static_cast(text.size()))) { return std::wstring(); } return std::wstring(text.begin(), --text.end()); }()); return false; })); } } // namespace base::win