1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License. 5e0dac50fSopenharmony_ci * You may obtain a copy of the License at 6e0dac50fSopenharmony_ci * 7e0dac50fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0dac50fSopenharmony_ci * 9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and 13e0dac50fSopenharmony_ci * limitations under the License. 14e0dac50fSopenharmony_ci */ 15e0dac50fSopenharmony_ci 16e0dac50fSopenharmony_ci// gtest 17e0dac50fSopenharmony_ci#include <gtest/gtest.h> 18e0dac50fSopenharmony_ci#include "wm_common.h" 19e0dac50fSopenharmony_ci#include "window_manager.h" 20e0dac50fSopenharmony_ci#include "window_test_utils.h" 21e0dac50fSopenharmony_ciusing namespace testing; 22e0dac50fSopenharmony_ciusing namespace testing::ext; 23e0dac50fSopenharmony_ci 24e0dac50fSopenharmony_cinamespace OHOS { 25e0dac50fSopenharmony_cinamespace Rosen { 26e0dac50fSopenharmony_cinamespace { 27e0dac50fSopenharmony_ciconstexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "WindowFocusTest"}; 28e0dac50fSopenharmony_ci} 29e0dac50fSopenharmony_ci 30e0dac50fSopenharmony_ciusing Utils = WindowTestUtils; 31e0dac50fSopenharmony_ciconst int WAIT_ASYNC_US = 100000; // 100000us 32e0dac50fSopenharmony_ci 33e0dac50fSopenharmony_ciclass TestFocusChangedListener : public IFocusChangedListener { 34e0dac50fSopenharmony_cipublic: 35e0dac50fSopenharmony_ci uint32_t focusedWindow_ = INVALID_WINDOW_ID; 36e0dac50fSopenharmony_ci uint32_t unfocusedWindow_ = INVALID_WINDOW_ID; 37e0dac50fSopenharmony_ci void OnFocused(const sptr<FocusChangeInfo>& focusChangeInfo) override; 38e0dac50fSopenharmony_ci void OnUnfocused(const sptr<FocusChangeInfo>& focusChangeInfo) override; 39e0dac50fSopenharmony_ci}; 40e0dac50fSopenharmony_ci 41e0dac50fSopenharmony_ciclass WindowFocusTest : public testing::Test { 42e0dac50fSopenharmony_cipublic: 43e0dac50fSopenharmony_ci static void SetUpTestCase(); 44e0dac50fSopenharmony_ci static void TearDownTestCase(); 45e0dac50fSopenharmony_ci virtual void SetUp() override; 46e0dac50fSopenharmony_ci virtual void TearDown() override; 47e0dac50fSopenharmony_ci static sptr<TestFocusChangedListener> testFocusChangedListener_; 48e0dac50fSopenharmony_ci Utils::TestWindowInfo fullScreenAppInfo_; 49e0dac50fSopenharmony_ci Utils::TestWindowInfo floatAppInfo_; 50e0dac50fSopenharmony_ci Utils::TestWindowInfo subAppInfo_; 51e0dac50fSopenharmony_ci}; 52e0dac50fSopenharmony_ci 53e0dac50fSopenharmony_cisptr<TestFocusChangedListener> WindowFocusTest::testFocusChangedListener_ = 54e0dac50fSopenharmony_ci new TestFocusChangedListener(); 55e0dac50fSopenharmony_ci 56e0dac50fSopenharmony_civoid TestFocusChangedListener::OnFocused(const sptr<FocusChangeInfo>& focusChangeInfo) 57e0dac50fSopenharmony_ci{ 58e0dac50fSopenharmony_ci WLOGI("TestFocusChangedListener Focused ID: %{public}u", focusChangeInfo->windowId_); 59e0dac50fSopenharmony_ci focusedWindow_ = focusChangeInfo->windowId_; 60e0dac50fSopenharmony_ci} 61e0dac50fSopenharmony_ci 62e0dac50fSopenharmony_civoid TestFocusChangedListener::OnUnfocused(const sptr<FocusChangeInfo>& focusChangeInfo) 63e0dac50fSopenharmony_ci{ 64e0dac50fSopenharmony_ci WLOGI("TestFocusChangedListener Unfocused ID: %{public}u", focusChangeInfo->windowId_); 65e0dac50fSopenharmony_ci unfocusedWindow_ = focusChangeInfo->windowId_; 66e0dac50fSopenharmony_ci} 67e0dac50fSopenharmony_ci 68e0dac50fSopenharmony_civoid WindowFocusTest::SetUpTestCase() 69e0dac50fSopenharmony_ci{ 70e0dac50fSopenharmony_ci auto display = DisplayManager::GetInstance().GetDisplayById(0); 71e0dac50fSopenharmony_ci ASSERT_TRUE((display != nullptr)); 72e0dac50fSopenharmony_ci WLOGI("GetDefaultDisplay: id %{public}" PRIu64", w %{public}d, h %{public}d, fps %{public}u", 73e0dac50fSopenharmony_ci display->GetId(), display->GetWidth(), display->GetHeight(), display->GetRefreshRate()); 74e0dac50fSopenharmony_ci Rect displayRect = {0, 0, display->GetWidth(), display->GetHeight()}; 75e0dac50fSopenharmony_ci Utils::InitByDisplayRect(displayRect); 76e0dac50fSopenharmony_ci} 77e0dac50fSopenharmony_ci 78e0dac50fSopenharmony_civoid WindowFocusTest::TearDownTestCase() 79e0dac50fSopenharmony_ci{ 80e0dac50fSopenharmony_ci} 81e0dac50fSopenharmony_ci 82e0dac50fSopenharmony_civoid WindowFocusTest::SetUp() 83e0dac50fSopenharmony_ci{ 84e0dac50fSopenharmony_ci fullScreenAppInfo_ = { 85e0dac50fSopenharmony_ci .name = "FullWindow", 86e0dac50fSopenharmony_ci .rect = Utils::customAppRect_, 87e0dac50fSopenharmony_ci .type = WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, 88e0dac50fSopenharmony_ci .mode = WindowMode::WINDOW_MODE_FULLSCREEN, 89e0dac50fSopenharmony_ci .needAvoid = false, 90e0dac50fSopenharmony_ci .parentLimit = false, 91e0dac50fSopenharmony_ci .showWhenLocked = true, 92e0dac50fSopenharmony_ci .parentId = INVALID_WINDOW_ID, 93e0dac50fSopenharmony_ci }; 94e0dac50fSopenharmony_ci floatAppInfo_ = { 95e0dac50fSopenharmony_ci .name = "ParentWindow", 96e0dac50fSopenharmony_ci .rect = Utils::customAppRect_, 97e0dac50fSopenharmony_ci .type = WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, 98e0dac50fSopenharmony_ci .mode = WindowMode::WINDOW_MODE_FLOATING, 99e0dac50fSopenharmony_ci .needAvoid = false, 100e0dac50fSopenharmony_ci .parentLimit = false, 101e0dac50fSopenharmony_ci .showWhenLocked = true, 102e0dac50fSopenharmony_ci .parentId = INVALID_WINDOW_ID, 103e0dac50fSopenharmony_ci }; 104e0dac50fSopenharmony_ci subAppInfo_ = { 105e0dac50fSopenharmony_ci .name = "SubWindow", 106e0dac50fSopenharmony_ci .rect = Utils::customAppRect_, 107e0dac50fSopenharmony_ci .type = WindowType::WINDOW_TYPE_APP_SUB_WINDOW, 108e0dac50fSopenharmony_ci .mode = WindowMode::WINDOW_MODE_FLOATING, 109e0dac50fSopenharmony_ci .needAvoid = false, 110e0dac50fSopenharmony_ci .parentLimit = false, 111e0dac50fSopenharmony_ci .showWhenLocked = false, 112e0dac50fSopenharmony_ci .parentId = INVALID_WINDOW_ID, 113e0dac50fSopenharmony_ci }; 114e0dac50fSopenharmony_ci WindowManager::GetInstance().RegisterFocusChangedListener(testFocusChangedListener_); 115e0dac50fSopenharmony_ci} 116e0dac50fSopenharmony_ci 117e0dac50fSopenharmony_civoid WindowFocusTest::TearDown() 118e0dac50fSopenharmony_ci{ 119e0dac50fSopenharmony_ci WindowManager::GetInstance().UnregisterFocusChangedListener(testFocusChangedListener_); 120e0dac50fSopenharmony_ci} 121e0dac50fSopenharmony_ci 122e0dac50fSopenharmony_cinamespace { 123e0dac50fSopenharmony_ci/** 124e0dac50fSopenharmony_ci * @tc.name: FocusChangedTest01 125e0dac50fSopenharmony_ci * @tc.desc: add main window and sub window and show it to test focus 126e0dac50fSopenharmony_ci * @tc.type: FUNC 127e0dac50fSopenharmony_ci */ 128e0dac50fSopenharmony_ciHWTEST_F(WindowFocusTest, FocusChangedTest01, Function | MediumTest | Level3) 129e0dac50fSopenharmony_ci{ 130e0dac50fSopenharmony_ci fullScreenAppInfo_.name = "FocusChangedTest01_1"; 131e0dac50fSopenharmony_ci fullScreenAppInfo_.focusable_ = false; 132e0dac50fSopenharmony_ci const sptr<Window>& window1 = Utils::CreateTestWindow(fullScreenAppInfo_); 133e0dac50fSopenharmony_ci if (window1 == nullptr) { 134e0dac50fSopenharmony_ci return; 135e0dac50fSopenharmony_ci } 136e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window1); 137e0dac50fSopenharmony_ci 138e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest01_2"; 139e0dac50fSopenharmony_ci floatAppInfo_.rect = { 10, 200, 300, 400 }; 140e0dac50fSopenharmony_ci const sptr<Window>& window2 = Utils::CreateTestWindow(floatAppInfo_); 141e0dac50fSopenharmony_ci if (window2 == nullptr) { 142e0dac50fSopenharmony_ci return; 143e0dac50fSopenharmony_ci } 144e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window2); 145e0dac50fSopenharmony_ci 146e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest01_3"; 147e0dac50fSopenharmony_ci floatAppInfo_.rect = { 250, 150, 300, 500 }; 148e0dac50fSopenharmony_ci const sptr<Window>& window3 = Utils::CreateTestWindow(floatAppInfo_); 149e0dac50fSopenharmony_ci if (window3 == nullptr) { 150e0dac50fSopenharmony_ci return; 151e0dac50fSopenharmony_ci } 152e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window3); 153e0dac50fSopenharmony_ci 154e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest01_4"; 155e0dac50fSopenharmony_ci subAppInfo_.rect = { 400, 200, 100, 100 }; 156e0dac50fSopenharmony_ci subAppInfo_.parentId = window3->GetWindowId(); 157e0dac50fSopenharmony_ci const sptr<Window>& subWindow = Utils::CreateTestWindow(subAppInfo_); 158e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 159e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window3->Show()); 160e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 161e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 162e0dac50fSopenharmony_ci ASSERT_EQ(window3->GetWindowId(), testFocusChangedListener_->focusedWindow_); 163e0dac50fSopenharmony_ci 164e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window1->Show()); 165e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 166e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 167e0dac50fSopenharmony_ci ASSERT_EQ(window3->GetWindowId(), testFocusChangedListener_->focusedWindow_); 168e0dac50fSopenharmony_ci 169e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window2->Show()); 170e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 171e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 172e0dac50fSopenharmony_ci ASSERT_EQ(window3->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 173e0dac50fSopenharmony_ci ASSERT_EQ(window2->GetWindowId(), testFocusChangedListener_->focusedWindow_); 174e0dac50fSopenharmony_ci 175e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 176e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 177e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 178e0dac50fSopenharmony_ci ASSERT_EQ(window2->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 179e0dac50fSopenharmony_ci ASSERT_EQ(subWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 180e0dac50fSopenharmony_ci 181e0dac50fSopenharmony_ci window1->Destroy(); 182e0dac50fSopenharmony_ci window2->Destroy(); 183e0dac50fSopenharmony_ci window3->Destroy(); 184e0dac50fSopenharmony_ci subWindow->Destroy(); 185e0dac50fSopenharmony_ci} 186e0dac50fSopenharmony_ci 187e0dac50fSopenharmony_ci/** 188e0dac50fSopenharmony_ci * @tc.name: FocusChangedTest02 189e0dac50fSopenharmony_ci * @tc.desc: hide focused window to test focus 190e0dac50fSopenharmony_ci * @tc.type: FUNC 191e0dac50fSopenharmony_ci */ 192e0dac50fSopenharmony_ciHWTEST_F(WindowFocusTest, FocusChangedTest02, Function | MediumTest | Level3) 193e0dac50fSopenharmony_ci{ 194e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest02_1"; 195e0dac50fSopenharmony_ci floatAppInfo_.rect = { 10, 200, 300, 400 }; 196e0dac50fSopenharmony_ci const sptr<Window>& mainWindow = Utils::CreateTestWindow(floatAppInfo_); 197e0dac50fSopenharmony_ci if (mainWindow == nullptr) { 198e0dac50fSopenharmony_ci return; 199e0dac50fSopenharmony_ci } 200e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow); 201e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow->Show()); 202e0dac50fSopenharmony_ci 203e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest02_2"; 204e0dac50fSopenharmony_ci subAppInfo_.rect = { 400, 200, 100, 100 }; 205e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow->GetWindowId(); 206e0dac50fSopenharmony_ci const sptr<Window>& subWindow = Utils::CreateTestWindow(subAppInfo_); 207e0dac50fSopenharmony_ci if (subWindow == nullptr) { 208e0dac50fSopenharmony_ci return; 209e0dac50fSopenharmony_ci } 210e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 211e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show()); 212e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 213e0dac50fSopenharmony_ci ASSERT_EQ(subWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 214e0dac50fSopenharmony_ci 215e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Hide()); 216e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 217e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 218e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 219e0dac50fSopenharmony_ci 220e0dac50fSopenharmony_ci mainWindow->Destroy(); 221e0dac50fSopenharmony_ci subWindow->Destroy(); 222e0dac50fSopenharmony_ci} 223e0dac50fSopenharmony_ci 224e0dac50fSopenharmony_ci/** 225e0dac50fSopenharmony_ci * @tc.name: FocusChangedTest03 226e0dac50fSopenharmony_ci * @tc.desc: hide focused window to test focus 227e0dac50fSopenharmony_ci * @tc.type: FUNC 228e0dac50fSopenharmony_ci */ 229e0dac50fSopenharmony_ciHWTEST_F(WindowFocusTest, FocusChangedTest03, Function | MediumTest | Level3) 230e0dac50fSopenharmony_ci{ 231e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest03_1"; 232e0dac50fSopenharmony_ci floatAppInfo_.rect = { 10, 200, 300, 400 }; 233e0dac50fSopenharmony_ci const sptr<Window>& mainWindow1 = Utils::CreateTestWindow(floatAppInfo_); 234e0dac50fSopenharmony_ci if (mainWindow1 == nullptr) { 235e0dac50fSopenharmony_ci return; 236e0dac50fSopenharmony_ci } 237e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow1); 238e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow1->Show()); 239e0dac50fSopenharmony_ci 240e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest03_2"; 241e0dac50fSopenharmony_ci subAppInfo_.rect = { 400, 200, 100, 100 }; 242e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow1->GetWindowId(); 243e0dac50fSopenharmony_ci const sptr<Window>& aboveSubWindow = Utils::CreateTestWindow(subAppInfo_); 244e0dac50fSopenharmony_ci ASSERT_NE(nullptr, aboveSubWindow); 245e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, aboveSubWindow->Show()); 246e0dac50fSopenharmony_ci 247e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest03_3"; 248e0dac50fSopenharmony_ci floatAppInfo_.rect = { 200, 200, 100, 100 }; 249e0dac50fSopenharmony_ci const sptr<Window>& mainWindow2 = Utils::CreateTestWindow(floatAppInfo_); 250e0dac50fSopenharmony_ci if (mainWindow2 == nullptr) { 251e0dac50fSopenharmony_ci return; 252e0dac50fSopenharmony_ci } 253e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow2); 254e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow2->Show()); 255e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 256e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow2->GetWindowId(), testFocusChangedListener_->focusedWindow_); 257e0dac50fSopenharmony_ci 258e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow2->Hide()); 259e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 260e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 261e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow2->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 262e0dac50fSopenharmony_ci ASSERT_EQ(aboveSubWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 263e0dac50fSopenharmony_ci 264e0dac50fSopenharmony_ci mainWindow1->Destroy(); 265e0dac50fSopenharmony_ci mainWindow2->Destroy(); 266e0dac50fSopenharmony_ci aboveSubWindow->Destroy(); 267e0dac50fSopenharmony_ci} 268e0dac50fSopenharmony_ci 269e0dac50fSopenharmony_ci/** 270e0dac50fSopenharmony_ci * @tc.name: FocusChangedTest04 271e0dac50fSopenharmony_ci * @tc.desc: hide focused window to test focus 272e0dac50fSopenharmony_ci * @tc.type: FUNC 273e0dac50fSopenharmony_ci */ 274e0dac50fSopenharmony_ciHWTEST_F(WindowFocusTest, FocusChangedTest04, Function | MediumTest | Level3) 275e0dac50fSopenharmony_ci{ 276e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest04_1"; 277e0dac50fSopenharmony_ci floatAppInfo_.rect = { 10, 200, 300, 400 }; 278e0dac50fSopenharmony_ci const sptr<Window>& mainWindow1 = Utils::CreateTestWindow(floatAppInfo_); 279e0dac50fSopenharmony_ci if (mainWindow1 == nullptr) { 280e0dac50fSopenharmony_ci return; 281e0dac50fSopenharmony_ci } 282e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow1); 283e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow1->Show()); 284e0dac50fSopenharmony_ci 285e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest04_2"; 286e0dac50fSopenharmony_ci subAppInfo_.rect = { 400, 200, 100, 100 }; 287e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow1->GetWindowId(); 288e0dac50fSopenharmony_ci subAppInfo_.type = WindowType::WINDOW_TYPE_MEDIA; 289e0dac50fSopenharmony_ci const sptr<Window>& belowSubWindow = Utils::CreateTestWindow(subAppInfo_); 290e0dac50fSopenharmony_ci if (belowSubWindow == nullptr) { 291e0dac50fSopenharmony_ci return; 292e0dac50fSopenharmony_ci } 293e0dac50fSopenharmony_ci ASSERT_NE(nullptr, belowSubWindow); 294e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, belowSubWindow->Show()); 295e0dac50fSopenharmony_ci 296e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest04_3"; 297e0dac50fSopenharmony_ci floatAppInfo_.rect = { 200, 200, 100, 100 }; 298e0dac50fSopenharmony_ci const sptr<Window>& mainWindow2 = Utils::CreateTestWindow(floatAppInfo_); 299e0dac50fSopenharmony_ci if (mainWindow2 == nullptr) { 300e0dac50fSopenharmony_ci return; 301e0dac50fSopenharmony_ci } 302e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow2); 303e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow2->Show()); 304e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 305e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow2->GetWindowId(), testFocusChangedListener_->focusedWindow_); 306e0dac50fSopenharmony_ci 307e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow2->Hide()); 308e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 309e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 310e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow2->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 311e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow1->GetWindowId(), testFocusChangedListener_->focusedWindow_); 312e0dac50fSopenharmony_ci 313e0dac50fSopenharmony_ci mainWindow1->Destroy(); 314e0dac50fSopenharmony_ci mainWindow2->Destroy(); 315e0dac50fSopenharmony_ci belowSubWindow->Destroy(); 316e0dac50fSopenharmony_ci} 317e0dac50fSopenharmony_ci 318e0dac50fSopenharmony_ci/** 319e0dac50fSopenharmony_ci * @tc.name: FocusChangedTest05 320e0dac50fSopenharmony_ci * @tc.desc: hide focused window to test focus 321e0dac50fSopenharmony_ci * @tc.type: FUNC 322e0dac50fSopenharmony_ci */ 323e0dac50fSopenharmony_ciHWTEST_F(WindowFocusTest, FocusChangedTest05, Function | MediumTest | Level3) 324e0dac50fSopenharmony_ci{ 325e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest05_1"; 326e0dac50fSopenharmony_ci floatAppInfo_.rect = { 10, 200, 300, 400 }; 327e0dac50fSopenharmony_ci const sptr<Window>& mainWindow1 = Utils::CreateTestWindow(floatAppInfo_); 328e0dac50fSopenharmony_ci if (mainWindow1 == nullptr) { 329e0dac50fSopenharmony_ci return; 330e0dac50fSopenharmony_ci } 331e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow1); 332e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow1->Show()); 333e0dac50fSopenharmony_ci 334e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest05_2"; 335e0dac50fSopenharmony_ci floatAppInfo_.rect = { 200, 200, 100, 100 }; 336e0dac50fSopenharmony_ci const sptr<Window>& mainWindow2 = Utils::CreateTestWindow(floatAppInfo_); 337e0dac50fSopenharmony_ci if (mainWindow2 == nullptr) { 338e0dac50fSopenharmony_ci return; 339e0dac50fSopenharmony_ci } 340e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow2); 341e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow2->Show()); 342e0dac50fSopenharmony_ci 343e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest05_3"; 344e0dac50fSopenharmony_ci subAppInfo_.rect = { 400, 200, 100, 100 }; 345e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow2->GetWindowId(); 346e0dac50fSopenharmony_ci subAppInfo_.type = WindowType::WINDOW_TYPE_MEDIA; 347e0dac50fSopenharmony_ci const sptr<Window>& belowSubWindow = Utils::CreateTestWindow(subAppInfo_); 348e0dac50fSopenharmony_ci if (belowSubWindow == nullptr) { 349e0dac50fSopenharmony_ci return; 350e0dac50fSopenharmony_ci } 351e0dac50fSopenharmony_ci ASSERT_NE(nullptr, belowSubWindow); 352e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, belowSubWindow->Show()); 353e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 354e0dac50fSopenharmony_ci ASSERT_EQ(belowSubWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 355e0dac50fSopenharmony_ci 356e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, belowSubWindow->Hide()); 357e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 358e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 359e0dac50fSopenharmony_ci ASSERT_EQ(belowSubWindow->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 360e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow1->GetWindowId(), testFocusChangedListener_->focusedWindow_); 361e0dac50fSopenharmony_ci 362e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, belowSubWindow->Show()); 363e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 364e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow1->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 365e0dac50fSopenharmony_ci ASSERT_EQ(belowSubWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 366e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow2->Hide()); 367e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 368e0dac50fSopenharmony_ci ASSERT_EQ(belowSubWindow->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 369e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow1->GetWindowId(), testFocusChangedListener_->focusedWindow_); 370e0dac50fSopenharmony_ci 371e0dac50fSopenharmony_ci mainWindow1->Destroy(); 372e0dac50fSopenharmony_ci mainWindow2->Destroy(); 373e0dac50fSopenharmony_ci belowSubWindow->Destroy(); 374e0dac50fSopenharmony_ci} 375e0dac50fSopenharmony_ci 376e0dac50fSopenharmony_ci/** 377e0dac50fSopenharmony_ci* @tc.name: FocusChangedTest06 378e0dac50fSopenharmony_ci* @tc.desc: hide unfocused window to test focus 379e0dac50fSopenharmony_ci* @tc.type: FUNC 380e0dac50fSopenharmony_ci*/ 381e0dac50fSopenharmony_ciHWTEST_F(WindowFocusTest, FocusChangedTest06, Function | MediumTest | Level3) 382e0dac50fSopenharmony_ci{ 383e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest06_1"; 384e0dac50fSopenharmony_ci floatAppInfo_.rect = { 10, 200, 300, 400 }; 385e0dac50fSopenharmony_ci const sptr<Window>& mainWindow = Utils::CreateTestWindow(floatAppInfo_); 386e0dac50fSopenharmony_ci if (mainWindow == nullptr) { 387e0dac50fSopenharmony_ci return; 388e0dac50fSopenharmony_ci } 389e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow); 390e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow->Show()); 391e0dac50fSopenharmony_ci 392e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest06_2"; 393e0dac50fSopenharmony_ci subAppInfo_.rect = { 100, 200, 100, 100 }; 394e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow->GetWindowId(); 395e0dac50fSopenharmony_ci subAppInfo_.type = WindowType::WINDOW_TYPE_MEDIA; 396e0dac50fSopenharmony_ci const sptr<Window>& belowSubWindow = Utils::CreateTestWindow(subAppInfo_); 397e0dac50fSopenharmony_ci if (belowSubWindow == nullptr) { 398e0dac50fSopenharmony_ci return; 399e0dac50fSopenharmony_ci } 400e0dac50fSopenharmony_ci ASSERT_NE(nullptr, belowSubWindow); 401e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, belowSubWindow->Show()); 402e0dac50fSopenharmony_ci 403e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest06_3"; 404e0dac50fSopenharmony_ci subAppInfo_.rect = { 400, 200, 100, 100 }; 405e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow->GetWindowId(); 406e0dac50fSopenharmony_ci subAppInfo_.type = WindowType::WINDOW_TYPE_APP_SUB_WINDOW; 407e0dac50fSopenharmony_ci const sptr<Window>& aboveSubWindow = Utils::CreateTestWindow(subAppInfo_); 408e0dac50fSopenharmony_ci ASSERT_NE(nullptr, aboveSubWindow); 409e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, aboveSubWindow->Show()); 410e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 411e0dac50fSopenharmony_ci ASSERT_EQ(aboveSubWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 412e0dac50fSopenharmony_ci 413e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, belowSubWindow->Hide()); 414e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 415e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 416e0dac50fSopenharmony_ci ASSERT_EQ(aboveSubWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 417e0dac50fSopenharmony_ci} 418e0dac50fSopenharmony_ci 419e0dac50fSopenharmony_ci/** 420e0dac50fSopenharmony_ci* @tc.name: FocusChangedTest07 421e0dac50fSopenharmony_ci* @tc.desc: destroy focused window to test focus 422e0dac50fSopenharmony_ci* @tc.type: FUNC 423e0dac50fSopenharmony_ci*/ 424e0dac50fSopenharmony_ciHWTEST_F(WindowFocusTest, FocusChangedTest07, Function | MediumTest | Level3) 425e0dac50fSopenharmony_ci{ 426e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest07_1"; 427e0dac50fSopenharmony_ci floatAppInfo_.rect = { 10, 200, 300, 400 }; 428e0dac50fSopenharmony_ci const sptr<Window>& mainWindow1 = Utils::CreateTestWindow(floatAppInfo_); 429e0dac50fSopenharmony_ci if (mainWindow1 == nullptr) { 430e0dac50fSopenharmony_ci return; 431e0dac50fSopenharmony_ci } 432e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow1); 433e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow1->Show()); 434e0dac50fSopenharmony_ci 435e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest07_2"; 436e0dac50fSopenharmony_ci floatAppInfo_.rect = { 250, 150, 300, 500 }; 437e0dac50fSopenharmony_ci const sptr<Window>& mainWindow2 = Utils::CreateTestWindow(floatAppInfo_); 438e0dac50fSopenharmony_ci if (mainWindow2 == nullptr) { 439e0dac50fSopenharmony_ci return; 440e0dac50fSopenharmony_ci } 441e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow2); 442e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow2->Show()); 443e0dac50fSopenharmony_ci 444e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest07_3"; 445e0dac50fSopenharmony_ci floatAppInfo_.rect = { 300, 400, 10, 400 }; 446e0dac50fSopenharmony_ci const sptr<Window>& mainWindow3 = Utils::CreateTestWindow(floatAppInfo_); 447e0dac50fSopenharmony_ci if (mainWindow3 == nullptr) { 448e0dac50fSopenharmony_ci return; 449e0dac50fSopenharmony_ci } 450e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow3); 451e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow3->Show()); 452e0dac50fSopenharmony_ci 453e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest07_4"; 454e0dac50fSopenharmony_ci subAppInfo_.rect = { 20, 100, 100, 100 }; 455e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow1->GetWindowId(); 456e0dac50fSopenharmony_ci subAppInfo_.type = WindowType::WINDOW_TYPE_MEDIA; 457e0dac50fSopenharmony_ci const sptr<Window>& belowSubWindow1 = Utils::CreateTestWindow(subAppInfo_); 458e0dac50fSopenharmony_ci if (belowSubWindow1 == nullptr) { 459e0dac50fSopenharmony_ci return; 460e0dac50fSopenharmony_ci } 461e0dac50fSopenharmony_ci ASSERT_NE(nullptr, belowSubWindow1); 462e0dac50fSopenharmony_ci 463e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest07_5"; 464e0dac50fSopenharmony_ci subAppInfo_.rect = { 400, 200, 100, 100 }; 465e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow2->GetWindowId(); 466e0dac50fSopenharmony_ci subAppInfo_.type = WindowType::WINDOW_TYPE_APP_SUB_WINDOW; 467e0dac50fSopenharmony_ci const sptr<Window>& aboveSubWindow = Utils::CreateTestWindow(subAppInfo_); 468e0dac50fSopenharmony_ci if (aboveSubWindow == nullptr) { 469e0dac50fSopenharmony_ci return; 470e0dac50fSopenharmony_ci } 471e0dac50fSopenharmony_ci ASSERT_NE(nullptr, aboveSubWindow); 472e0dac50fSopenharmony_ci 473e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest07_6"; 474e0dac50fSopenharmony_ci subAppInfo_.rect = { 310, 410, 100, 100 }; 475e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow3->GetWindowId(); 476e0dac50fSopenharmony_ci subAppInfo_.type = WindowType::WINDOW_TYPE_MEDIA; 477e0dac50fSopenharmony_ci const sptr<Window>& belowSubWindow2 = Utils::CreateTestWindow(subAppInfo_); 478e0dac50fSopenharmony_ci if (belowSubWindow2 == nullptr) { 479e0dac50fSopenharmony_ci return; 480e0dac50fSopenharmony_ci } 481e0dac50fSopenharmony_ci ASSERT_NE(nullptr, belowSubWindow2); 482e0dac50fSopenharmony_ci 483e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, aboveSubWindow->Show()); 484e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, belowSubWindow2->Show()); 485e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, belowSubWindow1->Show()); 486e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 487e0dac50fSopenharmony_ci ASSERT_EQ(belowSubWindow1->GetWindowId(), testFocusChangedListener_->focusedWindow_); 488e0dac50fSopenharmony_ci 489e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow1->Destroy()); 490e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 491e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 492e0dac50fSopenharmony_ci ASSERT_EQ(belowSubWindow1->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 493e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow3->GetWindowId(), testFocusChangedListener_->focusedWindow_); 494e0dac50fSopenharmony_ci 495e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow3->Destroy()); 496e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 497e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow3->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 498e0dac50fSopenharmony_ci ASSERT_EQ(aboveSubWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 499e0dac50fSopenharmony_ci 500e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, aboveSubWindow->Destroy()); 501e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 502e0dac50fSopenharmony_ci ASSERT_EQ(aboveSubWindow->GetWindowId(), testFocusChangedListener_->unfocusedWindow_); 503e0dac50fSopenharmony_ci ASSERT_EQ(mainWindow2->GetWindowId(), testFocusChangedListener_->focusedWindow_); 504e0dac50fSopenharmony_ci 505e0dac50fSopenharmony_ci mainWindow2->Destroy(); 506e0dac50fSopenharmony_ci} 507e0dac50fSopenharmony_ci 508e0dac50fSopenharmony_ci/** 509e0dac50fSopenharmony_ci* @tc.name: FocusChangedTest08 510e0dac50fSopenharmony_ci* @tc.desc: destroy unfocused window to test focus 511e0dac50fSopenharmony_ci* @tc.type: FUNC 512e0dac50fSopenharmony_ci*/ 513e0dac50fSopenharmony_ciHWTEST_F(WindowFocusTest, FocusChangedTest08, Function | MediumTest | Level3) 514e0dac50fSopenharmony_ci{ 515e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest08_1"; 516e0dac50fSopenharmony_ci floatAppInfo_.rect = { 10, 200, 300, 400 }; 517e0dac50fSopenharmony_ci const sptr<Window>& mainWindow1 = Utils::CreateTestWindow(floatAppInfo_); 518e0dac50fSopenharmony_ci if (mainWindow1 == nullptr) { 519e0dac50fSopenharmony_ci return; 520e0dac50fSopenharmony_ci } 521e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow1); 522e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow1->Show()); 523e0dac50fSopenharmony_ci 524e0dac50fSopenharmony_ci floatAppInfo_.name = "FocusChangedTest08_2"; 525e0dac50fSopenharmony_ci floatAppInfo_.rect = { 250, 150, 300, 500 }; 526e0dac50fSopenharmony_ci const sptr<Window>& mainWindow2 = Utils::CreateTestWindow(floatAppInfo_); 527e0dac50fSopenharmony_ci if (mainWindow2 == nullptr) { 528e0dac50fSopenharmony_ci return; 529e0dac50fSopenharmony_ci } 530e0dac50fSopenharmony_ci ASSERT_NE(nullptr, mainWindow2); 531e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow2->Show()); 532e0dac50fSopenharmony_ci 533e0dac50fSopenharmony_ci subAppInfo_.name = "FocusChangedTest08_3"; 534e0dac50fSopenharmony_ci subAppInfo_.rect = { 20, 100, 100, 100 }; 535e0dac50fSopenharmony_ci subAppInfo_.parentId = mainWindow1->GetWindowId(); 536e0dac50fSopenharmony_ci subAppInfo_.type = WindowType::WINDOW_TYPE_MEDIA; 537e0dac50fSopenharmony_ci const sptr<Window>& belowSubWindow = Utils::CreateTestWindow(subAppInfo_); 538e0dac50fSopenharmony_ci if (belowSubWindow == nullptr) { 539e0dac50fSopenharmony_ci return; 540e0dac50fSopenharmony_ci } 541e0dac50fSopenharmony_ci ASSERT_NE(nullptr, belowSubWindow); 542e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, belowSubWindow->Show()); 543e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 544e0dac50fSopenharmony_ci ASSERT_EQ(belowSubWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 545e0dac50fSopenharmony_ci 546e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, mainWindow2->Destroy()); 547e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 548e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 549e0dac50fSopenharmony_ci ASSERT_EQ(belowSubWindow->GetWindowId(), testFocusChangedListener_->focusedWindow_); 550e0dac50fSopenharmony_ci 551e0dac50fSopenharmony_ci mainWindow1->Destroy(); 552e0dac50fSopenharmony_ci} 553e0dac50fSopenharmony_ci 554e0dac50fSopenharmony_ci/** 555e0dac50fSopenharmony_ci * @tc.name: WindowShowWithoutFocusTest 556e0dac50fSopenharmony_ci * @tc.desc: add main window and sub window and show it to test focus 557e0dac50fSopenharmony_ci * @tc.type: FUNC 558e0dac50fSopenharmony_ci */ 559e0dac50fSopenharmony_ciHWTEST_F(WindowFocusTest, WindowShowWithoutFocusTest, Function | MediumTest | Level3) 560e0dac50fSopenharmony_ci{ 561e0dac50fSopenharmony_ci fullScreenAppInfo_.name = "WindowShowWithoutFocusTest_1"; 562e0dac50fSopenharmony_ci fullScreenAppInfo_.focusable_ = false; 563e0dac50fSopenharmony_ci const sptr<Window>& window1 = Utils::CreateTestWindow(fullScreenAppInfo_); 564e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window1); 565e0dac50fSopenharmony_ci 566e0dac50fSopenharmony_ci floatAppInfo_.name = "WindowShowWithoutFocusTest_2"; 567e0dac50fSopenharmony_ci floatAppInfo_.rect = { 10, 200, 300, 400 }; 568e0dac50fSopenharmony_ci const sptr<Window>& window2 = Utils::CreateTestWindow(floatAppInfo_); 569e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window2); 570e0dac50fSopenharmony_ci 571e0dac50fSopenharmony_ci subAppInfo_.name = "WindowShowWithoutFocusTest_3"; 572e0dac50fSopenharmony_ci subAppInfo_.rect = { 400, 200, 100, 100 }; 573e0dac50fSopenharmony_ci subAppInfo_.parentId = window2->GetWindowId(); 574e0dac50fSopenharmony_ci const sptr<Window>& subWindow = Utils::CreateTestWindow(subAppInfo_); 575e0dac50fSopenharmony_ci ASSERT_NE(nullptr, subWindow); 576e0dac50fSopenharmony_ci 577e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window1->Show()); 578e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 579e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 580e0dac50fSopenharmony_ci ASSERT_EQ(window1->GetWindowId(), testFocusChangedListener_->focusedWindow_); 581e0dac50fSopenharmony_ci 582e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, window2->Show(0, false, false)); 583e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 584e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 585e0dac50fSopenharmony_ci ASSERT_EQ(window1->GetWindowId(), testFocusChangedListener_->focusedWindow_); 586e0dac50fSopenharmony_ci 587e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, subWindow->Show(0, false, false)); 588e0dac50fSopenharmony_ci // Await 100ms and get callback result in listener. 589e0dac50fSopenharmony_ci usleep(WAIT_ASYNC_US); 590e0dac50fSopenharmony_ci ASSERT_EQ(window1->GetWindowId(), testFocusChangedListener_->focusedWindow_); 591e0dac50fSopenharmony_ci 592e0dac50fSopenharmony_ci window1->Destroy(); 593e0dac50fSopenharmony_ci window2->Destroy(); 594e0dac50fSopenharmony_ci subWindow->Destroy(); 595e0dac50fSopenharmony_ci} 596e0dac50fSopenharmony_ci} 597e0dac50fSopenharmony_ci} // namespace Rosen 598e0dac50fSopenharmony_ci} // namespace OHOS 599