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 <ability_context.h>
19e0dac50fSopenharmony_ci#include "common_test_utils.h"
20e0dac50fSopenharmony_ci#include "window_test_utils.h"
21e0dac50fSopenharmony_ci#include "window.h"
22e0dac50fSopenharmony_ci#include "window_option.h"
23e0dac50fSopenharmony_ci#include "window_scene.h"
24e0dac50fSopenharmony_ci#include "wm_common.h"
25e0dac50fSopenharmony_ci
26e0dac50fSopenharmony_ciusing namespace testing;
27e0dac50fSopenharmony_ciusing namespace testing::ext;
28e0dac50fSopenharmony_ci
29e0dac50fSopenharmony_cinamespace OHOS {
30e0dac50fSopenharmony_cinamespace Rosen {
31e0dac50fSopenharmony_ciclass WindowSystemSubWindowTest : public testing::Test {
32e0dac50fSopenharmony_cipublic:
33e0dac50fSopenharmony_ci    static void SetUpTestCase();
34e0dac50fSopenharmony_ci    static void TearDownTestCase();
35e0dac50fSopenharmony_ci    virtual void SetUp() override;
36e0dac50fSopenharmony_ci    virtual void TearDown() override;
37e0dac50fSopenharmony_ci    // define windowTypes_ for SystemSubWindow02
38e0dac50fSopenharmony_ci    std::vector<WindowType> windowTypes_ = {
39e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_APP_LAUNCHING,
40e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_DOCK_SLICE,
41e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_INCOMING_CALL,
42e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_SEARCHING_BAR,
43e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_SYSTEM_ALARM_WINDOW,
44e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT,
45e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_FLOAT,
46e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_TOAST,
47e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_STATUS_BAR,
48e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_PANEL,
49e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_VOLUME_OVERLAY,
50e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_NAVIGATION_BAR,
51e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_DRAGGING_EFFECT,
52e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_POINTER,
53e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_LAUNCHER_RECENT,
54e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_LAUNCHER_DOCK,
55e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_BOOT_ANIMATION,
56e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_FREEZE_DISPLAY,
57e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_VOICE_INTERACTION,
58e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_FLOAT_CAMERA,
59e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_PLACEHOLDER,
60e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_SCREENSHOT,
61e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_GLOBAL_SEARCH,
62e0dac50fSopenharmony_ci    };
63e0dac50fSopenharmony_ci};
64e0dac50fSopenharmony_ci
65e0dac50fSopenharmony_civoid WindowSystemSubWindowTest::SetUpTestCase()
66e0dac50fSopenharmony_ci{
67e0dac50fSopenharmony_ci}
68e0dac50fSopenharmony_ci
69e0dac50fSopenharmony_civoid WindowSystemSubWindowTest::TearDownTestCase()
70e0dac50fSopenharmony_ci{
71e0dac50fSopenharmony_ci}
72e0dac50fSopenharmony_ci
73e0dac50fSopenharmony_civoid WindowSystemSubWindowTest::SetUp()
74e0dac50fSopenharmony_ci{
75e0dac50fSopenharmony_ci}
76e0dac50fSopenharmony_ci
77e0dac50fSopenharmony_civoid WindowSystemSubWindowTest::TearDown()
78e0dac50fSopenharmony_ci{
79e0dac50fSopenharmony_ci}
80e0dac50fSopenharmony_ci
81e0dac50fSopenharmony_cistatic sptr<Window> CreateBaseWindow(WindowType type, struct Rect rect, uint32_t flags)
82e0dac50fSopenharmony_ci{
83e0dac50fSopenharmony_ci    sptr<WindowOption> baseOp = new WindowOption();
84e0dac50fSopenharmony_ci    baseOp->SetWindowType(type);
85e0dac50fSopenharmony_ci    baseOp->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
86e0dac50fSopenharmony_ci    baseOp->SetWindowRect(rect);
87e0dac50fSopenharmony_ci    baseOp->SetWindowFlags(flags);
88e0dac50fSopenharmony_ci
89e0dac50fSopenharmony_ci    static int baseCount = 0;
90e0dac50fSopenharmony_ci    std::string baseWindowName = "BaseWindow" + std::to_string(baseCount++);
91e0dac50fSopenharmony_ci    sptr<Window> window = Window::Create(baseWindowName, baseOp, nullptr);
92e0dac50fSopenharmony_ci    return window;
93e0dac50fSopenharmony_ci}
94e0dac50fSopenharmony_ci
95e0dac50fSopenharmony_cistatic sptr<Window> CreateAppSubWindow(sptr<Window> parentWindow, WindowType type, struct Rect rect,
96e0dac50fSopenharmony_ci    uint32_t flags, std::string name = "")
97e0dac50fSopenharmony_ci{
98e0dac50fSopenharmony_ci    sptr<WindowOption> subOp = new WindowOption();
99e0dac50fSopenharmony_ci    subOp->SetWindowType(type);
100e0dac50fSopenharmony_ci    subOp->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
101e0dac50fSopenharmony_ci    subOp->SetWindowRect(rect);
102e0dac50fSopenharmony_ci    subOp->SetWindowFlags(flags);
103e0dac50fSopenharmony_ci    subOp->SetParentId(parentWindow->GetWindowId());
104e0dac50fSopenharmony_ci
105e0dac50fSopenharmony_ci    static int cnt = 0;
106e0dac50fSopenharmony_ci    std::string subWinName = (name == "") ? "AppSubWindow" + std::to_string(cnt++) : name;
107e0dac50fSopenharmony_ci    sptr<Window> window = Window::Create(subWinName, subOp);
108e0dac50fSopenharmony_ci    return window;
109e0dac50fSopenharmony_ci}
110e0dac50fSopenharmony_ci
111e0dac50fSopenharmony_cistatic sptr<Window> CreateSystemSubWindow(sptr<Window> parentWindow, struct Rect rect,
112e0dac50fSopenharmony_ci    uint32_t flags, std::string name = "")
113e0dac50fSopenharmony_ci{
114e0dac50fSopenharmony_ci    sptr<WindowOption> subOp = new WindowOption();
115e0dac50fSopenharmony_ci    subOp->SetWindowType(WindowType::WINDOW_TYPE_SYSTEM_SUB_WINDOW);
116e0dac50fSopenharmony_ci    subOp->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
117e0dac50fSopenharmony_ci    subOp->SetWindowRect(rect);
118e0dac50fSopenharmony_ci    subOp->SetWindowFlags(flags);
119e0dac50fSopenharmony_ci    subOp->SetParentId(parentWindow->GetWindowId());
120e0dac50fSopenharmony_ci
121e0dac50fSopenharmony_ci    static int cnt = 0;
122e0dac50fSopenharmony_ci    std::string subWinName = (name == "") ? "SystemSubWindow" + std::to_string(cnt++) : name;
123e0dac50fSopenharmony_ci    sptr<Window> window = Window::Create(subWinName, subOp);
124e0dac50fSopenharmony_ci    return window;
125e0dac50fSopenharmony_ci}
126e0dac50fSopenharmony_ci
127e0dac50fSopenharmony_ci/**
128e0dac50fSopenharmony_ci * @tc.name: SystemSubWindow01
129e0dac50fSopenharmony_ci * @tc.desc: create sub windows with below system Windows
130e0dac50fSopenharmony_ci * @tc.type: FUNC
131e0dac50fSopenharmony_ci */
132e0dac50fSopenharmony_ciHWTEST_F(WindowSystemSubWindowTest, SystemSubWindow01, Function | MediumTest | Level2)
133e0dac50fSopenharmony_ci{
134e0dac50fSopenharmony_ci    std::vector<WindowType> windowTypes = {
135e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_WALLPAPER,
136e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_DESKTOP,
137e0dac50fSopenharmony_ci    };
138e0dac50fSopenharmony_ci    for (auto itor = windowTypes.begin(); itor != windowTypes.end(); itor++) {
139e0dac50fSopenharmony_ci        struct Rect baseRect = {0, 0, 100, 200};
140e0dac50fSopenharmony_ci        uint32_t baseFlags = 0;
141e0dac50fSopenharmony_ci        sptr<Window> baseWindow = CreateBaseWindow(static_cast<WindowType>(*itor), baseRect, baseFlags);
142e0dac50fSopenharmony_ci        if (baseWindow == nullptr) {
143e0dac50fSopenharmony_ci            continue;
144e0dac50fSopenharmony_ci        }
145e0dac50fSopenharmony_ci        struct Rect rect = {0, 0, 100, 200};
146e0dac50fSopenharmony_ci        uint32_t flags = 0;
147e0dac50fSopenharmony_ci        sptr<Window> subWindow = CreateSystemSubWindow(baseWindow, rect, flags);
148e0dac50fSopenharmony_ci        if (subWindow == nullptr) {
149e0dac50fSopenharmony_ci            return;
150e0dac50fSopenharmony_ci        }
151e0dac50fSopenharmony_ci
152e0dac50fSopenharmony_ci        ASSERT_NE(nullptr, subWindow);
153e0dac50fSopenharmony_ci
154e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, baseWindow->Show());
155e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, subWindow->Show());
156e0dac50fSopenharmony_ci
157e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, subWindow->Hide());
158e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, baseWindow->Hide());
159e0dac50fSopenharmony_ci
160e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, subWindow->Destroy());
161e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, baseWindow->Destroy());
162e0dac50fSopenharmony_ci    }
163e0dac50fSopenharmony_ci}
164e0dac50fSopenharmony_ci
165e0dac50fSopenharmony_ci/**
166e0dac50fSopenharmony_ci * @tc.name: SystemSubWindow02
167e0dac50fSopenharmony_ci * @tc.desc: create sub windows with above system Windows except WINDOW_TYPE_DIALOG
168e0dac50fSopenharmony_ci * @tc.type: FUNC
169e0dac50fSopenharmony_ci */
170e0dac50fSopenharmony_ciHWTEST_F(WindowSystemSubWindowTest, SystemSubWindow02, Function | MediumTest | Level2)
171e0dac50fSopenharmony_ci{
172e0dac50fSopenharmony_ci    for (auto itor = windowTypes_.begin(); itor != windowTypes_.end(); itor++) {
173e0dac50fSopenharmony_ci        if (static_cast<WindowType>(*itor) == WindowType::WINDOW_TYPE_FLOAT) {
174e0dac50fSopenharmony_ci            CommonTestUtils::GuaranteeFloatWindowPermission("wms_window_systemsubwindow_test");
175e0dac50fSopenharmony_ci        }
176e0dac50fSopenharmony_ci        struct Rect baseRect = {0, 0, 100, 200};
177e0dac50fSopenharmony_ci        uint32_t baseFlags = 0;
178e0dac50fSopenharmony_ci        sptr<Window> baseWindow = CreateBaseWindow(static_cast<WindowType>(*itor), baseRect, baseFlags);
179e0dac50fSopenharmony_ci        if (baseWindow == nullptr) {
180e0dac50fSopenharmony_ci            continue;
181e0dac50fSopenharmony_ci        }
182e0dac50fSopenharmony_ci
183e0dac50fSopenharmony_ci        struct Rect rect = {0, 0, 100, 200};
184e0dac50fSopenharmony_ci        uint32_t flags = 0;
185e0dac50fSopenharmony_ci        sptr<Window> subWindow = CreateSystemSubWindow(baseWindow, rect, flags);
186e0dac50fSopenharmony_ci        if (subWindow == nullptr) {
187e0dac50fSopenharmony_ci            return;
188e0dac50fSopenharmony_ci        }
189e0dac50fSopenharmony_ci        ASSERT_NE(nullptr, subWindow);
190e0dac50fSopenharmony_ci
191e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, baseWindow->Show());
192e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, subWindow->Show());
193e0dac50fSopenharmony_ci
194e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, subWindow->Hide());
195e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, baseWindow->Hide());
196e0dac50fSopenharmony_ci
197e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, subWindow->Destroy());
198e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, baseWindow->Destroy());
199e0dac50fSopenharmony_ci    }
200e0dac50fSopenharmony_ci}
201e0dac50fSopenharmony_ci
202e0dac50fSopenharmony_ci/**
203e0dac50fSopenharmony_ci * @tc.name: SystemSubWindow03
204e0dac50fSopenharmony_ci * @tc.desc: create sub windows with app main Windows, no allow to add as app_main_window's subwindow
205e0dac50fSopenharmony_ci * @tc.type: FUNC
206e0dac50fSopenharmony_ci */
207e0dac50fSopenharmony_ciHWTEST_F(WindowSystemSubWindowTest, SystemSubWindow03, Function | MediumTest | Level2)
208e0dac50fSopenharmony_ci{
209e0dac50fSopenharmony_ci
210e0dac50fSopenharmony_ci    std::vector<WindowType> windowTypes = { WindowType::WINDOW_TYPE_APP_MAIN_WINDOW };
211e0dac50fSopenharmony_ci    for (auto itor = windowTypes.begin(); itor != windowTypes.end(); itor++) {
212e0dac50fSopenharmony_ci        struct Rect baseRect = {0, 0, 100, 200};
213e0dac50fSopenharmony_ci        uint32_t baseFlags = 0;
214e0dac50fSopenharmony_ci        sptr<Window> baseWindow = CreateBaseWindow(static_cast<WindowType>(*itor), baseRect, baseFlags);
215e0dac50fSopenharmony_ci        if (baseWindow == nullptr) {
216e0dac50fSopenharmony_ci            return;
217e0dac50fSopenharmony_ci        }
218e0dac50fSopenharmony_ci        ASSERT_NE(nullptr, baseWindow);
219e0dac50fSopenharmony_ci
220e0dac50fSopenharmony_ci        struct Rect rect = {0, 0, 100, 200};
221e0dac50fSopenharmony_ci        uint32_t flags = 0;
222e0dac50fSopenharmony_ci        sptr<Window> subWindow = CreateSystemSubWindow(baseWindow, rect, flags);
223e0dac50fSopenharmony_ci        if (subWindow == nullptr) {
224e0dac50fSopenharmony_ci            return;
225e0dac50fSopenharmony_ci        }
226e0dac50fSopenharmony_ci        ASSERT_EQ(nullptr, subWindow);
227e0dac50fSopenharmony_ci    }
228e0dac50fSopenharmony_ci}
229e0dac50fSopenharmony_ci
230e0dac50fSopenharmony_ci/**
231e0dac50fSopenharmony_ci * @tc.name: SystemSubWindow04
232e0dac50fSopenharmony_ci * @tc.desc: create sub windows with app sub Windows
233e0dac50fSopenharmony_ci * @tc.type: FUNC
234e0dac50fSopenharmony_ci */
235e0dac50fSopenharmony_ciHWTEST_F(WindowSystemSubWindowTest, SystemSubWindow04, Function | MediumTest | Level2)
236e0dac50fSopenharmony_ci{
237e0dac50fSopenharmony_ci    std::vector<WindowType> windowTypes = {
238e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_MEDIA,
239e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_APP_SUB_WINDOW,
240e0dac50fSopenharmony_ci        WindowType::WINDOW_TYPE_APP_COMPONENT,
241e0dac50fSopenharmony_ci    };
242e0dac50fSopenharmony_ci    for (auto itor = windowTypes.begin(); itor != windowTypes.end(); itor++) {
243e0dac50fSopenharmony_ci        struct Rect baseRect = {0, 0, 100, 200};
244e0dac50fSopenharmony_ci        uint32_t baseFlags = 0;
245e0dac50fSopenharmony_ci        sptr<Window> baseWindow = CreateBaseWindow(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW, baseRect, baseFlags);
246e0dac50fSopenharmony_ci        if (baseWindow == nullptr) {
247e0dac50fSopenharmony_ci            return;
248e0dac50fSopenharmony_ci        }
249e0dac50fSopenharmony_ci        ASSERT_NE(nullptr, baseWindow);
250e0dac50fSopenharmony_ci
251e0dac50fSopenharmony_ci        sptr<Window> appSubWindow = CreateAppSubWindow(baseWindow, static_cast<WindowType>(*itor), baseRect, baseFlags);
252e0dac50fSopenharmony_ci        if (appSubWindow == nullptr) {
253e0dac50fSopenharmony_ci            return;
254e0dac50fSopenharmony_ci        }
255e0dac50fSopenharmony_ci        ASSERT_NE(nullptr, appSubWindow);
256e0dac50fSopenharmony_ci
257e0dac50fSopenharmony_ci        struct Rect rect = {0, 0, 100, 200};
258e0dac50fSopenharmony_ci        uint32_t flags = 0;
259e0dac50fSopenharmony_ci        sptr<Window> subWindow = CreateSystemSubWindow(appSubWindow, rect, flags);
260e0dac50fSopenharmony_ci        ASSERT_EQ(nullptr, subWindow);
261e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, appSubWindow->Destroy());
262e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, baseWindow->Destroy());
263e0dac50fSopenharmony_ci    }
264e0dac50fSopenharmony_ci}
265e0dac50fSopenharmony_ci
266e0dac50fSopenharmony_ci/**
267e0dac50fSopenharmony_ci * @tc.name: SystemSubWindow05
268e0dac50fSopenharmony_ci * @tc.desc: create sub windows with system sub Windows
269e0dac50fSopenharmony_ci * @tc.type: FUNC
270e0dac50fSopenharmony_ci */
271e0dac50fSopenharmony_ciHWTEST_F(WindowSystemSubWindowTest, SystemSubWindow05, Function | MediumTest | Level3)
272e0dac50fSopenharmony_ci{
273e0dac50fSopenharmony_ci    struct Rect baseRect = {0, 0, 100, 200};
274e0dac50fSopenharmony_ci    uint32_t baseFlags = 0;
275e0dac50fSopenharmony_ci    sptr<Window> baseWindow = CreateBaseWindow(WindowType::WINDOW_TYPE_DOCK_SLICE, baseRect, baseFlags);
276e0dac50fSopenharmony_ci    if (baseWindow == nullptr) {
277e0dac50fSopenharmony_ci        return;
278e0dac50fSopenharmony_ci    }
279e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, baseWindow);
280e0dac50fSopenharmony_ci
281e0dac50fSopenharmony_ci    sptr<Window> systemSubWindow = CreateSystemSubWindow(baseWindow, baseRect, baseFlags);
282e0dac50fSopenharmony_ci    if (systemSubWindow == nullptr) {
283e0dac50fSopenharmony_ci        return;
284e0dac50fSopenharmony_ci    }
285e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, systemSubWindow);
286e0dac50fSopenharmony_ci
287e0dac50fSopenharmony_ci    struct Rect rect = {0, 0, 100, 200};
288e0dac50fSopenharmony_ci    uint32_t flags = 0;
289e0dac50fSopenharmony_ci    sptr<Window> subWindow = CreateSystemSubWindow(systemSubWindow, rect, flags);
290e0dac50fSopenharmony_ci    if (subWindow == nullptr) {
291e0dac50fSopenharmony_ci        return;
292e0dac50fSopenharmony_ci    }
293e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, subWindow);
294e0dac50fSopenharmony_ci
295e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, baseWindow->Show());
296e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, systemSubWindow->Show());
297e0dac50fSopenharmony_ci
298e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, systemSubWindow->Hide());
299e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, baseWindow->Hide());
300e0dac50fSopenharmony_ci
301e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, systemSubWindow->Destroy());
302e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, baseWindow->Destroy());
303e0dac50fSopenharmony_ci}
304e0dac50fSopenharmony_ci
305e0dac50fSopenharmony_ci/**
306e0dac50fSopenharmony_ci * @tc.name: SystemSubWindow06
307e0dac50fSopenharmony_ci * @tc.desc: FullScreen Main Window + 2 SubWindows
308e0dac50fSopenharmony_ci * @tc.type: FUNC
309e0dac50fSopenharmony_ci */
310e0dac50fSopenharmony_ciHWTEST_F(WindowSystemSubWindowTest, SystemSubWindow06, Function | MediumTest | Level3)
311e0dac50fSopenharmony_ci{
312e0dac50fSopenharmony_ci    struct Rect baseRect = {0, 0, 100, 200};
313e0dac50fSopenharmony_ci    uint32_t baseFlags = 0;
314e0dac50fSopenharmony_ci    sptr<Window> baseWindow = CreateBaseWindow(WindowType::WINDOW_TYPE_DOCK_SLICE, baseRect, baseFlags);
315e0dac50fSopenharmony_ci    if (baseWindow == nullptr) {
316e0dac50fSopenharmony_ci        return;
317e0dac50fSopenharmony_ci    }
318e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, baseWindow);
319e0dac50fSopenharmony_ci
320e0dac50fSopenharmony_ci    struct Rect rect = {0, 0, 100, 200};
321e0dac50fSopenharmony_ci    uint32_t flags = 0;
322e0dac50fSopenharmony_ci    sptr<Window> subWindow = CreateSystemSubWindow(baseWindow, rect, flags);
323e0dac50fSopenharmony_ci    if (subWindow == nullptr) {
324e0dac50fSopenharmony_ci        return;
325e0dac50fSopenharmony_ci    }
326e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, subWindow);
327e0dac50fSopenharmony_ci
328e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, baseWindow->Show());
329e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, subWindow->Show());
330e0dac50fSopenharmony_ci
331e0dac50fSopenharmony_ci    bool isFocus = subWindow->GetFocusable();
332e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, subWindow->SetFocusable(!isFocus));
333e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, subWindow->MoveTo(0, 0));
334e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, subWindow->Resize(200, 400));
335e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, subWindow->SetTurnScreenOn(true));
336e0dac50fSopenharmony_ci
337e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_TYPE, subWindow->SetBrightness(0.5f));
338e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, subWindow->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN));
339e0dac50fSopenharmony_ci
340e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, subWindow->Hide());
341e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, baseWindow->Hide());
342e0dac50fSopenharmony_ci
343e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, subWindow->Destroy());
344e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, baseWindow->Destroy());
345e0dac50fSopenharmony_ci}
346e0dac50fSopenharmony_ci/**
347e0dac50fSopenharmony_ci * @tc.name: SystemSubWindow07
348e0dac50fSopenharmony_ci * @tc.desc: create sub windows with dialog
349e0dac50fSopenharmony_ci * @tc.type: FUNC
350e0dac50fSopenharmony_ci */
351e0dac50fSopenharmony_ciHWTEST_F(WindowSystemSubWindowTest, SystemSubWindow07, Function | MediumTest | Level3)
352e0dac50fSopenharmony_ci{
353e0dac50fSopenharmony_ci    struct Rect baseRect = {0, 0, 100, 200};
354e0dac50fSopenharmony_ci    uint32_t baseFlags = 0;
355e0dac50fSopenharmony_ci    sptr<Window> baseWindow = CreateBaseWindow(WindowType::WINDOW_TYPE_DIALOG, baseRect, baseFlags);
356e0dac50fSopenharmony_ci    if (baseWindow == nullptr) {
357e0dac50fSopenharmony_ci        return;
358e0dac50fSopenharmony_ci    }
359e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, baseWindow);
360e0dac50fSopenharmony_ci
361e0dac50fSopenharmony_ci    struct Rect rect = {0, 0, 100, 200};
362e0dac50fSopenharmony_ci    uint32_t flags = 0;
363e0dac50fSopenharmony_ci    sptr<Window> subWindow = CreateSystemSubWindow(baseWindow, rect, flags);
364e0dac50fSopenharmony_ci    if (subWindow == nullptr) {
365e0dac50fSopenharmony_ci        return;
366e0dac50fSopenharmony_ci    }
367e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, subWindow);
368e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, baseWindow->Destroy());
369e0dac50fSopenharmony_ci}
370e0dac50fSopenharmony_ci} // namespace Rosen
371e0dac50fSopenharmony_ci} // namespace OHOS
372