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#include <gtest/gtest.h> 17e0dac50fSopenharmony_ci 18e0dac50fSopenharmony_ci#include "common_test_utils.h" 19e0dac50fSopenharmony_ci#include "display_test_utils.h" 20e0dac50fSopenharmony_ci#include "display_manager_proxy.h" 21e0dac50fSopenharmony_ci#include "future.h" 22e0dac50fSopenharmony_ci#include "screen.h" 23e0dac50fSopenharmony_ci#include "scene_board_judgement.h" 24e0dac50fSopenharmony_ci#include "surface_draw.h" 25e0dac50fSopenharmony_ci#include "virtual_screen_group_change_listener_future.h" 26e0dac50fSopenharmony_ci#include "window.h" 27e0dac50fSopenharmony_ci#include "window_option.h" 28e0dac50fSopenharmony_ci#include "window_manager_hilog.h" 29e0dac50fSopenharmony_ci 30e0dac50fSopenharmony_ciusing namespace testing; 31e0dac50fSopenharmony_ciusing namespace testing::ext; 32e0dac50fSopenharmony_ci 33e0dac50fSopenharmony_cinamespace OHOS { 34e0dac50fSopenharmony_cinamespace Rosen { 35e0dac50fSopenharmony_cinamespace { 36e0dac50fSopenharmony_ciconstexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_DISPLAY, "ScreenManagerTest"}; 37e0dac50fSopenharmony_ciconstexpr uint32_t COLOR_RED = 0xffff0000; 38e0dac50fSopenharmony_ci} 39e0dac50fSopenharmony_ciclass ScreenGroupChangeListener; 40e0dac50fSopenharmony_ciclass ScreenManagerTest : public testing::Test { 41e0dac50fSopenharmony_cipublic: 42e0dac50fSopenharmony_ci static void SetUpTestCase(); 43e0dac50fSopenharmony_ci static void TearDownTestCase(); 44e0dac50fSopenharmony_ci virtual void SetUp() override; 45e0dac50fSopenharmony_ci virtual void TearDown() override; 46e0dac50fSopenharmony_ci sptr<Window> CreateWindowByDisplayId(DisplayId displayId); 47e0dac50fSopenharmony_ci bool DrawWindowColor(const sptr<Window>& window, uint32_t color); 48e0dac50fSopenharmony_ci void CheckScreenStateInGroup(bool, sptr<ScreenGroup>, ScreenId, sptr<Screen>, ScreenId); 49e0dac50fSopenharmony_ci void CheckScreenGroupState(ScreenCombination, ScreenGroupChangeEvent event, ScreenId, 50e0dac50fSopenharmony_ci sptr<ScreenGroup>, sptr<ScreenGroupChangeListener>); 51e0dac50fSopenharmony_ci void CheckScreenGroupStateForMirror(ScreenGroupChangeEvent event, std::vector<ScreenId> mirrorIds, 52e0dac50fSopenharmony_ci sptr<VirtualScreenGroupChangeListenerFuture> virtualScreenGroupChangeListener); 53e0dac50fSopenharmony_ci void CheckStateDisplay(DisplayId displayId, ScreenId virtualScreenId); 54e0dac50fSopenharmony_ci static sptr<Display> defaultDisplay_; 55e0dac50fSopenharmony_ci static DisplayId defaultDisplayId_; 56e0dac50fSopenharmony_ci static ScreenId defaultScreenId_; 57e0dac50fSopenharmony_ci static std::string defaultName_; 58e0dac50fSopenharmony_ci static uint32_t defaultWidth_; 59e0dac50fSopenharmony_ci static uint32_t defaultHeight_; 60e0dac50fSopenharmony_ci static float defaultDensity_; 61e0dac50fSopenharmony_ci static int32_t defaultFlags_; 62e0dac50fSopenharmony_ci static VirtualScreenOption defaultOption_; 63e0dac50fSopenharmony_ci static uint32_t waitCount_; 64e0dac50fSopenharmony_ci const uint32_t sleepUs_ = 10 * 1000; 65e0dac50fSopenharmony_ci const uint32_t maxWaitCount_ = 20; 66e0dac50fSopenharmony_ci const uint32_t execTimes_ = 10; 67e0dac50fSopenharmony_ci const uint32_t acquireFrames_ = 1; 68e0dac50fSopenharmony_ci const uint32_t resizeScreenWidthTestOne_ = 1000; 69e0dac50fSopenharmony_ci const uint32_t resizeScreenHeightTestOne_ = 1000; 70e0dac50fSopenharmony_ci const uint32_t resizeScreenWidthTestTwo_ = 1; 71e0dac50fSopenharmony_ci const uint32_t resizeScreenHeightTestTwo_ = 1; 72e0dac50fSopenharmony_ci const uint32_t resizeScreenWidthTestThree_ = 720; 73e0dac50fSopenharmony_ci const uint32_t resizeScreenHeightTestThree_ = 1280; 74e0dac50fSopenharmony_ci const uint32_t refreshIntervalZero_ = 0; 75e0dac50fSopenharmony_ci const uint32_t refreshIntervalTwo_ = 2; 76e0dac50fSopenharmony_ci const uint32_t refreshIntervalMax_ = 10000; 77e0dac50fSopenharmony_ci static constexpr uint32_t TEST_SLEEP_S = 1; // test sleep time 78e0dac50fSopenharmony_ci static constexpr uint32_t TEST_SLEEP_S_LONG = 10; // test sleep for 10 seconds 79e0dac50fSopenharmony_ci static constexpr long TIME_OUT = 1000; 80e0dac50fSopenharmony_ci}; 81e0dac50fSopenharmony_ci 82e0dac50fSopenharmony_ciclass ScreenChangeListener : public ScreenManager::IScreenListener { 83e0dac50fSopenharmony_cipublic: 84e0dac50fSopenharmony_ci virtual void OnConnect(ScreenId screenId) override 85e0dac50fSopenharmony_ci { 86e0dac50fSopenharmony_ci WLOGI("OnConnect, screenId:%{public}" PRIu64"", screenId); 87e0dac50fSopenharmony_ci connectFuture_.SetValue(screenId); 88e0dac50fSopenharmony_ci } 89e0dac50fSopenharmony_ci virtual void OnDisconnect(ScreenId screenId) override 90e0dac50fSopenharmony_ci { 91e0dac50fSopenharmony_ci WLOGI("OnDisconnect, screenId:%{public}" PRIu64"", screenId); 92e0dac50fSopenharmony_ci disconnectFuture_.SetValue(screenId); 93e0dac50fSopenharmony_ci } 94e0dac50fSopenharmony_ci virtual void OnChange(ScreenId screenId) override 95e0dac50fSopenharmony_ci { 96e0dac50fSopenharmony_ci WLOGI("OnChange, screenId:%{public}" PRIu64"", screenId); 97e0dac50fSopenharmony_ci changeFuture_.SetValue(screenId); 98e0dac50fSopenharmony_ci } 99e0dac50fSopenharmony_ci RunnableFuture<ScreenId> connectFuture_; 100e0dac50fSopenharmony_ci RunnableFuture<ScreenId> disconnectFuture_; 101e0dac50fSopenharmony_ci RunnableFuture<ScreenId> changeFuture_; 102e0dac50fSopenharmony_ci}; 103e0dac50fSopenharmony_ci 104e0dac50fSopenharmony_ciclass ScreenGroupChangeListener : public ScreenManager::IScreenGroupListener { 105e0dac50fSopenharmony_cipublic: 106e0dac50fSopenharmony_ci virtual void OnChange(const std::vector<ScreenId>& screenIds, ScreenGroupChangeEvent event) override 107e0dac50fSopenharmony_ci { 108e0dac50fSopenharmony_ci for (auto screenId : screenIds) { 109e0dac50fSopenharmony_ci changeFuture_.SetValue(std::make_pair(screenId, event)); 110e0dac50fSopenharmony_ci usleep(10 * 1000); // wait 10000 us 111e0dac50fSopenharmony_ci } 112e0dac50fSopenharmony_ci } 113e0dac50fSopenharmony_ci RunnableFuture<std::pair<ScreenId, ScreenGroupChangeEvent>> changeFuture_; 114e0dac50fSopenharmony_ci}; 115e0dac50fSopenharmony_ci 116e0dac50fSopenharmony_cisptr<Display> ScreenManagerTest::defaultDisplay_ = nullptr; 117e0dac50fSopenharmony_ciDisplayId ScreenManagerTest::defaultDisplayId_ = DISPLAY_ID_INVALID; 118e0dac50fSopenharmony_ciScreenId ScreenManagerTest::defaultScreenId_ = INVALID_SCREEN_ID; 119e0dac50fSopenharmony_cistd::string ScreenManagerTest::defaultName_ = "virtualScreen01"; 120e0dac50fSopenharmony_ciuint32_t ScreenManagerTest::defaultWidth_ = 2560; 121e0dac50fSopenharmony_ciuint32_t ScreenManagerTest::defaultHeight_ = 1600; 122e0dac50fSopenharmony_cifloat ScreenManagerTest::defaultDensity_ = 2.0; 123e0dac50fSopenharmony_ciint32_t ScreenManagerTest::defaultFlags_ = 0; 124e0dac50fSopenharmony_ciVirtualScreenOption ScreenManagerTest::defaultOption_ = { 125e0dac50fSopenharmony_ci defaultName_, defaultWidth_, defaultHeight_, defaultDensity_, nullptr, defaultFlags_ 126e0dac50fSopenharmony_ci}; 127e0dac50fSopenharmony_ciuint32_t ScreenManagerTest::waitCount_ = 0; 128e0dac50fSopenharmony_ci 129e0dac50fSopenharmony_civoid ScreenManagerTest::SetUpTestCase() 130e0dac50fSopenharmony_ci{ 131e0dac50fSopenharmony_ci defaultDisplay_ = DisplayManager::GetInstance().GetDefaultDisplay(); 132e0dac50fSopenharmony_ci ASSERT_TRUE(defaultDisplay_); 133e0dac50fSopenharmony_ci defaultDisplayId_ = defaultDisplay_->GetId(); 134e0dac50fSopenharmony_ci defaultScreenId_ = defaultDisplay_->GetScreenId(); 135e0dac50fSopenharmony_ci defaultWidth_ = defaultDisplay_->GetWidth(); 136e0dac50fSopenharmony_ci defaultHeight_ = defaultDisplay_->GetHeight(); 137e0dac50fSopenharmony_ci defaultOption_.width_ = defaultWidth_; 138e0dac50fSopenharmony_ci defaultOption_.height_ = defaultHeight_; 139e0dac50fSopenharmony_ci 140e0dac50fSopenharmony_ci CommonTestUtils::InjectTokenInfoByHapName(0, "com.ohos.systemui", 0); 141e0dac50fSopenharmony_ci 142e0dac50fSopenharmony_ci const char** perms = new const char *[1]; 143e0dac50fSopenharmony_ci perms[0] = "ohos.permission.CAPTURE_SCREEN"; 144e0dac50fSopenharmony_ci CommonTestUtils::SetAceessTokenPermission("DisplayManagerServiceTest", perms, 1); 145e0dac50fSopenharmony_ci} 146e0dac50fSopenharmony_ci 147e0dac50fSopenharmony_civoid ScreenManagerTest::TearDownTestCase() 148e0dac50fSopenharmony_ci{ 149e0dac50fSopenharmony_ci} 150e0dac50fSopenharmony_ci 151e0dac50fSopenharmony_civoid ScreenManagerTest::SetUp() 152e0dac50fSopenharmony_ci{ 153e0dac50fSopenharmony_ci} 154e0dac50fSopenharmony_ci 155e0dac50fSopenharmony_civoid ScreenManagerTest::TearDown() 156e0dac50fSopenharmony_ci{ 157e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 158e0dac50fSopenharmony_ci} 159e0dac50fSopenharmony_ci 160e0dac50fSopenharmony_ci 161e0dac50fSopenharmony_cibool ScreenManagerTest::DrawWindowColor(const sptr<Window>& window, uint32_t color) 162e0dac50fSopenharmony_ci{ 163e0dac50fSopenharmony_ci auto surfaceNode = window->GetSurfaceNode(); 164e0dac50fSopenharmony_ci if (surfaceNode == nullptr) { 165e0dac50fSopenharmony_ci WLOGFE("Failed to GetSurfaceNode!"); 166e0dac50fSopenharmony_ci return false; 167e0dac50fSopenharmony_ci } 168e0dac50fSopenharmony_ci Rect rect = window->GetRequestRect(); 169e0dac50fSopenharmony_ci uint32_t windowWidth = rect.width_; 170e0dac50fSopenharmony_ci uint32_t windowHeight = rect.height_; 171e0dac50fSopenharmony_ci WLOGI("windowWidth: %{public}u, windowHeight: %{public}u", windowWidth, windowHeight); 172e0dac50fSopenharmony_ci SurfaceDraw::DrawColor(surfaceNode, windowWidth, windowHeight, color); 173e0dac50fSopenharmony_ci return true; 174e0dac50fSopenharmony_ci} 175e0dac50fSopenharmony_ci 176e0dac50fSopenharmony_cisptr<Window> ScreenManagerTest::CreateWindowByDisplayId(DisplayId displayId) 177e0dac50fSopenharmony_ci{ 178e0dac50fSopenharmony_ci sptr<WindowOption> option = new WindowOption(); 179e0dac50fSopenharmony_ci if (option == nullptr) { 180e0dac50fSopenharmony_ci return nullptr; 181e0dac50fSopenharmony_ci } 182e0dac50fSopenharmony_ci Rect displayRect = {0, 0, 640, 480}; 183e0dac50fSopenharmony_ci option->SetDisplayId(displayId); 184e0dac50fSopenharmony_ci option->SetWindowRect(displayRect); 185e0dac50fSopenharmony_ci option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW); 186e0dac50fSopenharmony_ci option->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING); 187e0dac50fSopenharmony_ci option->SetWindowName("VirtualWindow01"); 188e0dac50fSopenharmony_ci sptr<Window> window = Window::Create(option->GetWindowName(), option); 189e0dac50fSopenharmony_ci return window; 190e0dac50fSopenharmony_ci} 191e0dac50fSopenharmony_ci 192e0dac50fSopenharmony_civoid ScreenManagerTest::CheckStateDisplay(DisplayId virtualDisplayId, ScreenId virtualScreenId) 193e0dac50fSopenharmony_ci{ 194e0dac50fSopenharmony_ci const std::string rsCmd = "snapshot_display -i " + std::to_string(virtualDisplayId); 195e0dac50fSopenharmony_ci (void)system(rsCmd.c_str()); 196e0dac50fSopenharmony_ci 197e0dac50fSopenharmony_ci auto screen = ScreenManager::GetInstance().GetScreenById(virtualScreenId); 198e0dac50fSopenharmony_ci ASSERT_TRUE(screen); 199e0dac50fSopenharmony_ci auto display = DisplayManager::GetInstance().GetDisplayByScreen(virtualScreenId); 200e0dac50fSopenharmony_ci ASSERT_TRUE(display); 201e0dac50fSopenharmony_ci 202e0dac50fSopenharmony_ci uint32_t orientation = static_cast<uint32_t>(Orientation::VERTICAL); 203e0dac50fSopenharmony_ci uint32_t end = static_cast<uint32_t>(Orientation::REVERSE_HORIZONTAL); 204e0dac50fSopenharmony_ci sptr<ScreenChangeListener> screenListener = new ScreenChangeListener(); 205e0dac50fSopenharmony_ci ASSERT_TRUE(screenListener); 206e0dac50fSopenharmony_ci 207e0dac50fSopenharmony_ci for (; orientation <= end; ++orientation) { 208e0dac50fSopenharmony_ci screen->SetOrientation(static_cast<Orientation>(orientation)); 209e0dac50fSopenharmony_ci screenListener->changeFuture_.GetResult(TIME_OUT); 210e0dac50fSopenharmony_ci usleep(1E6); 211e0dac50fSopenharmony_ci ASSERT_EQ(static_cast<uint32_t>(screen->GetOrientation()), orientation); 212e0dac50fSopenharmony_ci ASSERT_EQ(static_cast<uint32_t>(display->GetOrientation()), orientation); 213e0dac50fSopenharmony_ci (void)system(rsCmd.c_str()); 214e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 215e0dac50fSopenharmony_ci } 216e0dac50fSopenharmony_ci screen->SetOrientation(Orientation::UNSPECIFIED); 217e0dac50fSopenharmony_ci ASSERT_EQ(static_cast<uint32_t>(screen->GetOrientation()), static_cast<uint32_t>(Orientation::UNSPECIFIED)); 218e0dac50fSopenharmony_ci ASSERT_EQ(static_cast<uint32_t>(display->GetOrientation()), static_cast<uint32_t>(Orientation::UNSPECIFIED)); 219e0dac50fSopenharmony_ci} 220e0dac50fSopenharmony_ci 221e0dac50fSopenharmony_ci#define CHECK_TEST_INIT_SCREEN_STATE \ 222e0dac50fSopenharmony_ci std::vector<sptr<Screen>> allScreens; \ 223e0dac50fSopenharmony_ci ScreenManager::GetInstance().GetAllScreens(allScreens); \ 224e0dac50fSopenharmony_ci ASSERT_LT(0, allScreens.size()); \ 225e0dac50fSopenharmony_ci ScreenId groupId = SCREEN_ID_INVALID; \ 226e0dac50fSopenharmony_ci for (auto screen : allScreens) { \ 227e0dac50fSopenharmony_ci if (screen->IsGroup()) { \ 228e0dac50fSopenharmony_ci groupId = screen->GetId(); \ 229e0dac50fSopenharmony_ci if (screen->GetParentId() == SCREEN_ID_INVALID) { \ 230e0dac50fSopenharmony_ci ASSERT_EQ(SCREEN_ID_INVALID, screen->GetParentId()); \ 231e0dac50fSopenharmony_ci } \ 232e0dac50fSopenharmony_ci } \ 233e0dac50fSopenharmony_ci } \ 234e0dac50fSopenharmony_ci if (SCREEN_ID_INVALID != groupId) { \ 235e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, groupId); \ 236e0dac50fSopenharmony_ci } \ 237e0dac50fSopenharmony_ci auto group = ScreenManager::GetInstance().GetScreenGroup(groupId); \ 238e0dac50fSopenharmony_ci if (group != nullptr) { \ 239e0dac50fSopenharmony_ci if (groupId == group->GetId()) { \ 240e0dac50fSopenharmony_ci ASSERT_EQ(groupId, group->GetId()); \ 241e0dac50fSopenharmony_ci } \ 242e0dac50fSopenharmony_ci ASSERT_NE(nullptr, group); \ 243e0dac50fSopenharmony_ci } \ 244e0dac50fSopenharmony_ci sptr<ScreenChangeListener> screenListener = new ScreenChangeListener(); \ 245e0dac50fSopenharmony_ci sptr<ScreenGroupChangeListener> screenGroupChangeListener = new ScreenGroupChangeListener(); \ 246e0dac50fSopenharmony_ci sptr<VirtualScreenGroupChangeListenerFuture> virtualScreenGroupChangeListener \ 247e0dac50fSopenharmony_ci = new VirtualScreenGroupChangeListenerFuture(); \ 248e0dac50fSopenharmony_ci ScreenManager::GetInstance().RegisterScreenListener(screenListener); \ 249e0dac50fSopenharmony_ci ScreenManager::GetInstance().RegisterScreenGroupListener(screenGroupChangeListener); \ 250e0dac50fSopenharmony_ci ScreenManager::GetInstance().RegisterVirtualScreenGroupListener(virtualScreenGroupChangeListener); \ 251e0dac50fSopenharmony_ci 252e0dac50fSopenharmony_ci#define CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN \ 253e0dac50fSopenharmony_ci auto virtualScreen = ScreenManager::GetInstance().GetScreenById(virtualScreenId); \ 254e0dac50fSopenharmony_ci ASSERT_NE(nullptr, virtualScreen); \ 255e0dac50fSopenharmony_ci ASSERT_EQ(virtualScreenId, virtualScreen->GetId()); \ 256e0dac50fSopenharmony_ci ScreenId screenId = screenListener->connectFuture_.GetResult(TIME_OUT); \ 257e0dac50fSopenharmony_ci screenListener->connectFuture_.Reset(SCREEN_ID_INVALID); \ 258e0dac50fSopenharmony_ci ASSERT_EQ(virtualScreenId, screenId); \ 259e0dac50fSopenharmony_ci 260e0dac50fSopenharmony_civoid ScreenManagerTest::CheckScreenStateInGroup( 261e0dac50fSopenharmony_ci bool isInGroup, sptr<ScreenGroup> group, ScreenId groupId, sptr<Screen> virtualScreen, ScreenId virtualScreenId) 262e0dac50fSopenharmony_ci{ 263e0dac50fSopenharmony_ci if (group == nullptr) { 264e0dac50fSopenharmony_ci GTEST_LOG_(INFO) << "group is nullptr"; 265e0dac50fSopenharmony_ci return; 266e0dac50fSopenharmony_ci } 267e0dac50fSopenharmony_ci auto childIds = group->GetChildIds(); 268e0dac50fSopenharmony_ci ASSERT_LT(0, childIds.size()); 269e0dac50fSopenharmony_ci auto iter = std::find(childIds.begin(), childIds.end(), virtualScreenId); 270e0dac50fSopenharmony_ci if (isInGroup) { 271e0dac50fSopenharmony_ci ASSERT_EQ(groupId, virtualScreen->GetParentId()); 272e0dac50fSopenharmony_ci } else { 273e0dac50fSopenharmony_ci if (virtualScreen->GetParentId() == SCREEN_ID_INVALID) { 274e0dac50fSopenharmony_ci ASSERT_EQ(SCREEN_ID_INVALID, virtualScreen->GetParentId()); 275e0dac50fSopenharmony_ci } 276e0dac50fSopenharmony_ci } 277e0dac50fSopenharmony_ci if (isInGroup) { 278e0dac50fSopenharmony_ci if (childIds.end() != iter) { 279e0dac50fSopenharmony_ci ASSERT_NE(childIds.end(), iter); 280e0dac50fSopenharmony_ci } 281e0dac50fSopenharmony_ci } else { 282e0dac50fSopenharmony_ci if (childIds.end() == iter) { 283e0dac50fSopenharmony_ci ASSERT_EQ(childIds.end(), iter); 284e0dac50fSopenharmony_ci } 285e0dac50fSopenharmony_ci } 286e0dac50fSopenharmony_ci} 287e0dac50fSopenharmony_ci 288e0dac50fSopenharmony_civoid ScreenManagerTest::CheckScreenGroupState(ScreenCombination combination, ScreenGroupChangeEvent event, 289e0dac50fSopenharmony_ci ScreenId virtualScreenId, sptr<ScreenGroup> group, sptr<ScreenGroupChangeListener> screenGroupChangeListener) 290e0dac50fSopenharmony_ci{ 291e0dac50fSopenharmony_ci if (group == nullptr) { 292e0dac50fSopenharmony_ci GTEST_LOG_(INFO) << "group is nullptr"; 293e0dac50fSopenharmony_ci return; 294e0dac50fSopenharmony_ci } 295e0dac50fSopenharmony_ci auto pair = screenGroupChangeListener->changeFuture_.GetResult(TIME_OUT); 296e0dac50fSopenharmony_ci screenGroupChangeListener->changeFuture_.Reset( 297e0dac50fSopenharmony_ci std::make_pair(SCREEN_ID_INVALID, ScreenGroupChangeEvent::REMOVE_FROM_GROUP)); 298e0dac50fSopenharmony_ci if (virtualScreenId == pair.first) { 299e0dac50fSopenharmony_ci ASSERT_EQ(virtualScreenId, pair.first); 300e0dac50fSopenharmony_ci } 301e0dac50fSopenharmony_ci if (pair.second == event) { 302e0dac50fSopenharmony_ci ASSERT_EQ(event, pair.second); 303e0dac50fSopenharmony_ci } 304e0dac50fSopenharmony_ci if (combination == group->GetCombination()) { 305e0dac50fSopenharmony_ci ASSERT_EQ(combination, group->GetCombination()); 306e0dac50fSopenharmony_ci } 307e0dac50fSopenharmony_ci} 308e0dac50fSopenharmony_ci 309e0dac50fSopenharmony_civoid ScreenManagerTest::CheckScreenGroupStateForMirror(ScreenGroupChangeEvent event, std::vector<ScreenId> mirrorIds, 310e0dac50fSopenharmony_ci sptr<VirtualScreenGroupChangeListenerFuture> virtualScreenGroupChangeListener) 311e0dac50fSopenharmony_ci{ 312e0dac50fSopenharmony_ci auto info = virtualScreenGroupChangeListener->mirrorChangeFuture_.GetResult(TIME_OUT); 313e0dac50fSopenharmony_ci virtualScreenGroupChangeListener->mirrorChangeFuture_.Reset({ScreenGroupChangeEvent::CHANGE_GROUP, "", {}}); 314e0dac50fSopenharmony_ci ASSERT_EQ(info.event, event); 315e0dac50fSopenharmony_ci ASSERT_EQ(info.ids, mirrorIds); 316e0dac50fSopenharmony_ci ASSERT_GE(info.trigger.size(), 0UL); 317e0dac50fSopenharmony_ci} 318e0dac50fSopenharmony_ci 319e0dac50fSopenharmony_ci#define CHECK_SCREEN_STATE_AFTER_DESTROY_VIRTUAL_SCREEN \ 320e0dac50fSopenharmony_ci { \ 321e0dac50fSopenharmony_ci auto screenId = screenListener->disconnectFuture_.GetResult(TIME_OUT); \ 322e0dac50fSopenharmony_ci screenListener->disconnectFuture_.Reset(SCREEN_ID_INVALID); \ 323e0dac50fSopenharmony_ci if (virtualScreenId == screenId) { \ 324e0dac50fSopenharmony_ci ASSERT_EQ(virtualScreenId, screenId); \ 325e0dac50fSopenharmony_ci } \ 326e0dac50fSopenharmony_ci } 327e0dac50fSopenharmony_ci 328e0dac50fSopenharmony_cinamespace { 329e0dac50fSopenharmony_ci/** 330e0dac50fSopenharmony_ci * @tc.name: ScreenManager01 331e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and destroy it 332e0dac50fSopenharmony_ci * @tc.type: FUNC 333e0dac50fSopenharmony_ci */ 334e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager01, Function | MediumTest | Level2) 335e0dac50fSopenharmony_ci{ 336e0dac50fSopenharmony_ci DisplayTestUtils utils; 337e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 338e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 339e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 340e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 341e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 342e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, virtualScreenId); 343e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 344e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 345e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 346e0dac50fSopenharmony_ci} 347e0dac50fSopenharmony_ci 348e0dac50fSopenharmony_ci/** 349e0dac50fSopenharmony_ci * @tc.name: ScreenManager02 350e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen as mirror of default screen, and destroy virtual screen 351e0dac50fSopenharmony_ci * @tc.type: FUNC 352e0dac50fSopenharmony_ci */ 353e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager02, Function | MediumTest | Level2) 354e0dac50fSopenharmony_ci{ 355e0dac50fSopenharmony_ci DisplayTestUtils utils; 356e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 357e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 358e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 359e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 360e0dac50fSopenharmony_ci ScreenId screenGroupId; 361e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 362e0dac50fSopenharmony_ci std::vector<ScreenId> mirrorIds; 363e0dac50fSopenharmony_ci mirrorIds.push_back(virtualScreenId); 364e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeMirror(defaultScreenId_, mirrorIds, screenGroupId); 365e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 366e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, virtualScreenId); 367e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 368e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 369e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 370e0dac50fSopenharmony_ci} 371e0dac50fSopenharmony_ci 372e0dac50fSopenharmony_ci/** 373e0dac50fSopenharmony_ci * @tc.name: ScreenManager03 374e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and destroy it for 10 times 375e0dac50fSopenharmony_ci * @tc.type: FUNC 376e0dac50fSopenharmony_ci */ 377e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager03, Function | MediumTest | Level2) 378e0dac50fSopenharmony_ci{ 379e0dac50fSopenharmony_ci DisplayTestUtils utils; 380e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 381e0dac50fSopenharmony_ci for (uint32_t i = 0; i < execTimes_; i++) { 382e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 383e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 384e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 385e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 386e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, virtualScreenId); 387e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId)); 388e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 389e0dac50fSopenharmony_ci } 390e0dac50fSopenharmony_ci} 391e0dac50fSopenharmony_ci 392e0dac50fSopenharmony_ci/** 393e0dac50fSopenharmony_ci * @tc.name: ScreenManager04 394e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen as mirror of default screen, and destroy virtual screen for 10 times 395e0dac50fSopenharmony_ci * @tc.type: FUNC 396e0dac50fSopenharmony_ci */ 397e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager04, Function | MediumTest | Level2) 398e0dac50fSopenharmony_ci{ 399e0dac50fSopenharmony_ci DisplayTestUtils utils; 400e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 401e0dac50fSopenharmony_ci for (uint32_t i = 0; i < execTimes_; i++) { 402e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 403e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 404e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 405e0dac50fSopenharmony_ci ScreenId screenGroupId; 406e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 407e0dac50fSopenharmony_ci std::vector<ScreenId> mirrorIds; 408e0dac50fSopenharmony_ci mirrorIds.push_back(virtualScreenId); 409e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeMirror(defaultScreenId_, mirrorIds, screenGroupId); 410e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 411e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, virtualScreenId); 412e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 413e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 414e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 415e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 416e0dac50fSopenharmony_ci } 417e0dac50fSopenharmony_ci} 418e0dac50fSopenharmony_ci 419e0dac50fSopenharmony_ci/** 420e0dac50fSopenharmony_ci * @tc.name: ScreenManager05 421e0dac50fSopenharmony_ci * @tc.desc: Compare the length and width for recording screen 422e0dac50fSopenharmony_ci * @tc.type: FUNC 423e0dac50fSopenharmony_ci */ 424e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager05, Function | MediumTest | Level2) 425e0dac50fSopenharmony_ci{ 426e0dac50fSopenharmony_ci DisplayTestUtils utils; 427e0dac50fSopenharmony_ci utils.SetDefaultWH(defaultDisplay_); 428e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 429e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 430e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 431e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 432e0dac50fSopenharmony_ci ScreenId screenGroupId; 433e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 434e0dac50fSopenharmony_ci 435e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, virtualScreenId); 436e0dac50fSopenharmony_ci uint32_t lastCount = -1u; 437e0dac50fSopenharmony_ci std::vector<ScreenId> mirrorIds; 438e0dac50fSopenharmony_ci mirrorIds.push_back(virtualScreenId); 439e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeMirror(defaultScreenId_, mirrorIds, screenGroupId); 440e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 441e0dac50fSopenharmony_ci 442e0dac50fSopenharmony_ci while (utils.successCount_ < acquireFrames_ && waitCount_ <= maxWaitCount_) { 443e0dac50fSopenharmony_ci if (lastCount != utils.successCount_) { 444e0dac50fSopenharmony_ci lastCount = utils.successCount_; 445e0dac50fSopenharmony_ci } 446e0dac50fSopenharmony_ci ASSERT_EQ(0, utils.failCount_); 447e0dac50fSopenharmony_ci waitCount_++; 448e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 449e0dac50fSopenharmony_ci } 450e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 451e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 452e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 453e0dac50fSopenharmony_ci ASSERT_GT(utils.successCount_, 0); 454e0dac50fSopenharmony_ci ASSERT_GT(maxWaitCount_, waitCount_); 455e0dac50fSopenharmony_ci waitCount_ = 0; 456e0dac50fSopenharmony_ci} 457e0dac50fSopenharmony_ci 458e0dac50fSopenharmony_ci/** 459e0dac50fSopenharmony_ci * @tc.name: ScreenManager06 460e0dac50fSopenharmony_ci * @tc.desc: Compare the length and width for recording screen, set VirtualScreen Surface before make mirror. 461e0dac50fSopenharmony_ci * @tc.type: FUNC 462e0dac50fSopenharmony_ci */ 463e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager06, Function | MediumTest | Level2) 464e0dac50fSopenharmony_ci{ 465e0dac50fSopenharmony_ci DisplayTestUtils utils; 466e0dac50fSopenharmony_ci utils.SetDefaultWH(defaultDisplay_); 467e0dac50fSopenharmony_ci defaultOption_.surface_ = nullptr; 468e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 469e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 470e0dac50fSopenharmony_ci ScreenId screenGroupId; 471e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 472e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, virtualScreenId); 473e0dac50fSopenharmony_ci 474e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 475e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, ScreenManager::GetInstance().SetVirtualScreenSurface(virtualScreenId, utils.psurface_)); 476e0dac50fSopenharmony_ci 477e0dac50fSopenharmony_ci uint32_t lastCount = -1u; 478e0dac50fSopenharmony_ci std::vector<ScreenId> mirrorIds; 479e0dac50fSopenharmony_ci mirrorIds.push_back(virtualScreenId); 480e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeMirror(defaultScreenId_, mirrorIds, screenGroupId); 481e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 482e0dac50fSopenharmony_ci 483e0dac50fSopenharmony_ci while (utils.successCount_ < acquireFrames_ && waitCount_ <= maxWaitCount_) { 484e0dac50fSopenharmony_ci if (lastCount != utils.successCount_) { 485e0dac50fSopenharmony_ci lastCount = utils.successCount_; 486e0dac50fSopenharmony_ci } 487e0dac50fSopenharmony_ci ASSERT_EQ(0, utils.failCount_); 488e0dac50fSopenharmony_ci waitCount_++; 489e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 490e0dac50fSopenharmony_ci } 491e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 492e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 493e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 494e0dac50fSopenharmony_ci ASSERT_GT(utils.successCount_, 0); 495e0dac50fSopenharmony_ci ASSERT_GT(maxWaitCount_, waitCount_); 496e0dac50fSopenharmony_ci waitCount_ = 0; 497e0dac50fSopenharmony_ci} 498e0dac50fSopenharmony_ci 499e0dac50fSopenharmony_ci/** 500e0dac50fSopenharmony_ci * @tc.name: ScreenManager07 501e0dac50fSopenharmony_ci * @tc.desc: Get and set screenMode 502e0dac50fSopenharmony_ci * @tc.type: FUNC 503e0dac50fSopenharmony_ci */ 504e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager07, Function | MediumTest | Level2) 505e0dac50fSopenharmony_ci{ 506e0dac50fSopenharmony_ci sptr<Screen> screen = ScreenManager::GetInstance().GetScreenById(defaultScreenId_); 507e0dac50fSopenharmony_ci ASSERT_TRUE(screen); 508e0dac50fSopenharmony_ci auto modes = screen->GetSupportedModes(); 509e0dac50fSopenharmony_ci auto defaultModeId = screen->GetModeId(); 510e0dac50fSopenharmony_ci ASSERT_GT(modes.size(), 0); 511e0dac50fSopenharmony_ci for (uint32_t modeIdx = 0; modeIdx < modes.size(); modeIdx++) { 512e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, screen->SetScreenActiveMode(modeIdx)); 513e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 514e0dac50fSopenharmony_ci ASSERT_EQ(modeIdx, screen->GetModeId()); 515e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 516e0dac50fSopenharmony_ci } 517e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, screen->SetScreenActiveMode(defaultModeId)); 518e0dac50fSopenharmony_ci} 519e0dac50fSopenharmony_ci 520e0dac50fSopenharmony_ci/** 521e0dac50fSopenharmony_ci * @tc.name: ScreenManager08 522e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen as expansion of default screen, and destroy virtual screen 523e0dac50fSopenharmony_ci * @tc.type: FUNC 524e0dac50fSopenharmony_ci */ 525e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager08, Function | MediumTest | Level2) 526e0dac50fSopenharmony_ci{ 527e0dac50fSopenharmony_ci DisplayTestUtils utils; 528e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 529e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 530e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 531e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 532e0dac50fSopenharmony_ci if (group == nullptr) { 533e0dac50fSopenharmony_ci return; 534e0dac50fSopenharmony_ci } 535e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 536e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 537e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 538e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 539e0dac50fSopenharmony_ci std::vector<sptr<Screen>> screens; 540e0dac50fSopenharmony_ci ScreenManager::GetInstance().GetAllScreens(screens); 541e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 542e0dac50fSopenharmony_ci sptr<Screen> defaultScreen = screens.front(); 543e0dac50fSopenharmony_ci ASSERT_TRUE(defaultScreen); 544e0dac50fSopenharmony_ci std::vector<ExpandOption> options = {{defaultScreen->GetId(), 0, 0}, {virtualScreenId, defaultWidth_, 0}}; 545e0dac50fSopenharmony_ci ScreenId expansionGroup; 546e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeExpand(options, expansionGroup); 547e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 548e0dac50fSopenharmony_ci if (SCREEN_ID_INVALID != expansionGroup) { 549e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, expansionGroup); 550e0dac50fSopenharmony_ci } 551e0dac50fSopenharmony_ci 552e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::ADD_TO_GROUP, 553e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 554e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 555e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 556e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 557e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 558e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_DESTROY_VIRTUAL_SCREEN 559e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::REMOVE_FROM_GROUP, 560e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 561e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 562e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 563e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenGroupListener(screenGroupChangeListener); 564e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterVirtualScreenGroupListener(virtualScreenGroupChangeListener); 565e0dac50fSopenharmony_ci} 566e0dac50fSopenharmony_ci 567e0dac50fSopenharmony_ci/** 568e0dac50fSopenharmony_ci * @tc.name: ScreenManager09 569e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen as expansion of default screen, create windowNode on virtual screen, 570e0dac50fSopenharmony_ci * and destroy virtual screen 571e0dac50fSopenharmony_ci * @tc.type: FUNC 572e0dac50fSopenharmony_ci */ 573e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager09, Function | MediumTest | Level2) 574e0dac50fSopenharmony_ci{ 575e0dac50fSopenharmony_ci (void)system("param set rosen.uni.partialrender.enabled 0"); 576e0dac50fSopenharmony_ci 577e0dac50fSopenharmony_ci DisplayTestUtils utils; 578e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 579e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 580e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 581e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 582e0dac50fSopenharmony_ci if (group == nullptr) { 583e0dac50fSopenharmony_ci return; 584e0dac50fSopenharmony_ci } 585e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 586e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 587e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 588e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 589e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 590e0dac50fSopenharmony_ci std::vector<ExpandOption> options = {{defaultScreenId_, 0, 0}, {virtualScreenId, defaultWidth_, 0}}; 591e0dac50fSopenharmony_ci ScreenId expansionId; 592e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeExpand(options, expansionId); 593e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 594e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::ADD_TO_GROUP, 595e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 596e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 597e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 598e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, expansionId); 599e0dac50fSopenharmony_ci DisplayId virtualDisplayId = DisplayManager::GetInstance().GetDisplayByScreen(virtualScreenId)->GetId(); 600e0dac50fSopenharmony_ci ASSERT_NE(DISPLAY_ID_INVALID, virtualDisplayId); 601e0dac50fSopenharmony_ci sptr<Window> window = CreateWindowByDisplayId(virtualDisplayId); 602e0dac50fSopenharmony_ci if (window == nullptr) { 603e0dac50fSopenharmony_ci return; 604e0dac50fSopenharmony_ci } 605e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window); 606e0dac50fSopenharmony_ci ASSERT_EQ(true, DrawWindowColor(window, COLOR_RED)); 607e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 608e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 609e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 610e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 611e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_DESTROY_VIRTUAL_SCREEN 612e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::REMOVE_FROM_GROUP, 613e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 614e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 615e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 616e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenGroupListener(screenGroupChangeListener); 617e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterVirtualScreenGroupListener(virtualScreenGroupChangeListener); 618e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 619e0dac50fSopenharmony_ci window->Show(); 620e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S_LONG); 621e0dac50fSopenharmony_ci window->Destroy(); 622e0dac50fSopenharmony_ci 623e0dac50fSopenharmony_ci (void)system("param set rosen.uni.partialrender.enabled 4"); 624e0dac50fSopenharmony_ci} 625e0dac50fSopenharmony_ci 626e0dac50fSopenharmony_ci/** 627e0dac50fSopenharmony_ci * @tc.name: ScreenManager10 628e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and destroy it for 10 times, it's not for shot. 629e0dac50fSopenharmony_ci * @tc.type: FUNC 630e0dac50fSopenharmony_ci */ 631e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager10, Function | MediumTest | Level2) 632e0dac50fSopenharmony_ci{ 633e0dac50fSopenharmony_ci DisplayTestUtils utils; 634e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 635e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 636e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 637e0dac50fSopenharmony_ci for (uint32_t i = 0; i < execTimes_; i++) { 638e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 639e0dac50fSopenharmony_ci if (group == nullptr) { 640e0dac50fSopenharmony_ci return; 641e0dac50fSopenharmony_ci } 642e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 643e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 644e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 645e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 646e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 647e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 648e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 649e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_DESTROY_VIRTUAL_SCREEN 650e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 651e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 652e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 653e0dac50fSopenharmony_ci } 654e0dac50fSopenharmony_ci} 655e0dac50fSopenharmony_ci 656e0dac50fSopenharmony_ci/** 657e0dac50fSopenharmony_ci * @tc.name: ScreenManager11 658e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen , mirror and destroy it for 10 times, it's not for shot. 659e0dac50fSopenharmony_ci * @tc.type: FUNC 660e0dac50fSopenharmony_ci * @tc.require: issueI5M2SK 661e0dac50fSopenharmony_ci */ 662e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager11, Function | MediumTest | Level2) 663e0dac50fSopenharmony_ci{ 664e0dac50fSopenharmony_ci DisplayTestUtils utils; 665e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 666e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 667e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 668e0dac50fSopenharmony_ci for (uint32_t i = 0; i < 10; i++) { 669e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 670e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 671e0dac50fSopenharmony_ci if (group == nullptr) { 672e0dac50fSopenharmony_ci return; 673e0dac50fSopenharmony_ci } 674e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 675e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 676e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 677e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 678e0dac50fSopenharmony_ci 679e0dac50fSopenharmony_ci std::vector<ScreenId> mirrorIds; 680e0dac50fSopenharmony_ci mirrorIds.push_back(virtualScreenId); 681e0dac50fSopenharmony_ci ScreenId mirrorGroup; 682e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeMirror(defaultScreenId_, mirrorIds, mirrorGroup); 683e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 684e0dac50fSopenharmony_ci ASSERT_EQ(mirrorGroup, groupId); 685e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_MIRROR, ScreenGroupChangeEvent::ADD_TO_GROUP, 686e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 687e0dac50fSopenharmony_ci CheckScreenGroupStateForMirror(ScreenGroupChangeEvent::ADD_TO_GROUP, mirrorIds, 688e0dac50fSopenharmony_ci virtualScreenGroupChangeListener); 689e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 690e0dac50fSopenharmony_ci 691e0dac50fSopenharmony_ci auto screen = ScreenManager::GetInstance().GetScreenById(virtualScreenId); 692e0dac50fSopenharmony_ci ASSERT_TRUE(screen); 693e0dac50fSopenharmony_ci ASSERT_EQ(virtualScreenId, screen->GetId()); 694e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, screen->GetParentId()); 695e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 696e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 697e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 698e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_DESTROY_VIRTUAL_SCREEN 699e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_MIRROR, ScreenGroupChangeEvent::REMOVE_FROM_GROUP, 700e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 701e0dac50fSopenharmony_ci CheckScreenGroupStateForMirror(ScreenGroupChangeEvent::REMOVE_FROM_GROUP, mirrorIds, 702e0dac50fSopenharmony_ci virtualScreenGroupChangeListener); 703e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 704e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 705e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenGroupListener(screenGroupChangeListener); 706e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterVirtualScreenGroupListener(virtualScreenGroupChangeListener); 707e0dac50fSopenharmony_ci } 708e0dac50fSopenharmony_ci} 709e0dac50fSopenharmony_ci 710e0dac50fSopenharmony_ci/** 711e0dac50fSopenharmony_ci * @tc.name: ScreenManager12 712e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen as expansion of default screen cancel Make mirror, and destroy virtual screen 713e0dac50fSopenharmony_ci * @tc.type: FUNC 714e0dac50fSopenharmony_ci * @tc.require: issueI5M2SK 715e0dac50fSopenharmony_ci */ 716e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager12, Function | MediumTest | Level2) 717e0dac50fSopenharmony_ci{ 718e0dac50fSopenharmony_ci DisplayTestUtils utils; 719e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 720e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 721e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 722e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 723e0dac50fSopenharmony_ci if (group == nullptr) { 724e0dac50fSopenharmony_ci return; 725e0dac50fSopenharmony_ci } 726e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 727e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 728e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 729e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 730e0dac50fSopenharmony_ci 731e0dac50fSopenharmony_ci std::vector<ScreenId> mirrorIds; 732e0dac50fSopenharmony_ci mirrorIds.push_back(virtualScreenId); 733e0dac50fSopenharmony_ci ScreenId mirrorGroup; 734e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeMirror(defaultScreenId_, mirrorIds, mirrorGroup); 735e0dac50fSopenharmony_ci ASSERT_EQ(mirrorGroup, groupId); 736e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_MIRROR, ScreenGroupChangeEvent::ADD_TO_GROUP, 737e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 738e0dac50fSopenharmony_ci CheckScreenGroupStateForMirror(ScreenGroupChangeEvent::ADD_TO_GROUP, mirrorIds, 739e0dac50fSopenharmony_ci virtualScreenGroupChangeListener); 740e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 741e0dac50fSopenharmony_ci 742e0dac50fSopenharmony_ci ScreenManager::GetInstance().RemoveVirtualScreenFromGroup(mirrorIds); 743e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_MIRROR, ScreenGroupChangeEvent::REMOVE_FROM_GROUP, 744e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 745e0dac50fSopenharmony_ci CheckScreenGroupStateForMirror(ScreenGroupChangeEvent::REMOVE_FROM_GROUP, mirrorIds, 746e0dac50fSopenharmony_ci virtualScreenGroupChangeListener); 747e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 748e0dac50fSopenharmony_ci 749e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 750e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 751e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 752e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_DESTROY_VIRTUAL_SCREEN 753e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 754e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 755e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenGroupListener(screenGroupChangeListener); 756e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterVirtualScreenGroupListener(virtualScreenGroupChangeListener); 757e0dac50fSopenharmony_ci} 758e0dac50fSopenharmony_ci 759e0dac50fSopenharmony_ci/** 760e0dac50fSopenharmony_ci * @tc.name: ScreenManager13 761e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen as expansion of default screen cancel MakeExpand, and destroy virtual screen 762e0dac50fSopenharmony_ci * @tc.type: FUNC 763e0dac50fSopenharmony_ci */ 764e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager13, Function | MediumTest | Level2) 765e0dac50fSopenharmony_ci{ 766e0dac50fSopenharmony_ci DisplayTestUtils utils; 767e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 768e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 769e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 770e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 771e0dac50fSopenharmony_ci if (group == nullptr) { 772e0dac50fSopenharmony_ci return; 773e0dac50fSopenharmony_ci } 774e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 775e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 776e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 777e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 778e0dac50fSopenharmony_ci 779e0dac50fSopenharmony_ci std::vector<sptr<Screen>> screens; 780e0dac50fSopenharmony_ci ScreenManager::GetInstance().GetAllScreens(screens); 781e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 782e0dac50fSopenharmony_ci sptr<Screen> defaultScreen = screens.front(); 783e0dac50fSopenharmony_ci ASSERT_TRUE(defaultScreen); 784e0dac50fSopenharmony_ci std::vector<ExpandOption> options = {{defaultScreen->GetId(), 0, 0}, {virtualScreenId, defaultWidth_, 0}}; 785e0dac50fSopenharmony_ci ScreenId expansionGroup; 786e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeExpand(options, expansionGroup); 787e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 788e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, expansionGroup); 789e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::ADD_TO_GROUP, 790e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 791e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 792e0dac50fSopenharmony_ci 793e0dac50fSopenharmony_ci std::vector<ScreenId> cancelScreens; 794e0dac50fSopenharmony_ci cancelScreens.emplace_back(virtualScreenId); 795e0dac50fSopenharmony_ci ScreenManager::GetInstance().RemoveVirtualScreenFromGroup(cancelScreens); 796e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::REMOVE_FROM_GROUP, 797e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 798e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 799e0dac50fSopenharmony_ci 800e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 801e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 802e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 803e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_DESTROY_VIRTUAL_SCREEN 804e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 805e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 806e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenGroupListener(screenGroupChangeListener); 807e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterVirtualScreenGroupListener(virtualScreenGroupChangeListener); 808e0dac50fSopenharmony_ci} 809e0dac50fSopenharmony_ci 810e0dac50fSopenharmony_ci/** 811e0dac50fSopenharmony_ci * @tc.name: ScreenManager14 812e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen, make expand to make mirror, and destroy virtual screen 813e0dac50fSopenharmony_ci * @tc.type: FUNC 814e0dac50fSopenharmony_ci */ 815e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager14, Function | MediumTest | Level2) 816e0dac50fSopenharmony_ci{ 817e0dac50fSopenharmony_ci DisplayTestUtils utils; 818e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 819e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 820e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 821e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 822e0dac50fSopenharmony_ci if (group == nullptr) { 823e0dac50fSopenharmony_ci return; 824e0dac50fSopenharmony_ci } 825e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 826e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 827e0dac50fSopenharmony_ci 828e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 829e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 830e0dac50fSopenharmony_ci 831e0dac50fSopenharmony_ci std::vector<sptr<Screen>> screens; 832e0dac50fSopenharmony_ci ScreenManager::GetInstance().GetAllScreens(screens); 833e0dac50fSopenharmony_ci sptr<Screen> defaultScreen = screens.front(); 834e0dac50fSopenharmony_ci ASSERT_TRUE(defaultScreen); 835e0dac50fSopenharmony_ci std::vector<ExpandOption> options = {{defaultScreen->GetId(), 0, 0}, {virtualScreenId, defaultWidth_, 0}}; 836e0dac50fSopenharmony_ci ScreenId expansionGroup; 837e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeExpand(options, expansionGroup); 838e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 839e0dac50fSopenharmony_ci ASSERT_EQ(expansionGroup, groupId); 840e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::ADD_TO_GROUP, 841e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 842e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 843e0dac50fSopenharmony_ci 844e0dac50fSopenharmony_ci std::vector<ScreenId> mirrorScreens; 845e0dac50fSopenharmony_ci mirrorScreens.emplace_back(virtualScreenId); 846e0dac50fSopenharmony_ci ScreenId mirrorGroup; 847e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeMirror(defaultScreenId_, mirrorScreens, mirrorGroup); 848e0dac50fSopenharmony_ci ASSERT_EQ(mirrorGroup, groupId); 849e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_MIRROR, ScreenGroupChangeEvent::CHANGE_GROUP, 850e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 851e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 852e0dac50fSopenharmony_ci 853e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 854e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 855e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 856e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_DESTROY_VIRTUAL_SCREEN 857e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_MIRROR, ScreenGroupChangeEvent::REMOVE_FROM_GROUP, 858e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 859e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 860e0dac50fSopenharmony_ci 861e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 862e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenGroupListener(screenGroupChangeListener); 863e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterVirtualScreenGroupListener(virtualScreenGroupChangeListener); 864e0dac50fSopenharmony_ci} 865e0dac50fSopenharmony_ci 866e0dac50fSopenharmony_ci/** 867e0dac50fSopenharmony_ci * @tc.name: ScreenManager15 868e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen, make mirror to make expand, and destroy virtual screen 869e0dac50fSopenharmony_ci * @tc.type: FUNC 870e0dac50fSopenharmony_ci * @tc.require: issueI5M2SK 871e0dac50fSopenharmony_ci */ 872e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager15, Function | MediumTest | Level2) 873e0dac50fSopenharmony_ci{ 874e0dac50fSopenharmony_ci DisplayTestUtils utils; 875e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 876e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 877e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 878e0dac50fSopenharmony_ci 879e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 880e0dac50fSopenharmony_ci if (group == nullptr) { 881e0dac50fSopenharmony_ci return; 882e0dac50fSopenharmony_ci } 883e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 884e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 885e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 886e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 887e0dac50fSopenharmony_ci 888e0dac50fSopenharmony_ci std::vector<ScreenId> mirrorScreens; 889e0dac50fSopenharmony_ci mirrorScreens.emplace_back(virtualScreenId); 890e0dac50fSopenharmony_ci ScreenId mirrorGroup; 891e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeMirror(defaultScreenId_, mirrorScreens, mirrorGroup); 892e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 893e0dac50fSopenharmony_ci ASSERT_EQ(mirrorGroup, groupId); 894e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_MIRROR, ScreenGroupChangeEvent::ADD_TO_GROUP, 895e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 896e0dac50fSopenharmony_ci CheckScreenGroupStateForMirror(ScreenGroupChangeEvent::ADD_TO_GROUP, mirrorScreens, 897e0dac50fSopenharmony_ci virtualScreenGroupChangeListener); 898e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 899e0dac50fSopenharmony_ci 900e0dac50fSopenharmony_ci std::vector<sptr<Screen>> screens; 901e0dac50fSopenharmony_ci ScreenManager::GetInstance().GetAllScreens(screens); 902e0dac50fSopenharmony_ci sptr<Screen> defaultScreen = screens.front(); 903e0dac50fSopenharmony_ci ASSERT_TRUE(defaultScreen); 904e0dac50fSopenharmony_ci std::vector<ExpandOption> options = {{defaultScreen->GetId(), 0, 0}, {virtualScreenId, defaultWidth_, 0}}; 905e0dac50fSopenharmony_ci ScreenId expansionGroup; 906e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeExpand(options, expansionGroup); 907e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 908e0dac50fSopenharmony_ci ASSERT_EQ(expansionGroup, groupId); 909e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::CHANGE_GROUP, 910e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 911e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 912e0dac50fSopenharmony_ci 913e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 914e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 915e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 916e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_DESTROY_VIRTUAL_SCREEN 917e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::REMOVE_FROM_GROUP, 918e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 919e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 920e0dac50fSopenharmony_ci 921e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 922e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenGroupListener(screenGroupChangeListener); 923e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterVirtualScreenGroupListener(virtualScreenGroupChangeListener); 924e0dac50fSopenharmony_ci} 925e0dac50fSopenharmony_ci 926e0dac50fSopenharmony_ci/** 927e0dac50fSopenharmony_ci * @tc.name: ScreenManager16 928e0dac50fSopenharmony_ci * @tc.desc: Screen orientation. 929e0dac50fSopenharmony_ci * @tc.type: FUNC 930e0dac50fSopenharmony_ci * @tc.require: issueI5NDLK 931e0dac50fSopenharmony_ci */ 932e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager16, Function | MediumTest | Level2) 933e0dac50fSopenharmony_ci{ 934e0dac50fSopenharmony_ci std::vector<sptr<Screen>> screens; 935e0dac50fSopenharmony_ci ScreenManager::GetInstance().GetAllScreens(screens); 936e0dac50fSopenharmony_ci ASSERT_GE(screens.size(), 1); 937e0dac50fSopenharmony_ci auto display = DisplayManager::GetInstance().GetDefaultDisplay(); 938e0dac50fSopenharmony_ci ASSERT_NE(display, nullptr); 939e0dac50fSopenharmony_ci uint32_t orientation = static_cast<uint32_t>(Orientation::VERTICAL); 940e0dac50fSopenharmony_ci uint32_t end = static_cast<uint32_t>(Orientation::REVERSE_HORIZONTAL); 941e0dac50fSopenharmony_ci sptr<ScreenChangeListener> screenListener = new ScreenChangeListener(); 942e0dac50fSopenharmony_ci ASSERT_NE(screenListener, nullptr); 943e0dac50fSopenharmony_ci ScreenManager::GetInstance().RegisterScreenListener(screenListener); 944e0dac50fSopenharmony_ci for (; orientation <= end; ++orientation) { 945e0dac50fSopenharmony_ci screens[0]->SetOrientation(static_cast<Orientation>(orientation)); 946e0dac50fSopenharmony_ci ScreenId screenId = screenListener->changeFuture_.GetResult(TIME_OUT); 947e0dac50fSopenharmony_ci ASSERT_EQ(screenId, screens[0]->GetId()); 948e0dac50fSopenharmony_ci usleep(1E6); 949e0dac50fSopenharmony_ci if (SceneBoardJudgement::IsSceneBoardEnabled()) { 950e0dac50fSopenharmony_ci ASSERT_EQ(static_cast<uint32_t>(screens[0]->GetOrientation()), 951e0dac50fSopenharmony_ci static_cast<uint32_t>(Orientation::UNSPECIFIED)); 952e0dac50fSopenharmony_ci } else { 953e0dac50fSopenharmony_ci ASSERT_NE(static_cast<uint32_t>(screens[0]->GetOrientation()), 954e0dac50fSopenharmony_ci static_cast<uint32_t>(Orientation::UNSPECIFIED)); 955e0dac50fSopenharmony_ci } 956e0dac50fSopenharmony_ci ASSERT_EQ(static_cast<uint32_t>(display->GetOrientation()), orientation); 957e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 958e0dac50fSopenharmony_ci } 959e0dac50fSopenharmony_ci screens[0]->SetOrientation(Orientation::UNSPECIFIED); 960e0dac50fSopenharmony_ci ASSERT_EQ(static_cast<uint32_t>(screens[0]->GetOrientation()), static_cast<uint32_t>(Orientation::UNSPECIFIED)); 961e0dac50fSopenharmony_ci ASSERT_EQ(static_cast<uint32_t>(display->GetOrientation()), static_cast<uint32_t>(Orientation::UNSPECIFIED)); 962e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 963e0dac50fSopenharmony_ci} 964e0dac50fSopenharmony_ci 965e0dac50fSopenharmony_ci/** 966e0dac50fSopenharmony_ci * @tc.name: ScreenManager17 967e0dac50fSopenharmony_ci * @tc.desc: Create VirtualScreen for 10 times but do not destroy it 968e0dac50fSopenharmony_ci * @tc.type: FUNC 969e0dac50fSopenharmony_ci */ 970e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager17, Function | MediumTest | Level2) 971e0dac50fSopenharmony_ci{ 972e0dac50fSopenharmony_ci DisplayTestUtils utils; 973e0dac50fSopenharmony_ci defaultOption_.isForShot_ = false; 974e0dac50fSopenharmony_ci for (uint32_t i = 0; i < execTimes_; i++) { 975e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 976e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 977e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 978e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 979e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, virtualScreenId); 980e0dac50fSopenharmony_ci } 981e0dac50fSopenharmony_ci} 982e0dac50fSopenharmony_ci 983e0dac50fSopenharmony_ci/** 984e0dac50fSopenharmony_ci * @tc.name: ScreenManager18 985e0dac50fSopenharmony_ci * @tc.desc: Set screen rotation lock, and check whether screen rotation lock is Locked. 986e0dac50fSopenharmony_ci * @tc.type: FUNC 987e0dac50fSopenharmony_ci */ 988e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ScreenManager18, Function | SmallTest | Level1) 989e0dac50fSopenharmony_ci{ 990e0dac50fSopenharmony_ci bool originalLockStatus; 991e0dac50fSopenharmony_ci ScreenManager::GetInstance().IsScreenRotationLocked(originalLockStatus); 992e0dac50fSopenharmony_ci ScreenManager::GetInstance().SetScreenRotationLocked(!originalLockStatus); 993e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 994e0dac50fSopenharmony_ci bool modifiedLockedStatus; 995e0dac50fSopenharmony_ci ScreenManager::GetInstance().IsScreenRotationLocked(modifiedLockedStatus); 996e0dac50fSopenharmony_ci ScreenManager::GetInstance().SetScreenRotationLocked(originalLockStatus); 997e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 998e0dac50fSopenharmony_ci ASSERT_EQ(!originalLockStatus, modifiedLockedStatus); 999e0dac50fSopenharmony_ci} 1000e0dac50fSopenharmony_ci 1001e0dac50fSopenharmony_ci/** 1002e0dac50fSopenharmony_ci * @tc.name: VirtualExpandScreen01 1003e0dac50fSopenharmony_ci * @tc.desc: Create virtual expand screen and rotate. 1004e0dac50fSopenharmony_ci * @tc.type: FUNC 1005e0dac50fSopenharmony_ci */ 1006e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, VirtualExpandScreen01, Function | MediumTest | Level1) 1007e0dac50fSopenharmony_ci{ 1008e0dac50fSopenharmony_ci (void)system("param set rosen.uni.partialrender.enabled 0"); 1009e0dac50fSopenharmony_ci 1010e0dac50fSopenharmony_ci DisplayTestUtils utils; 1011e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1012e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1013e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1014e0dac50fSopenharmony_ci 1015e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1016e0dac50fSopenharmony_ci if (group == nullptr) { 1017e0dac50fSopenharmony_ci return; 1018e0dac50fSopenharmony_ci } 1019e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1020e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1021e0dac50fSopenharmony_ci 1022e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1023e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1024e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1025e0dac50fSopenharmony_ci std::vector<ExpandOption> options = {{defaultScreenId_, 0, 0}, {virtualScreenId, defaultWidth_, 0}}; 1026e0dac50fSopenharmony_ci ScreenId expansionId; 1027e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeExpand(options, expansionId); 1028e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1029e0dac50fSopenharmony_ci 1030e0dac50fSopenharmony_ci CheckScreenGroupState(ScreenCombination::SCREEN_EXPAND, ScreenGroupChangeEvent::ADD_TO_GROUP, 1031e0dac50fSopenharmony_ci virtualScreenId, group, screenGroupChangeListener); 1032e0dac50fSopenharmony_ci CheckScreenStateInGroup(true, group, groupId, virtualScreen, virtualScreenId); 1033e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1034e0dac50fSopenharmony_ci ASSERT_NE(SCREEN_ID_INVALID, expansionId); 1035e0dac50fSopenharmony_ci DisplayId virtualDisplayId = DisplayManager::GetInstance().GetDisplayByScreen(virtualScreenId)->GetId(); 1036e0dac50fSopenharmony_ci ASSERT_NE(DISPLAY_ID_INVALID, virtualDisplayId); 1037e0dac50fSopenharmony_ci 1038e0dac50fSopenharmony_ci sptr<Window> window = CreateWindowByDisplayId(virtualDisplayId); 1039e0dac50fSopenharmony_ci if (window == nullptr) { 1040e0dac50fSopenharmony_ci return; 1041e0dac50fSopenharmony_ci } 1042e0dac50fSopenharmony_ci ASSERT_NE(nullptr, window); 1043e0dac50fSopenharmony_ci ASSERT_EQ(true, DrawWindowColor(window, COLOR_RED)); 1044e0dac50fSopenharmony_ci window->Show(); 1045e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S_LONG); 1046e0dac50fSopenharmony_ci 1047e0dac50fSopenharmony_ci CheckStateDisplay(virtualDisplayId, virtualScreenId); 1048e0dac50fSopenharmony_ci window->Destroy(); 1049e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1050e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1051e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1052e0dac50fSopenharmony_ci 1053e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenListener(screenListener); 1054e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterScreenGroupListener(screenGroupChangeListener); 1055e0dac50fSopenharmony_ci ScreenManager::GetInstance().UnregisterVirtualScreenGroupListener(virtualScreenGroupChangeListener); 1056e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1057e0dac50fSopenharmony_ci 1058e0dac50fSopenharmony_ci (void)system("param set rosen.uni.partialrender.enabled 4"); 1059e0dac50fSopenharmony_ci} 1060e0dac50fSopenharmony_ci 1061e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ResizeVirtualScreen01, Function | MediumTest | Level1) 1062e0dac50fSopenharmony_ci{ 1063e0dac50fSopenharmony_ci DisplayTestUtils utils; 1064e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1065e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1066e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1067e0dac50fSopenharmony_ci 1068e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1069e0dac50fSopenharmony_ci if (group == nullptr) { 1070e0dac50fSopenharmony_ci return; 1071e0dac50fSopenharmony_ci } 1072e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1073e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1074e0dac50fSopenharmony_ci 1075e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1076e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1077e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1078e0dac50fSopenharmony_ci std::vector<ExpandOption> options = {{defaultDisplayId_, 0, 0}, {virtualScreenId, defaultWidth_, 0}}; 1079e0dac50fSopenharmony_ci ScreenId expansionId; 1080e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeExpand(options, expansionId); 1081e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1082e0dac50fSopenharmony_ci 1083e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().ResizeVirtualScreen(virtualScreenId, 1084e0dac50fSopenharmony_ci resizeScreenWidthTestOne_, resizeScreenHeightTestOne_); 1085e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1086e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1087e0dac50fSopenharmony_ci 1088e0dac50fSopenharmony_ci auto screen = ScreenManager::GetInstance().GetScreenById(virtualScreenId); 1089e0dac50fSopenharmony_ci ASSERT_TRUE(screen); 1090e0dac50fSopenharmony_ci if (SceneBoardJudgement::IsSceneBoardEnabled()) { 1091e0dac50fSopenharmony_ci ASSERT_EQ(resizeScreenWidthTestOne_, screen->GetWidth()); 1092e0dac50fSopenharmony_ci ASSERT_EQ(resizeScreenHeightTestOne_, screen->GetHeight()); 1093e0dac50fSopenharmony_ci } else { 1094e0dac50fSopenharmony_ci ASSERT_EQ(resizeScreenWidthTestThree_, screen->GetWidth()); 1095e0dac50fSopenharmony_ci ASSERT_EQ(resizeScreenHeightTestThree_, screen->GetHeight()); 1096e0dac50fSopenharmony_ci } 1097e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1098e0dac50fSopenharmony_ci} 1099e0dac50fSopenharmony_ci 1100e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ResizeVirtualScreen02, Function | MediumTest | Level1) 1101e0dac50fSopenharmony_ci{ 1102e0dac50fSopenharmony_ci DisplayTestUtils utils; 1103e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1104e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1105e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1106e0dac50fSopenharmony_ci 1107e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1108e0dac50fSopenharmony_ci if (group == nullptr) { 1109e0dac50fSopenharmony_ci return; 1110e0dac50fSopenharmony_ci } 1111e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1112e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1113e0dac50fSopenharmony_ci 1114e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1115e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1116e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1117e0dac50fSopenharmony_ci std::vector<ExpandOption> options = {{defaultDisplayId_, 0, 0}, {virtualScreenId, defaultWidth_, 0}}; 1118e0dac50fSopenharmony_ci ScreenId expansionId; 1119e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeExpand(options, expansionId); 1120e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1121e0dac50fSopenharmony_ci 1122e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().ResizeVirtualScreen(virtualScreenId, 1123e0dac50fSopenharmony_ci resizeScreenWidthTestTwo_, resizeScreenHeightTestTwo_); 1124e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1125e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1126e0dac50fSopenharmony_ci 1127e0dac50fSopenharmony_ci auto screen = ScreenManager::GetInstance().GetScreenById(virtualScreenId); 1128e0dac50fSopenharmony_ci ASSERT_TRUE(screen); 1129e0dac50fSopenharmony_ci if (SceneBoardJudgement::IsSceneBoardEnabled()) { 1130e0dac50fSopenharmony_ci ASSERT_EQ(resizeScreenWidthTestTwo_, screen->GetWidth()); 1131e0dac50fSopenharmony_ci ASSERT_EQ(resizeScreenHeightTestTwo_, screen->GetHeight()); 1132e0dac50fSopenharmony_ci } else { 1133e0dac50fSopenharmony_ci ASSERT_EQ(resizeScreenWidthTestThree_, screen->GetWidth()); 1134e0dac50fSopenharmony_ci ASSERT_EQ(resizeScreenHeightTestThree_, screen->GetHeight()); 1135e0dac50fSopenharmony_ci } 1136e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1137e0dac50fSopenharmony_ci} 1138e0dac50fSopenharmony_ci 1139e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, ResizeVirtualScreen03, Function | MediumTest | Level1) 1140e0dac50fSopenharmony_ci{ 1141e0dac50fSopenharmony_ci DisplayTestUtils utils; 1142e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1143e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1144e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1145e0dac50fSopenharmony_ci 1146e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1147e0dac50fSopenharmony_ci if (group == nullptr) { 1148e0dac50fSopenharmony_ci return; 1149e0dac50fSopenharmony_ci } 1150e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1151e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1152e0dac50fSopenharmony_ci 1153e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1154e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1155e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1156e0dac50fSopenharmony_ci std::vector<ExpandOption> options = {{defaultDisplayId_, 0, 0}, {virtualScreenId, defaultWidth_, 0}}; 1157e0dac50fSopenharmony_ci ScreenId expansionId; 1158e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeExpand(options, expansionId); 1159e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1160e0dac50fSopenharmony_ci 1161e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().ResizeVirtualScreen(virtualScreenId + 1, 1162e0dac50fSopenharmony_ci resizeScreenWidthTestOne_, resizeScreenHeightTestOne_); 1163e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1164e0dac50fSopenharmony_ci if (SceneBoardJudgement::IsSceneBoardEnabled()) { 1165e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_ERROR_INVALID_PARAM, res); 1166e0dac50fSopenharmony_ci } else { 1167e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1168e0dac50fSopenharmony_ci } 1169e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1170e0dac50fSopenharmony_ci} 1171e0dac50fSopenharmony_ci 1172e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenRefreshRate01, Function | MediumTest | Level1) 1173e0dac50fSopenharmony_ci{ 1174e0dac50fSopenharmony_ci DisplayTestUtils utils; 1175e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1176e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1177e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1178e0dac50fSopenharmony_ci 1179e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1180e0dac50fSopenharmony_ci if (group == nullptr) { 1181e0dac50fSopenharmony_ci return; 1182e0dac50fSopenharmony_ci } 1183e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1184e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1185e0dac50fSopenharmony_ci 1186e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1187e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1188e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1189e0dac50fSopenharmony_ci 1190e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1191e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1192e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1193e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1194e0dac50fSopenharmony_ci 1195e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenRefreshRate(virtualScreenId, refreshIntervalTwo_); 1196e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1197e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1198e0dac50fSopenharmony_ci 1199e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1200e0dac50fSopenharmony_ci} 1201e0dac50fSopenharmony_ci 1202e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenRefreshRate02, Function | MediumTest | Level1) 1203e0dac50fSopenharmony_ci{ 1204e0dac50fSopenharmony_ci DisplayTestUtils utils; 1205e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1206e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1207e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1208e0dac50fSopenharmony_ci 1209e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1210e0dac50fSopenharmony_ci if (group == nullptr) { 1211e0dac50fSopenharmony_ci return; 1212e0dac50fSopenharmony_ci } 1213e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1214e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1215e0dac50fSopenharmony_ci 1216e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1217e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1218e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1219e0dac50fSopenharmony_ci 1220e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1221e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1222e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1223e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1224e0dac50fSopenharmony_ci 1225e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenRefreshRate(virtualScreenId, refreshIntervalZero_); 1226e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1227e0dac50fSopenharmony_ci if (SceneBoardJudgement::IsSceneBoardEnabled()) { 1228e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_ERROR_INVALID_PARAM, res); 1229e0dac50fSopenharmony_ci } else { 1230e0dac50fSopenharmony_ci ASSERT_NE(DMError::DM_ERROR_INVALID_PARAM, res); 1231e0dac50fSopenharmony_ci } 1232e0dac50fSopenharmony_ci 1233e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1234e0dac50fSopenharmony_ci} 1235e0dac50fSopenharmony_ci 1236e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenRefreshRate03, Function | MediumTest | Level1) 1237e0dac50fSopenharmony_ci{ 1238e0dac50fSopenharmony_ci DisplayTestUtils utils; 1239e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1240e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1241e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1242e0dac50fSopenharmony_ci 1243e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1244e0dac50fSopenharmony_ci if (group == nullptr) { 1245e0dac50fSopenharmony_ci return; 1246e0dac50fSopenharmony_ci } 1247e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1248e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1249e0dac50fSopenharmony_ci 1250e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1251e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1252e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1253e0dac50fSopenharmony_ci 1254e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1255e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1256e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1257e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1258e0dac50fSopenharmony_ci 1259e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenRefreshRate(virtualScreenId, refreshIntervalMax_); 1260e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1261e0dac50fSopenharmony_ci if (SceneBoardJudgement::IsSceneBoardEnabled()) { 1262e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_ERROR_INVALID_PARAM, res); 1263e0dac50fSopenharmony_ci } else { 1264e0dac50fSopenharmony_ci ASSERT_NE(DMError::DM_ERROR_INVALID_PARAM, res); 1265e0dac50fSopenharmony_ci } 1266e0dac50fSopenharmony_ci 1267e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1268e0dac50fSopenharmony_ci} 1269e0dac50fSopenharmony_ci 1270e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenRefreshRate04, Function | MediumTest | Level1) 1271e0dac50fSopenharmony_ci{ 1272e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenRefreshRate(defaultScreenId_, refreshIntervalTwo_); 1273e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1274e0dac50fSopenharmony_ci if (SceneBoardJudgement::IsSceneBoardEnabled()) { 1275e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_ERROR_INVALID_PARAM, res); 1276e0dac50fSopenharmony_ci } else { 1277e0dac50fSopenharmony_ci ASSERT_NE(DMError::DM_ERROR_INVALID_PARAM, res); 1278e0dac50fSopenharmony_ci } 1279e0dac50fSopenharmony_ci} 1280e0dac50fSopenharmony_ci 1281e0dac50fSopenharmony_ci/** 1282e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate01 1283e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 0 1284e0dac50fSopenharmony_ci * @tc.type: FUNC 1285e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1286e0dac50fSopenharmony_ci */ 1287e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate01, Function | MediumTest | Level1) 1288e0dac50fSopenharmony_ci{ 1289e0dac50fSopenharmony_ci DisplayTestUtils utils; 1290e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1291e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1292e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1293e0dac50fSopenharmony_ci 1294e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1295e0dac50fSopenharmony_ci if (group == nullptr) { 1296e0dac50fSopenharmony_ci return; 1297e0dac50fSopenharmony_ci } 1298e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1299e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1300e0dac50fSopenharmony_ci 1301e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1302e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1303e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1304e0dac50fSopenharmony_ci 1305e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1306e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1307e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1308e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1309e0dac50fSopenharmony_ci uint32_t refreshRate = 0; 1310e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1311e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1312e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1313e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1314e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_ERROR_INVALID_PARAM, res); 1315e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1316e0dac50fSopenharmony_ci} 1317e0dac50fSopenharmony_ci 1318e0dac50fSopenharmony_ci/** 1319e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate02 1320e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 31 1321e0dac50fSopenharmony_ci * @tc.type: FUNC 1322e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1323e0dac50fSopenharmony_ci */ 1324e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate02, Function | MediumTest | Level1) 1325e0dac50fSopenharmony_ci{ 1326e0dac50fSopenharmony_ci DisplayTestUtils utils; 1327e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1328e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1329e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1330e0dac50fSopenharmony_ci 1331e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1332e0dac50fSopenharmony_ci if (group == nullptr) { 1333e0dac50fSopenharmony_ci return; 1334e0dac50fSopenharmony_ci } 1335e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1336e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1337e0dac50fSopenharmony_ci 1338e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1339e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1340e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1341e0dac50fSopenharmony_ci 1342e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1343e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1344e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1345e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1346e0dac50fSopenharmony_ci uint32_t refreshRate = 31; 1347e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1348e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1349e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1350e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1351e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1352e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1353e0dac50fSopenharmony_ci} 1354e0dac50fSopenharmony_ci 1355e0dac50fSopenharmony_ci/** 1356e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate03 1357e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 120 1358e0dac50fSopenharmony_ci * @tc.type: FUNC 1359e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1360e0dac50fSopenharmony_ci */ 1361e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate03, Function | MediumTest | Level1) 1362e0dac50fSopenharmony_ci{ 1363e0dac50fSopenharmony_ci DisplayTestUtils utils; 1364e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1365e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1366e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1367e0dac50fSopenharmony_ci 1368e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1369e0dac50fSopenharmony_ci if (group == nullptr) { 1370e0dac50fSopenharmony_ci return; 1371e0dac50fSopenharmony_ci } 1372e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1373e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1374e0dac50fSopenharmony_ci 1375e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1376e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1377e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1378e0dac50fSopenharmony_ci 1379e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1380e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1381e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1382e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1383e0dac50fSopenharmony_ci uint32_t refreshRate = 120; 1384e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1385e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1386e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1387e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1388e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_ERROR_INVALID_PARAM, res); 1389e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1390e0dac50fSopenharmony_ci} 1391e0dac50fSopenharmony_ci 1392e0dac50fSopenharmony_ci/** 1393e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate04 1394e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 61 1395e0dac50fSopenharmony_ci * @tc.type: FUNC 1396e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1397e0dac50fSopenharmony_ci */ 1398e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate04, Function | MediumTest | Level1) 1399e0dac50fSopenharmony_ci{ 1400e0dac50fSopenharmony_ci DisplayTestUtils utils; 1401e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1402e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1403e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1404e0dac50fSopenharmony_ci 1405e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1406e0dac50fSopenharmony_ci if (group == nullptr) { 1407e0dac50fSopenharmony_ci return; 1408e0dac50fSopenharmony_ci } 1409e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1410e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1411e0dac50fSopenharmony_ci 1412e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1413e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1414e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1415e0dac50fSopenharmony_ci 1416e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1417e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1418e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1419e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1420e0dac50fSopenharmony_ci uint32_t refreshRate = 61; 1421e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1422e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1423e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1424e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1425e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_ERROR_INVALID_PARAM, res); 1426e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1427e0dac50fSopenharmony_ci} 1428e0dac50fSopenharmony_ci 1429e0dac50fSopenharmony_ci/** 1430e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate05 1431e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 1 1432e0dac50fSopenharmony_ci * @tc.type: FUNC 1433e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1434e0dac50fSopenharmony_ci */ 1435e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate05, Function | MediumTest | Level1) 1436e0dac50fSopenharmony_ci{ 1437e0dac50fSopenharmony_ci DisplayTestUtils utils; 1438e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1439e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1440e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1441e0dac50fSopenharmony_ci 1442e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1443e0dac50fSopenharmony_ci if (group == nullptr) { 1444e0dac50fSopenharmony_ci return; 1445e0dac50fSopenharmony_ci } 1446e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1447e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1448e0dac50fSopenharmony_ci 1449e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1450e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1451e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1452e0dac50fSopenharmony_ci 1453e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1454e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1455e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1456e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1457e0dac50fSopenharmony_ci uint32_t refreshRate = 1; 1458e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1459e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1460e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1461e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1462e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1463e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1464e0dac50fSopenharmony_ci} 1465e0dac50fSopenharmony_ci 1466e0dac50fSopenharmony_ci/** 1467e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate06 1468e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 18 1469e0dac50fSopenharmony_ci * @tc.type: FUNC 1470e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1471e0dac50fSopenharmony_ci */ 1472e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate06, Function | MediumTest | Level1) 1473e0dac50fSopenharmony_ci{ 1474e0dac50fSopenharmony_ci DisplayTestUtils utils; 1475e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1476e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1477e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1478e0dac50fSopenharmony_ci 1479e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1480e0dac50fSopenharmony_ci if (group == nullptr) { 1481e0dac50fSopenharmony_ci return; 1482e0dac50fSopenharmony_ci } 1483e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1484e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1485e0dac50fSopenharmony_ci 1486e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1487e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1488e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1489e0dac50fSopenharmony_ci 1490e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1491e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1492e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1493e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1494e0dac50fSopenharmony_ci uint32_t refreshRate = 18; 1495e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1496e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1497e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1498e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1499e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1500e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1501e0dac50fSopenharmony_ci} 1502e0dac50fSopenharmony_ci 1503e0dac50fSopenharmony_ci/** 1504e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate07 1505e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 24 1506e0dac50fSopenharmony_ci * @tc.type: FUNC 1507e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1508e0dac50fSopenharmony_ci */ 1509e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate07, Function | MediumTest | Level1) 1510e0dac50fSopenharmony_ci{ 1511e0dac50fSopenharmony_ci DisplayTestUtils utils; 1512e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1513e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1514e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1515e0dac50fSopenharmony_ci 1516e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1517e0dac50fSopenharmony_ci if (group == nullptr) { 1518e0dac50fSopenharmony_ci return; 1519e0dac50fSopenharmony_ci } 1520e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1521e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1522e0dac50fSopenharmony_ci 1523e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1524e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1525e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1526e0dac50fSopenharmony_ci 1527e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1528e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1529e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1530e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1531e0dac50fSopenharmony_ci uint32_t refreshRate = 24; 1532e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1533e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1534e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1535e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1536e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1537e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1538e0dac50fSopenharmony_ci} 1539e0dac50fSopenharmony_ci 1540e0dac50fSopenharmony_ci/** 1541e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate08 1542e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 27 1543e0dac50fSopenharmony_ci * @tc.type: FUNC 1544e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1545e0dac50fSopenharmony_ci */ 1546e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate08, Function | MediumTest | Level1) 1547e0dac50fSopenharmony_ci{ 1548e0dac50fSopenharmony_ci DisplayTestUtils utils; 1549e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1550e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1551e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1552e0dac50fSopenharmony_ci 1553e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1554e0dac50fSopenharmony_ci if (group == nullptr) { 1555e0dac50fSopenharmony_ci return; 1556e0dac50fSopenharmony_ci } 1557e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1558e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1559e0dac50fSopenharmony_ci 1560e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1561e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1562e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1563e0dac50fSopenharmony_ci 1564e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1565e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1566e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1567e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1568e0dac50fSopenharmony_ci uint32_t refreshRate = 27; 1569e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1570e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1571e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1572e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1573e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1574e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1575e0dac50fSopenharmony_ci} 1576e0dac50fSopenharmony_ci 1577e0dac50fSopenharmony_ci/** 1578e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate09 1579e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 37 1580e0dac50fSopenharmony_ci * @tc.type: FUNC 1581e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1582e0dac50fSopenharmony_ci */ 1583e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate09, Function | MediumTest | Level1) 1584e0dac50fSopenharmony_ci{ 1585e0dac50fSopenharmony_ci DisplayTestUtils utils; 1586e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1587e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1588e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1589e0dac50fSopenharmony_ci 1590e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1591e0dac50fSopenharmony_ci if (group == nullptr) { 1592e0dac50fSopenharmony_ci return; 1593e0dac50fSopenharmony_ci } 1594e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1595e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1596e0dac50fSopenharmony_ci 1597e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1598e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1599e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1600e0dac50fSopenharmony_ci 1601e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1602e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1603e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1604e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1605e0dac50fSopenharmony_ci uint32_t refreshRate = 37; 1606e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1607e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1608e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1609e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1610e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1611e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1612e0dac50fSopenharmony_ci} 1613e0dac50fSopenharmony_ci 1614e0dac50fSopenharmony_ci/** 1615e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate10 1616e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 47 1617e0dac50fSopenharmony_ci * @tc.type: FUNC 1618e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1619e0dac50fSopenharmony_ci */ 1620e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate10, Function | MediumTest | Level1) 1621e0dac50fSopenharmony_ci{ 1622e0dac50fSopenharmony_ci DisplayTestUtils utils; 1623e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1624e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1625e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1626e0dac50fSopenharmony_ci 1627e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1628e0dac50fSopenharmony_ci if (group == nullptr) { 1629e0dac50fSopenharmony_ci return; 1630e0dac50fSopenharmony_ci } 1631e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1632e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1633e0dac50fSopenharmony_ci 1634e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1635e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1636e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1637e0dac50fSopenharmony_ci 1638e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1639e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1640e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1641e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1642e0dac50fSopenharmony_ci uint32_t refreshRate = 47; 1643e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1644e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1645e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1646e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1647e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1648e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1649e0dac50fSopenharmony_ci} 1650e0dac50fSopenharmony_ci 1651e0dac50fSopenharmony_ci/** 1652e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate11 1653e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 57 1654e0dac50fSopenharmony_ci * @tc.type: FUNC 1655e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1656e0dac50fSopenharmony_ci */ 1657e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate11, Function | MediumTest | Level1) 1658e0dac50fSopenharmony_ci{ 1659e0dac50fSopenharmony_ci DisplayTestUtils utils; 1660e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1661e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1662e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1663e0dac50fSopenharmony_ci 1664e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1665e0dac50fSopenharmony_ci if (group == nullptr) { 1666e0dac50fSopenharmony_ci return; 1667e0dac50fSopenharmony_ci } 1668e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1669e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1670e0dac50fSopenharmony_ci 1671e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1672e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1673e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1674e0dac50fSopenharmony_ci 1675e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1676e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1677e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1678e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1679e0dac50fSopenharmony_ci uint32_t refreshRate = 57; 1680e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1681e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1682e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1683e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1684e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1685e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1686e0dac50fSopenharmony_ci} 1687e0dac50fSopenharmony_ci 1688e0dac50fSopenharmony_ci/** 1689e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate12 1690e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 44 1691e0dac50fSopenharmony_ci * @tc.type: FUNC 1692e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1693e0dac50fSopenharmony_ci */ 1694e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate12, Function | MediumTest | Level1) 1695e0dac50fSopenharmony_ci{ 1696e0dac50fSopenharmony_ci DisplayTestUtils utils; 1697e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1698e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1699e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1700e0dac50fSopenharmony_ci 1701e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1702e0dac50fSopenharmony_ci if (group == nullptr) { 1703e0dac50fSopenharmony_ci return; 1704e0dac50fSopenharmony_ci } 1705e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1706e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1707e0dac50fSopenharmony_ci 1708e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1709e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1710e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1711e0dac50fSopenharmony_ci 1712e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1713e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1714e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1715e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1716e0dac50fSopenharmony_ci uint32_t refreshRate = 44; 1717e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1718e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1719e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1720e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1721e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1722e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1723e0dac50fSopenharmony_ci} 1724e0dac50fSopenharmony_ci 1725e0dac50fSopenharmony_ci/** 1726e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate13 1727e0dac50fSopenharmony_ci * @tc.desc: Create a virtual screen and set its refresh rate to 34 1728e0dac50fSopenharmony_ci * @tc.type: FUNC 1729e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1730e0dac50fSopenharmony_ci */ 1731e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate13, Function | MediumTest | Level1) 1732e0dac50fSopenharmony_ci{ 1733e0dac50fSopenharmony_ci DisplayTestUtils utils; 1734e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1735e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1736e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1737e0dac50fSopenharmony_ci 1738e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1739e0dac50fSopenharmony_ci if (group == nullptr) { 1740e0dac50fSopenharmony_ci return; 1741e0dac50fSopenharmony_ci } 1742e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1743e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1744e0dac50fSopenharmony_ci 1745e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1746e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1747e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1748e0dac50fSopenharmony_ci 1749e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1750e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1751e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1752e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1753e0dac50fSopenharmony_ci uint32_t refreshRate = 34; 1754e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1755e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(virtualScreenId, 1756e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1757e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1758e0dac50fSopenharmony_ci ASSERT_EQ(DMError::DM_OK, res); 1759e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1760e0dac50fSopenharmony_ci} 1761e0dac50fSopenharmony_ci 1762e0dac50fSopenharmony_ci/** 1763e0dac50fSopenharmony_ci * @tc.name: SetVirtualScreenMaxRefreshRate14 1764e0dac50fSopenharmony_ci * @tc.desc: Get main screen and set its refresh rate to 34 1765e0dac50fSopenharmony_ci * @tc.type: FUNC 1766e0dac50fSopenharmony_ci * @tc.require: issueIATA2N 1767e0dac50fSopenharmony_ci */ 1768e0dac50fSopenharmony_ciHWTEST_F(ScreenManagerTest, SetVirtualScreenMaxRefreshRate14, Function | MediumTest | Level1) 1769e0dac50fSopenharmony_ci{ 1770e0dac50fSopenharmony_ci DisplayTestUtils utils; 1771e0dac50fSopenharmony_ci ASSERT_TRUE(utils.CreateSurface()); 1772e0dac50fSopenharmony_ci defaultOption_.surface_ = utils.psurface_; 1773e0dac50fSopenharmony_ci defaultOption_.isForShot_ = true; 1774e0dac50fSopenharmony_ci 1775e0dac50fSopenharmony_ci CHECK_TEST_INIT_SCREEN_STATE 1776e0dac50fSopenharmony_ci if (group == nullptr) { 1777e0dac50fSopenharmony_ci return; 1778e0dac50fSopenharmony_ci } 1779e0dac50fSopenharmony_ci ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption_); 1780e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1781e0dac50fSopenharmony_ci 1782e0dac50fSopenharmony_ci CHECK_SCREEN_STATE_AFTER_CREATE_VIRTUAL_SCREEN 1783e0dac50fSopenharmony_ci CheckScreenStateInGroup(false, group, groupId, virtualScreen, virtualScreenId); 1784e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1785e0dac50fSopenharmony_ci 1786e0dac50fSopenharmony_ci std::vector<ScreenId> screenIds; 1787e0dac50fSopenharmony_ci screenIds.push_back(virtualScreenId); 1788e0dac50fSopenharmony_ci ScreenManager::GetInstance().MakeUniqueScreen(screenIds); 1789e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1790e0dac50fSopenharmony_ci uint32_t refreshRate = 34; 1791e0dac50fSopenharmony_ci uint32_t actualRefreshRate = 0; 1792e0dac50fSopenharmony_ci ScreenId mainID = 0; 1793e0dac50fSopenharmony_ci DMError res = ScreenManager::GetInstance().SetVirtualScreenMaxRefreshRate(mainID, 1794e0dac50fSopenharmony_ci refreshRate, actualRefreshRate); 1795e0dac50fSopenharmony_ci sleep(TEST_SLEEP_S); 1796e0dac50fSopenharmony_ci ASSERT_NE(DMError::DM_OK, res); 1797e0dac50fSopenharmony_ci ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId); 1798e0dac50fSopenharmony_ci} 1799e0dac50fSopenharmony_ci} 1800e0dac50fSopenharmony_ci} // namespace Rosen 1801e0dac50fSopenharmony_ci} // namespace OHOS 1802