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 "window_manager.h"
19e0dac50fSopenharmony_ci#include "window_test_utils.h"
20e0dac50fSopenharmony_ci#include "wm_common.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, "WindowImmersiveTest"};
28e0dac50fSopenharmony_ci
29e0dac50fSopenharmony_ciconst Rect SYS_BAR_REGION_NULL = { 0, 0, 0, 0 };
30e0dac50fSopenharmony_ciconst SystemBarProperty SYS_BAR_PROP_DEFAULT;
31e0dac50fSopenharmony_ciconst SystemBarProperty SYS_BAR_PROP_1(true, 0xE5111111, 0xE5222222);
32e0dac50fSopenharmony_ciconst SystemBarProperty SYS_BAR_PROP_2(false, 0xE5222222, 0xE5333333);
33e0dac50fSopenharmony_ciconst SystemBarProperty SYS_BAR_PROP_3(false, 0xE5333333, 0xE5444444);
34e0dac50fSopenharmony_ciconst SystemBarProperty SYS_BAR_PROP_4(true, 0xE5444444, 0x66555555);
35e0dac50fSopenharmony_ciconst SystemBarRegionTints TEST_PROPS_DEFAULT = {
36e0dac50fSopenharmony_ci    { WindowType::WINDOW_TYPE_STATUS_BAR, SYS_BAR_PROP_DEFAULT, SYS_BAR_REGION_NULL },
37e0dac50fSopenharmony_ci    { WindowType::WINDOW_TYPE_NAVIGATION_BAR, SYS_BAR_PROP_DEFAULT, SYS_BAR_REGION_NULL },
38e0dac50fSopenharmony_ci};
39e0dac50fSopenharmony_ciconst SystemBarRegionTints TEST_PROPS_1 = {
40e0dac50fSopenharmony_ci    { WindowType::WINDOW_TYPE_STATUS_BAR, SYS_BAR_PROP_1, SYS_BAR_REGION_NULL },
41e0dac50fSopenharmony_ci    { WindowType::WINDOW_TYPE_NAVIGATION_BAR, SYS_BAR_PROP_2, SYS_BAR_REGION_NULL },
42e0dac50fSopenharmony_ci};
43e0dac50fSopenharmony_ciconst SystemBarRegionTints TEST_PROPS_2 = {
44e0dac50fSopenharmony_ci    { WindowType::WINDOW_TYPE_STATUS_BAR, SYS_BAR_PROP_1, SYS_BAR_REGION_NULL },
45e0dac50fSopenharmony_ci    { WindowType::WINDOW_TYPE_NAVIGATION_BAR, SYS_BAR_PROP_3, SYS_BAR_REGION_NULL },
46e0dac50fSopenharmony_ci};
47e0dac50fSopenharmony_ci
48e0dac50fSopenharmony_ciconst Rect EMPTY_RECT = {0, 0, 0, 0};
49e0dac50fSopenharmony_ciconst float RATIO = 0.3;
50e0dac50fSopenharmony_ci}
51e0dac50fSopenharmony_ci
52e0dac50fSopenharmony_ciusing Utils = WindowTestUtils;
53e0dac50fSopenharmony_ciconst int WAIT_ASYNC_US = 100000;  // 100000us
54e0dac50fSopenharmony_ci
55e0dac50fSopenharmony_ciclass TestSystemBarChangedListener : public ISystemBarChangedListener {
56e0dac50fSopenharmony_cipublic:
57e0dac50fSopenharmony_ci    SystemBarRegionTints tints_ = TEST_PROPS_DEFAULT;
58e0dac50fSopenharmony_ci    void OnSystemBarPropertyChange(DisplayId displayId, const SystemBarRegionTints& tints) override;
59e0dac50fSopenharmony_ci};
60e0dac50fSopenharmony_ci
61e0dac50fSopenharmony_ciclass TestAvoidAreaChangedListener : public IAvoidAreaChangedListener {
62e0dac50fSopenharmony_cipublic:
63e0dac50fSopenharmony_ci    AvoidArea avoidArea_;
64e0dac50fSopenharmony_ci    void OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaType type) override;
65e0dac50fSopenharmony_ci};
66e0dac50fSopenharmony_ci
67e0dac50fSopenharmony_ciclass WindowImmersiveTest : public testing::Test {
68e0dac50fSopenharmony_cipublic:
69e0dac50fSopenharmony_ci    static void SetUpTestCase();
70e0dac50fSopenharmony_ci    static void TearDownTestCase();
71e0dac50fSopenharmony_ci    virtual void SetUp() override;
72e0dac50fSopenharmony_ci    virtual void TearDown() override;
73e0dac50fSopenharmony_ci    void SetWindowSystemProps(const sptr<Window>& window, const SystemBarRegionTints& props);
74e0dac50fSopenharmony_ci    bool SystemBarPropsEqualsTo(const SystemBarRegionTints& expect);
75e0dac50fSopenharmony_ci    void DumpFailedInfo(const SystemBarRegionTints& expect);
76e0dac50fSopenharmony_ci    void DumpFailedInfo(bool expectStatus, bool expectNav);
77e0dac50fSopenharmony_ci    bool SystemBarEnableState(bool expectStatus, bool expectNav);
78e0dac50fSopenharmony_ci    DisplayId displayId_ = 0;
79e0dac50fSopenharmony_ci    std::vector<sptr<Window>> activeWindows_;
80e0dac50fSopenharmony_ci    static vector<Rect> fullScreenExpecteds_;
81e0dac50fSopenharmony_ci    static sptr<TestSystemBarChangedListener> testSystemBarChangedListener_;
82e0dac50fSopenharmony_ci    static sptr<TestAvoidAreaChangedListener> testAvoidAreaChangedListener_;
83e0dac50fSopenharmony_ci    Utils::TestWindowInfo fullScreenAppinfo_;
84e0dac50fSopenharmony_ci    Utils::TestWindowInfo avoidBarInfo_;
85e0dac50fSopenharmony_ci    uint32_t leftAvoidW_;
86e0dac50fSopenharmony_ci    uint32_t leftAvoidH_;
87e0dac50fSopenharmony_ci    uint32_t topAvoidW_;
88e0dac50fSopenharmony_ci    uint32_t topAvoidH_;
89e0dac50fSopenharmony_ci    sptr<Window> backgroundWindow_;
90e0dac50fSopenharmony_ci};
91e0dac50fSopenharmony_ci
92e0dac50fSopenharmony_civector<Rect> WindowImmersiveTest::fullScreenExpecteds_;
93e0dac50fSopenharmony_cisptr<TestSystemBarChangedListener> WindowImmersiveTest::testSystemBarChangedListener_ =
94e0dac50fSopenharmony_ci    new TestSystemBarChangedListener();
95e0dac50fSopenharmony_cisptr<TestAvoidAreaChangedListener> WindowImmersiveTest::testAvoidAreaChangedListener_ =
96e0dac50fSopenharmony_ci    new TestAvoidAreaChangedListener();
97e0dac50fSopenharmony_ci
98e0dac50fSopenharmony_civoid WindowImmersiveTest::SetWindowSystemProps(const sptr<Window>& window, const SystemBarRegionTints& tints)
99e0dac50fSopenharmony_ci{
100e0dac50fSopenharmony_ci    for (auto tint : tints) {
101e0dac50fSopenharmony_ci        window->SetSystemBarProperty(tint.type_, tint.prop_);
102e0dac50fSopenharmony_ci    }
103e0dac50fSopenharmony_ci}
104e0dac50fSopenharmony_ci
105e0dac50fSopenharmony_civoid WindowImmersiveTest::DumpFailedInfo(const SystemBarRegionTints& expect)
106e0dac50fSopenharmony_ci{
107e0dac50fSopenharmony_ci    auto act = testSystemBarChangedListener_->tints_;
108e0dac50fSopenharmony_ci    WLOGI("WindowImmersiveTest Expected:");
109e0dac50fSopenharmony_ci    for (auto tint : expect) {
110e0dac50fSopenharmony_ci        WLOGI("WindowType: %{public}4d, Enable: %{public}4d, Color: %{public}x | %{public}x",
111e0dac50fSopenharmony_ci            static_cast<uint32_t>(tint.type_), tint.prop_.enable_,
112e0dac50fSopenharmony_ci            tint.prop_.backgroundColor_, tint.prop_.contentColor_);
113e0dac50fSopenharmony_ci    }
114e0dac50fSopenharmony_ci    WLOGI("WindowImmersiveTest Act: ");
115e0dac50fSopenharmony_ci    for (auto tint : act) {
116e0dac50fSopenharmony_ci        WLOGI("WindowType: %{public}4d, Enable: %{public}4d, Color: %{public}x | %{public}x",
117e0dac50fSopenharmony_ci            static_cast<uint32_t>(tint.type_), tint.prop_.enable_,
118e0dac50fSopenharmony_ci            tint.prop_.backgroundColor_, tint.prop_.contentColor_);
119e0dac50fSopenharmony_ci    }
120e0dac50fSopenharmony_ci}
121e0dac50fSopenharmony_ci
122e0dac50fSopenharmony_civoid WindowImmersiveTest::DumpFailedInfo(bool expectStatus, bool expectNav)
123e0dac50fSopenharmony_ci{
124e0dac50fSopenharmony_ci    auto act = testSystemBarChangedListener_->tints_;
125e0dac50fSopenharmony_ci    WLOGI("WindowImmersiveTest Expected:");
126e0dac50fSopenharmony_ci    WLOGI("expectStatus: %{public}4d, expectNav: %{public}4d", expectStatus, expectNav);
127e0dac50fSopenharmony_ci    WLOGI("WindowImmersiveTest Act: ");
128e0dac50fSopenharmony_ci    for (auto tint : act) {
129e0dac50fSopenharmony_ci        WLOGI("WindowType: %{public}4d, Enable: %{public}4d, Color: %{public}x | %{public}x",
130e0dac50fSopenharmony_ci            static_cast<uint32_t>(tint.type_), tint.prop_.enable_,
131e0dac50fSopenharmony_ci            tint.prop_.backgroundColor_, tint.prop_.contentColor_);
132e0dac50fSopenharmony_ci    }
133e0dac50fSopenharmony_ci}
134e0dac50fSopenharmony_ci
135e0dac50fSopenharmony_cibool WindowImmersiveTest::SystemBarPropsEqualsTo(const SystemBarRegionTints& expect)
136e0dac50fSopenharmony_ci{
137e0dac50fSopenharmony_ci    usleep(WAIT_ASYNC_US);
138e0dac50fSopenharmony_ci    auto act = testSystemBarChangedListener_->tints_;
139e0dac50fSopenharmony_ci    if (act.size() != expect.size()) {
140e0dac50fSopenharmony_ci        DumpFailedInfo(expect);
141e0dac50fSopenharmony_ci        return false;
142e0dac50fSopenharmony_ci    }
143e0dac50fSopenharmony_ci    for (auto item : expect) {
144e0dac50fSopenharmony_ci        bool check = false;
145e0dac50fSopenharmony_ci        for (auto tint : act) {
146e0dac50fSopenharmony_ci            if (item.prop_ == tint.prop_ && item.type_ == tint.type_) {
147e0dac50fSopenharmony_ci                check = true;
148e0dac50fSopenharmony_ci                break;
149e0dac50fSopenharmony_ci            }
150e0dac50fSopenharmony_ci        }
151e0dac50fSopenharmony_ci        if (!check) {
152e0dac50fSopenharmony_ci            DumpFailedInfo(expect);
153e0dac50fSopenharmony_ci            return false;
154e0dac50fSopenharmony_ci        }
155e0dac50fSopenharmony_ci        check = false;
156e0dac50fSopenharmony_ci    }
157e0dac50fSopenharmony_ci    return true;
158e0dac50fSopenharmony_ci}
159e0dac50fSopenharmony_ci
160e0dac50fSopenharmony_cibool WindowImmersiveTest::SystemBarEnableState(bool expectStatus, bool expectNav)
161e0dac50fSopenharmony_ci{
162e0dac50fSopenharmony_ci    usleep(WAIT_ASYNC_US);
163e0dac50fSopenharmony_ci    auto act = testSystemBarChangedListener_->tints_;
164e0dac50fSopenharmony_ci    bool check = false;
165e0dac50fSopenharmony_ci    for (auto tint : act) {
166e0dac50fSopenharmony_ci        if ((tint.type_ == WindowType::WINDOW_TYPE_STATUS_BAR && tint.prop_.enable_ == expectStatus)
167e0dac50fSopenharmony_ci            || (tint.type_ == WindowType::WINDOW_TYPE_NAVIGATION_BAR && tint.prop_.enable_ == expectNav)) {
168e0dac50fSopenharmony_ci            check = true;
169e0dac50fSopenharmony_ci        } else {
170e0dac50fSopenharmony_ci            check = false;
171e0dac50fSopenharmony_ci        }
172e0dac50fSopenharmony_ci    }
173e0dac50fSopenharmony_ci    if (!check) {
174e0dac50fSopenharmony_ci        DumpFailedInfo(expectStatus, expectNav);
175e0dac50fSopenharmony_ci    }
176e0dac50fSopenharmony_ci    return check;
177e0dac50fSopenharmony_ci}
178e0dac50fSopenharmony_ci
179e0dac50fSopenharmony_civoid TestSystemBarChangedListener::OnSystemBarPropertyChange(DisplayId displayId, const SystemBarRegionTints& tints)
180e0dac50fSopenharmony_ci{
181e0dac50fSopenharmony_ci    WLOGI("TestSystemBarChangedListener Display ID: %{public}" PRIu64"", displayId);
182e0dac50fSopenharmony_ci    WLOGI("TestSystemBarChangedListener tints size: %{public}zu", tints.size());
183e0dac50fSopenharmony_ci    for (auto tint : tints) {
184e0dac50fSopenharmony_ci        auto type = tint.type_;
185e0dac50fSopenharmony_ci        for (uint32_t i = 0; i < tints_.size(); i++) {
186e0dac50fSopenharmony_ci            if (tints_[i].type_ == type) {
187e0dac50fSopenharmony_ci                tints_[i] = tint;
188e0dac50fSopenharmony_ci            }
189e0dac50fSopenharmony_ci        }
190e0dac50fSopenharmony_ci    }
191e0dac50fSopenharmony_ci}
192e0dac50fSopenharmony_ci
193e0dac50fSopenharmony_civoid TestAvoidAreaChangedListener::OnAvoidAreaChanged(const AvoidArea avoidArea, AvoidAreaType type)
194e0dac50fSopenharmony_ci{
195e0dac50fSopenharmony_ci    avoidArea_ = avoidArea;
196e0dac50fSopenharmony_ci}
197e0dac50fSopenharmony_ci
198e0dac50fSopenharmony_civoid WindowImmersiveTest::SetUpTestCase()
199e0dac50fSopenharmony_ci{
200e0dac50fSopenharmony_ci    auto display = DisplayManager::GetInstance().GetDisplayById(0);
201e0dac50fSopenharmony_ci    ASSERT_TRUE((display != nullptr));
202e0dac50fSopenharmony_ci    WLOGI("GetDefaultDisplay: id %{public}" PRIu64", w %{public}d, h %{public}d, fps %{public}u",
203e0dac50fSopenharmony_ci        display->GetId(), display->GetWidth(), display->GetHeight(), display->GetRefreshRate());
204e0dac50fSopenharmony_ci    Rect displayRect = {0, 0, display->GetWidth(), display->GetHeight()};
205e0dac50fSopenharmony_ci    Utils::InitByDisplayRect(displayRect);
206e0dac50fSopenharmony_ci}
207e0dac50fSopenharmony_ci
208e0dac50fSopenharmony_civoid WindowImmersiveTest::TearDownTestCase()
209e0dac50fSopenharmony_ci{
210e0dac50fSopenharmony_ci}
211e0dac50fSopenharmony_ci
212e0dac50fSopenharmony_civoid WindowImmersiveTest::SetUp()
213e0dac50fSopenharmony_ci{
214e0dac50fSopenharmony_ci    fullScreenAppinfo_ = {
215e0dac50fSopenharmony_ci        .name = "main",
216e0dac50fSopenharmony_ci        .rect = Utils::customAppRect_,
217e0dac50fSopenharmony_ci        .type = WindowType::WINDOW_TYPE_APP_MAIN_WINDOW,
218e0dac50fSopenharmony_ci        .mode = WindowMode::WINDOW_MODE_FULLSCREEN, // immersive setting
219e0dac50fSopenharmony_ci        .needAvoid = false, // immersive setting
220e0dac50fSopenharmony_ci        .parentLimit = false,
221e0dac50fSopenharmony_ci        .parentId = INVALID_WINDOW_ID,
222e0dac50fSopenharmony_ci    };
223e0dac50fSopenharmony_ci    avoidBarInfo_ = {
224e0dac50fSopenharmony_ci        .name = "LeftAvoidTest",
225e0dac50fSopenharmony_ci        .rect = EMPTY_RECT,
226e0dac50fSopenharmony_ci        .type = WindowType::WINDOW_TYPE_STATUS_BAR,
227e0dac50fSopenharmony_ci        .mode = WindowMode::WINDOW_MODE_FLOATING,
228e0dac50fSopenharmony_ci    };
229e0dac50fSopenharmony_ci    // makesure left avoid win w < h
230e0dac50fSopenharmony_ci    leftAvoidW_ = std::min(Utils::displayRect_.width_, static_cast<uint32_t>(Utils::displayRect_.height_ * RATIO));
231e0dac50fSopenharmony_ci    leftAvoidH_ = Utils::displayRect_.height_;
232e0dac50fSopenharmony_ci    // makesure top avoid win h < w
233e0dac50fSopenharmony_ci    topAvoidW_ = Utils::displayRect_.width_;
234e0dac50fSopenharmony_ci    topAvoidH_ = std::min(Utils::displayRect_.height_, static_cast<uint32_t>(Utils::displayRect_.width_ * RATIO));
235e0dac50fSopenharmony_ci
236e0dac50fSopenharmony_ci    WindowManager::GetInstance().RegisterSystemBarChangedListener(testSystemBarChangedListener_);
237e0dac50fSopenharmony_ci    activeWindows_.clear();
238e0dac50fSopenharmony_ci    sleep(1);
239e0dac50fSopenharmony_ci}
240e0dac50fSopenharmony_ci
241e0dac50fSopenharmony_civoid WindowImmersiveTest::TearDown()
242e0dac50fSopenharmony_ci{
243e0dac50fSopenharmony_ci    while (!activeWindows_.empty()) {
244e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, activeWindows_.back()->Destroy());
245e0dac50fSopenharmony_ci        activeWindows_.pop_back();
246e0dac50fSopenharmony_ci    }
247e0dac50fSopenharmony_ci    WindowManager::GetInstance().UnregisterSystemBarChangedListener(testSystemBarChangedListener_);
248e0dac50fSopenharmony_ci    sleep(1);
249e0dac50fSopenharmony_ci}
250e0dac50fSopenharmony_ci
251e0dac50fSopenharmony_cinamespace {
252e0dac50fSopenharmony_ci/**
253e0dac50fSopenharmony_ci * @tc.name: ImmersiveTest01
254e0dac50fSopenharmony_ci * @tc.desc: Add one immersive window and hide
255e0dac50fSopenharmony_ci * @tc.type: FUNC
256e0dac50fSopenharmony_ci */
257e0dac50fSopenharmony_ciHWTEST_F(WindowImmersiveTest, ImmersiveTest01, Function | MediumTest | Level3)
258e0dac50fSopenharmony_ci{
259e0dac50fSopenharmony_ci    fullScreenAppinfo_.name = "immer01";
260e0dac50fSopenharmony_ci    const sptr<Window>& window = Utils::CreateTestWindow(fullScreenAppinfo_);
261e0dac50fSopenharmony_ci    if (window == nullptr) {
262e0dac50fSopenharmony_ci        return;
263e0dac50fSopenharmony_ci    }
264e0dac50fSopenharmony_ci    activeWindows_.push_back(window);
265e0dac50fSopenharmony_ci    SetWindowSystemProps(window, TEST_PROPS_1);
266e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window->Show());
267e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_1));
268e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window->Hide());
269e0dac50fSopenharmony_ci}
270e0dac50fSopenharmony_ci
271e0dac50fSopenharmony_ci/**
272e0dac50fSopenharmony_ci * @tc.name: ImmersiveTest02
273e0dac50fSopenharmony_ci * @tc.desc: Add two immersive window and switch
274e0dac50fSopenharmony_ci * @tc.type: FUNC
275e0dac50fSopenharmony_ci */
276e0dac50fSopenharmony_ciHWTEST_F(WindowImmersiveTest, ImmersiveTest02, Function | MediumTest | Level3)
277e0dac50fSopenharmony_ci{
278e0dac50fSopenharmony_ci    const sptr<Window>& window1 = Utils::CreateTestWindow(fullScreenAppinfo_);
279e0dac50fSopenharmony_ci    if (window1 == nullptr) {
280e0dac50fSopenharmony_ci        return;
281e0dac50fSopenharmony_ci    }
282e0dac50fSopenharmony_ci    activeWindows_.push_back(window1);
283e0dac50fSopenharmony_ci    SetWindowSystemProps(window1, TEST_PROPS_1);
284e0dac50fSopenharmony_ci    fullScreenAppinfo_.name = "Immer02";
285e0dac50fSopenharmony_ci    const sptr<Window>& window2 = Utils::CreateTestWindow(fullScreenAppinfo_);
286e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, window2);
287e0dac50fSopenharmony_ci    activeWindows_.push_back(window2);
288e0dac50fSopenharmony_ci    SetWindowSystemProps(window2, TEST_PROPS_2);
289e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->Show());
290e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_1));
291e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window2->Show());
292e0dac50fSopenharmony_ci
293e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_2));
294e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window2->Hide());
295e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_1));
296e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->Hide());
297e0dac50fSopenharmony_ci}
298e0dac50fSopenharmony_ci
299e0dac50fSopenharmony_ci/**
300e0dac50fSopenharmony_ci * @tc.name: ImmersiveTest03
301e0dac50fSopenharmony_ci * @tc.desc: Add one no immersive window
302e0dac50fSopenharmony_ci * @tc.type: FUNC
303e0dac50fSopenharmony_ci */
304e0dac50fSopenharmony_ciHWTEST_F(WindowImmersiveTest, ImmersiveTest03, Function | MediumTest | Level3)
305e0dac50fSopenharmony_ci{
306e0dac50fSopenharmony_ci    const sptr<Window>& window1 = Utils::CreateTestWindow(fullScreenAppinfo_);
307e0dac50fSopenharmony_ci    if (window1 == nullptr) {
308e0dac50fSopenharmony_ci        return;
309e0dac50fSopenharmony_ci    }
310e0dac50fSopenharmony_ci    activeWindows_.push_back(window1);
311e0dac50fSopenharmony_ci    SetWindowSystemProps(window1, TEST_PROPS_1);
312e0dac50fSopenharmony_ci    fullScreenAppinfo_.name = "Immer03";
313e0dac50fSopenharmony_ci    fullScreenAppinfo_.needAvoid = true; // no immersive setting
314e0dac50fSopenharmony_ci    const sptr<Window>& window2 = Utils::CreateTestWindow(fullScreenAppinfo_);
315e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, window2);
316e0dac50fSopenharmony_ci    activeWindows_.push_back(window2);
317e0dac50fSopenharmony_ci    SetWindowSystemProps(window2, TEST_PROPS_2);
318e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->Show());
319e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_1));
320e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window2->Show());
321e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_2));
322e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->Hide());
323e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_2));
324e0dac50fSopenharmony_ci}
325e0dac50fSopenharmony_ci
326e0dac50fSopenharmony_ci/**
327e0dac50fSopenharmony_ci * @tc.name: ImmersiveTest04
328e0dac50fSopenharmony_ci * @tc.desc: SetLayoutFullScreen
329e0dac50fSopenharmony_ci * @tc.type: FUNC
330e0dac50fSopenharmony_ci */
331e0dac50fSopenharmony_ciHWTEST_F(WindowImmersiveTest, ImmersiveTest04, Function | MediumTest | Level3)
332e0dac50fSopenharmony_ci{
333e0dac50fSopenharmony_ci    fullScreenAppinfo_.needAvoid = true; // no immersive setting
334e0dac50fSopenharmony_ci    const sptr<Window>& window1 = Utils::CreateTestWindow(fullScreenAppinfo_);
335e0dac50fSopenharmony_ci    if (window1 == nullptr) {
336e0dac50fSopenharmony_ci        return;
337e0dac50fSopenharmony_ci    }
338e0dac50fSopenharmony_ci    activeWindows_.push_back(window1);
339e0dac50fSopenharmony_ci    SetWindowSystemProps(window1, TEST_PROPS_1);
340e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->Show());
341e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_1));
342e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->SetLayoutFullScreen(true));
343e0dac50fSopenharmony_ci    ASSERT_EQ(true, window1->IsLayoutFullScreen());
344e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_1));
345e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->SetLayoutFullScreen(false));
346e0dac50fSopenharmony_ci    ASSERT_EQ(false, window1->IsLayoutFullScreen());
347e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_1));
348e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->Hide());
349e0dac50fSopenharmony_ci}
350e0dac50fSopenharmony_ci
351e0dac50fSopenharmony_ci/**
352e0dac50fSopenharmony_ci * @tc.name: ImmersiveTest05
353e0dac50fSopenharmony_ci * @tc.desc: SetFullScreen
354e0dac50fSopenharmony_ci * @tc.type: FUNC
355e0dac50fSopenharmony_ci */
356e0dac50fSopenharmony_ciHWTEST_F(WindowImmersiveTest, ImmersiveTest05, Function | MediumTest | Level3)
357e0dac50fSopenharmony_ci{
358e0dac50fSopenharmony_ci    fullScreenAppinfo_.needAvoid = true; // no immersive setting
359e0dac50fSopenharmony_ci    const sptr<Window>& window1 = Utils::CreateTestWindow(fullScreenAppinfo_);
360e0dac50fSopenharmony_ci    if (window1 == nullptr) {
361e0dac50fSopenharmony_ci        return;
362e0dac50fSopenharmony_ci    }
363e0dac50fSopenharmony_ci    activeWindows_.push_back(window1);
364e0dac50fSopenharmony_ci    SetWindowSystemProps(window1, TEST_PROPS_1);
365e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->Show());
366e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarPropsEqualsTo(TEST_PROPS_1));
367e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->SetFullScreen(true));
368e0dac50fSopenharmony_ci    ASSERT_EQ(true, window1->IsFullScreen());
369e0dac50fSopenharmony_ci    ASSERT_TRUE(SystemBarEnableState(false, false));
370e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->SetFullScreen(false));
371e0dac50fSopenharmony_ci    ASSERT_EQ(false, window1->IsFullScreen());
372e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window1->Hide());
373e0dac50fSopenharmony_ci}
374e0dac50fSopenharmony_ci
375e0dac50fSopenharmony_ci/**
376e0dac50fSopenharmony_ci * @tc.name: ImmersiveNegativeTest01
377e0dac50fSopenharmony_ci * @tc.desc: set systembar props with wrong window type
378e0dac50fSopenharmony_ci * @tc.type: FUNC
379e0dac50fSopenharmony_ci */
380e0dac50fSopenharmony_ciHWTEST_F(WindowImmersiveTest, ImmersiveNegativeTest01, Function | MediumTest | Level3)
381e0dac50fSopenharmony_ci{
382e0dac50fSopenharmony_ci    const SystemBarRegionTints TEST_PROPS_NEGATIVE = {
383e0dac50fSopenharmony_ci        { WindowType::WINDOW_TYPE_KEYGUARD, SYS_BAR_PROP_1, SYS_BAR_REGION_NULL },
384e0dac50fSopenharmony_ci        { WindowType::WINDOW_TYPE_POINTER, SYS_BAR_PROP_2, SYS_BAR_REGION_NULL },
385e0dac50fSopenharmony_ci    };
386e0dac50fSopenharmony_ci    const sptr<Window>& window = Utils::CreateTestWindow(fullScreenAppinfo_);
387e0dac50fSopenharmony_ci    if (window == nullptr) {
388e0dac50fSopenharmony_ci        return;
389e0dac50fSopenharmony_ci    }
390e0dac50fSopenharmony_ci    activeWindows_.push_back(window);
391e0dac50fSopenharmony_ci    SetWindowSystemProps(window, TEST_PROPS_NEGATIVE);
392e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window->Show());
393e0dac50fSopenharmony_ci    ASSERT_FALSE(SystemBarPropsEqualsTo(TEST_PROPS_NEGATIVE));
394e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window->Hide());
395e0dac50fSopenharmony_ci    ASSERT_FALSE(SystemBarPropsEqualsTo(TEST_PROPS_NEGATIVE));
396e0dac50fSopenharmony_ci}
397e0dac50fSopenharmony_ci
398e0dac50fSopenharmony_ci/**
399e0dac50fSopenharmony_ci * @tc.name: GetAvoidAreaByTypeTest01
400e0dac50fSopenharmony_ci * @tc.desc: Test GetAvoidArea use unsupported Type(TYPE_CUTOUT).
401e0dac50fSopenharmony_ci * @tc.type: FUNC
402e0dac50fSopenharmony_ci */
403e0dac50fSopenharmony_ciHWTEST_F(WindowImmersiveTest, GetAvoidAreaByTypeTest01, Function | MediumTest | Level3)
404e0dac50fSopenharmony_ci{
405e0dac50fSopenharmony_ci    // Add full screenwindow for call GetAvoidArea, and push_back in activeWindows_
406e0dac50fSopenharmony_ci    const sptr<Window>& win = Utils::CreateTestWindow(fullScreenAppinfo_);
407e0dac50fSopenharmony_ci    if (win == nullptr) {
408e0dac50fSopenharmony_ci        return;
409e0dac50fSopenharmony_ci    }
410e0dac50fSopenharmony_ci    activeWindows_.push_back(win);
411e0dac50fSopenharmony_ci
412e0dac50fSopenharmony_ci    // Test GetAvoidArea
413e0dac50fSopenharmony_ci    AvoidArea avoidarea;
414e0dac50fSopenharmony_ci    WMError ret = win->GetAvoidAreaByType(AvoidAreaType::TYPE_CUTOUT, avoidarea);
415e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, ret);
416e0dac50fSopenharmony_ci    ASSERT_TRUE(Utils::RectEqualToRect(EMPTY_RECT, avoidarea.leftRect_));
417e0dac50fSopenharmony_ci    ASSERT_TRUE(Utils::RectEqualToRect(EMPTY_RECT, avoidarea.rightRect_));
418e0dac50fSopenharmony_ci    ASSERT_TRUE(Utils::RectEqualToRect(EMPTY_RECT, avoidarea.topRect_));
419e0dac50fSopenharmony_ci    ASSERT_TRUE(Utils::RectEqualToRect(EMPTY_RECT, avoidarea.bottomRect_));
420e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, win->Hide());
421e0dac50fSopenharmony_ci}
422e0dac50fSopenharmony_ci
423e0dac50fSopenharmony_ci/**
424e0dac50fSopenharmony_ci * @tc.name: DockWindowTest01
425e0dac50fSopenharmony_ci * @tc.desc: Add unexistavoid and remove this avoid. Test OnAvoidAreaChanged listener
426e0dac50fSopenharmony_ci * @tc.type: FUNC
427e0dac50fSopenharmony_ci */
428e0dac50fSopenharmony_ciHWTEST_F(WindowImmersiveTest, DockWindowTest01, Function | MediumTest | Level3)
429e0dac50fSopenharmony_ci{
430e0dac50fSopenharmony_ci    const sptr<Window>& dockWindow = Utils::CreateDockWindow();
431e0dac50fSopenharmony_ci    if (dockWindow == nullptr) {
432e0dac50fSopenharmony_ci        return;
433e0dac50fSopenharmony_ci    }
434e0dac50fSopenharmony_ci
435e0dac50fSopenharmony_ci    if (WMError::WM_ERROR_INVALID_WINDOW == dockWindow->Show()) {
436e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, dockWindow->Show());
437e0dac50fSopenharmony_ci    } else if (WMError::WM_OK == dockWindow->Show()) {
438e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, dockWindow->Show());
439e0dac50fSopenharmony_ci    }
440e0dac50fSopenharmony_ci
441e0dac50fSopenharmony_ci    const sptr<Window>& window = Utils::CreateTestWindow(fullScreenAppinfo_);
442e0dac50fSopenharmony_ci    if (window == nullptr) {
443e0dac50fSopenharmony_ci        return;
444e0dac50fSopenharmony_ci    }
445e0dac50fSopenharmony_ci    usleep(WAIT_ASYNC_US);
446e0dac50fSopenharmony_ci    auto act = testSystemBarChangedListener_->tints_;
447e0dac50fSopenharmony_ci    for (SystemBarRegionTint tint : act) {
448e0dac50fSopenharmony_ci        if (tint.type_ == WindowType::WINDOW_TYPE_LAUNCHER_DOCK) {
449e0dac50fSopenharmony_ci            ASSERT_FALSE(tint.prop_.enable_);
450e0dac50fSopenharmony_ci        }
451e0dac50fSopenharmony_ci    }
452e0dac50fSopenharmony_ci
453e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, window->Hide());
454e0dac50fSopenharmony_ci
455e0dac50fSopenharmony_ci    usleep(WAIT_ASYNC_US);
456e0dac50fSopenharmony_ci    act = testSystemBarChangedListener_->tints_;
457e0dac50fSopenharmony_ci    for (SystemBarRegionTint tint : act) {
458e0dac50fSopenharmony_ci        if (tint.type_ == WindowType::WINDOW_TYPE_LAUNCHER_DOCK) {
459e0dac50fSopenharmony_ci            ASSERT_TRUE(tint.prop_.enable_);
460e0dac50fSopenharmony_ci        }
461e0dac50fSopenharmony_ci    }
462e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, dockWindow->Destroy());
463e0dac50fSopenharmony_ci}
464e0dac50fSopenharmony_ci}
465e0dac50fSopenharmony_ci} // namespace Rosen
466e0dac50fSopenharmony_ci} // namespace OHOS
467