1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 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#include <map>
18e0dac50fSopenharmony_ci#include "display_manager.h"
19e0dac50fSopenharmony_ci#include "iremote_object_mocker.h"
20e0dac50fSopenharmony_ci#include "mock_rs_iwindow_animation_controller.h"
21e0dac50fSopenharmony_ci#include "remote_animation.h"
22e0dac50fSopenharmony_ci#include "starting_window.h"
23e0dac50fSopenharmony_ci#include "window_controller.h"
24e0dac50fSopenharmony_ci#include "scene_board_judgement.h"
25e0dac50fSopenharmony_ci
26e0dac50fSopenharmony_ciusing namespace testing;
27e0dac50fSopenharmony_ciusing namespace testing::ext;
28e0dac50fSopenharmony_ci
29e0dac50fSopenharmony_cinamespace OHOS {
30e0dac50fSopenharmony_cinamespace Rosen {
31e0dac50fSopenharmony_ciclass WindowControllerTest : public testing::Test {
32e0dac50fSopenharmony_cipublic:
33e0dac50fSopenharmony_ci    static void SetUpTestCase();
34e0dac50fSopenharmony_ci    static void TearDownTestCase();
35e0dac50fSopenharmony_ci    void SetUp() override;
36e0dac50fSopenharmony_ci    void TearDown() override;
37e0dac50fSopenharmony_ci
38e0dac50fSopenharmony_ci    static sptr<WindowController> windowController_;
39e0dac50fSopenharmony_ci    static sptr<WindowRoot> windowRoot_;
40e0dac50fSopenharmony_ci    static sptr<InputWindowMonitor> inputWindowMonitor_;
41e0dac50fSopenharmony_ci    static sptr<WindowNode> node_;
42e0dac50fSopenharmony_ci    static sptr<WindowTransitionInfo> transitionInfo_;
43e0dac50fSopenharmony_ci};
44e0dac50fSopenharmony_ci
45e0dac50fSopenharmony_cisptr<WindowController> WindowControllerTest::windowController_ = nullptr;
46e0dac50fSopenharmony_cisptr<WindowRoot> WindowControllerTest::windowRoot_ = nullptr;
47e0dac50fSopenharmony_cisptr<InputWindowMonitor> WindowControllerTest::inputWindowMonitor_ = nullptr;
48e0dac50fSopenharmony_cisptr<WindowNode> WindowControllerTest::node_ = nullptr;
49e0dac50fSopenharmony_cisptr<WindowTransitionInfo> WindowControllerTest::transitionInfo_ = nullptr;
50e0dac50fSopenharmony_ci
51e0dac50fSopenharmony_civoid RootCallback(Event event, const sptr<IRemoteObject>& remoteObject)
52e0dac50fSopenharmony_ci{
53e0dac50fSopenharmony_ci    return;
54e0dac50fSopenharmony_ci}
55e0dac50fSopenharmony_ci
56e0dac50fSopenharmony_civoid WindowControllerTest::SetUpTestCase()
57e0dac50fSopenharmony_ci{
58e0dac50fSopenharmony_ci    windowRoot_ = new WindowRoot(RootCallback);
59e0dac50fSopenharmony_ci    windowRoot_->displayIdMap_[0].push_back(0);
60e0dac50fSopenharmony_ci    inputWindowMonitor_ = new InputWindowMonitor(windowRoot_);
61e0dac50fSopenharmony_ci    windowController_ = new WindowController(windowRoot_, inputWindowMonitor_);
62e0dac50fSopenharmony_ci    transitionInfo_ = new WindowTransitionInfo();
63e0dac50fSopenharmony_ci    transitionInfo_->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
64e0dac50fSopenharmony_ci    node_ = StartingWindow::CreateWindowNode(transitionInfo_, 101); // 101 is windowId
65e0dac50fSopenharmony_ci    node_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
66e0dac50fSopenharmony_ci}
67e0dac50fSopenharmony_ci
68e0dac50fSopenharmony_civoid WindowControllerTest::TearDownTestCase()
69e0dac50fSopenharmony_ci{
70e0dac50fSopenharmony_ci}
71e0dac50fSopenharmony_ci
72e0dac50fSopenharmony_civoid WindowControllerTest::SetUp()
73e0dac50fSopenharmony_ci{
74e0dac50fSopenharmony_ci}
75e0dac50fSopenharmony_ci
76e0dac50fSopenharmony_civoid WindowControllerTest::TearDown()
77e0dac50fSopenharmony_ci{
78e0dac50fSopenharmony_ci}
79e0dac50fSopenharmony_ci
80e0dac50fSopenharmony_cinamespace {
81e0dac50fSopenharmony_ci/**
82e0dac50fSopenharmony_ci * @tc.name: GetSnapshot
83e0dac50fSopenharmony_ci * @tc.desc: test GetSnapshot
84e0dac50fSopenharmony_ci * @tc.type: FUNC
85e0dac50fSopenharmony_ci */
86e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, GetSnapshot, Function | SmallTest | Level3)
87e0dac50fSopenharmony_ci{
88e0dac50fSopenharmony_ci    int windowId = INVALID_WINDOW_ID;
89e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowController_->GetSnapshot(windowId));
90e0dac50fSopenharmony_ci}
91e0dac50fSopenharmony_ci
92e0dac50fSopenharmony_ci/**
93e0dac50fSopenharmony_ci * @tc.name: StartingWindow
94e0dac50fSopenharmony_ci * @tc.desc: Window controller starting window
95e0dac50fSopenharmony_ci * @tc.type: FUNC
96e0dac50fSopenharmony_ci */
97e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, StartingWindow, Function | SmallTest | Level3)
98e0dac50fSopenharmony_ci{
99e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
100e0dac50fSopenharmony_ci    windowController_->StartingWindow(nullptr, nullptr, 0, false);
101e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowRoot_->windowNodeMap_.size());
102e0dac50fSopenharmony_ci
103e0dac50fSopenharmony_ci    transitionInfo_->SetWindowMode(WindowMode::WINDOW_MODE_UNDEFINED);
104e0dac50fSopenharmony_ci    windowController_->StartingWindow(transitionInfo_, nullptr, 0, false);
105e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowRoot_->windowNodeMap_.size());
106e0dac50fSopenharmony_ci
107e0dac50fSopenharmony_ci    sptr<IRemoteObject> abilityTokenMocker = new IRemoteObjectMocker();
108e0dac50fSopenharmony_ci    transitionInfo_->SetAbilityToken(abilityTokenMocker);
109e0dac50fSopenharmony_ci    windowController_->StartingWindow(transitionInfo_, nullptr, 0, false);
110e0dac50fSopenharmony_ci    windowController_->StartingWindow(transitionInfo_, nullptr, 0, true);
111e0dac50fSopenharmony_ci    ASSERT_EQ(1, windowRoot_->windowNodeMap_.size());
112e0dac50fSopenharmony_ci
113e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
114e0dac50fSopenharmony_ci    sptr<IRemoteObject> iRemoteObjectMocker = new IRemoteObjectMocker();
115e0dac50fSopenharmony_ci    RemoteAnimation::windowAnimationController_ = iface_cast<RSIWindowAnimationController>(iRemoteObjectMocker);
116e0dac50fSopenharmony_ci    windowController_->StartingWindow(transitionInfo_, nullptr, 0, true);
117e0dac50fSopenharmony_ci    ASSERT_EQ(1, windowRoot_->windowNodeMap_.size());
118e0dac50fSopenharmony_ci
119e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
120e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(node_->GetWindowId(), node_));
121e0dac50fSopenharmony_ci    node_->abilityToken_ = abilityTokenMocker;
122e0dac50fSopenharmony_ci    node_->stateMachine_.currState_ = WindowNodeState::SHOW_ANIMATION_PLAYING;
123e0dac50fSopenharmony_ci    windowController_->StartingWindow(transitionInfo_, nullptr, 0, false);
124e0dac50fSopenharmony_ci    ASSERT_EQ(1, windowRoot_->windowNodeMap_.size());
125e0dac50fSopenharmony_ci
126e0dac50fSopenharmony_ci    node_->stateMachine_.currState_ = WindowNodeState::STARTING_CREATED;
127e0dac50fSopenharmony_ci    windowController_->StartingWindow(transitionInfo_, nullptr, 0, false);
128e0dac50fSopenharmony_ci    transitionInfo_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
129e0dac50fSopenharmony_ci    windowController_->StartingWindow(transitionInfo_, nullptr, 0, false);
130e0dac50fSopenharmony_ci    transitionInfo_->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
131e0dac50fSopenharmony_ci    node_->property_->modeSupportInfo_ = WindowModeSupport::WINDOW_MODE_SUPPORT_ALL;
132e0dac50fSopenharmony_ci    windowController_->StartingWindow(transitionInfo_, nullptr, 0, false);
133e0dac50fSopenharmony_ci    ASSERT_EQ(1, windowRoot_->windowNodeMap_.size());
134e0dac50fSopenharmony_ci
135e0dac50fSopenharmony_ci    // Cancel starting window
136e0dac50fSopenharmony_ci    windowController_->CancelStartingWindow(nullptr);
137e0dac50fSopenharmony_ci    windowController_->CancelStartingWindow(abilityTokenMocker);
138e0dac50fSopenharmony_ci
139e0dac50fSopenharmony_ci    node_->startingWindowShown_ = true;
140e0dac50fSopenharmony_ci    windowController_->CancelStartingWindow(abilityTokenMocker);
141e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowRoot_->windowNodeMap_.size());
142e0dac50fSopenharmony_ci
143e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
144e0dac50fSopenharmony_ci    RemoteAnimation::windowAnimationController_ = nullptr;
145e0dac50fSopenharmony_ci}
146e0dac50fSopenharmony_ci
147e0dac50fSopenharmony_ci/**
148e0dac50fSopenharmony_ci * @tc.name: NotifyWindowTransition
149e0dac50fSopenharmony_ci * @tc.desc: Window controller notify window transtition
150e0dac50fSopenharmony_ci * @tc.type: FUNC
151e0dac50fSopenharmony_ci */
152e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, NotifyWindowTransition, Function | SmallTest | Level3)
153e0dac50fSopenharmony_ci{
154e0dac50fSopenharmony_ci    sptr<WindowTransitionInfo> srcInfo = nullptr;
155e0dac50fSopenharmony_ci    sptr<WindowTransitionInfo> dstInfo = nullptr;
156e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NO_REMOTE_ANIMATION, windowController_->NotifyWindowTransition(srcInfo, dstInfo));
157e0dac50fSopenharmony_ci
158e0dac50fSopenharmony_ci    srcInfo = new WindowTransitionInfo();
159e0dac50fSopenharmony_ci    sptr<IRemoteObject> srcAbilityTokenMocker = new IRemoteObjectMocker();
160e0dac50fSopenharmony_ci    srcInfo->SetAbilityToken(srcAbilityTokenMocker);
161e0dac50fSopenharmony_ci    sptr<WindowNode> srcNode = StartingWindow::CreateWindowNode(srcInfo, 102); // 102 is windowId
162e0dac50fSopenharmony_ci    srcNode->property_->modeSupportInfo_ = WindowModeSupport::WINDOW_MODE_SUPPORT_ALL;
163e0dac50fSopenharmony_ci
164e0dac50fSopenharmony_ci    dstInfo = new WindowTransitionInfo();
165e0dac50fSopenharmony_ci    sptr<IRemoteObject> dstAbilityTokenMocker = new IRemoteObjectMocker();
166e0dac50fSopenharmony_ci    dstInfo->SetAbilityToken(dstAbilityTokenMocker);
167e0dac50fSopenharmony_ci    sptr<WindowNode> dstNode = StartingWindow::CreateWindowNode(dstInfo, 103); // 103 is windowId
168e0dac50fSopenharmony_ci    dstNode->property_->modeSupportInfo_ = WindowModeSupport::WINDOW_MODE_SUPPORT_ALL;
169e0dac50fSopenharmony_ci
170e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
171e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(srcNode->GetWindowId(), srcNode));
172e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(dstNode->GetWindowId(), dstNode));
173e0dac50fSopenharmony_ci
174e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = new DisplayInfo();
175e0dac50fSopenharmony_ci    sptr<WindowNodeContainer> container = new WindowNodeContainer(displayInfo, 0);
176e0dac50fSopenharmony_ci    windowRoot_->windowNodeContainerMap_.insert(std::make_pair(0, container));
177e0dac50fSopenharmony_ci
178e0dac50fSopenharmony_ci    sptr<MockRSIWindowAnimationController> mock = new MockRSIWindowAnimationController();
179e0dac50fSopenharmony_ci    RemoteAnimation::windowAnimationController_ = mock;
180e0dac50fSopenharmony_ci    RemoteAnimation::windowRoot_ = windowRoot_;
181e0dac50fSopenharmony_ci    RemoteAnimation::animationFirst_ = true;
182e0dac50fSopenharmony_ci
183e0dac50fSopenharmony_ci    srcInfo->SetTransitionReason(TransitionReason::MINIMIZE);
184e0dac50fSopenharmony_ci    srcNode->stateMachine_.currState_ = WindowNodeState::HIDDEN;
185e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NO_REMOTE_ANIMATION, windowController_->NotifyWindowTransition(srcInfo, dstInfo));
186e0dac50fSopenharmony_ci
187e0dac50fSopenharmony_ci    srcInfo->SetTransitionReason(TransitionReason::MINIMIZE);
188e0dac50fSopenharmony_ci    srcNode->stateMachine_.currState_ = WindowNodeState::STARTING_CREATED;
189e0dac50fSopenharmony_ci    EXPECT_CALL(*mock, OnMinimizeWindow(_, _)).Times(1);
190e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->NotifyWindowTransition(srcInfo, dstInfo));
191e0dac50fSopenharmony_ci
192e0dac50fSopenharmony_ci    srcInfo->SetTransitionReason(TransitionReason::CLOSE);
193e0dac50fSopenharmony_ci    srcNode->stateMachine_.currState_ = WindowNodeState::STARTING_CREATED;
194e0dac50fSopenharmony_ci    EXPECT_CALL(*mock, OnCloseWindow(_, _)).Times(1);
195e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->NotifyWindowTransition(srcInfo, dstInfo));
196e0dac50fSopenharmony_ci
197e0dac50fSopenharmony_ci    srcInfo->SetTransitionReason(TransitionReason::BACK_TRANSITION);
198e0dac50fSopenharmony_ci    srcNode->stateMachine_.currState_ = WindowNodeState::STARTING_CREATED;
199e0dac50fSopenharmony_ci    EXPECT_CALL(*mock, OnAppBackTransition(_, _, _)).Times(1);
200e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->NotifyWindowTransition(srcInfo, dstInfo));
201e0dac50fSopenharmony_ci
202e0dac50fSopenharmony_ci    srcInfo->SetTransitionReason(TransitionReason::ABILITY_TRANSITION);
203e0dac50fSopenharmony_ci    dstNode->stateMachine_.currState_ = WindowNodeState::STARTING_CREATED;
204e0dac50fSopenharmony_ci    dstNode->property_->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
205e0dac50fSopenharmony_ci    dstNode->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
206e0dac50fSopenharmony_ci    EXPECT_CALL(*mock, OnStartApp(_, _, _)).Times(1);
207e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->NotifyWindowTransition(srcInfo, dstInfo));
208e0dac50fSopenharmony_ci
209e0dac50fSopenharmony_ci    dstNode->stateMachine_.currState_ = WindowNodeState::STARTING_CREATED;
210e0dac50fSopenharmony_ci    dstNode->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
211e0dac50fSopenharmony_ci    EXPECT_CALL(*mock, OnStartApp(_, _, _)).Times(1);
212e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->NotifyWindowTransition(srcInfo, dstInfo));
213e0dac50fSopenharmony_ci
214e0dac50fSopenharmony_ci    windowRoot_->windowNodeContainerMap_.clear();
215e0dac50fSopenharmony_ci    RemoteAnimation::windowAnimationController_ = nullptr;
216e0dac50fSopenharmony_ci}
217e0dac50fSopenharmony_ci
218e0dac50fSopenharmony_ci/**
219e0dac50fSopenharmony_ci * @tc.name: FocusWindow
220e0dac50fSopenharmony_ci * @tc.desc: Window controller focus window
221e0dac50fSopenharmony_ci * @tc.type: FUNC
222e0dac50fSopenharmony_ci */
223e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, FocusWindow, Function | SmallTest | Level3)
224e0dac50fSopenharmony_ci{
225e0dac50fSopenharmony_ci    sptr<IRemoteObject> abilityToken = nullptr;
226e0dac50fSopenharmony_ci    windowController_->GetFocusWindowInfo(abilityToken);
227e0dac50fSopenharmony_ci
228e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = new DisplayInfo();
229e0dac50fSopenharmony_ci    sptr<WindowNodeContainer> container = new WindowNodeContainer(displayInfo, 0);
230e0dac50fSopenharmony_ci    windowRoot_->windowNodeContainerMap_.insert(std::make_pair(0, container));
231e0dac50fSopenharmony_ci
232e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode;
233e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, windowController_->GetFocusWindowNode(0, windowNode));
234e0dac50fSopenharmony_ci
235e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
236e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(node_->GetWindowId(), node_));
237e0dac50fSopenharmony_ci    container->focusedWindow_ = node_->GetWindowId();
238e0dac50fSopenharmony_ci    node_->currentVisibility_ = false;
239e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_WINDOW, windowController_->GetFocusWindowNode(0, windowNode));
240e0dac50fSopenharmony_ci
241e0dac50fSopenharmony_ci    node_->currentVisibility_ = true;
242e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->GetFocusWindowNode(0, windowNode));
243e0dac50fSopenharmony_ci    windowRoot_->windowNodeContainerMap_.clear();
244e0dac50fSopenharmony_ci}
245e0dac50fSopenharmony_ci
246e0dac50fSopenharmony_ci/**
247e0dac50fSopenharmony_ci * @tc.name: CreateWindow
248e0dac50fSopenharmony_ci * @tc.desc: Window controller create window
249e0dac50fSopenharmony_ci * @tc.type: FUNC
250e0dac50fSopenharmony_ci */
251e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, CreateWindow, Function | SmallTest | Level3)
252e0dac50fSopenharmony_ci{
253e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
254e0dac50fSopenharmony_ci    sptr<IWindow> window;
255e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
256e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
257e0dac50fSopenharmony_ci
258e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
259e0dac50fSopenharmony_ci    property2->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
260e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property2);
261e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1,windowNode));
262e0dac50fSopenharmony_ci    sptr<WindowProperty> property3 = new WindowProperty();
263e0dac50fSopenharmony_ci    property3->SetWindowType(WindowType::BELOW_APP_SYSTEM_WINDOW_BASE);
264e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode2 = new WindowNode(property3);
265e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(2,windowNode2));
266e0dac50fSopenharmony_ci
267e0dac50fSopenharmony_ci    uint32_t windowId;
268e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
269e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR,
270e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
271e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
272e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "SurfaceNode";
273e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
274e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
275e0dac50fSopenharmony_ci
276e0dac50fSopenharmony_ci    property->SetParentId(1);
277e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
278e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_PARENT,
279e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
280e0dac50fSopenharmony_ci
281e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
282e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
283e0dac50fSopenharmony_ci
284e0dac50fSopenharmony_ci    property->SetParentId(2);
285e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_SYSTEM_SUB_WINDOW);
286e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
287e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
288e0dac50fSopenharmony_ci
289e0dac50fSopenharmony_ci    sptr<IRemoteObject> abilityTokenMocker = new IRemoteObjectMocker();
290e0dac50fSopenharmony_ci    node_->abilityToken_ = abilityTokenMocker;
291e0dac50fSopenharmony_ci
292e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
293e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
294e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
295e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, abilityTokenMocker, 0, 0));
296e0dac50fSopenharmony_ci
297e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
298e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_PARENT,
299e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, abilityTokenMocker, 0, 0));
300e0dac50fSopenharmony_ci
301e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
302e0dac50fSopenharmony_ci    node_->startingWindowShown_ = false;
303e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
304e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, abilityTokenMocker, 0, 0));
305e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
306e0dac50fSopenharmony_ci}
307e0dac50fSopenharmony_ci
308e0dac50fSopenharmony_ci/**
309e0dac50fSopenharmony_ci * @tc.name: NotifyAfterAddWindow
310e0dac50fSopenharmony_ci * @tc.desc: Window controller notify after add window
311e0dac50fSopenharmony_ci * @tc.type: FUNC
312e0dac50fSopenharmony_ci */
313e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, NotifyAfterAddWindow, Function | SmallTest | Level3)
314e0dac50fSopenharmony_ci{
315e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowController_);
316e0dac50fSopenharmony_ci    sptr<WindowNode> node0 = new WindowNode();
317e0dac50fSopenharmony_ci    windowController_->NotifyAfterAddWindow(node0);
318e0dac50fSopenharmony_ci    ASSERT_EQ(0, node0->children_.size());
319e0dac50fSopenharmony_ci
320e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode();
321e0dac50fSopenharmony_ci    node1->currentVisibility_ = false;
322e0dac50fSopenharmony_ci    sptr<WindowNode> node2= new WindowNode();
323e0dac50fSopenharmony_ci    node2->currentVisibility_ = true;
324e0dac50fSopenharmony_ci
325e0dac50fSopenharmony_ci    node0->children_.push_back(node1);
326e0dac50fSopenharmony_ci    node0->children_.push_back(node2);
327e0dac50fSopenharmony_ci    windowController_->NotifyAfterAddWindow(node0);
328e0dac50fSopenharmony_ci    ASSERT_EQ(2, node0->children_.size());
329e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, node0->children_[0]->abilityToken_);
330e0dac50fSopenharmony_ci}
331e0dac50fSopenharmony_ci
332e0dac50fSopenharmony_ci/**
333e0dac50fSopenharmony_ci * @tc.name: AddWindowNode
334e0dac50fSopenharmony_ci * @tc.desc: Window controller add window node
335e0dac50fSopenharmony_ci * @tc.type: FUNC
336e0dac50fSopenharmony_ci */
337e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, AddWindowNode, Function | SmallTest | Level3)
338e0dac50fSopenharmony_ci{
339e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
340e0dac50fSopenharmony_ci    property->SetWindowId(0);
341e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, windowController_->AddWindowNode(property));
342e0dac50fSopenharmony_ci
343e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
344e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(node_->GetWindowId(), node_));
345e0dac50fSopenharmony_ci    property->SetWindowId(node_->GetWindowId());
346e0dac50fSopenharmony_ci    node_->currentVisibility_ = true;
347e0dac50fSopenharmony_ci    node_->startingWindowShown_ = false;
348e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, windowController_->AddWindowNode(property));
349e0dac50fSopenharmony_ci
350e0dac50fSopenharmony_ci    node_->currentVisibility_ = false;
351e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, windowController_->AddWindowNode(property));
352e0dac50fSopenharmony_ci
353e0dac50fSopenharmony_ci    Rect requestRect{0, 0, 100, 100};
354e0dac50fSopenharmony_ci    property->SetRequestRect(requestRect);
355e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, windowController_->AddWindowNode(property));
356e0dac50fSopenharmony_ci
357e0dac50fSopenharmony_ci    node_->startingWindowShown_ = true;
358e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, windowController_->AddWindowNode(property));
359e0dac50fSopenharmony_ci
360e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
361e0dac50fSopenharmony_ci}
362e0dac50fSopenharmony_ci
363e0dac50fSopenharmony_ci/**
364e0dac50fSopenharmony_ci * @tc.name: InputCallingWindow
365e0dac50fSopenharmony_ci * @tc.desc: Window controller input calling window
366e0dac50fSopenharmony_ci * @tc.type: FUNC
367e0dac50fSopenharmony_ci */
368e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, InputCallingWindow, Function | SmallTest | Level3)
369e0dac50fSopenharmony_ci{
370e0dac50fSopenharmony_ci    windowController_->callingWindowId_ = 0;
371e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
372e0dac50fSopenharmony_ci    sptr<WindowNode> node = new WindowNode();
373e0dac50fSopenharmony_ci    node->property_->callingWindow_ = 0;
374e0dac50fSopenharmony_ci    node->property_->displayId_ = DISPLAY_ID_INVALID;
375e0dac50fSopenharmony_ci    windowController_->ResizeSoftInputCallingWindowIfNeed(node);
376e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->callingWindowId_);
377e0dac50fSopenharmony_ci
378e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = new DisplayInfo();
379e0dac50fSopenharmony_ci    sptr<WindowNodeContainer> container = new WindowNodeContainer(displayInfo, 0);
380e0dac50fSopenharmony_ci    windowRoot_->windowNodeContainerMap_.insert(std::make_pair(0, container));
381e0dac50fSopenharmony_ci    node->property_->displayId_ = 0;
382e0dac50fSopenharmony_ci    windowController_->ResizeSoftInputCallingWindowIfNeed(node);
383e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->callingWindowId_);
384e0dac50fSopenharmony_ci
385e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(node_->GetWindowId(), node_));
386e0dac50fSopenharmony_ci    container->focusedWindow_ = node_->GetWindowId();
387e0dac50fSopenharmony_ci    node_->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
388e0dac50fSopenharmony_ci    node_->currentVisibility_ = false;
389e0dac50fSopenharmony_ci    windowController_->ResizeSoftInputCallingWindowIfNeed(node);
390e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->callingWindowId_);
391e0dac50fSopenharmony_ci
392e0dac50fSopenharmony_ci    node_->currentVisibility_ = true;
393e0dac50fSopenharmony_ci    node_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
394e0dac50fSopenharmony_ci    windowController_->ResizeSoftInputCallingWindowIfNeed(node);
395e0dac50fSopenharmony_ci
396e0dac50fSopenharmony_ci    node_->currentVisibility_ = true;
397e0dac50fSopenharmony_ci    node_->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
398e0dac50fSopenharmony_ci    windowController_->ResizeSoftInputCallingWindowIfNeed(node);
399e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->callingWindowId_);
400e0dac50fSopenharmony_ci
401e0dac50fSopenharmony_ci    windowController_->callingWindowId_ = node_->GetWindowId();
402e0dac50fSopenharmony_ci    windowController_->callingWindowRestoringRect_ = {0, 0, 0, 0};
403e0dac50fSopenharmony_ci    windowController_->RestoreCallingWindowSizeIfNeed();
404e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->callingWindowId_);
405e0dac50fSopenharmony_ci
406e0dac50fSopenharmony_ci    windowController_->callingWindowRestoringRect_ = {0, 0, 1, 1};
407e0dac50fSopenharmony_ci    windowController_->callingWindowId_ = 0;
408e0dac50fSopenharmony_ci    windowController_->RestoreCallingWindowSizeIfNeed();
409e0dac50fSopenharmony_ci
410e0dac50fSopenharmony_ci    windowController_->callingWindowId_ = node_->GetWindowId();
411e0dac50fSopenharmony_ci    windowController_->RestoreCallingWindowSizeIfNeed();
412e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->callingWindowId_);
413e0dac50fSopenharmony_ci
414e0dac50fSopenharmony_ci    windowController_->callingWindowId_ = node_->GetWindowId();
415e0dac50fSopenharmony_ci    node_->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
416e0dac50fSopenharmony_ci    windowController_->RestoreCallingWindowSizeIfNeed();
417e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->callingWindowId_);
418e0dac50fSopenharmony_ci
419e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
420e0dac50fSopenharmony_ci    windowRoot_->windowNodeContainerMap_.clear();
421e0dac50fSopenharmony_ci}
422e0dac50fSopenharmony_ci
423e0dac50fSopenharmony_ci/**
424e0dac50fSopenharmony_ci * @tc.name: SetDefaultDisplayInfo
425e0dac50fSopenharmony_ci * @tc.desc: Window controller set default display info
426e0dac50fSopenharmony_ci * @tc.type: FUNC
427e0dac50fSopenharmony_ci */
428e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, SetDefaultDisplayInfo, Function | SmallTest | Level3)
429e0dac50fSopenharmony_ci{
430e0dac50fSopenharmony_ci    const int32_t displayWidth = 100;
431e0dac50fSopenharmony_ci    const int32_t displayHeight = 200;
432e0dac50fSopenharmony_ci    windowController_->defaultDisplayRect_ = { 0, 0, 0, 0 };
433e0dac50fSopenharmony_ci
434e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = nullptr;
435e0dac50fSopenharmony_ci    windowController_->SetDefaultDisplayInfo(0, displayInfo);
436e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->defaultDisplayRect_.width_);
437e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->defaultDisplayRect_.height_);
438e0dac50fSopenharmony_ci
439e0dac50fSopenharmony_ci    displayInfo = new DisplayInfo();
440e0dac50fSopenharmony_ci    displayInfo->id_ = 1;
441e0dac50fSopenharmony_ci    displayInfo->width_ = displayWidth;
442e0dac50fSopenharmony_ci    displayInfo->height_ = displayHeight;
443e0dac50fSopenharmony_ci
444e0dac50fSopenharmony_ci    windowController_->SetDefaultDisplayInfo(0, displayInfo);
445e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->defaultDisplayRect_.width_);
446e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->defaultDisplayRect_.height_);
447e0dac50fSopenharmony_ci
448e0dac50fSopenharmony_ci    displayInfo->id_ = 0;
449e0dac50fSopenharmony_ci    windowController_->SetDefaultDisplayInfo(0, displayInfo);
450e0dac50fSopenharmony_ci    ASSERT_EQ(displayWidth, windowController_->defaultDisplayRect_.width_);
451e0dac50fSopenharmony_ci    ASSERT_EQ(displayHeight, windowController_->defaultDisplayRect_.height_);
452e0dac50fSopenharmony_ci}
453e0dac50fSopenharmony_ci
454e0dac50fSopenharmony_ci/**
455e0dac50fSopenharmony_ci * @tc.name: ProcessDisplayCompression
456e0dac50fSopenharmony_ci * @tc.desc: Window controller process display compression
457e0dac50fSopenharmony_ci * @tc.type: FUNC
458e0dac50fSopenharmony_ci */
459e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ProcessDisplayCompression, Function | SmallTest | Level3)
460e0dac50fSopenharmony_ci{
461e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowController_);
462e0dac50fSopenharmony_ci    DisplayId defaultDisplayId = 0;
463e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = new DisplayInfo();
464e0dac50fSopenharmony_ci    displayInfo->id_ = 1;
465e0dac50fSopenharmony_ci    windowController_->ProcessDisplayCompression(defaultDisplayId, displayInfo);
466e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowController_->maskingSurfaceNode_);
467e0dac50fSopenharmony_ci
468e0dac50fSopenharmony_ci    displayInfo->id_ = defaultDisplayId;
469e0dac50fSopenharmony_ci    displayInfo->waterfallDisplayCompressionStatus_ = false;
470e0dac50fSopenharmony_ci    windowController_->ProcessDisplayCompression(defaultDisplayId, displayInfo);
471e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowController_->maskingSurfaceNode_);
472e0dac50fSopenharmony_ci
473e0dac50fSopenharmony_ci    displayInfo->waterfallDisplayCompressionStatus_ = true;
474e0dac50fSopenharmony_ci    windowController_->ProcessDisplayCompression(defaultDisplayId, displayInfo);
475e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowController_->maskingSurfaceNode_);
476e0dac50fSopenharmony_ci}
477e0dac50fSopenharmony_ci
478e0dac50fSopenharmony_ci/**
479e0dac50fSopenharmony_ci * @tc.name: StopBootAnimationIfNeed
480e0dac50fSopenharmony_ci * @tc.desc: Window controller stop boot animation if need
481e0dac50fSopenharmony_ci * @tc.type: FUNC
482e0dac50fSopenharmony_ci */
483e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, StopBootAnimationIfNeed, Function | SmallTest | Level3)
484e0dac50fSopenharmony_ci{
485e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowController_);
486e0dac50fSopenharmony_ci
487e0dac50fSopenharmony_ci    sptr<WindowNode> node = nullptr;
488e0dac50fSopenharmony_ci    windowController_->isBootAnimationStopped_ = true;
489e0dac50fSopenharmony_ci    windowController_->StopBootAnimationIfNeed(node);
490e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowController_->isBootAnimationStopped_);
491e0dac50fSopenharmony_ci
492e0dac50fSopenharmony_ci    windowController_->isBootAnimationStopped_ = false;
493e0dac50fSopenharmony_ci    windowController_->StopBootAnimationIfNeed(node);
494e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowController_->isBootAnimationStopped_);
495e0dac50fSopenharmony_ci
496e0dac50fSopenharmony_ci    node = new WindowNode();
497e0dac50fSopenharmony_ci    node->SetDisplayId(DISPLAY_ID_INVALID + 1);
498e0dac50fSopenharmony_ci    windowController_->StopBootAnimationIfNeed(node);
499e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowController_->isBootAnimationStopped_);
500e0dac50fSopenharmony_ci
501e0dac50fSopenharmony_ci    node->SetDisplayId(DISPLAY_ID_INVALID);
502e0dac50fSopenharmony_ci    windowController_->StopBootAnimationIfNeed(node);
503e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowController_->isBootAnimationStopped_);
504e0dac50fSopenharmony_ci}
505e0dac50fSopenharmony_ci
506e0dac50fSopenharmony_ci/**
507e0dac50fSopenharmony_ci * @tc.name: GetEmbedNodeId
508e0dac50fSopenharmony_ci * @tc.desc: Window controller get embed node id
509e0dac50fSopenharmony_ci * @tc.type: FUNC
510e0dac50fSopenharmony_ci */
511e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, GetEmbedNodeId, Function | SmallTest | Level3)
512e0dac50fSopenharmony_ci{
513e0dac50fSopenharmony_ci    std::vector<sptr<WindowNode>> windowNodes;
514e0dac50fSopenharmony_ci    sptr<WindowNode> node0 = nullptr;
515e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode();
516e0dac50fSopenharmony_ci    node1->property_->windowId_ = 1;
517e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode();
518e0dac50fSopenharmony_ci    node2->property_->windowId_ = 2;
519e0dac50fSopenharmony_ci    sptr<WindowNode> node3 = new WindowNode();
520e0dac50fSopenharmony_ci    node3->property_->windowId_ = 3;
521e0dac50fSopenharmony_ci
522e0dac50fSopenharmony_ci    node1->property_->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
523e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->GetEmbedNodeId(windowNodes, node1));
524e0dac50fSopenharmony_ci
525e0dac50fSopenharmony_ci    node1->property_->SetWindowType(WindowType::WINDOW_TYPE_APP_COMPONENT);
526e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowController_->GetEmbedNodeId(windowNodes, node1));
527e0dac50fSopenharmony_ci
528e0dac50fSopenharmony_ci    windowNodes.push_back(node0);
529e0dac50fSopenharmony_ci    windowNodes.push_back(node2);
530e0dac50fSopenharmony_ci    windowNodes.push_back(node1);
531e0dac50fSopenharmony_ci    windowNodes.push_back(node2);
532e0dac50fSopenharmony_ci    windowNodes.push_back(node3);
533e0dac50fSopenharmony_ci
534e0dac50fSopenharmony_ci    node1->SetWindowRect({50, 50, 50, 50});
535e0dac50fSopenharmony_ci    node3->SetWindowRect({0, 0, 200, 200});
536e0dac50fSopenharmony_ci    ASSERT_EQ(node3->GetWindowId(), windowController_->GetEmbedNodeId(windowNodes, node1));
537e0dac50fSopenharmony_ci}
538e0dac50fSopenharmony_ci
539e0dac50fSopenharmony_ci/**
540e0dac50fSopenharmony_ci * @tc.name: BindDialogTarget
541e0dac50fSopenharmony_ci * @tc.desc: Window controller bind dialog target
542e0dac50fSopenharmony_ci * @tc.type: FUNC
543e0dac50fSopenharmony_ci */
544e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, BindDialogTarget, Function | SmallTest | Level3)
545e0dac50fSopenharmony_ci{
546e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
547e0dac50fSopenharmony_ci
548e0dac50fSopenharmony_ci    uint32_t id = 0;
549e0dac50fSopenharmony_ci    sptr<IRemoteObject> abilityTokenMocker = new IRemoteObjectMocker();
550e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, windowController_->BindDialogTarget(id, abilityTokenMocker));
551e0dac50fSopenharmony_ci
552e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(node_->GetWindowId(), node_));
553e0dac50fSopenharmony_ci    id = node_->GetWindowId();
554e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->BindDialogTarget(id, abilityTokenMocker));
555e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
556e0dac50fSopenharmony_ci}
557e0dac50fSopenharmony_ci
558e0dac50fSopenharmony_ci/**
559e0dac50fSopenharmony_ci * @tc.name: RaiseToAppTop
560e0dac50fSopenharmony_ci * @tc.desc: check app subwindow raise to top
561e0dac50fSopenharmony_ci * @tc.type: FUNC
562e0dac50fSopenharmony_ci */
563e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, RaiseToAppTop, Function | SmallTest | Level3)
564e0dac50fSopenharmony_ci{
565e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
566e0dac50fSopenharmony_ci
567e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new (std::nothrow)WindowNode();
568e0dac50fSopenharmony_ci    windowNode->property_->windowId_ = 100;
569e0dac50fSopenharmony_ci    windowNode->SetDisplayId(DISPLAY_ID_INVALID);
570e0dac50fSopenharmony_ci
571e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
572e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_DO_NOTHING, windowController_->RaiseToAppTop(windowId));
573e0dac50fSopenharmony_ci
574e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(windowNode->GetWindowId(), windowNode));
575e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_PARENT, windowController_->RaiseToAppTop(windowId));
576e0dac50fSopenharmony_ci
577e0dac50fSopenharmony_ci    sptr<WindowNode> parentWindow = new (std::nothrow)WindowNode();
578e0dac50fSopenharmony_ci    parentWindow->property_->windowId_ = 90;
579e0dac50fSopenharmony_ci    parentWindow->SetDisplayId(DISPLAY_ID_INVALID);
580e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(parentWindow->GetWindowId(), parentWindow));
581e0dac50fSopenharmony_ci
582e0dac50fSopenharmony_ci    windowNode->parent_ = parentWindow;
583e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_DO_NOTHING, windowController_->RaiseToAppTop(windowId));
584e0dac50fSopenharmony_ci
585e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
586e0dac50fSopenharmony_ci}
587e0dac50fSopenharmony_ci
588e0dac50fSopenharmony_ci/**
589e0dac50fSopenharmony_ci * @tc.name: GetFocusWindowInfo
590e0dac50fSopenharmony_ci * @tc.desc: Window controller focus window
591e0dac50fSopenharmony_ci * @tc.type: FUNC
592e0dac50fSopenharmony_ci */
593e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, GetFocusWindowInfo, Function | SmallTest | Level3)
594e0dac50fSopenharmony_ci{
595e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = new DisplayInfo();
596e0dac50fSopenharmony_ci    sptr<WindowNodeContainer> container = new WindowNodeContainer(displayInfo, 0);
597e0dac50fSopenharmony_ci    windowRoot_->windowNodeContainerMap_.insert(std::make_pair(0, container));
598e0dac50fSopenharmony_ci
599e0dac50fSopenharmony_ci    FocusChangeInfo focusInfo;
600e0dac50fSopenharmony_ci    WMError res = windowController_->GetFocusWindowInfo(focusInfo);
601e0dac50fSopenharmony_ci    windowRoot_->windowNodeContainerMap_.clear();
602e0dac50fSopenharmony_ci    ASSERT_EQ(res, WMError::WM_ERROR_INVALID_WINDOW);
603e0dac50fSopenharmony_ci}
604e0dac50fSopenharmony_ci
605e0dac50fSopenharmony_ci/**
606e0dac50fSopenharmony_ci * @tc.name: CheckParentWindowValid
607e0dac50fSopenharmony_ci * @tc.desc: Window controller CheckParentWindowValid
608e0dac50fSopenharmony_ci * @tc.type: FUNC
609e0dac50fSopenharmony_ci */
610e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, CreateWindow01, Function | SmallTest | Level3)
611e0dac50fSopenharmony_ci{
612e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
613e0dac50fSopenharmony_ci    sptr<IWindow> window;
614e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
615e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
616e0dac50fSopenharmony_ci
617e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
618e0dac50fSopenharmony_ci    property2->SetWindowType(WindowType::SYSTEM_SUB_WINDOW_BASE);
619e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property2);
620e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
621e0dac50fSopenharmony_ci    sptr<WindowProperty> property3 = new WindowProperty();
622e0dac50fSopenharmony_ci    property3->SetWindowType(WindowType::SYSTEM_SUB_WINDOW_BASE);
623e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode2 = new WindowNode(property3);
624e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(2, windowNode2));
625e0dac50fSopenharmony_ci
626e0dac50fSopenharmony_ci    uint32_t windowId;
627e0dac50fSopenharmony_ci    property->SetParentId(1);
628e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_SUB_WINDOW_BASE);
629e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
630e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "CheckParentWindowValid";
631e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
632e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
633e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
634e0dac50fSopenharmony_ci
635e0dac50fSopenharmony_ci    property2->SetParentId(INVALID_WINDOW_ID);
636e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_PARENT,
637e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property2, surfaceNode, windowId, nullptr, 0, 0));
638e0dac50fSopenharmony_ci
639e0dac50fSopenharmony_ci    property3->SetParentId(1);
640e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_PARENT,
641e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property2, surfaceNode, windowId, nullptr, 0, 0));
642e0dac50fSopenharmony_ci}
643e0dac50fSopenharmony_ci
644e0dac50fSopenharmony_ci/**
645e0dac50fSopenharmony_ci * @tc.name: CheckMultiDialogWindows
646e0dac50fSopenharmony_ci * @tc.desc: Window controller CheckParentWindowValid
647e0dac50fSopenharmony_ci * @tc.type: FUNC
648e0dac50fSopenharmony_ci */
649e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, CreateWindow02, Function | SmallTest | Level3)
650e0dac50fSopenharmony_ci{
651e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
652e0dac50fSopenharmony_ci    sptr<IWindow> window;
653e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
654e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
655e0dac50fSopenharmony_ci
656e0dac50fSopenharmony_ci    uint32_t windowId;
657e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
658e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
659e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
660e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "CheckMultiDialogWindows";
661e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
662e0dac50fSopenharmony_ci    sptr<IRemoteObject> abilityTokenMocker = new IRemoteObjectMocker();
663e0dac50fSopenharmony_ci    node_->abilityToken_ = abilityTokenMocker;
664e0dac50fSopenharmony_ci
665e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
666e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, abilityTokenMocker, 0, 0));
667e0dac50fSopenharmony_ci}
668e0dac50fSopenharmony_ci
669e0dac50fSopenharmony_ci/**
670e0dac50fSopenharmony_ci * @tc.name: CheckMultiDialogWindows
671e0dac50fSopenharmony_ci * @tc.desc: Window controller CheckParentWindowValid
672e0dac50fSopenharmony_ci * @tc.type: FUNC
673e0dac50fSopenharmony_ci */
674e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, CreateWindow03, Function | SmallTest | Level3)
675e0dac50fSopenharmony_ci{
676e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
677e0dac50fSopenharmony_ci    sptr<IWindow> window;
678e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
679e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
680e0dac50fSopenharmony_ci
681e0dac50fSopenharmony_ci    uint32_t windowId;
682e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
683e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
684e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
685e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "CheckMultiDialogWindows1";
686e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
687e0dac50fSopenharmony_ci    sptr<IRemoteObject> abilityTokenMocker = new IRemoteObjectMocker();
688e0dac50fSopenharmony_ci    node_->abilityToken_ = abilityTokenMocker;
689e0dac50fSopenharmony_ci    node_->startingWindowShown_ = true;
690e0dac50fSopenharmony_ci
691e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
692e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, abilityTokenMocker, 0, 0));
693e0dac50fSopenharmony_ci}
694e0dac50fSopenharmony_ci
695e0dac50fSopenharmony_ci/**
696e0dac50fSopenharmony_ci * @tc.name: RemoveWindowNode
697e0dac50fSopenharmony_ci * @tc.desc: Window controller RemoveWindowNode
698e0dac50fSopenharmony_ci * @tc.type: FUNC
699e0dac50fSopenharmony_ci */
700e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, RemoveWindowNode, Function | SmallTest | Level3)
701e0dac50fSopenharmony_ci{
702e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
703e0dac50fSopenharmony_ci    sptr<IWindow> window;
704e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
705e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
706e0dac50fSopenharmony_ci
707e0dac50fSopenharmony_ci    uint32_t windowId;
708e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
709e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
710e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
711e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "RemoveWindowNode";
712e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
713e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
714e0dac50fSopenharmony_ci
715e0dac50fSopenharmony_ci    WMError res = windowController_->RemoveWindowNode(windowId, false);
716e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
717e0dac50fSopenharmony_ci}
718e0dac50fSopenharmony_ci
719e0dac50fSopenharmony_ci/**
720e0dac50fSopenharmony_ci * @tc.name: RemoveWindowNode
721e0dac50fSopenharmony_ci * @tc.desc: Window controller RemoveWindowNode
722e0dac50fSopenharmony_ci * @tc.type: FUNC
723e0dac50fSopenharmony_ci */
724e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, RemoveWindowNode1, Function | SmallTest | Level3)
725e0dac50fSopenharmony_ci{
726e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
727e0dac50fSopenharmony_ci    sptr<IWindow> window;
728e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
729e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
730e0dac50fSopenharmony_ci
731e0dac50fSopenharmony_ci    uint32_t windowId;
732e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
733e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
734e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
735e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "RemoveWindowNode1";
736e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
737e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
738e0dac50fSopenharmony_ci
739e0dac50fSopenharmony_ci    WMError res = windowController_->RemoveWindowNode(windowId, true);
740e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
741e0dac50fSopenharmony_ci}
742e0dac50fSopenharmony_ci
743e0dac50fSopenharmony_ci/**
744e0dac50fSopenharmony_ci * @tc.name: RemoveWindowNode
745e0dac50fSopenharmony_ci * @tc.desc: Window controller RemoveWindowNode
746e0dac50fSopenharmony_ci * @tc.type: FUNC
747e0dac50fSopenharmony_ci */
748e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, RemoveWindowNode2, Function | SmallTest | Level3)
749e0dac50fSopenharmony_ci{
750e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
751e0dac50fSopenharmony_ci    sptr<IWindow> window;
752e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
753e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
754e0dac50fSopenharmony_ci
755e0dac50fSopenharmony_ci    uint32_t windowId;
756e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
757e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_KEYGUARD);
758e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
759e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "RemoveWindowNode2";
760e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
761e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
762e0dac50fSopenharmony_ci
763e0dac50fSopenharmony_ci    WMError res = windowController_->RemoveWindowNode(windowId, true);
764e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
765e0dac50fSopenharmony_ci}
766e0dac50fSopenharmony_ci
767e0dac50fSopenharmony_ci/**
768e0dac50fSopenharmony_ci * @tc.name: DestroyWindow
769e0dac50fSopenharmony_ci * @tc.desc: Window controller DestroyWindow true
770e0dac50fSopenharmony_ci * @tc.type: FUNC
771e0dac50fSopenharmony_ci */
772e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, DestroyWindow, Function | SmallTest | Level3)
773e0dac50fSopenharmony_ci{
774e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
775e0dac50fSopenharmony_ci    sptr<IWindow> window;
776e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
777e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
778e0dac50fSopenharmony_ci
779e0dac50fSopenharmony_ci    uint32_t windowId;
780e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
781e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
782e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
783e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "DestroyWindow";
784e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
785e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
786e0dac50fSopenharmony_ci
787e0dac50fSopenharmony_ci    WMError res = windowController_->DestroyWindow(100, true);
788e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
789e0dac50fSopenharmony_ci
790e0dac50fSopenharmony_ci    res = windowController_->DestroyWindow(windowId, true);
791e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
792e0dac50fSopenharmony_ci}
793e0dac50fSopenharmony_ci
794e0dac50fSopenharmony_ci/**
795e0dac50fSopenharmony_ci * @tc.name: DestroyWindow1
796e0dac50fSopenharmony_ci * @tc.desc: Window controller DestroyWindow false
797e0dac50fSopenharmony_ci * @tc.type: FUNC
798e0dac50fSopenharmony_ci */
799e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, DestroyWindow1, Function | SmallTest | Level3)
800e0dac50fSopenharmony_ci{
801e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
802e0dac50fSopenharmony_ci    sptr<IWindow> window;
803e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
804e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
805e0dac50fSopenharmony_ci
806e0dac50fSopenharmony_ci    uint32_t windowId;
807e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
808e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
809e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
810e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "DestroyWindow1";
811e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
812e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
813e0dac50fSopenharmony_ci
814e0dac50fSopenharmony_ci    WMError res = windowController_->DestroyWindow(100, false);
815e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
816e0dac50fSopenharmony_ci
817e0dac50fSopenharmony_ci    res = windowController_->DestroyWindow(windowId, false);
818e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
819e0dac50fSopenharmony_ci}
820e0dac50fSopenharmony_ci
821e0dac50fSopenharmony_ci/**
822e0dac50fSopenharmony_ci * @tc.name: RequestFocus
823e0dac50fSopenharmony_ci * @tc.desc: Window controller RequestFocus false
824e0dac50fSopenharmony_ci * @tc.type: FUNC
825e0dac50fSopenharmony_ci */
826e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, RequestFocus, Function | SmallTest | Level3)
827e0dac50fSopenharmony_ci{
828e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
829e0dac50fSopenharmony_ci    sptr<IWindow> window;
830e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
831e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
832e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
833e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
834e0dac50fSopenharmony_ci
835e0dac50fSopenharmony_ci    uint32_t windowId;
836e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
837e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
838e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
839e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "RequestFocus";
840e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
841e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
842e0dac50fSopenharmony_ci
843e0dac50fSopenharmony_ci    WMError res = windowController_->RequestFocus(10);
844e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
845e0dac50fSopenharmony_ci
846e0dac50fSopenharmony_ci    windowId = windowNode->GetWindowId();
847e0dac50fSopenharmony_ci    res = windowController_->RequestFocus(windowId);
848e0dac50fSopenharmony_ci    if (!SceneBoardJudgement::IsSceneBoardEnabled()) {
849e0dac50fSopenharmony_ci        ASSERT_NE(WMError::WM_ERROR_INVALID_OPERATION, res);
850e0dac50fSopenharmony_ci    } else {
851e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
852e0dac50fSopenharmony_ci    }
853e0dac50fSopenharmony_ci}
854e0dac50fSopenharmony_ci
855e0dac50fSopenharmony_ci/**
856e0dac50fSopenharmony_ci * @tc.name: NotifyDisplayStateChange
857e0dac50fSopenharmony_ci * @tc.desc: Window controller NotifyDisplayStateChange
858e0dac50fSopenharmony_ci * @tc.type: FUNC
859e0dac50fSopenharmony_ci */
860e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, NotifyDisplayStateChange, Function | SmallTest | Level3)
861e0dac50fSopenharmony_ci{
862e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
863e0dac50fSopenharmony_ci    sptr<IWindow> window;
864e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
865e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
866e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
867e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
868e0dac50fSopenharmony_ci
869e0dac50fSopenharmony_ci    uint32_t windowId;
870e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
871e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
872e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
873e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "NotifyDisplayStateChange";
874e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
875e0dac50fSopenharmony_ci
876e0dac50fSopenharmony_ci    DisplayId defaultDisplayId = 0;
877e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = new DisplayInfo();
878e0dac50fSopenharmony_ci    std::map < DisplayId, sptr < DisplayInfo >> displayInfoMap;
879e0dac50fSopenharmony_ci
880e0dac50fSopenharmony_ci    DisplayStateChangeType type = DisplayStateChangeType::BEFORE_SUSPEND;
881e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo, displayInfoMap, type);
882e0dac50fSopenharmony_ci    type = DisplayStateChangeType::BEFORE_UNLOCK;
883e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo, displayInfoMap, type);
884e0dac50fSopenharmony_ci    type = DisplayStateChangeType::CREATE;
885e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo, displayInfoMap, type);
886e0dac50fSopenharmony_ci    type = DisplayStateChangeType::DESTROY;
887e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo, displayInfoMap, type);
888e0dac50fSopenharmony_ci    type = DisplayStateChangeType::VIRTUAL_PIXEL_RATIO_CHANGE;
889e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo, displayInfoMap, type);
890e0dac50fSopenharmony_ci    type = DisplayStateChangeType::UNKNOWN;
891e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo, displayInfoMap, type);
892e0dac50fSopenharmony_ci
893e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
894e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
895e0dac50fSopenharmony_ci}
896e0dac50fSopenharmony_ci
897e0dac50fSopenharmony_ci/**
898e0dac50fSopenharmony_ci * @tc.name: NotifyDisplayStateChange
899e0dac50fSopenharmony_ci * @tc.desc: Window controller NotifyDisplayStateChange
900e0dac50fSopenharmony_ci * @tc.type: FUNC
901e0dac50fSopenharmony_ci */
902e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, NotifyDisplayStateChange1, Function | SmallTest | Level3)
903e0dac50fSopenharmony_ci{
904e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
905e0dac50fSopenharmony_ci    sptr<IWindow> window;
906e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
907e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
908e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
909e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
910e0dac50fSopenharmony_ci
911e0dac50fSopenharmony_ci    uint32_t windowId;
912e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
913e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
914e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
915e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "NotifyDisplayStateChange1";
916e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
917e0dac50fSopenharmony_ci
918e0dac50fSopenharmony_ci    DisplayId defaultDisplayId = 0;
919e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = new DisplayInfo();
920e0dac50fSopenharmony_ci    std::map < DisplayId, sptr < DisplayInfo >> displayInfoMap;
921e0dac50fSopenharmony_ci
922e0dac50fSopenharmony_ci    DisplayStateChangeType type = DisplayStateChangeType::VIRTUAL_PIXEL_RATIO_CHANGE;
923e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo, displayInfoMap, type);
924e0dac50fSopenharmony_ci
925e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
926e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
927e0dac50fSopenharmony_ci}
928e0dac50fSopenharmony_ci
929e0dac50fSopenharmony_ci/**
930e0dac50fSopenharmony_ci * @tc.name: ProcessDisplayChange
931e0dac50fSopenharmony_ci * @tc.desc: Window controller ProcessDisplayChange
932e0dac50fSopenharmony_ci * @tc.type: FUNC
933e0dac50fSopenharmony_ci */
934e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ProcessDisplayChange, Function | SmallTest | Level3)
935e0dac50fSopenharmony_ci{
936e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
937e0dac50fSopenharmony_ci    sptr<IWindow> window;
938e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
939e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
940e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
941e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
942e0dac50fSopenharmony_ci
943e0dac50fSopenharmony_ci    uint32_t windowId;
944e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
945e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
946e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
947e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ProcessDisplayChange";
948e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
949e0dac50fSopenharmony_ci
950e0dac50fSopenharmony_ci    DisplayId defaultDisplayId = 0;
951e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = new DisplayInfo();
952e0dac50fSopenharmony_ci    std::map<DisplayId, sptr<DisplayInfo>> displayInfoMap;
953e0dac50fSopenharmony_ci    DisplayStateChangeType type = DisplayStateChangeType::VIRTUAL_PIXEL_RATIO_CHANGE;
954e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo, displayInfoMap, type);
955e0dac50fSopenharmony_ci
956e0dac50fSopenharmony_ci    displayInfo->SetDisplayId(defaultDisplayId);
957e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo, displayInfoMap, type);
958e0dac50fSopenharmony_ci
959e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo1 = nullptr;
960e0dac50fSopenharmony_ci    windowController_->NotifyDisplayStateChange(defaultDisplayId, displayInfo1, displayInfoMap, type);
961e0dac50fSopenharmony_ci
962e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
963e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
964e0dac50fSopenharmony_ci}
965e0dac50fSopenharmony_ci
966e0dac50fSopenharmony_ci/**
967e0dac50fSopenharmony_ci * @tc.name: ChangeMouseStyle
968e0dac50fSopenharmony_ci * @tc.desc: Window controller ChangeMouseStyle width > height
969e0dac50fSopenharmony_ci * @tc.type: FUNC
970e0dac50fSopenharmony_ci */
971e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ChangeMouseStyle1, Function | SmallTest | Level3)
972e0dac50fSopenharmony_ci{
973e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
974e0dac50fSopenharmony_ci    sptr<IWindow> window;
975e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
976e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
977e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
978e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
979e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
980e0dac50fSopenharmony_ci    windowNode->SetWindowRect({50, 50, 100, 50});
981e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
982e0dac50fSopenharmony_ci
983e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
984e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
985e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ChangeMouseStyle1";
986e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
987e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
988e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
989e0dac50fSopenharmony_ci
990e0dac50fSopenharmony_ci    sptr<MoveDragProperty> moveDragProperty;
991e0dac50fSopenharmony_ci    WMError res = windowController_->ChangeMouseStyle(windowId, moveDragProperty);
992e0dac50fSopenharmony_ci    if (SceneBoardJudgement::IsSceneBoardEnabled()) {
993e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
994e0dac50fSopenharmony_ci    } else {
995e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, res);
996e0dac50fSopenharmony_ci    }
997e0dac50fSopenharmony_ci}
998e0dac50fSopenharmony_ci
999e0dac50fSopenharmony_ci/**
1000e0dac50fSopenharmony_ci * @tc.name: ChangeMouseStyle
1001e0dac50fSopenharmony_ci * @tc.desc: Window controller ChangeMouseStyle width < height
1002e0dac50fSopenharmony_ci * @tc.type: FUNC
1003e0dac50fSopenharmony_ci */
1004e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ChangeMouseStyle2, Function | SmallTest | Level3)
1005e0dac50fSopenharmony_ci{
1006e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1007e0dac50fSopenharmony_ci    sptr<IWindow> window;
1008e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1009e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1010e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1011e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
1012e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1013e0dac50fSopenharmony_ci    windowNode->SetWindowRect({50, 50, 20, 50});
1014e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1015e0dac50fSopenharmony_ci
1016e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1017e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1018e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ChangeMouseStyle2";
1019e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1020e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1021e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1022e0dac50fSopenharmony_ci
1023e0dac50fSopenharmony_ci    sptr<MoveDragProperty> moveDragProperty;
1024e0dac50fSopenharmony_ci    WMError res = windowController_->ChangeMouseStyle(windowId, moveDragProperty);
1025e0dac50fSopenharmony_ci    if (SceneBoardJudgement::IsSceneBoardEnabled()) {
1026e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1027e0dac50fSopenharmony_ci    } else {
1028e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_OK, res);
1029e0dac50fSopenharmony_ci    }
1030e0dac50fSopenharmony_ci}
1031e0dac50fSopenharmony_ci
1032e0dac50fSopenharmony_ci/**
1033e0dac50fSopenharmony_ci * @tc.name: ChangeMouseStyle
1034e0dac50fSopenharmony_ci * @tc.desc: Window controller ChangeMouseStyle
1035e0dac50fSopenharmony_ci * @tc.type: FUNC
1036e0dac50fSopenharmony_ci */
1037e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ChangeMouseStyle3, Function | SmallTest | Level3)
1038e0dac50fSopenharmony_ci{
1039e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1040e0dac50fSopenharmony_ci    sptr<IWindow> window;
1041e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1042e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1043e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1044e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1045e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1046e0dac50fSopenharmony_ci    windowNode->SetWindowRect({50, 50, 50, 50});
1047e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1048e0dac50fSopenharmony_ci
1049e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1050e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1051e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ChangeMouseStyle3";
1052e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1053e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1054e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1055e0dac50fSopenharmony_ci
1056e0dac50fSopenharmony_ci    sptr<MoveDragProperty> moveDragProperty = new MoveDragProperty();
1057e0dac50fSopenharmony_ci    moveDragProperty->dragType_ = DragType::DRAG_UNDEFINED;
1058e0dac50fSopenharmony_ci    WMError res = windowController_->ChangeMouseStyle(windowId, moveDragProperty);
1059e0dac50fSopenharmony_ci    if (!SceneBoardJudgement::IsSceneBoardEnabled()) {
1060e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1061e0dac50fSopenharmony_ci    } else {
1062e0dac50fSopenharmony_ci        ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1063e0dac50fSopenharmony_ci    }
1064e0dac50fSopenharmony_ci}
1065e0dac50fSopenharmony_ci
1066e0dac50fSopenharmony_ci/**
1067e0dac50fSopenharmony_ci * @tc.name: NotifyServerReadyToMoveOrDrag
1068e0dac50fSopenharmony_ci * @tc.desc: Window controller NotifyServerReadyToMoveOrDrag1
1069e0dac50fSopenharmony_ci * @tc.type: FUNC
1070e0dac50fSopenharmony_ci */
1071e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, NotifyServerReadyToMoveOrDrag1, Function | SmallTest | Level3)
1072e0dac50fSopenharmony_ci{
1073e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1074e0dac50fSopenharmony_ci    sptr<IWindow> window;
1075e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1076e0dac50fSopenharmony_ci    property->SetMaximizeMode(MaximizeMode::MODE_AVOID_SYSTEM_BAR);
1077e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1078e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1079e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1080e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1081e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1082e0dac50fSopenharmony_ci
1083e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1084e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1085e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "NotifyServerReadyToMoveOrDrag1";
1086e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1087e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1088e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1089e0dac50fSopenharmony_ci
1090e0dac50fSopenharmony_ci    sptr<MoveDragProperty> moveDragProperty = new MoveDragProperty();
1091e0dac50fSopenharmony_ci    WMError res = windowController_->NotifyServerReadyToMoveOrDrag(10, moveDragProperty);
1092e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
1093e0dac50fSopenharmony_ci
1094e0dac50fSopenharmony_ci    ASSERT_EQ(windowNode->currentVisibility_, false);
1095e0dac50fSopenharmony_ci    res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1096e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1097e0dac50fSopenharmony_ci
1098e0dac50fSopenharmony_ci    windowNode->currentVisibility_ = true;
1099e0dac50fSopenharmony_ci    res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1100e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1101e0dac50fSopenharmony_ci}
1102e0dac50fSopenharmony_ci
1103e0dac50fSopenharmony_ci/**
1104e0dac50fSopenharmony_ci * @tc.name: NotifyServerReadyToMoveOrDrag
1105e0dac50fSopenharmony_ci * @tc.desc: Window controller NotifyServerReadyToMoveOrDrag2
1106e0dac50fSopenharmony_ci * @tc.type: FUNC
1107e0dac50fSopenharmony_ci */
1108e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, NotifyServerReadyToMoveOrDrag2, Function | SmallTest | Level3)
1109e0dac50fSopenharmony_ci{
1110e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1111e0dac50fSopenharmony_ci    sptr<IWindow> window;
1112e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1113e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1114e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1115e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1116e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1117e0dac50fSopenharmony_ci    windowNode->currentVisibility_ = true;
1118e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1119e0dac50fSopenharmony_ci
1120e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1121e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1122e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "NotifyServerReadyToMoveOrDrag2";
1123e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1124e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1125e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1126e0dac50fSopenharmony_ci
1127e0dac50fSopenharmony_ci    sptr<MoveDragProperty> moveDragProperty = new MoveDragProperty();
1128e0dac50fSopenharmony_ci    moveDragProperty->startMoveFlag_ = false;
1129e0dac50fSopenharmony_ci    moveDragProperty->startDragFlag_ = false;
1130e0dac50fSopenharmony_ci    WMError res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1131e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1132e0dac50fSopenharmony_ci
1133e0dac50fSopenharmony_ci    moveDragProperty->startMoveFlag_ = true;
1134e0dac50fSopenharmony_ci    res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1135e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1136e0dac50fSopenharmony_ci
1137e0dac50fSopenharmony_ci    moveDragProperty->startMoveFlag_ = false;
1138e0dac50fSopenharmony_ci    moveDragProperty->startDragFlag_ = true;
1139e0dac50fSopenharmony_ci    res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1140e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1141e0dac50fSopenharmony_ci
1142e0dac50fSopenharmony_ci    moveDragProperty->startMoveFlag_ = true;
1143e0dac50fSopenharmony_ci    res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1144e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1145e0dac50fSopenharmony_ci}
1146e0dac50fSopenharmony_ci
1147e0dac50fSopenharmony_ci/**
1148e0dac50fSopenharmony_ci * @tc.name: NotifyServerReadyToMoveOrDrag
1149e0dac50fSopenharmony_ci * @tc.desc: Window controller NotifyServerReadyToMoveOrDrag WindowType = WINDOW_TYPE_DOCK_SLICE
1150e0dac50fSopenharmony_ci * @tc.type: FUNC
1151e0dac50fSopenharmony_ci */
1152e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, NotifyServerReadyToMoveOrDrag3, Function | SmallTest | Level3)
1153e0dac50fSopenharmony_ci{
1154e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1155e0dac50fSopenharmony_ci    sptr<IWindow> window;
1156e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1157e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1158e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1159e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1160e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
1161e0dac50fSopenharmony_ci    windowNode->currentVisibility_ = true;
1162e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1163e0dac50fSopenharmony_ci
1164e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1165e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1166e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "NotifyServerReadyToMoveOrDrag3";
1167e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1168e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1169e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1170e0dac50fSopenharmony_ci
1171e0dac50fSopenharmony_ci    sptr<MoveDragProperty> moveDragProperty = new MoveDragProperty();
1172e0dac50fSopenharmony_ci    moveDragProperty->startMoveFlag_ = false;
1173e0dac50fSopenharmony_ci    moveDragProperty->startDragFlag_ = false;
1174e0dac50fSopenharmony_ci    WMError res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1175e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1176e0dac50fSopenharmony_ci
1177e0dac50fSopenharmony_ci    moveDragProperty->startMoveFlag_ = true;
1178e0dac50fSopenharmony_ci    res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1179e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1180e0dac50fSopenharmony_ci
1181e0dac50fSopenharmony_ci    moveDragProperty->startMoveFlag_ = false;
1182e0dac50fSopenharmony_ci    moveDragProperty->startDragFlag_ = true;
1183e0dac50fSopenharmony_ci    res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1184e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1185e0dac50fSopenharmony_ci
1186e0dac50fSopenharmony_ci    moveDragProperty->startMoveFlag_ = true;
1187e0dac50fSopenharmony_ci    res = windowController_->NotifyServerReadyToMoveOrDrag(windowId, moveDragProperty);
1188e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1189e0dac50fSopenharmony_ci}
1190e0dac50fSopenharmony_ci
1191e0dac50fSopenharmony_ci/**
1192e0dac50fSopenharmony_ci * @tc.name: ProcessPointDown
1193e0dac50fSopenharmony_ci * @tc.desc: Window controller ProcessPointDown
1194e0dac50fSopenharmony_ci * @tc.type: FUNC
1195e0dac50fSopenharmony_ci */
1196e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ProcessPointDown1, Function | SmallTest | Level3)
1197e0dac50fSopenharmony_ci{
1198e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1199e0dac50fSopenharmony_ci    sptr<IWindow> window;
1200e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1201e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1202e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1203e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1204e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1205e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1206e0dac50fSopenharmony_ci
1207e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1208e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1209e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ProcessPointDown1";
1210e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1211e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1212e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1213e0dac50fSopenharmony_ci
1214e0dac50fSopenharmony_ci    bool isPointDown = true;
1215e0dac50fSopenharmony_ci    WMError res = windowController_->ProcessPointDown(10, isPointDown);
1216e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
1217e0dac50fSopenharmony_ci
1218e0dac50fSopenharmony_ci    ASSERT_EQ(windowNode->currentVisibility_, false);
1219e0dac50fSopenharmony_ci    res = windowController_->ProcessPointDown(windowId, isPointDown);
1220e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1221e0dac50fSopenharmony_ci
1222e0dac50fSopenharmony_ci    windowNode->currentVisibility_ = true;
1223e0dac50fSopenharmony_ci    res = windowController_->ProcessPointDown(windowId, isPointDown);
1224e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1225e0dac50fSopenharmony_ci}
1226e0dac50fSopenharmony_ci
1227e0dac50fSopenharmony_ci/**
1228e0dac50fSopenharmony_ci * @tc.name: ProcessPointDown
1229e0dac50fSopenharmony_ci * @tc.desc: Window controller ProcessPointDown
1230e0dac50fSopenharmony_ci * @tc.type: FUNC
1231e0dac50fSopenharmony_ci */
1232e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ProcessPointDown2, Function | SmallTest | Level3)
1233e0dac50fSopenharmony_ci{
1234e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1235e0dac50fSopenharmony_ci    sptr<IWindow> window;
1236e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1237e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1238e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1239e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1240e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
1241e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1242e0dac50fSopenharmony_ci
1243e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1244e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1245e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ProcessPointDown2";
1246e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1247e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1248e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1249e0dac50fSopenharmony_ci
1250e0dac50fSopenharmony_ci    bool isPointDown = true;
1251e0dac50fSopenharmony_ci    windowNode->currentVisibility_ = true;
1252e0dac50fSopenharmony_ci    WMError res = windowController_->ProcessPointDown(windowId, isPointDown);
1253e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1254e0dac50fSopenharmony_ci
1255e0dac50fSopenharmony_ci    isPointDown = false;
1256e0dac50fSopenharmony_ci    res = windowController_->ProcessPointDown(windowId, isPointDown);
1257e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1258e0dac50fSopenharmony_ci}
1259e0dac50fSopenharmony_ci
1260e0dac50fSopenharmony_ci/**
1261e0dac50fSopenharmony_ci * @tc.name: ProcessPointUp
1262e0dac50fSopenharmony_ci * @tc.desc: Window controller ProcessPointUp WindowType = WINDOW_TYPE_DOCK_SLICE
1263e0dac50fSopenharmony_ci * @tc.type: FUNC
1264e0dac50fSopenharmony_ci */
1265e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ProcessPointUp, Function | SmallTest | Level3)
1266e0dac50fSopenharmony_ci{
1267e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1268e0dac50fSopenharmony_ci    sptr<IWindow> window;
1269e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1270e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1271e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1272e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1273e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
1274e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1275e0dac50fSopenharmony_ci
1276e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1277e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1278e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ProcessPointUp";
1279e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1280e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1281e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1282e0dac50fSopenharmony_ci
1283e0dac50fSopenharmony_ci    WMError res = windowController_->ProcessPointUp(10);
1284e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
1285e0dac50fSopenharmony_ci
1286e0dac50fSopenharmony_ci    res = windowController_->ProcessPointUp(windowId);
1287e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
1288e0dac50fSopenharmony_ci}
1289e0dac50fSopenharmony_ci
1290e0dac50fSopenharmony_ci/**
1291e0dac50fSopenharmony_ci * @tc.name: ProcessPointUp2
1292e0dac50fSopenharmony_ci * @tc.desc: Window controller ProcessPointUp2 WindowType = WINDOW_TYPE_APP_MAIN_WINDOW
1293e0dac50fSopenharmony_ci * @tc.type: FUNC
1294e0dac50fSopenharmony_ci */
1295e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ProcessPointUp2, Function | SmallTest | Level3)
1296e0dac50fSopenharmony_ci{
1297e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1298e0dac50fSopenharmony_ci    sptr<IWindow> window;
1299e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1300e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1301e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1302e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1303e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1304e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1305e0dac50fSopenharmony_ci
1306e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1307e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1308e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ProcessPointUp2";
1309e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1310e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1311e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1312e0dac50fSopenharmony_ci
1313e0dac50fSopenharmony_ci    WMError res = windowController_->ProcessPointUp(windowId);
1314e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
1315e0dac50fSopenharmony_ci}
1316e0dac50fSopenharmony_ci
1317e0dac50fSopenharmony_ci/**
1318e0dac50fSopenharmony_ci * @tc.name: ProcessPointUp3
1319e0dac50fSopenharmony_ci * @tc.desc: Window controller ProcessPointUp3 WindowType = APP_WINDOW_BASE
1320e0dac50fSopenharmony_ci * @tc.type: FUNC
1321e0dac50fSopenharmony_ci */
1322e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ProcessPointUp3, Function | SmallTest | Level3)
1323e0dac50fSopenharmony_ci{
1324e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1325e0dac50fSopenharmony_ci    sptr<IWindow> window;
1326e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1327e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1328e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1329e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1330e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1331e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1332e0dac50fSopenharmony_ci
1333e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1334e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1335e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ProcessPointUp3";
1336e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1337e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1338e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1339e0dac50fSopenharmony_ci
1340e0dac50fSopenharmony_ci    WMError res = windowController_->ProcessPointUp(windowId);
1341e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
1342e0dac50fSopenharmony_ci}
1343e0dac50fSopenharmony_ci
1344e0dac50fSopenharmony_ci/**
1345e0dac50fSopenharmony_ci * @tc.name: InterceptInputEventToServer
1346e0dac50fSopenharmony_ci * @tc.desc: Window controller InterceptInputEventToServer
1347e0dac50fSopenharmony_ci * @tc.type: FUNC
1348e0dac50fSopenharmony_ci */
1349e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, InterceptInputEventToServer, Function | SmallTest | Level3)
1350e0dac50fSopenharmony_ci{
1351e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1352e0dac50fSopenharmony_ci    sptr<IWindow> window;
1353e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1354e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1355e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1356e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1357e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1358e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1359e0dac50fSopenharmony_ci
1360e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1361e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1362e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "InterceptInputEventToServer";
1363e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1364e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1365e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1366e0dac50fSopenharmony_ci
1367e0dac50fSopenharmony_ci    WMError res = windowController_->InterceptInputEventToServer(10);
1368e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
1369e0dac50fSopenharmony_ci
1370e0dac50fSopenharmony_ci    res = windowController_->InterceptInputEventToServer(windowId);
1371e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1372e0dac50fSopenharmony_ci}
1373e0dac50fSopenharmony_ci
1374e0dac50fSopenharmony_ci/**
1375e0dac50fSopenharmony_ci * @tc.name: RecoverInputEventToClient
1376e0dac50fSopenharmony_ci * @tc.desc: Window controller RecoverInputEventToClient
1377e0dac50fSopenharmony_ci * @tc.type: FUNC
1378e0dac50fSopenharmony_ci */
1379e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, RecoverInputEventToClient, Function | SmallTest | Level3)
1380e0dac50fSopenharmony_ci{
1381e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1382e0dac50fSopenharmony_ci    sptr<IWindow> window;
1383e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1384e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1385e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1386e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1387e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1388e0dac50fSopenharmony_ci    windowNode->SetInputEventCallingPid(2048);
1389e0dac50fSopenharmony_ci    windowNode->SetCallingPid(2048);
1390e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1391e0dac50fSopenharmony_ci
1392e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1393e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1394e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "RecoverInputEventToClient";
1395e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1396e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1397e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1398e0dac50fSopenharmony_ci
1399e0dac50fSopenharmony_ci    WMError res = windowController_->RecoverInputEventToClient(10);
1400e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
1401e0dac50fSopenharmony_ci
1402e0dac50fSopenharmony_ci    res = windowController_->RecoverInputEventToClient(windowId);
1403e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1404e0dac50fSopenharmony_ci}
1405e0dac50fSopenharmony_ci
1406e0dac50fSopenharmony_ci/**
1407e0dac50fSopenharmony_ci * @tc.name: RecoverInputEventToClient2
1408e0dac50fSopenharmony_ci * @tc.desc: Window controller RecoverInputEventToClient2
1409e0dac50fSopenharmony_ci * @tc.type: FUNC
1410e0dac50fSopenharmony_ci */
1411e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, RecoverInputEventToClient2, Function | SmallTest | Level3)
1412e0dac50fSopenharmony_ci{
1413e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1414e0dac50fSopenharmony_ci    sptr<IWindow> window;
1415e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1416e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1417e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1418e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1419e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1420e0dac50fSopenharmony_ci    windowNode->SetInputEventCallingPid(2048);
1421e0dac50fSopenharmony_ci    windowNode->SetCallingPid(1024);
1422e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1423e0dac50fSopenharmony_ci
1424e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1425e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1426e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "RecoverInputEventToClient2";
1427e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1428e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1429e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1430e0dac50fSopenharmony_ci
1431e0dac50fSopenharmony_ci    WMError res = windowController_->RecoverInputEventToClient(windowId);
1432e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1433e0dac50fSopenharmony_ci}
1434e0dac50fSopenharmony_ci
1435e0dac50fSopenharmony_ci/**
1436e0dac50fSopenharmony_ci * @tc.name: RecoverDefaultMouseStyle
1437e0dac50fSopenharmony_ci * @tc.desc: Window controller RecoverDefaultMouseStyle
1438e0dac50fSopenharmony_ci * @tc.type: FUNC
1439e0dac50fSopenharmony_ci */
1440e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, RecoverDefaultMouseStyle, Function | SmallTest | Level3)
1441e0dac50fSopenharmony_ci{
1442e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1443e0dac50fSopenharmony_ci    sptr<IWindow> window;
1444e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1445e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1446e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1447e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1448e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1449e0dac50fSopenharmony_ci    windowNode->SetInputEventCallingPid(2048);
1450e0dac50fSopenharmony_ci    windowNode->SetCallingPid(1024);
1451e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1452e0dac50fSopenharmony_ci
1453e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1454e0dac50fSopenharmony_ci    windowController_->RecoverDefaultMouseStyle(windowId);
1455e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1456e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "RecoverDefaultMouseStyle";
1457e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1458e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1459e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1460e0dac50fSopenharmony_ci}
1461e0dac50fSopenharmony_ci
1462e0dac50fSopenharmony_ci/**
1463e0dac50fSopenharmony_ci * @tc.name: DispatchKeyEvent
1464e0dac50fSopenharmony_ci * @tc.desc: Window controller DispatchKeyEvent
1465e0dac50fSopenharmony_ci * @tc.type: FUNC
1466e0dac50fSopenharmony_ci */
1467e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, DispatchKeyEvent, Function | SmallTest | Level3)
1468e0dac50fSopenharmony_ci{
1469e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1470e0dac50fSopenharmony_ci    sptr<IWindow> window;
1471e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1472e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1473e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1474e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1475e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1476e0dac50fSopenharmony_ci    windowNode->SetInputEventCallingPid(2048);
1477e0dac50fSopenharmony_ci    windowNode->SetCallingPid(2048);
1478e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1479e0dac50fSopenharmony_ci
1480e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1481e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1482e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "DispatchKeyEvent";
1483e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1484e0dac50fSopenharmony_ci    std::shared_ptr<MMI::KeyEvent> event = nullptr;
1485e0dac50fSopenharmony_ci    windowController_->DispatchKeyEvent(10, event);
1486e0dac50fSopenharmony_ci    windowController_->DispatchKeyEvent(windowId, event);
1487e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1488e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1489e0dac50fSopenharmony_ci}
1490e0dac50fSopenharmony_ci
1491e0dac50fSopenharmony_ci/**
1492e0dac50fSopenharmony_ci * @tc.name: DispatchKeyEvent
1493e0dac50fSopenharmony_ci * @tc.desc: Window controller DispatchKeyEvent WindowType = WINDOW_TYPE_APP_COMPONENT
1494e0dac50fSopenharmony_ci * @tc.type: FUNC
1495e0dac50fSopenharmony_ci */
1496e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, DispatchKeyEvent2, Function | SmallTest | Level3)
1497e0dac50fSopenharmony_ci{
1498e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1499e0dac50fSopenharmony_ci    sptr<IWindow> window;
1500e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1501e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1502e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1503e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1504e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_APP_COMPONENT);
1505e0dac50fSopenharmony_ci    windowNode->SetInputEventCallingPid(2048);
1506e0dac50fSopenharmony_ci    windowNode->SetCallingPid(2048);
1507e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1508e0dac50fSopenharmony_ci
1509e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1510e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1511e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "DispatchKeyEvent2";
1512e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1513e0dac50fSopenharmony_ci
1514e0dac50fSopenharmony_ci    std::shared_ptr<MMI::KeyEvent> event = nullptr;
1515e0dac50fSopenharmony_ci    windowController_->DispatchKeyEvent(windowId, event);
1516e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_PARENT,
1517e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1518e0dac50fSopenharmony_ci}
1519e0dac50fSopenharmony_ci
1520e0dac50fSopenharmony_ci/**
1521e0dac50fSopenharmony_ci * @tc.name: NotifyWindowClientPointUp
1522e0dac50fSopenharmony_ci * @tc.desc: Window controller NotifyWindowClientPointUp
1523e0dac50fSopenharmony_ci * @tc.type: FUNC
1524e0dac50fSopenharmony_ci */
1525e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, NotifyWindowClientPointUp, Function | SmallTest | Level3)
1526e0dac50fSopenharmony_ci{
1527e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1528e0dac50fSopenharmony_ci    sptr<IWindow> window;
1529e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1530e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1531e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1532e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1533e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
1534e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1535e0dac50fSopenharmony_ci
1536e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1537e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1538e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ProcessPointUp";
1539e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1540e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1541e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1542e0dac50fSopenharmony_ci
1543e0dac50fSopenharmony_ci    std::shared_ptr<MMI::PointerEvent> pointerEvent = nullptr;
1544e0dac50fSopenharmony_ci    WMError res = windowController_->NotifyWindowClientPointUp(10, pointerEvent);
1545e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
1546e0dac50fSopenharmony_ci
1547e0dac50fSopenharmony_ci    res = windowController_->NotifyWindowClientPointUp(windowId, pointerEvent);
1548e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1549e0dac50fSopenharmony_ci}
1550e0dac50fSopenharmony_ci
1551e0dac50fSopenharmony_ci/**
1552e0dac50fSopenharmony_ci * @tc.name: MinimizeAllAppWindows
1553e0dac50fSopenharmony_ci * @tc.desc: Window controller MinimizeAllAppWindows
1554e0dac50fSopenharmony_ci * @tc.type: FUNC
1555e0dac50fSopenharmony_ci */
1556e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, MinimizeAllAppWindows, Function | SmallTest | Level3)
1557e0dac50fSopenharmony_ci{
1558e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1559e0dac50fSopenharmony_ci    sptr<IWindow> window;
1560e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1561e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1562e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1563e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1564e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1565e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1566e0dac50fSopenharmony_ci
1567e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1568e0dac50fSopenharmony_ci    windowController_->MinimizeAllAppWindows(0);
1569e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1570e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "MinimizeAllAppWindows";
1571e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1572e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1573e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1574e0dac50fSopenharmony_ci}
1575e0dac50fSopenharmony_ci
1576e0dac50fSopenharmony_ci/**
1577e0dac50fSopenharmony_ci * @tc.name: ToggleShownStateForAllAppWindows
1578e0dac50fSopenharmony_ci * @tc.desc: Window controller ToggleShownStateForAllAppWindows
1579e0dac50fSopenharmony_ci * @tc.type: FUNC
1580e0dac50fSopenharmony_ci */
1581e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, ToggleShownStateForAllAppWindows, Function | SmallTest | Level3)
1582e0dac50fSopenharmony_ci{
1583e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1584e0dac50fSopenharmony_ci    sptr<IWindow> window;
1585e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1586e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1587e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1588e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1589e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1590e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1591e0dac50fSopenharmony_ci
1592e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1593e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1594e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "ToggleShownStateForAllAppWindows";
1595e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1596e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1597e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1598e0dac50fSopenharmony_ci
1599e0dac50fSopenharmony_ci    WMError res = windowController_->ToggleShownStateForAllAppWindows();
1600e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1601e0dac50fSopenharmony_ci}
1602e0dac50fSopenharmony_ci
1603e0dac50fSopenharmony_ci/**
1604e0dac50fSopenharmony_ci * @tc.name: GetUnreliableWindowInfo
1605e0dac50fSopenharmony_ci * @tc.desc: Window controller window is unreliable window
1606e0dac50fSopenharmony_ci * @tc.type: FUNC
1607e0dac50fSopenharmony_ci */
1608e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, GetUnreliableWindowInfo1, Function | SmallTest | Level3)
1609e0dac50fSopenharmony_ci{
1610e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1611e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1612e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1613e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_TOAST);
1614e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1615e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowNode);
1616e0dac50fSopenharmony_ci    windowNode->currentVisibility_ = true;
1617e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(windowNode->GetWindowId(), windowNode));
1618e0dac50fSopenharmony_ci    std::vector<sptr<UnreliableWindowInfo>> infos;
1619e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->GetUnreliableWindowInfo(0, infos));
1620e0dac50fSopenharmony_ci    EXPECT_EQ(1, infos.size());
1621e0dac50fSopenharmony_ci
1622e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
1623e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property2);
1624e0dac50fSopenharmony_ci    property2->SetWindowType(WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT);
1625e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode2 = new WindowNode(property2);
1626e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowNode2);
1627e0dac50fSopenharmony_ci    windowNode2->currentVisibility_ = true;
1628e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(windowNode2->GetWindowId(), windowNode2));
1629e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->GetUnreliableWindowInfo(0, infos));
1630e0dac50fSopenharmony_ci    EXPECT_EQ(2, infos.size());
1631e0dac50fSopenharmony_ci
1632e0dac50fSopenharmony_ci    sptr<WindowProperty> property3 = new WindowProperty();
1633e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property3);
1634e0dac50fSopenharmony_ci    property3->SetParentId(windowNode->GetWindowId());
1635e0dac50fSopenharmony_ci    property3->SetWindowType(WindowType::WINDOW_TYPE_APP_SUB_WINDOW);
1636e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode3 = new WindowNode(property3);
1637e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowNode3);
1638e0dac50fSopenharmony_ci    windowNode3->currentVisibility_ = true;
1639e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(windowNode3->GetWindowId(), windowNode3));
1640e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->GetUnreliableWindowInfo(0, infos));
1641e0dac50fSopenharmony_ci    EXPECT_EQ(3, infos.size());
1642e0dac50fSopenharmony_ci}
1643e0dac50fSopenharmony_ci
1644e0dac50fSopenharmony_ci/**
1645e0dac50fSopenharmony_ci * @tc.name: GetUnreliableWindowInfo
1646e0dac50fSopenharmony_ci * @tc.desc: Window controller windowId is equal to the parameter
1647e0dac50fSopenharmony_ci * @tc.type: FUNC
1648e0dac50fSopenharmony_ci */
1649e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, GetUnreliableWindowInfo2, Function | SmallTest | Level3)
1650e0dac50fSopenharmony_ci{
1651e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1652e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1653e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1654e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1655e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowNode);
1656e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1657e0dac50fSopenharmony_ci    std::vector<sptr<UnreliableWindowInfo>> infos;
1658e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->GetUnreliableWindowInfo(1, infos));
1659e0dac50fSopenharmony_ci    ASSERT_EQ(false, infos.empty());
1660e0dac50fSopenharmony_ci}
1661e0dac50fSopenharmony_ci
1662e0dac50fSopenharmony_ci/**
1663e0dac50fSopenharmony_ci * @tc.name: GetUnreliableWindowInfo
1664e0dac50fSopenharmony_ci * @tc.desc: Window controller window type is not correct, window is invisible
1665e0dac50fSopenharmony_ci * @tc.type: FUNC
1666e0dac50fSopenharmony_ci */
1667e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, GetUnreliableWindowInfo3, Function | SmallTest | Level3)
1668e0dac50fSopenharmony_ci{
1669e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1670e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1671e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1672e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DIALOG);
1673e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1674e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowNode);
1675e0dac50fSopenharmony_ci    windowNode->currentVisibility_ = true;
1676e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1677e0dac50fSopenharmony_ci    std::vector<sptr<UnreliableWindowInfo>> infos;
1678e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->GetUnreliableWindowInfo(0, infos));
1679e0dac50fSopenharmony_ci    ASSERT_EQ(true, infos.empty());
1680e0dac50fSopenharmony_ci
1681e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1682e0dac50fSopenharmony_ci    windowNode->currentVisibility_ = false;
1683e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(1, windowNode));
1684e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, windowController_->GetUnreliableWindowInfo(0, infos));
1685e0dac50fSopenharmony_ci    ASSERT_EQ(true, infos.empty());
1686e0dac50fSopenharmony_ci}
1687e0dac50fSopenharmony_ci
1688e0dac50fSopenharmony_ci/**
1689e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1690e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty property is nullptr
1691e0dac50fSopenharmony_ci * @tc.type: FUNC
1692e0dac50fSopenharmony_ci */
1693e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty1, Function | SmallTest | Level3)
1694e0dac50fSopenharmony_ci{
1695e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1696e0dac50fSopenharmony_ci    sptr<WindowProperty> property = nullptr;
1697e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_RECT;
1698e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1699e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
1700e0dac50fSopenharmony_ci}
1701e0dac50fSopenharmony_ci
1702e0dac50fSopenharmony_ci/**
1703e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1704e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty windowRoot_ is nullptr
1705e0dac50fSopenharmony_ci * @tc.type: FUNC
1706e0dac50fSopenharmony_ci */
1707e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty2, Function | SmallTest | Level3)
1708e0dac50fSopenharmony_ci{
1709e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1710e0dac50fSopenharmony_ci    sptr<IWindow> window;
1711e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1712e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1713e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1714e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1715e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1716e0dac50fSopenharmony_ci
1717e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1718e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowRoot_->GetWindowNode(windowId));
1719e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1720e0dac50fSopenharmony_ci
1721e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_RECT;
1722e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1723e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_NULLPTR, res);
1724e0dac50fSopenharmony_ci}
1725e0dac50fSopenharmony_ci
1726e0dac50fSopenharmony_ci/**
1727e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1728e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_RECT
1729e0dac50fSopenharmony_ci * @tc.type: FUNC
1730e0dac50fSopenharmony_ci */
1731e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty3, Function | SmallTest | Level3)
1732e0dac50fSopenharmony_ci{
1733e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1734e0dac50fSopenharmony_ci    sptr<IWindow> window;
1735e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1736e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1737e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1738e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1739e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
1740e0dac50fSopenharmony_ci
1741e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1742e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1743e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty3";
1744e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1745e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1746e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1747e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
1748e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1749e0dac50fSopenharmony_ci
1750e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_RECT;
1751e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1752e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
1753e0dac50fSopenharmony_ci
1754e0dac50fSopenharmony_ci    windowNode->SetWindowRect({50, 50, 50, 50});
1755e0dac50fSopenharmony_ci    windowNode->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
1756e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
1757e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
1758e0dac50fSopenharmony_ci
1759e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_STATUS_BAR);
1760e0dac50fSopenharmony_ci    property->SetWindowSizeChangeReason(WindowSizeChangeReason::UNDEFINED);
1761e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
1762e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
1763e0dac50fSopenharmony_ci
1764e0dac50fSopenharmony_ci    property->SetWindowSizeChangeReason(WindowSizeChangeReason::RESIZE);
1765e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
1766e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
1767e0dac50fSopenharmony_ci
1768e0dac50fSopenharmony_ci    property->SetWindowSizeChangeReason(WindowSizeChangeReason::MOVE);
1769e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
1770e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
1771e0dac50fSopenharmony_ci}
1772e0dac50fSopenharmony_ci
1773e0dac50fSopenharmony_ci/**
1774e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1775e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_MODE
1776e0dac50fSopenharmony_ci * @tc.type: FUNC
1777e0dac50fSopenharmony_ci */
1778e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty4, Function | SmallTest | Level3)
1779e0dac50fSopenharmony_ci{
1780e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1781e0dac50fSopenharmony_ci    sptr<IWindow> window;
1782e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1783e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1784e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1785e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1786e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1787e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
1788e0dac50fSopenharmony_ci
1789e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1790e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1791e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty4";
1792e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1793e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1794e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1795e0dac50fSopenharmony_ci
1796e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
1797e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1798e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_MODE;
1799e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1800e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
1801e0dac50fSopenharmony_ci}
1802e0dac50fSopenharmony_ci
1803e0dac50fSopenharmony_ci/**
1804e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1805e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_FLAGS
1806e0dac50fSopenharmony_ci * @tc.type: FUNC
1807e0dac50fSopenharmony_ci */
1808e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty5, Function | SmallTest | Level3)
1809e0dac50fSopenharmony_ci{
1810e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1811e0dac50fSopenharmony_ci    sptr<IWindow> window;
1812e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1813e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1814e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1815e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1816e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1817e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
1818e0dac50fSopenharmony_ci
1819e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1820e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1821e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty5";
1822e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1823e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1824e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1825e0dac50fSopenharmony_ci
1826e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
1827e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1828e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_FLAGS;
1829e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1830e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
1831e0dac50fSopenharmony_ci}
1832e0dac50fSopenharmony_ci
1833e0dac50fSopenharmony_ci/**
1834e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1835e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_OTHER_PROPS
1836e0dac50fSopenharmony_ci * @tc.type: FUNC
1837e0dac50fSopenharmony_ci */
1838e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty6, Function | SmallTest | Level3)
1839e0dac50fSopenharmony_ci{
1840e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1841e0dac50fSopenharmony_ci    sptr<IWindow> window;
1842e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1843e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1844e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1845e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1846e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1847e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
1848e0dac50fSopenharmony_ci
1849e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1850e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1851e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty6";
1852e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1853e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1854e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1855e0dac50fSopenharmony_ci
1856e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
1857e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1858e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_OTHER_PROPS;
1859e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1860e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1861e0dac50fSopenharmony_ci}
1862e0dac50fSopenharmony_ci
1863e0dac50fSopenharmony_ci/**
1864e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1865e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_FOCUSABLE
1866e0dac50fSopenharmony_ci * @tc.type: FUNC
1867e0dac50fSopenharmony_ci */
1868e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty7, Function | SmallTest | Level3)
1869e0dac50fSopenharmony_ci{
1870e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1871e0dac50fSopenharmony_ci    sptr<IWindow> window;
1872e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1873e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1874e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1875e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1876e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1877e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
1878e0dac50fSopenharmony_ci
1879e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1880e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1881e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty7";
1882e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1883e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1884e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1885e0dac50fSopenharmony_ci
1886e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
1887e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1888e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_FOCUSABLE;
1889e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1890e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1891e0dac50fSopenharmony_ci}
1892e0dac50fSopenharmony_ci
1893e0dac50fSopenharmony_ci/**
1894e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1895e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_TOUCHABLE
1896e0dac50fSopenharmony_ci * @tc.type: FUNC
1897e0dac50fSopenharmony_ci */
1898e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty8, Function | SmallTest | Level3)
1899e0dac50fSopenharmony_ci{
1900e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1901e0dac50fSopenharmony_ci    sptr<IWindow> window;
1902e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1903e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1904e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1905e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1906e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1907e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
1908e0dac50fSopenharmony_ci
1909e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1910e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1911e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty8";
1912e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1913e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1914e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1915e0dac50fSopenharmony_ci
1916e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
1917e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1918e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_TOUCHABLE;
1919e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1920e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1921e0dac50fSopenharmony_ci}
1922e0dac50fSopenharmony_ci
1923e0dac50fSopenharmony_ci/**
1924e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1925e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_CALLING_WINDOW
1926e0dac50fSopenharmony_ci * @tc.type: FUNC
1927e0dac50fSopenharmony_ci */
1928e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty9, Function | SmallTest | Level3)
1929e0dac50fSopenharmony_ci{
1930e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1931e0dac50fSopenharmony_ci    sptr<IWindow> window;
1932e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1933e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1934e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1935e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1936e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1937e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
1938e0dac50fSopenharmony_ci
1939e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1940e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1941e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty9";
1942e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1943e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1944e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1945e0dac50fSopenharmony_ci
1946e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
1947e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1948e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_CALLING_WINDOW;
1949e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1950e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1951e0dac50fSopenharmony_ci}
1952e0dac50fSopenharmony_ci
1953e0dac50fSopenharmony_ci/**
1954e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1955e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_ORIENTATION
1956e0dac50fSopenharmony_ci * @tc.type: FUNC
1957e0dac50fSopenharmony_ci */
1958e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty10, Function | SmallTest | Level3)
1959e0dac50fSopenharmony_ci{
1960e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1961e0dac50fSopenharmony_ci    sptr<IWindow> window;
1962e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1963e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1964e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1965e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1966e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1967e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
1968e0dac50fSopenharmony_ci
1969e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
1970e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
1971e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty10";
1972e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
1973e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
1974e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
1975e0dac50fSopenharmony_ci
1976e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
1977e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
1978e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_ORIENTATION;
1979e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
1980e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
1981e0dac50fSopenharmony_ci}
1982e0dac50fSopenharmony_ci
1983e0dac50fSopenharmony_ci/**
1984e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
1985e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_TURN_SCREEN_ON
1986e0dac50fSopenharmony_ci * @tc.type: FUNC
1987e0dac50fSopenharmony_ci */
1988e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty11, Function | SmallTest | Level3)
1989e0dac50fSopenharmony_ci{
1990e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
1991e0dac50fSopenharmony_ci    sptr<IWindow> window;
1992e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
1993e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
1994e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
1995e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
1996e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
1997e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
1998e0dac50fSopenharmony_ci
1999e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2000e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2001e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty11";
2002e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2003e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2004e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2005e0dac50fSopenharmony_ci
2006e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
2007e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
2008e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_TURN_SCREEN_ON;
2009e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
2010e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
2011e0dac50fSopenharmony_ci}
2012e0dac50fSopenharmony_ci
2013e0dac50fSopenharmony_ci/**
2014e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
2015e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_KEEP_SCREEN_ON
2016e0dac50fSopenharmony_ci * @tc.type: FUNC
2017e0dac50fSopenharmony_ci */
2018e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty12, Function | SmallTest | Level3)
2019e0dac50fSopenharmony_ci{
2020e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2021e0dac50fSopenharmony_ci    sptr<IWindow> window;
2022e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2023e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2024e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2025e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2026e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2027e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2028e0dac50fSopenharmony_ci
2029e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2030e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2031e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty12";
2032e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2033e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2034e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2035e0dac50fSopenharmony_ci
2036e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
2037e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
2038e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_KEEP_SCREEN_ON;
2039e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
2040e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
2041e0dac50fSopenharmony_ci}
2042e0dac50fSopenharmony_ci
2043e0dac50fSopenharmony_ci
2044e0dac50fSopenharmony_ci/**
2045e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
2046e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_SET_BRIGHTNESS
2047e0dac50fSopenharmony_ci * @tc.type: FUNC
2048e0dac50fSopenharmony_ci */
2049e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty13, Function | SmallTest | Level3)
2050e0dac50fSopenharmony_ci{
2051e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2052e0dac50fSopenharmony_ci    sptr<IWindow> window;
2053e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2054e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2055e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2056e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2057e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2058e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2059e0dac50fSopenharmony_ci
2060e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2061e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2062e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty13";
2063e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2064e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2065e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2066e0dac50fSopenharmony_ci
2067e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
2068e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
2069e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_SET_BRIGHTNESS;
2070e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
2071e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
2072e0dac50fSopenharmony_ci}
2073e0dac50fSopenharmony_ci
2074e0dac50fSopenharmony_ci/**
2075e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
2076e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_MODE_SUPPORT_INFO
2077e0dac50fSopenharmony_ci * @tc.type: FUNC
2078e0dac50fSopenharmony_ci */
2079e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty14, Function | SmallTest | Level3)
2080e0dac50fSopenharmony_ci{
2081e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2082e0dac50fSopenharmony_ci    sptr<IWindow> window;
2083e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2084e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2085e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2086e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2087e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2088e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2089e0dac50fSopenharmony_ci
2090e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2091e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2092e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty14";
2093e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2094e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2095e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2096e0dac50fSopenharmony_ci
2097e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
2098e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
2099e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_MODE_SUPPORT_INFO;
2100e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
2101e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
2102e0dac50fSopenharmony_ci}
2103e0dac50fSopenharmony_ci
2104e0dac50fSopenharmony_ci/**
2105e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
2106e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_TOUCH_HOT_AREA
2107e0dac50fSopenharmony_ci * @tc.type: FUNC
2108e0dac50fSopenharmony_ci */
2109e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty15, Function | SmallTest | Level3)
2110e0dac50fSopenharmony_ci{
2111e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2112e0dac50fSopenharmony_ci    sptr<IWindow> window;
2113e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2114e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2115e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2116e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2117e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2118e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2119e0dac50fSopenharmony_ci
2120e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2121e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2122e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty15";
2123e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2124e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2125e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2126e0dac50fSopenharmony_ci
2127e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
2128e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
2129e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_TOUCH_HOT_AREA;
2130e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
2131e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
2132e0dac50fSopenharmony_ci}
2133e0dac50fSopenharmony_ci
2134e0dac50fSopenharmony_ci/**
2135e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
2136e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_ANIMATION_FLAG
2137e0dac50fSopenharmony_ci * @tc.type: FUNC
2138e0dac50fSopenharmony_ci */
2139e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty16, Function | SmallTest | Level3)
2140e0dac50fSopenharmony_ci{
2141e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2142e0dac50fSopenharmony_ci    sptr<IWindow> window;
2143e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2144e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2145e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2146e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2147e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2148e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2149e0dac50fSopenharmony_ci
2150e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2151e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2152e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty16";
2153e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2154e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2155e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2156e0dac50fSopenharmony_ci
2157e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
2158e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
2159e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_ANIMATION_FLAG;
2160e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
2161e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
2162e0dac50fSopenharmony_ci}
2163e0dac50fSopenharmony_ci
2164e0dac50fSopenharmony_ci/**
2165e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
2166e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_TRANSFORM_PROPERTY
2167e0dac50fSopenharmony_ci * @tc.type: FUNC
2168e0dac50fSopenharmony_ci */
2169e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty17, Function | SmallTest | Level3)
2170e0dac50fSopenharmony_ci{
2171e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2172e0dac50fSopenharmony_ci    sptr<IWindow> window;
2173e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2174e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2175e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2176e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2177e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2178e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2179e0dac50fSopenharmony_ci
2180e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2181e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2182e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty17";
2183e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2184e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2185e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2186e0dac50fSopenharmony_ci
2187e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
2188e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
2189e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_TRANSFORM_PROPERTY;
2190e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
2191e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
2192e0dac50fSopenharmony_ci}
2193e0dac50fSopenharmony_ci
2194e0dac50fSopenharmony_ci/**
2195e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
2196e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_ASPECT_RATIO
2197e0dac50fSopenharmony_ci * @tc.type: FUNC
2198e0dac50fSopenharmony_ci */
2199e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty19, Function | SmallTest | Level3)
2200e0dac50fSopenharmony_ci{
2201e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2202e0dac50fSopenharmony_ci    sptr<IWindow> window;
2203e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2204e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2205e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2206e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2207e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2208e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2209e0dac50fSopenharmony_ci
2210e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2211e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2212e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty19";
2213e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2214e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2215e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2216e0dac50fSopenharmony_ci
2217e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
2218e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
2219e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_ASPECT_RATIO;
2220e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
2221e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK, res);
2222e0dac50fSopenharmony_ci}
2223e0dac50fSopenharmony_ci
2224e0dac50fSopenharmony_ci/**
2225e0dac50fSopenharmony_ci * @tc.name: UpdateProperty
2226e0dac50fSopenharmony_ci * @tc.desc: Window controller UpdateProperty ACTION_UPDATE_MAXIMIZE_STATE ResizeRect
2227e0dac50fSopenharmony_ci * @tc.type: FUNC
2228e0dac50fSopenharmony_ci */
2229e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, UpdateProperty20, Function | SmallTest | Level3)
2230e0dac50fSopenharmony_ci{
2231e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2232e0dac50fSopenharmony_ci    sptr<IWindow> window;
2233e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2234e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2235e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2236e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2237e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2238e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2239e0dac50fSopenharmony_ci
2240e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2241e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2242e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "UpdateProperty20";
2243e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2244e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2245e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2246e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, windowRoot_->GetWindowNode(windowId));
2247e0dac50fSopenharmony_ci    ASSERT_NE(nullptr, property);
2248e0dac50fSopenharmony_ci    PropertyChangeAction action = PropertyChangeAction::ACTION_UPDATE_MAXIMIZE_STATE;
2249e0dac50fSopenharmony_ci    WMError res = windowController_->UpdateProperty(property, action);
2250e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_OPERATION, res);
2251e0dac50fSopenharmony_ci
2252e0dac50fSopenharmony_ci    windowNode->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
2253e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
2254e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
2255e0dac50fSopenharmony_ci
2256e0dac50fSopenharmony_ci    property->SetWindowSizeChangeReason(WindowSizeChangeReason::MOVE);
2257e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
2258e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
2259e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
2260e0dac50fSopenharmony_ci
2261e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT);
2262e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
2263e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
2264e0dac50fSopenharmony_ci
2265e0dac50fSopenharmony_ci    property->SetWindowSizeChangeReason(WindowSizeChangeReason::RESIZE);
2266e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
2267e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
2268e0dac50fSopenharmony_ci
2269e0dac50fSopenharmony_ci    property->SetWindowSizeChangeReason(WindowSizeChangeReason::DRAG);
2270e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
2271e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
2272e0dac50fSopenharmony_ci
2273e0dac50fSopenharmony_ci    property->SetWindowSizeChangeReason(WindowSizeChangeReason::MAXIMIZE);
2274e0dac50fSopenharmony_ci    res = windowController_->UpdateProperty(property, action);
2275e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_ERROR_INVALID_DISPLAY, res);
2276e0dac50fSopenharmony_ci}
2277e0dac50fSopenharmony_ci
2278e0dac50fSopenharmony_ci/**
2279e0dac50fSopenharmony_ci * @tc.name: MinimizeWindowsByLauncher
2280e0dac50fSopenharmony_ci * @tc.desc: Window controller MinimizeWindowsByLauncher
2281e0dac50fSopenharmony_ci * @tc.type: FUNC
2282e0dac50fSopenharmony_ci */
2283e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, MinimizeWindowsByLauncher, Function | SmallTest | Level3)
2284e0dac50fSopenharmony_ci{
2285e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2286e0dac50fSopenharmony_ci    sptr<IWindow> window;
2287e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2288e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2289e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2290e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2291e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2292e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2293e0dac50fSopenharmony_ci
2294e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2295e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2296e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "MinimizeWindowsByLauncher";
2297e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2298e0dac50fSopenharmony_ci
2299e0dac50fSopenharmony_ci    std::vector<uint32_t> windowIds;
2300e0dac50fSopenharmony_ci    windowIds.push_back(windowId);
2301e0dac50fSopenharmony_ci    bool isAnimated = true;
2302e0dac50fSopenharmony_ci    sptr<RSIWindowAnimationFinishedCallback> finishCallback;
2303e0dac50fSopenharmony_ci    windowController_->MinimizeWindowsByLauncher(windowIds, isAnimated, finishCallback);
2304e0dac50fSopenharmony_ci    isAnimated = false;
2305e0dac50fSopenharmony_ci    windowController_->MinimizeWindowsByLauncher(windowIds, isAnimated, finishCallback);
2306e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2307e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2308e0dac50fSopenharmony_ci}
2309e0dac50fSopenharmony_ci
2310e0dac50fSopenharmony_ci/**
2311e0dac50fSopenharmony_ci * @tc.name: OnScreenshot
2312e0dac50fSopenharmony_ci * @tc.desc: Window controller OnScreenshot
2313e0dac50fSopenharmony_ci * @tc.type: FUNC
2314e0dac50fSopenharmony_ci */
2315e0dac50fSopenharmony_ciHWTEST_F(WindowControllerTest, OnScreenshot, Function | SmallTest | Level3)
2316e0dac50fSopenharmony_ci{
2317e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.clear();
2318e0dac50fSopenharmony_ci    sptr<IWindow> window;
2319e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
2320e0dac50fSopenharmony_ci    std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr;
2321e0dac50fSopenharmony_ci    sptr<WindowNode> windowNode = new WindowNode(property);
2322e0dac50fSopenharmony_ci    property->SetParentId(INVALID_WINDOW_ID);
2323e0dac50fSopenharmony_ci    property->SetWindowType(WindowType::APP_WINDOW_BASE);
2324e0dac50fSopenharmony_ci    windowRoot_->windowNodeMap_.insert(std::make_pair(0, windowNode));
2325e0dac50fSopenharmony_ci
2326e0dac50fSopenharmony_ci    uint32_t windowId = windowNode->GetWindowId();
2327e0dac50fSopenharmony_ci    struct RSSurfaceNodeConfig surfaceNodeConfig;
2328e0dac50fSopenharmony_ci    surfaceNodeConfig.SurfaceNodeName = "OnScreenshot";
2329e0dac50fSopenharmony_ci    surfaceNode = RSSurfaceNode::Create(surfaceNodeConfig, RSSurfaceNodeType::DEFAULT);
2330e0dac50fSopenharmony_ci
2331e0dac50fSopenharmony_ci    DisplayId displayId = static_cast<DisplayId>(windowId);
2332e0dac50fSopenharmony_ci    windowController_->OnScreenshot(10);
2333e0dac50fSopenharmony_ci    windowController_->OnScreenshot(displayId);
2334e0dac50fSopenharmony_ci    ASSERT_EQ(WMError::WM_OK,
2335e0dac50fSopenharmony_ci        windowController_->CreateWindow(window, property, surfaceNode, windowId, nullptr, 0, 0));
2336e0dac50fSopenharmony_ci}
2337e0dac50fSopenharmony_ci}
2338e0dac50fSopenharmony_ci}
2339e0dac50fSopenharmony_ci}
2340