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