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 <algorithm>
18e0dac50fSopenharmony_ci
19e0dac50fSopenharmony_ci#include "display_manager.h"
20e0dac50fSopenharmony_ci#include "window_pair.h"
21e0dac50fSopenharmony_ci#include "minimize_app.h"
22e0dac50fSopenharmony_ci#include "common_test_utils.h"
23e0dac50fSopenharmony_ci#include "mock_IWindow.h"
24e0dac50fSopenharmony_ciusing namespace testing;
25e0dac50fSopenharmony_ciusing namespace testing::ext;
26e0dac50fSopenharmony_ci
27e0dac50fSopenharmony_cinamespace OHOS {
28e0dac50fSopenharmony_cinamespace Rosen {
29e0dac50fSopenharmony_ciclass WindowPairTest : public testing::Test {
30e0dac50fSopenharmony_cipublic:
31e0dac50fSopenharmony_ci    static void SetUpTestCase();
32e0dac50fSopenharmony_ci    static void TearDownTestCase();
33e0dac50fSopenharmony_ci    void SetUp() override;
34e0dac50fSopenharmony_ci    void TearDown() override;
35e0dac50fSopenharmony_ci};
36e0dac50fSopenharmony_ci
37e0dac50fSopenharmony_civoid WindowPairTest::SetUpTestCase()
38e0dac50fSopenharmony_ci{
39e0dac50fSopenharmony_ci    auto display = DisplayManager::GetInstance().GetDefaultDisplay();
40e0dac50fSopenharmony_ci    ASSERT_TRUE((display != nullptr));
41e0dac50fSopenharmony_ci    sptr<DisplayInfo> displayInfo = display->GetDisplayInfo();
42e0dac50fSopenharmony_ci    ASSERT_TRUE((displayInfo != nullptr));
43e0dac50fSopenharmony_ci}
44e0dac50fSopenharmony_ci
45e0dac50fSopenharmony_civoid WindowPairTest::TearDownTestCase()
46e0dac50fSopenharmony_ci{
47e0dac50fSopenharmony_ci}
48e0dac50fSopenharmony_ci
49e0dac50fSopenharmony_civoid WindowPairTest::SetUp()
50e0dac50fSopenharmony_ci{
51e0dac50fSopenharmony_ci}
52e0dac50fSopenharmony_ci
53e0dac50fSopenharmony_civoid WindowPairTest::TearDown()
54e0dac50fSopenharmony_ci{
55e0dac50fSopenharmony_ci}
56e0dac50fSopenharmony_ci
57e0dac50fSopenharmony_cinamespace {
58e0dac50fSopenharmony_ci/**
59e0dac50fSopenharmony_ci * @tc.name: NotifyShowRecent
60e0dac50fSopenharmony_ci * @tc.desc: Send split screen event to notify create recent view.
61e0dac50fSopenharmony_ci * @tc.type: FUNC
62e0dac50fSopenharmony_ci */
63e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, NotifyShowRecent01, Function | SmallTest | Level2)
64e0dac50fSopenharmony_ci{
65e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
66e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
67e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
68e0dac50fSopenharmony_ci    windowPair->NotifyShowRecent(nullptr);
69e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
70e0dac50fSopenharmony_ci
71e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
72e0dac50fSopenharmony_ci    property->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
73e0dac50fSopenharmony_ci    sptr<WindowNode> node0 = new WindowNode(property);
74e0dac50fSopenharmony_ci    windowPair->primary_ = node0;
75e0dac50fSopenharmony_ci    windowPair->NotifyShowRecent(node0);
76e0dac50fSopenharmony_ci
77e0dac50fSopenharmony_ci    if (windowPair->secondary_ != nullptr) {
78e0dac50fSopenharmony_ci        ASSERT_EQ(WindowType::WINDOW_TYPE_LAUNCHER_RECENT, windowPair->secondary_->GetWindowType());
79e0dac50fSopenharmony_ci    }
80e0dac50fSopenharmony_ci}
81e0dac50fSopenharmony_ci
82e0dac50fSopenharmony_ci/**
83e0dac50fSopenharmony_ci * @tc.name: NotifyCreateOrDestroyDivider
84e0dac50fSopenharmony_ci * @tc.desc: Send split screen event to notify create or destroy divider window.
85e0dac50fSopenharmony_ci * @tc.type: FUNC
86e0dac50fSopenharmony_ci */
87e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, NotifyCreateOrDestroyDivider01, Function | SmallTest | Level2)
88e0dac50fSopenharmony_ci{
89e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
90e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
91e0dac50fSopenharmony_ci    windowPair->NotifyCreateOrDestroyDivider(nullptr, true);
92e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
93e0dac50fSopenharmony_ci
94e0dac50fSopenharmony_ci    sptr<WindowProperty> property = new WindowProperty();
95e0dac50fSopenharmony_ci    property->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
96e0dac50fSopenharmony_ci    sptr<WindowNode> node0 = new WindowNode(property);
97e0dac50fSopenharmony_ci    windowPair->primary_ = node0;
98e0dac50fSopenharmony_ci    windowPair->NotifyCreateOrDestroyDivider(node0, true);
99e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->divider_);
100e0dac50fSopenharmony_ci}
101e0dac50fSopenharmony_ci
102e0dac50fSopenharmony_ci/**
103e0dac50fSopenharmony_ci * @tc.name: IsPaired
104e0dac50fSopenharmony_ci * @tc.desc: Get whether the window pair is paired
105e0dac50fSopenharmony_ci * @tc.type: FUNC
106e0dac50fSopenharmony_ci */
107e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsPaired01, Function | SmallTest | Level2)
108e0dac50fSopenharmony_ci{
109e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
110e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
111e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->IsPaired());
112e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode();
113e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
114e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->IsPaired());
115e0dac50fSopenharmony_ci}
116e0dac50fSopenharmony_ci
117e0dac50fSopenharmony_ci/**
118e0dac50fSopenharmony_ci * @tc.name: IsPaired
119e0dac50fSopenharmony_ci * @tc.desc: Get whether the window pair is paired
120e0dac50fSopenharmony_ci * @tc.type: FUNC
121e0dac50fSopenharmony_ci */
122e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsPaired02, Function | SmallTest | Level2)
123e0dac50fSopenharmony_ci{
124e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
125e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
126e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
127e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
128e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
129e0dac50fSopenharmony_ci
130e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
131e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
132e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property2);
133e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
134e0dac50fSopenharmony_ci    windowPair->divider_ = node1;
135e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsPaired());
136e0dac50fSopenharmony_ci}
137e0dac50fSopenharmony_ci
138e0dac50fSopenharmony_ci/**
139e0dac50fSopenharmony_ci * @tc.name: IsPaired
140e0dac50fSopenharmony_ci * @tc.desc: Get whether the window pair is paired
141e0dac50fSopenharmony_ci * @tc.type: FUNC
142e0dac50fSopenharmony_ci */
143e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsPaired03, Function | SmallTest | Level2)
144e0dac50fSopenharmony_ci{
145e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
146e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
147e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
148e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
149e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
150e0dac50fSopenharmony_ci
151e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
152e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
153e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property2);
154e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
155e0dac50fSopenharmony_ci    windowPair->divider_ = nullptr;
156e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->IsPaired());
157e0dac50fSopenharmony_ci}
158e0dac50fSopenharmony_ci
159e0dac50fSopenharmony_ci/**
160e0dac50fSopenharmony_ci * @tc.name: Find
161e0dac50fSopenharmony_ci * @tc.desc: Find window node from window pair
162e0dac50fSopenharmony_ci * @tc.type: FUNC
163e0dac50fSopenharmony_ci */
164e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, Find01, Function | SmallTest | Level2)
165e0dac50fSopenharmony_ci{
166e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
167e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = nullptr;
168e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->Find(node1));
169e0dac50fSopenharmony_ci}
170e0dac50fSopenharmony_ci
171e0dac50fSopenharmony_ci/**
172e0dac50fSopenharmony_ci * @tc.name: Find
173e0dac50fSopenharmony_ci * @tc.desc: Find window node from window pair
174e0dac50fSopenharmony_ci * @tc.type: FUNC
175e0dac50fSopenharmony_ci */
176e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, Find02, Function | SmallTest | Level2)
177e0dac50fSopenharmony_ci{
178e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
179e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
180e0dac50fSopenharmony_ci    property1->SetWindowId(1);
181e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
182e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
183e0dac50fSopenharmony_ci    ASSERT_EQ(node1, windowPair->Find(node1));
184e0dac50fSopenharmony_ci}
185e0dac50fSopenharmony_ci
186e0dac50fSopenharmony_ci/**
187e0dac50fSopenharmony_ci * @tc.name: Find
188e0dac50fSopenharmony_ci * @tc.desc: Find window node from window pair
189e0dac50fSopenharmony_ci * @tc.type: FUNC
190e0dac50fSopenharmony_ci */
191e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, Find03, Function | SmallTest | Level2)
192e0dac50fSopenharmony_ci{
193e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
194e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
195e0dac50fSopenharmony_ci    property1->SetWindowId(1);
196e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
197e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
198e0dac50fSopenharmony_ci    windowPair->secondary_ = node1;
199e0dac50fSopenharmony_ci    ASSERT_EQ(node1, windowPair->Find(node1));
200e0dac50fSopenharmony_ci}
201e0dac50fSopenharmony_ci
202e0dac50fSopenharmony_ci/**
203e0dac50fSopenharmony_ci * @tc.name: Find
204e0dac50fSopenharmony_ci * @tc.desc: Find window node from window pair
205e0dac50fSopenharmony_ci * @tc.type: FUNC
206e0dac50fSopenharmony_ci */
207e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, Find04, Function | SmallTest | Level2)
208e0dac50fSopenharmony_ci{
209e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
210e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
211e0dac50fSopenharmony_ci    property1->SetWindowId(1);
212e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
213e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
214e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
215e0dac50fSopenharmony_ci    windowPair->divider_ = node1;
216e0dac50fSopenharmony_ci    ASSERT_EQ(node1, windowPair->Find(node1));
217e0dac50fSopenharmony_ci}
218e0dac50fSopenharmony_ci
219e0dac50fSopenharmony_ci/**
220e0dac50fSopenharmony_ci * @tc.name: GetSplitRatio
221e0dac50fSopenharmony_ci * @tc.desc: Get split ratio
222e0dac50fSopenharmony_ci * @tc.type: FUNC
223e0dac50fSopenharmony_ci */
224e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, GetSplitRatio01, Function | SmallTest | Level2)
225e0dac50fSopenharmony_ci{
226e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
227e0dac50fSopenharmony_ci    windowPair->ratio_ = 0;
228e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowPair->GetSplitRatio());
229e0dac50fSopenharmony_ci    windowPair->ratio_ = 5;
230e0dac50fSopenharmony_ci    ASSERT_EQ(5, windowPair->GetSplitRatio());
231e0dac50fSopenharmony_ci}
232e0dac50fSopenharmony_ci
233e0dac50fSopenharmony_ci/**
234e0dac50fSopenharmony_ci * @tc.name: IsForbidDockSliceMove
235e0dac50fSopenharmony_ci * @tc.desc: Get whether dock slice is forbidden to move
236e0dac50fSopenharmony_ci * @tc.type: FUNC
237e0dac50fSopenharmony_ci */
238e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsForbidDockSliceMove01, Function | SmallTest | Level2)
239e0dac50fSopenharmony_ci{
240e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
241e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
242e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsForbidDockSliceMove());
243e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::EMPTY;
244e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->IsForbidDockSliceMove());
245e0dac50fSopenharmony_ci}
246e0dac50fSopenharmony_ci
247e0dac50fSopenharmony_ci/**
248e0dac50fSopenharmony_ci * @tc.name: IsForbidDockSliceMove
249e0dac50fSopenharmony_ci * @tc.desc: Get whether dock slice is forbidden to move
250e0dac50fSopenharmony_ci * @tc.type: FUNC
251e0dac50fSopenharmony_ci */
252e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsForbidDockSliceMove02, Function | SmallTest | Level2)
253e0dac50fSopenharmony_ci{
254e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
255e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
256e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
257e0dac50fSopenharmony_ci    property1->SetWindowFlags(static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID));
258e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property1);
259e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property1);
260e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->IsForbidDockSliceMove());
261e0dac50fSopenharmony_ci}
262e0dac50fSopenharmony_ci
263e0dac50fSopenharmony_ci/**
264e0dac50fSopenharmony_ci * @tc.name: IsForbidDockSliceMove
265e0dac50fSopenharmony_ci * @tc.desc: Get whether dock slice is forbidden to move
266e0dac50fSopenharmony_ci * @tc.type: FUNC
267e0dac50fSopenharmony_ci */
268e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsForbidDockSliceMove03, Function | SmallTest | Level2)
269e0dac50fSopenharmony_ci{
270e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
271e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
272e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
273e0dac50fSopenharmony_ci    property1->SetWindowFlags(static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID));
274e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
275e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property1);
276e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsForbidDockSliceMove());
277e0dac50fSopenharmony_ci}
278e0dac50fSopenharmony_ci
279e0dac50fSopenharmony_ci/**
280e0dac50fSopenharmony_ci * @tc.name: IsForbidDockSliceMove
281e0dac50fSopenharmony_ci * @tc.desc: Get whether dock slice is forbidden to move
282e0dac50fSopenharmony_ci * @tc.type: FUNC
283e0dac50fSopenharmony_ci */
284e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsForbidDockSliceMove04, Function | SmallTest | Level2)
285e0dac50fSopenharmony_ci{
286e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
287e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
288e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
289e0dac50fSopenharmony_ci    property1->SetWindowFlags(static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_FORBID_SPLIT_MOVE));
290e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property1);
291e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property1);
292e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsForbidDockSliceMove());
293e0dac50fSopenharmony_ci}
294e0dac50fSopenharmony_ci
295e0dac50fSopenharmony_ci/**
296e0dac50fSopenharmony_ci * @tc.name: IsForbidDockSliceMove
297e0dac50fSopenharmony_ci * @tc.desc: Get whether dock slice is forbidden to move
298e0dac50fSopenharmony_ci * @tc.type: FUNC
299e0dac50fSopenharmony_ci */
300e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsForbidDockSliceMove05, Function | SmallTest | Level2)
301e0dac50fSopenharmony_ci{
302e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
303e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
304e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
305e0dac50fSopenharmony_ci    property1->SetWindowFlags(static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID));
306e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property1);
307e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
308e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsForbidDockSliceMove());
309e0dac50fSopenharmony_ci}
310e0dac50fSopenharmony_ci
311e0dac50fSopenharmony_ci/**
312e0dac50fSopenharmony_ci * @tc.name: IsForbidDockSliceMove
313e0dac50fSopenharmony_ci * @tc.desc: Get whether dock slice is forbidden to move
314e0dac50fSopenharmony_ci * @tc.type: FUNC
315e0dac50fSopenharmony_ci */
316e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsForbidDockSliceMove06, Function | SmallTest | Level2)
317e0dac50fSopenharmony_ci{
318e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
319e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
320e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
321e0dac50fSopenharmony_ci    property1->SetWindowFlags(static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_NEED_AVOID));
322e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
323e0dac50fSopenharmony_ci    property2->SetWindowFlags(static_cast<uint32_t>(WindowFlag::WINDOW_FLAG_FORBID_SPLIT_MOVE));
324e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property1);
325e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property2);
326e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsForbidDockSliceMove());
327e0dac50fSopenharmony_ci}
328e0dac50fSopenharmony_ci
329e0dac50fSopenharmony_ci/**
330e0dac50fSopenharmony_ci * @tc.name: IsDockSliceInExitSplitModeArea
331e0dac50fSopenharmony_ci * @tc.desc: whether dock slice in exit split screen mode area
332e0dac50fSopenharmony_ci * @tc.type: FUNC
333e0dac50fSopenharmony_ci */
334e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsDockSliceInExitSplitModeArea01, Function | SmallTest | Level2)
335e0dac50fSopenharmony_ci{
336e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
337e0dac50fSopenharmony_ci    std::vector<int32_t> points {0, 0};
338e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
339e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->IsDockSliceInExitSplitModeArea(points));
340e0dac50fSopenharmony_ci}
341e0dac50fSopenharmony_ci
342e0dac50fSopenharmony_ci/**
343e0dac50fSopenharmony_ci * @tc.name: IsDockSliceInExitSplitModeArea
344e0dac50fSopenharmony_ci * @tc.desc: whether dock slice in exit split screen mode area
345e0dac50fSopenharmony_ci * @tc.type: FUNC
346e0dac50fSopenharmony_ci */
347e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsDockSliceInExitSplitModeArea02, Function | SmallTest | Level2)
348e0dac50fSopenharmony_ci{
349e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
350e0dac50fSopenharmony_ci    std::vector<int32_t> points {2, 0};
351e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
352e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
353e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
354e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
355e0dac50fSopenharmony_ci    sptr<WindowProperty> property3 = new WindowProperty();
356e0dac50fSopenharmony_ci
357e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
358e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
359e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property2);
360e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
361e0dac50fSopenharmony_ci    Rect rect1 = {1, 1, 10, 20};
362e0dac50fSopenharmony_ci    Rect rect2 = {1, 1, 20, 10};
363e0dac50fSopenharmony_ci    property2->SetWindowRect(rect1);
364e0dac50fSopenharmony_ci    property3->SetWindowRect(rect2);
365e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property2);
366e0dac50fSopenharmony_ci
367e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsPaired());
368e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsDockSliceInExitSplitModeArea(points));
369e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property3);
370e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsDockSliceInExitSplitModeArea(points));
371e0dac50fSopenharmony_ci}
372e0dac50fSopenharmony_ci
373e0dac50fSopenharmony_ci/**
374e0dac50fSopenharmony_ci * @tc.name: IsDockSliceInExitSplitModeArea
375e0dac50fSopenharmony_ci * @tc.desc: whether dock slice in exit split screen mode area
376e0dac50fSopenharmony_ci * @tc.type: FUNC
377e0dac50fSopenharmony_ci */
378e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsDockSliceInExitSplitModeArea03, Function | SmallTest | Level2)
379e0dac50fSopenharmony_ci{
380e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
381e0dac50fSopenharmony_ci    std::vector<int32_t> points {0, 50};
382e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
383e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
384e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
385e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
386e0dac50fSopenharmony_ci
387e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
388e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
389e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property2);
390e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
391e0dac50fSopenharmony_ci    Rect rect1 = {1, 1, 10, 20};
392e0dac50fSopenharmony_ci    property2->SetWindowRect(rect1);
393e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property2);
394e0dac50fSopenharmony_ci
395e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsPaired());
396e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->IsDockSliceInExitSplitModeArea(points));
397e0dac50fSopenharmony_ci}
398e0dac50fSopenharmony_ci
399e0dac50fSopenharmony_ci/**
400e0dac50fSopenharmony_ci * @tc.name: IsSplitRelated
401e0dac50fSopenharmony_ci * @tc.desc: Gets whether the window is related to split window.
402e0dac50fSopenharmony_ci * @tc.type: FUNC
403e0dac50fSopenharmony_ci */
404e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsSplitRelated01, Function | SmallTest | Level2)
405e0dac50fSopenharmony_ci{
406e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
407e0dac50fSopenharmony_ci    sptr<WindowNode> node = nullptr;
408e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->IsSplitRelated(node));
409e0dac50fSopenharmony_ci}
410e0dac50fSopenharmony_ci
411e0dac50fSopenharmony_ci/**
412e0dac50fSopenharmony_ci * @tc.name: IsSplitRelated
413e0dac50fSopenharmony_ci * @tc.desc: Gets whether the window is related to split window.
414e0dac50fSopenharmony_ci * @tc.type: FUNC
415e0dac50fSopenharmony_ci */
416e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsSplitRelated02, Function | SmallTest | Level2)
417e0dac50fSopenharmony_ci{
418e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
419e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
420e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
421e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
422e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsSplitRelated(node1));
423e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
424e0dac50fSopenharmony_ci    property1->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
425e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property1);
426e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->IsSplitRelated(node2));
427e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
428e0dac50fSopenharmony_ci    property1->SetWindowType(WindowType::APP_WINDOW_BASE);
429e0dac50fSopenharmony_ci    sptr<WindowNode> node3 = new WindowNode(property1);
430e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->IsSplitRelated(node3));
431e0dac50fSopenharmony_ci}
432e0dac50fSopenharmony_ci
433e0dac50fSopenharmony_ci/**
434e0dac50fSopenharmony_ci * @tc.name: GetOrderedPair
435e0dac50fSopenharmony_ci * @tc.desc: Get all window node form pair in Z order.
436e0dac50fSopenharmony_ci * @tc.type: FUNC
437e0dac50fSopenharmony_ci */
438e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, GetOrderedPair01, Function | SmallTest | Level2)
439e0dac50fSopenharmony_ci{
440e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
441e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = nullptr;
442e0dac50fSopenharmony_ci    std::vector<sptr<WindowNode>> vec;
443e0dac50fSopenharmony_ci    vec.clear();
444e0dac50fSopenharmony_ci    ASSERT_EQ(vec, windowPair->GetOrderedPair(node1));
445e0dac50fSopenharmony_ci}
446e0dac50fSopenharmony_ci
447e0dac50fSopenharmony_ci/**
448e0dac50fSopenharmony_ci * @tc.name: GetOrderedPair
449e0dac50fSopenharmony_ci * @tc.desc: Get all window node form pair in Z order.
450e0dac50fSopenharmony_ci * @tc.type: FUNC
451e0dac50fSopenharmony_ci */
452e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, GetOrderedPair02, Function | SmallTest | Level2)
453e0dac50fSopenharmony_ci{
454e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
455e0dac50fSopenharmony_ci
456e0dac50fSopenharmony_ci    // create window property
457e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
458e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
459e0dac50fSopenharmony_ci    property0->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
460e0dac50fSopenharmony_ci    property0->SetWindowId(1);
461e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
462e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
463e0dac50fSopenharmony_ci    property1->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
464e0dac50fSopenharmony_ci    property1->SetWindowId(2);
465e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
466e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
467e0dac50fSopenharmony_ci    property2->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
468e0dac50fSopenharmony_ci    property2->SetWindowId(3);
469e0dac50fSopenharmony_ci
470e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
471e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
472e0dac50fSopenharmony_ci
473e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property0);
474e0dac50fSopenharmony_ci    windowPair->secondary_ = node1;
475e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property2);
476e0dac50fSopenharmony_ci    ASSERT_EQ(3, windowPair->GetOrderedPair(node1).size());
477e0dac50fSopenharmony_ci}
478e0dac50fSopenharmony_ci
479e0dac50fSopenharmony_ci/**
480e0dac50fSopenharmony_ci * @tc.name: GetOrderedPair
481e0dac50fSopenharmony_ci * @tc.desc: Get all window node form pair in Z order.
482e0dac50fSopenharmony_ci * @tc.type: FUNC
483e0dac50fSopenharmony_ci */
484e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, GetOrderedPair03, Function | SmallTest | Level2)
485e0dac50fSopenharmony_ci{
486e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
487e0dac50fSopenharmony_ci
488e0dac50fSopenharmony_ci    // create window property
489e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
490e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
491e0dac50fSopenharmony_ci    property0->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
492e0dac50fSopenharmony_ci    property0->SetWindowId(1);
493e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
494e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
495e0dac50fSopenharmony_ci    property1->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
496e0dac50fSopenharmony_ci    property1->SetWindowId(2);
497e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
498e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
499e0dac50fSopenharmony_ci    property2->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
500e0dac50fSopenharmony_ci    property2->SetWindowId(3);
501e0dac50fSopenharmony_ci
502e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
503e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property0);
504e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
505e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property1);
506e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property2);
507e0dac50fSopenharmony_ci
508e0dac50fSopenharmony_ci    ASSERT_EQ(3, windowPair->GetOrderedPair(node1).size());
509e0dac50fSopenharmony_ci}
510e0dac50fSopenharmony_ci
511e0dac50fSopenharmony_ci/**
512e0dac50fSopenharmony_ci * @tc.name: GetOrderedPair
513e0dac50fSopenharmony_ci * @tc.desc: Get all window node form pair in Z order.
514e0dac50fSopenharmony_ci * @tc.type: FUNC
515e0dac50fSopenharmony_ci */
516e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, GetOrderedPair04, Function | SmallTest | Level2)
517e0dac50fSopenharmony_ci{
518e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
519e0dac50fSopenharmony_ci    // create window property
520e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
521e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
522e0dac50fSopenharmony_ci    property0->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
523e0dac50fSopenharmony_ci    property0->SetWindowId(1);
524e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
525e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
526e0dac50fSopenharmony_ci    property1->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
527e0dac50fSopenharmony_ci    property1->SetWindowId(2);
528e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
529e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
530e0dac50fSopenharmony_ci    property2->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
531e0dac50fSopenharmony_ci    property2->SetWindowId(3);
532e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
533e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property0);
534e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
535e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
536e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property2);
537e0dac50fSopenharmony_ci    ASSERT_EQ(2, windowPair->GetOrderedPair(node1).size());
538e0dac50fSopenharmony_ci}
539e0dac50fSopenharmony_ci
540e0dac50fSopenharmony_ci/**
541e0dac50fSopenharmony_ci * @tc.name: GetOrderedPair
542e0dac50fSopenharmony_ci * @tc.desc: Get all window node form pair in Z order.
543e0dac50fSopenharmony_ci * @tc.type: FUNC
544e0dac50fSopenharmony_ci */
545e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, GetOrderedPair05, Function | SmallTest | Level2)
546e0dac50fSopenharmony_ci{
547e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
548e0dac50fSopenharmony_ci    // create window property
549e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
550e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
551e0dac50fSopenharmony_ci    property0->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
552e0dac50fSopenharmony_ci    property0->SetWindowId(1);
553e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
554e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
555e0dac50fSopenharmony_ci    property1->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
556e0dac50fSopenharmony_ci    property1->SetWindowId(2);
557e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
558e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
559e0dac50fSopenharmony_ci    property2->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
560e0dac50fSopenharmony_ci    property2->SetWindowId(3);
561e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
562e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
563e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
564e0dac50fSopenharmony_ci    windowPair->secondary_ = node1;
565e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property2);
566e0dac50fSopenharmony_ci    ASSERT_EQ(2, windowPair->GetOrderedPair(node1).size());
567e0dac50fSopenharmony_ci}
568e0dac50fSopenharmony_ci
569e0dac50fSopenharmony_ci/**
570e0dac50fSopenharmony_ci * @tc.name: GetOrderedPair
571e0dac50fSopenharmony_ci * @tc.desc: Get all window node form pair in Z order.
572e0dac50fSopenharmony_ci * @tc.type: FUNC
573e0dac50fSopenharmony_ci */
574e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, GetOrderedPair06, Function | SmallTest | Level2)
575e0dac50fSopenharmony_ci{
576e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
577e0dac50fSopenharmony_ci    // create window property
578e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
579e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
580e0dac50fSopenharmony_ci    property0->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
581e0dac50fSopenharmony_ci    property0->SetWindowId(1);
582e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
583e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
584e0dac50fSopenharmony_ci    property1->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
585e0dac50fSopenharmony_ci    property1->SetWindowId(2);
586e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
587e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
588e0dac50fSopenharmony_ci    property2->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
589e0dac50fSopenharmony_ci    property2->SetWindowId(3);
590e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
591e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property2);
592e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
593e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
594e0dac50fSopenharmony_ci    windowPair->divider_ = node1;
595e0dac50fSopenharmony_ci    ASSERT_EQ(1, windowPair->GetOrderedPair(node1).size());
596e0dac50fSopenharmony_ci}
597e0dac50fSopenharmony_ci
598e0dac50fSopenharmony_ci/**
599e0dac50fSopenharmony_ci * @tc.name: GetOrderedPair
600e0dac50fSopenharmony_ci * @tc.desc: Get all window node form pair in Z order.
601e0dac50fSopenharmony_ci * @tc.type: FUNC
602e0dac50fSopenharmony_ci */
603e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, GetOrderedPair07, Function | SmallTest | Level2)
604e0dac50fSopenharmony_ci{
605e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
606e0dac50fSopenharmony_ci    // create window property
607e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
608e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
609e0dac50fSopenharmony_ci    property0->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
610e0dac50fSopenharmony_ci    property0->SetWindowId(1);
611e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
612e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
613e0dac50fSopenharmony_ci    property1->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
614e0dac50fSopenharmony_ci    property1->SetWindowId(2);
615e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
616e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
617e0dac50fSopenharmony_ci    property2->SetWindowType(WindowType::WINDOW_TYPE_DOCK_SLICE);
618e0dac50fSopenharmony_ci    property2->SetWindowId(3);
619e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
620e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property0);
621e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
622e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property1);
623e0dac50fSopenharmony_ci    windowPair->divider_ = nullptr;
624e0dac50fSopenharmony_ci    ASSERT_EQ(2, windowPair->GetOrderedPair(node1).size());
625e0dac50fSopenharmony_ci}
626e0dac50fSopenharmony_ci
627e0dac50fSopenharmony_ci/**
628e0dac50fSopenharmony_ci * @tc.name: GetPairedWindows
629e0dac50fSopenharmony_ci * @tc.desc: Get all window node form pair.
630e0dac50fSopenharmony_ci * @tc.type: FUNC
631e0dac50fSopenharmony_ci */
632e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, GetPairedWindows01, Function | SmallTest | Level2)
633e0dac50fSopenharmony_ci{
634e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
635e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
636e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
637e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
638e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
639e0dac50fSopenharmony_ci
640e0dac50fSopenharmony_ci    // define primary_, secondary_
641e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property0);
642e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property1);
643e0dac50fSopenharmony_ci
644e0dac50fSopenharmony_ci    // define status_
645e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::EMPTY;
646e0dac50fSopenharmony_ci
647e0dac50fSopenharmony_ci    ASSERT_EQ(0, windowPair->GetPairedWindows().size());
648e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
649e0dac50fSopenharmony_ci    ASSERT_EQ(2, windowPair->GetPairedWindows().size());
650e0dac50fSopenharmony_ci    ASSERT_EQ(windowPair->secondary_, windowPair->GetPairedWindows().at(1));
651e0dac50fSopenharmony_ci    ASSERT_EQ(windowPair->primary_, windowPair->GetPairedWindows().at(0));
652e0dac50fSopenharmony_ci}
653e0dac50fSopenharmony_ci
654e0dac50fSopenharmony_ci/**
655e0dac50fSopenharmony_ci * @tc.name: Clear
656e0dac50fSopenharmony_ci * @tc.desc: Clear window pair.
657e0dac50fSopenharmony_ci * @tc.type: FUNC
658e0dac50fSopenharmony_ci */
659e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, Clear01, Function | SmallTest | Level2)
660e0dac50fSopenharmony_ci{
661e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
662e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
663e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
664e0dac50fSopenharmony_ci
665e0dac50fSopenharmony_ci    // define divider
666e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property0);
667e0dac50fSopenharmony_ci    windowPair->Clear();
668e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->divider_);
669e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::EMPTY, windowPair->status_);
670e0dac50fSopenharmony_ci}
671e0dac50fSopenharmony_ci
672e0dac50fSopenharmony_ci/**
673e0dac50fSopenharmony_ci * @tc.name: UpdateWindowPairStatus
674e0dac50fSopenharmony_ci * @tc.desc: Update pair status
675e0dac50fSopenharmony_ci * @tc.type: FUNC
676e0dac50fSopenharmony_ci */
677e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, UpdateWindowPairStatus01, Function | SmallTest | Level2)
678e0dac50fSopenharmony_ci{
679e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
680e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
681e0dac50fSopenharmony_ci
682e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
683e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property0);
684e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property0);
685e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property0);
686e0dac50fSopenharmony_ci
687e0dac50fSopenharmony_ci    // define status_
688e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::SINGLE_PRIMARY;
689e0dac50fSopenharmony_ci
690e0dac50fSopenharmony_ci    windowPair->UpdateWindowPairStatus();
691e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::PAIRED_DONE, windowPair->status_);
692e0dac50fSopenharmony_ci}
693e0dac50fSopenharmony_ci
694e0dac50fSopenharmony_ci/**
695e0dac50fSopenharmony_ci * @tc.name: UpdateWindowPairStatus
696e0dac50fSopenharmony_ci * @tc.desc: Update pair status
697e0dac50fSopenharmony_ci * @tc.type: FUNC
698e0dac50fSopenharmony_ci */
699e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, UpdateWindowPairStatus02, Function | SmallTest | Level2)
700e0dac50fSopenharmony_ci{
701e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
702e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
703e0dac50fSopenharmony_ci
704e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
705e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property0);
706e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property0);
707e0dac50fSopenharmony_ci    windowPair->divider_ = nullptr;
708e0dac50fSopenharmony_ci
709e0dac50fSopenharmony_ci    // define status_
710e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::SINGLE_PRIMARY;
711e0dac50fSopenharmony_ci
712e0dac50fSopenharmony_ci    windowPair->UpdateWindowPairStatus();
713e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::PRIMARY_AND_SECONDARY, windowPair->status_);
714e0dac50fSopenharmony_ci}
715e0dac50fSopenharmony_ci
716e0dac50fSopenharmony_ci/**
717e0dac50fSopenharmony_ci * @tc.name: UpdateWindowPairStatus
718e0dac50fSopenharmony_ci * @tc.desc: Update pair status
719e0dac50fSopenharmony_ci * @tc.type: FUNC
720e0dac50fSopenharmony_ci */
721e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, UpdateWindowPairStatus03, Function | SmallTest | Level2)
722e0dac50fSopenharmony_ci{
723e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
724e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
725e0dac50fSopenharmony_ci
726e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
727e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property0);
728e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
729e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property0);
730e0dac50fSopenharmony_ci
731e0dac50fSopenharmony_ci    // define status_
732e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
733e0dac50fSopenharmony_ci
734e0dac50fSopenharmony_ci    windowPair->UpdateWindowPairStatus();
735e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::EMPTY, windowPair->status_);
736e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
737e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->secondary_);
738e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->divider_);
739e0dac50fSopenharmony_ci}
740e0dac50fSopenharmony_ci
741e0dac50fSopenharmony_ci/**
742e0dac50fSopenharmony_ci * @tc.name: UpdateWindowPairStatus
743e0dac50fSopenharmony_ci * @tc.desc: Update pair status
744e0dac50fSopenharmony_ci * @tc.type: FUNC
745e0dac50fSopenharmony_ci */
746e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, UpdateWindowPairStatus04, Function | SmallTest | Level2)
747e0dac50fSopenharmony_ci{
748e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
749e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
750e0dac50fSopenharmony_ci
751e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
752e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
753e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property0);
754e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property0);
755e0dac50fSopenharmony_ci
756e0dac50fSopenharmony_ci    // define status_
757e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::EMPTY;
758e0dac50fSopenharmony_ci
759e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = windowPair->secondary_;
760e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = windowPair->divider_;
761e0dac50fSopenharmony_ci    windowPair->UpdateWindowPairStatus();
762e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::SECONDARY_AND_DIVIDER, windowPair->status_);
763e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
764e0dac50fSopenharmony_ci    ASSERT_EQ(node1, windowPair->secondary_);
765e0dac50fSopenharmony_ci    ASSERT_EQ(node2, windowPair->divider_);
766e0dac50fSopenharmony_ci}
767e0dac50fSopenharmony_ci
768e0dac50fSopenharmony_ci/**
769e0dac50fSopenharmony_ci * @tc.name: UpdateWindowPairStatus
770e0dac50fSopenharmony_ci * @tc.desc: Update pair status
771e0dac50fSopenharmony_ci * @tc.type: FUNC
772e0dac50fSopenharmony_ci */
773e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, UpdateWindowPairStatus05, Function | SmallTest | Level2)
774e0dac50fSopenharmony_ci{
775e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
776e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
777e0dac50fSopenharmony_ci
778e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
779e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
780e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
781e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property0);
782e0dac50fSopenharmony_ci
783e0dac50fSopenharmony_ci    // define status_
784e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::SINGLE_PRIMARY;
785e0dac50fSopenharmony_ci
786e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = windowPair->divider_;
787e0dac50fSopenharmony_ci    windowPair->UpdateWindowPairStatus();
788e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::SINGLE_SPLIT, windowPair->status_);
789e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
790e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->secondary_);
791e0dac50fSopenharmony_ci    ASSERT_EQ(node1, windowPair->divider_);
792e0dac50fSopenharmony_ci}
793e0dac50fSopenharmony_ci
794e0dac50fSopenharmony_ci/**
795e0dac50fSopenharmony_ci * @tc.name: SwitchPosition
796e0dac50fSopenharmony_ci * @tc.desc: Switch the position of two paired window.
797e0dac50fSopenharmony_ci * @tc.type: FUNC
798e0dac50fSopenharmony_ci */
799e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, SwitchPosition01, Function | SmallTest | Level2)
800e0dac50fSopenharmony_ci{
801e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
802e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
803e0dac50fSopenharmony_ci
804e0dac50fSopenharmony_ci    // define primary_, secondary_, divider_
805e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
806e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
807e0dac50fSopenharmony_ci    windowPair->divider_ = new WindowNode(property0);
808e0dac50fSopenharmony_ci
809e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = windowPair->divider_;
810e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
811e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->secondary_);
812e0dac50fSopenharmony_ci    ASSERT_EQ(node1, windowPair->divider_);
813e0dac50fSopenharmony_ci}
814e0dac50fSopenharmony_ci
815e0dac50fSopenharmony_ci/**
816e0dac50fSopenharmony_ci * @tc.name: SwitchPosition
817e0dac50fSopenharmony_ci * @tc.desc: Switch the position of two paired window.
818e0dac50fSopenharmony_ci * @tc.type: FUNC
819e0dac50fSopenharmony_ci */
820e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, SwitchPosition02, Function | SmallTest | Level2)
821e0dac50fSopenharmony_ci{
822e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
823e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
824e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
825e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
826e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
827e0dac50fSopenharmony_ci
828e0dac50fSopenharmony_ci    // define primary_, secondary_
829e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property0);
830e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property1);
831e0dac50fSopenharmony_ci
832e0dac50fSopenharmony_ci    windowPair->SwitchPosition();
833e0dac50fSopenharmony_ci    ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_PRIMARY, windowPair->primary_->GetWindowMode());
834e0dac50fSopenharmony_ci    ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_SECONDARY, windowPair->secondary_->GetWindowMode());
835e0dac50fSopenharmony_ci}
836e0dac50fSopenharmony_ci
837e0dac50fSopenharmony_ci/**
838e0dac50fSopenharmony_ci * @tc.name: SwitchPosition
839e0dac50fSopenharmony_ci * @tc.desc: Switch the position of two paired window.
840e0dac50fSopenharmony_ci * @tc.type: FUNC
841e0dac50fSopenharmony_ci */
842e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, SwitchPosition03, Function | SmallTest | Level2)
843e0dac50fSopenharmony_ci{
844e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
845e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
846e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
847e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
848e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
849e0dac50fSopenharmony_ci
850e0dac50fSopenharmony_ci    // define primary_, secondary_
851e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property0);
852e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property1);
853e0dac50fSopenharmony_ci
854e0dac50fSopenharmony_ci    windowPair->SwitchPosition();
855e0dac50fSopenharmony_ci    ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_PRIMARY, windowPair->primary_->GetWindowMode());
856e0dac50fSopenharmony_ci    ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_SECONDARY, windowPair->secondary_->GetWindowMode());
857e0dac50fSopenharmony_ci}
858e0dac50fSopenharmony_ci
859e0dac50fSopenharmony_ci/**
860e0dac50fSopenharmony_ci * @tc.name: HandlePairedNodesChange
861e0dac50fSopenharmony_ci * @tc.desc: Update paired window node
862e0dac50fSopenharmony_ci * @tc.type: FUNC
863e0dac50fSopenharmony_ci */
864e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, HandlePairedNodesChange01, Function | SmallTest | Level2)
865e0dac50fSopenharmony_ci{
866e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
867e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
868e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
869e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
870e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
871e0dac50fSopenharmony_ci
872e0dac50fSopenharmony_ci    // define primary_, secondary_
873e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property0);
874e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property0);
875e0dac50fSopenharmony_ci
876e0dac50fSopenharmony_ci    windowPair->HandlePairedNodesChange();
877e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
878e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->secondary_);
879e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::EMPTY, windowPair->status_);
880e0dac50fSopenharmony_ci}
881e0dac50fSopenharmony_ci
882e0dac50fSopenharmony_ci/**
883e0dac50fSopenharmony_ci * @tc.name: HandlePairedNodesChange
884e0dac50fSopenharmony_ci * @tc.desc: Update paired window node
885e0dac50fSopenharmony_ci * @tc.type: FUNC
886e0dac50fSopenharmony_ci */
887e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, HandlePairedNodesChange02, Function | SmallTest | Level2)
888e0dac50fSopenharmony_ci{
889e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
890e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
891e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
892e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
893e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
894e0dac50fSopenharmony_ci
895e0dac50fSopenharmony_ci    // define primary_, secondary_
896e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property0);
897e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property1);
898e0dac50fSopenharmony_ci
899e0dac50fSopenharmony_ci    sptr<WindowNode> tmp_node = windowPair->secondary_;
900e0dac50fSopenharmony_ci    windowPair->HandlePairedNodesChange();
901e0dac50fSopenharmony_ci    ASSERT_EQ(tmp_node, windowPair->primary_);
902e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->secondary_);
903e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::SINGLE_PRIMARY, windowPair->status_);
904e0dac50fSopenharmony_ci}
905e0dac50fSopenharmony_ci
906e0dac50fSopenharmony_ci/**
907e0dac50fSopenharmony_ci * @tc.name: HandlePairedNodesChange
908e0dac50fSopenharmony_ci * @tc.desc: Update paired window node
909e0dac50fSopenharmony_ci * @tc.type: FUNC
910e0dac50fSopenharmony_ci */
911e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, HandlePairedNodesChange03, Function | SmallTest | Level2)
912e0dac50fSopenharmony_ci{
913e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
914e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
915e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
916e0dac50fSopenharmony_ci
917e0dac50fSopenharmony_ci    // define primary_, secondary_
918e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
919e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property0);
920e0dac50fSopenharmony_ci
921e0dac50fSopenharmony_ci    windowPair->HandlePairedNodesChange();
922e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
923e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->secondary_);
924e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::EMPTY, windowPair->status_);
925e0dac50fSopenharmony_ci}
926e0dac50fSopenharmony_ci
927e0dac50fSopenharmony_ci/**
928e0dac50fSopenharmony_ci * @tc.name: HandlePairedNodesChange
929e0dac50fSopenharmony_ci * @tc.desc: Update paired window node
930e0dac50fSopenharmony_ci * @tc.type: FUNC
931e0dac50fSopenharmony_ci */
932e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, HandlePairedNodesChange04, Function | SmallTest | Level2)
933e0dac50fSopenharmony_ci{
934e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
935e0dac50fSopenharmony_ci    sptr<WindowProperty> property0 = new WindowProperty();
936e0dac50fSopenharmony_ci    property0->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);
937e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
938e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
939e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
940e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
941e0dac50fSopenharmony_ci
942e0dac50fSopenharmony_ci    // define primary_, secondary_
943e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property2);
944e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property0);
945e0dac50fSopenharmony_ci
946e0dac50fSopenharmony_ci    sptr<WindowNode> tmp_node = windowPair->primary_;
947e0dac50fSopenharmony_ci    windowPair->HandlePairedNodesChange();
948e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
949e0dac50fSopenharmony_ci    ASSERT_EQ(tmp_node, windowPair->secondary_);
950e0dac50fSopenharmony_ci    ASSERT_EQ(WindowPairStatus::SINGLE_SECONDARY, windowPair->status_);
951e0dac50fSopenharmony_ci}
952e0dac50fSopenharmony_ci
953e0dac50fSopenharmony_ci/**
954e0dac50fSopenharmony_ci * @tc.name: HandlePairedNodesChange
955e0dac50fSopenharmony_ci * @tc.desc: Update paired window node
956e0dac50fSopenharmony_ci * @tc.type: FUNC
957e0dac50fSopenharmony_ci */
958e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, HandlePairedNodesChange05, Function | SmallTest | Level2)
959e0dac50fSopenharmony_ci{
960e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
961e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
962e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
963e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
964e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
965e0dac50fSopenharmony_ci
966e0dac50fSopenharmony_ci    // define primary_, secondary_
967e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property1);
968e0dac50fSopenharmony_ci    windowPair->secondary_ = new WindowNode(property2);
969e0dac50fSopenharmony_ci
970e0dac50fSopenharmony_ci    windowPair->HandlePairedNodesChange();
971e0dac50fSopenharmony_ci    ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_PRIMARY, windowPair->primary_->GetWindowMode());
972e0dac50fSopenharmony_ci    ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_SECONDARY, windowPair->secondary_->GetWindowMode());
973e0dac50fSopenharmony_ci}
974e0dac50fSopenharmony_ci
975e0dac50fSopenharmony_ci/**
976e0dac50fSopenharmony_ci * @tc.name: HandleRemoveWindow
977e0dac50fSopenharmony_ci * @tc.desc: Handle removed window
978e0dac50fSopenharmony_ci * @tc.type: FUNC
979e0dac50fSopenharmony_ci */
980e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, HandleRemoveWindow01, Function | SmallTest | Level2)
981e0dac50fSopenharmony_ci{
982e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
983e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
984e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
985e0dac50fSopenharmony_ci    windowPair->primary_ = new WindowNode(property1);
986e0dac50fSopenharmony_ci
987e0dac50fSopenharmony_ci    sptr<WindowNode> node = nullptr;
988e0dac50fSopenharmony_ci    windowPair->HandleRemoveWindow(node);
989e0dac50fSopenharmony_ci    ASSERT_EQ(WindowMode::WINDOW_MODE_SPLIT_PRIMARY, windowPair->primary_->GetWindowMode());
990e0dac50fSopenharmony_ci}
991e0dac50fSopenharmony_ci
992e0dac50fSopenharmony_ci/**
993e0dac50fSopenharmony_ci * @tc.name: HandleRemoveWindow
994e0dac50fSopenharmony_ci * @tc.desc: Handle removed window
995e0dac50fSopenharmony_ci * @tc.type: FUNC
996e0dac50fSopenharmony_ci */
997e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, HandleRemoveWindow02, Function | SmallTest | Level2)
998e0dac50fSopenharmony_ci{
999e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
1000e0dac50fSopenharmony_ci
1001e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
1002e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
1003e0dac50fSopenharmony_ci
1004e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
1005e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property1);
1006e0dac50fSopenharmony_ci
1007e0dac50fSopenharmony_ci    // define primary_, secondary_, status_
1008e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
1009e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
1010e0dac50fSopenharmony_ci    windowPair->divider_ = nullptr;
1011e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PRIMARY_AND_SECONDARY;
1012e0dac50fSopenharmony_ci
1013e0dac50fSopenharmony_ci    IWindowMocker* w = new IWindowMocker;
1014e0dac50fSopenharmony_ci    sptr<IWindow> window(w);
1015e0dac50fSopenharmony_ci    node1->SetWindowToken(window);
1016e0dac50fSopenharmony_ci    EXPECT_CALL(*w, UpdateWindowMode(_)).Times(1).WillOnce(Return(WMError::WM_OK));
1017e0dac50fSopenharmony_ci    windowPair->HandleRemoveWindow(node1);
1018e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
1019e0dac50fSopenharmony_ci    sptr<IWindow> window1 = nullptr;
1020e0dac50fSopenharmony_ci    node1->SetWindowToken(window1);
1021e0dac50fSopenharmony_ci    windowPair->HandleRemoveWindow(node1);
1022e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_);
1023e0dac50fSopenharmony_ci}
1024e0dac50fSopenharmony_ci
1025e0dac50fSopenharmony_ci/**
1026e0dac50fSopenharmony_ci * @tc.name: TakePairSnapshot
1027e0dac50fSopenharmony_ci * @tc.desc: take pair snapsht
1028e0dac50fSopenharmony_ci * @tc.type: FUNC
1029e0dac50fSopenharmony_ci */
1030e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, TakePairSnapshot01, Function | SmallTest | Level2)
1031e0dac50fSopenharmony_ci{
1032e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
1033e0dac50fSopenharmony_ci
1034e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
1035e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
1036e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
1037e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
1038e0dac50fSopenharmony_ci
1039e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
1040e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property2);
1041e0dac50fSopenharmony_ci
1042e0dac50fSopenharmony_ci    // define primary_, secondary_, status_
1043e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1044e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1045e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
1046e0dac50fSopenharmony_ci
1047e0dac50fSopenharmony_ci    ASSERT_EQ(true, windowPair->TakePairSnapshot());
1048e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
1049e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->TakePairSnapshot());
1050e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1051e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
1052e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->TakePairSnapshot());
1053e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PRIMARY_AND_SECONDARY;
1054e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->TakePairSnapshot());
1055e0dac50fSopenharmony_ci}
1056e0dac50fSopenharmony_ci
1057e0dac50fSopenharmony_ci/**
1058e0dac50fSopenharmony_ci * @tc.name: ClearPairSnapshot
1059e0dac50fSopenharmony_ci * @tc.desc: Clear Pair Snapshot
1060e0dac50fSopenharmony_ci * @tc.type: FUNC
1061e0dac50fSopenharmony_ci */
1062e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, ClearPairSnapshot01, Function | SmallTest | Level2)
1063e0dac50fSopenharmony_ci{
1064e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
1065e0dac50fSopenharmony_ci
1066e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
1067e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
1068e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
1069e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
1070e0dac50fSopenharmony_ci
1071e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
1072e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property2);
1073e0dac50fSopenharmony_ci
1074e0dac50fSopenharmony_ci    // define primary_, secondary_,
1075e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1076e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1077e0dac50fSopenharmony_ci
1078e0dac50fSopenharmony_ci    windowPair->ClearPairSnapshot();
1079e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->primary_->snapshot_);
1080e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->secondary_->snapshot_);
1081e0dac50fSopenharmony_ci
1082e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
1083e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->TakePairSnapshot());
1084e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1085e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
1086e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->TakePairSnapshot());
1087e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PRIMARY_AND_SECONDARY;
1088e0dac50fSopenharmony_ci    ASSERT_EQ(false, windowPair->TakePairSnapshot());
1089e0dac50fSopenharmony_ci}
1090e0dac50fSopenharmony_ci/**
1091e0dac50fSopenharmony_ci * @tc.name: ExitSplitMode
1092e0dac50fSopenharmony_ci * @tc.desc: Exit Split Mode
1093e0dac50fSopenharmony_ci * @tc.type: FUNC
1094e0dac50fSopenharmony_ci */
1095e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, ExitSplitMode01, Function | SmallTest | Level2)
1096e0dac50fSopenharmony_ci{
1097e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
1098e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
1099e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
1100e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
1101e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
1102e0dac50fSopenharmony_ci
1103e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
1104e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1105e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property2);
1106e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1107e0dac50fSopenharmony_ci    windowPair->divider_ = nullptr;
1108e0dac50fSopenharmony_ci    windowPair->ExitSplitMode();
1109e0dac50fSopenharmony_ci    ASSERT_EQ(nullptr, windowPair->divider_);
1110e0dac50fSopenharmony_ci}
1111e0dac50fSopenharmony_ci/**
1112e0dac50fSopenharmony_ci * @tc.name: ExitSplitMode
1113e0dac50fSopenharmony_ci * @tc.desc: Exit Split Mode
1114e0dac50fSopenharmony_ci * @tc.type: FUNC
1115e0dac50fSopenharmony_ci */
1116e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, ExitSplitMode02, Function | SmallTest | Level2)
1117e0dac50fSopenharmony_ci{
1118e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
1119e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
1120e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
1121e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
1122e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
1123e0dac50fSopenharmony_ci    sptr<WindowProperty> property3 = new WindowProperty();
1124e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
1125e0dac50fSopenharmony_ci
1126e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
1127e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1128e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property2);
1129e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1130e0dac50fSopenharmony_ci    sptr<WindowNode> node3 = new WindowNode(property3);
1131e0dac50fSopenharmony_ci    const Rect divider_rect2 = {0, 20, 100, 1};
1132e0dac50fSopenharmony_ci    const Rect primary_rect1 = {0, 0, 20, 20};
1133e0dac50fSopenharmony_ci    const Rect secondary_rect1 = {0, 20, 50, 70};
1134e0dac50fSopenharmony_ci    const Rect secondary_rect2 = {0, 20, 10, 10};
1135e0dac50fSopenharmony_ci    node3->SetWindowRect(divider_rect2);
1136e0dac50fSopenharmony_ci    node1->SetWindowRect(primary_rect1);
1137e0dac50fSopenharmony_ci    node2->SetWindowRect(secondary_rect1);
1138e0dac50fSopenharmony_ci    windowPair->divider_ = node3;
1139e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1140e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1141e0dac50fSopenharmony_ci    windowPair->ExitSplitMode();
1142e0dac50fSopenharmony_ci    std::vector<wptr<WindowNode>> vec1 = MinimizeApp::needMinimizeAppNodes_[MinimizeReason::SPLIT_QUIT];
1143e0dac50fSopenharmony_ci    ASSERT_EQ(0, vec1.size());
1144e0dac50fSopenharmony_ci    node2->SetWindowRect(secondary_rect2);
1145e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1146e0dac50fSopenharmony_ci    windowPair->ExitSplitMode();
1147e0dac50fSopenharmony_ci    std::vector<wptr<WindowNode>> vec2 = MinimizeApp::needMinimizeAppNodes_[MinimizeReason::SPLIT_QUIT];
1148e0dac50fSopenharmony_ci    ASSERT_EQ(0, vec2.size());
1149e0dac50fSopenharmony_ci    windowPair->Clear();
1150e0dac50fSopenharmony_ci}
1151e0dac50fSopenharmony_ci/**
1152e0dac50fSopenharmony_ci * @tc.name: ExitSplitMode
1153e0dac50fSopenharmony_ci * @tc.desc: Exit Split Mode
1154e0dac50fSopenharmony_ci * @tc.type: FUNC
1155e0dac50fSopenharmony_ci */
1156e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, ExitSplitMode03, Function | SmallTest | Level2)
1157e0dac50fSopenharmony_ci{
1158e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
1159e0dac50fSopenharmony_ci    sptr<WindowProperty> property1 = new WindowProperty();
1160e0dac50fSopenharmony_ci    property1->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY);
1161e0dac50fSopenharmony_ci    sptr<WindowProperty> property2 = new WindowProperty();
1162e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY);
1163e0dac50fSopenharmony_ci    sptr<WindowProperty> property3 = new WindowProperty();
1164e0dac50fSopenharmony_ci    property2->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
1165e0dac50fSopenharmony_ci
1166e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode(property1);
1167e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1168e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode(property2);
1169e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1170e0dac50fSopenharmony_ci    sptr<WindowNode> node3 = new WindowNode(property3);
1171e0dac50fSopenharmony_ci    const Rect divider_rect1 = {20, 0, 1, 100};
1172e0dac50fSopenharmony_ci    const Rect primary_rect1 = {0, 0, 20, 20};
1173e0dac50fSopenharmony_ci    const Rect secondary_rect1 = {0, 20, 50, 70};
1174e0dac50fSopenharmony_ci    const Rect secondary_rect2 = {0, 20, 10, 20};
1175e0dac50fSopenharmony_ci    node3->SetWindowRect(divider_rect1); // is_vertical false
1176e0dac50fSopenharmony_ci    node2->SetWindowRect(secondary_rect1);
1177e0dac50fSopenharmony_ci    node1->SetWindowRect(primary_rect1);
1178e0dac50fSopenharmony_ci    windowPair->divider_ = node3;
1179e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1180e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1181e0dac50fSopenharmony_ci    windowPair->ExitSplitMode();
1182e0dac50fSopenharmony_ci    std::vector<wptr<WindowNode>> vec1 = MinimizeApp::needMinimizeAppNodes_[MinimizeReason::SPLIT_QUIT];
1183e0dac50fSopenharmony_ci    ASSERT_EQ(0, vec1.size());
1184e0dac50fSopenharmony_ci    node2->SetWindowRect(secondary_rect2);
1185e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1186e0dac50fSopenharmony_ci    std::vector<wptr<WindowNode>> vec2 = MinimizeApp::needMinimizeAppNodes_[MinimizeReason::SPLIT_QUIT];
1187e0dac50fSopenharmony_ci    ASSERT_EQ(0, vec2.size());
1188e0dac50fSopenharmony_ci    windowPair->Clear();
1189e0dac50fSopenharmony_ci}
1190e0dac50fSopenharmony_ci
1191e0dac50fSopenharmony_ci
1192e0dac50fSopenharmony_ci/**
1193e0dac50fSopenharmony_ci * @tc.name: IsDuringSplit
1194e0dac50fSopenharmony_ci * @tc.desc: check function IsDuringSplit
1195e0dac50fSopenharmony_ci * @tc.type: FUNC
1196e0dac50fSopenharmony_ci */
1197e0dac50fSopenharmony_ciHWTEST_F(WindowPairTest, IsDuringSplit, Function | SmallTest | Level2)
1198e0dac50fSopenharmony_ci{
1199e0dac50fSopenharmony_ci    sptr<WindowPair> windowPair = new WindowPair(0);
1200e0dac50fSopenharmony_ci    auto result = windowPair->IsDuringSplit();
1201e0dac50fSopenharmony_ci    ASSERT_EQ(result, false);
1202e0dac50fSopenharmony_ci
1203e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::EMPTY;
1204e0dac50fSopenharmony_ci    result = windowPair->IsDuringSplit();
1205e0dac50fSopenharmony_ci    ASSERT_EQ(result, false);
1206e0dac50fSopenharmony_ci
1207e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::SINGLE_PRIMARY;
1208e0dac50fSopenharmony_ci    result = windowPair->IsDuringSplit();
1209e0dac50fSopenharmony_ci    ASSERT_EQ(result, true);
1210e0dac50fSopenharmony_ci
1211e0dac50fSopenharmony_ci    windowPair->status_ = WindowPairStatus::PAIRED_DONE;
1212e0dac50fSopenharmony_ci    windowPair->primary_ = nullptr;
1213e0dac50fSopenharmony_ci    windowPair->secondary_ = nullptr;
1214e0dac50fSopenharmony_ci    result = windowPair->IsDuringSplit();
1215e0dac50fSopenharmony_ci    ASSERT_EQ(result, true);
1216e0dac50fSopenharmony_ci
1217e0dac50fSopenharmony_ci    sptr<WindowNode> node1 = new WindowNode();
1218e0dac50fSopenharmony_ci    node1->property_->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1219e0dac50fSopenharmony_ci    windowPair->primary_ = node1;
1220e0dac50fSopenharmony_ci    result = windowPair->IsDuringSplit();
1221e0dac50fSopenharmony_ci    ASSERT_EQ(result, true);
1222e0dac50fSopenharmony_ci
1223e0dac50fSopenharmony_ci    sptr<WindowNode> node2 = new WindowNode();
1224e0dac50fSopenharmony_ci    node2->property_->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1225e0dac50fSopenharmony_ci    windowPair->secondary_ = node2;
1226e0dac50fSopenharmony_ci    result = windowPair->IsDuringSplit();
1227e0dac50fSopenharmony_ci    ASSERT_EQ(result, false);
1228e0dac50fSopenharmony_ci
1229e0dac50fSopenharmony_ci    windowPair->primary_->property_->SetWindowType(WindowType::WINDOW_TYPE_LAUNCHER_RECENT);
1230e0dac50fSopenharmony_ci    windowPair->secondary_->property_->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1231e0dac50fSopenharmony_ci    result = windowPair->IsDuringSplit();
1232e0dac50fSopenharmony_ci    ASSERT_EQ(result, true);
1233e0dac50fSopenharmony_ci
1234e0dac50fSopenharmony_ci    windowPair->primary_->property_->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW);
1235e0dac50fSopenharmony_ci    windowPair->secondary_->property_->SetWindowType(WindowType::WINDOW_TYPE_LAUNCHER_RECENT);
1236e0dac50fSopenharmony_ci    ASSERT_EQ(result, true);
1237e0dac50fSopenharmony_ci}
1238e0dac50fSopenharmony_ci}
1239e0dac50fSopenharmony_ci}
1240e0dac50fSopenharmony_ci}
1241