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