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