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