From 27d608db9c7485a27a261e91f209f6156b280fa1 Mon Sep 17 00:00:00 2001 From: Klaus_q Date: Tue, 15 Feb 2022 10:49:21 +0800 Subject: [PATCH] fixed 4ec0449 from https://gitee.com/klaus-q/windowmanager/pulls/277 add MakeExpand UT and ST code Signed-off-by: Klaus_q Change-Id: I3e7cfcc16ae1e2c97b0b4571ff602512cbfd8026 --- dm/test/systemtest/BUILD.gn | 1 + dm/test/systemtest/screen_manager_test.cpp | 81 +++++++++++++++++++ .../unittest/mock_display_manager_adapter.h | 1 + dm/test/unittest/screen_manager_test.cpp | 41 ++++++++++ dmserver/src/abstract_display_controller.cpp | 2 +- dmserver/src/display_manager_service.cpp | 12 ++- 6 files changed, 130 insertions(+), 8 deletions(-) diff --git a/dm/test/systemtest/BUILD.gn b/dm/test/systemtest/BUILD.gn index 5ffd32de18..45afe26c6e 100644 --- a/dm/test/systemtest/BUILD.gn +++ b/dm/test/systemtest/BUILD.gn @@ -110,6 +110,7 @@ config("dm_systemtest_common_public_config") { "//foundation/windowmanager/dm/include", "//foundation/windowmanager/dmserver/include", "//foundation/windowmanager/interfaces/innerkits/dm", + "//foundation/windowmanager/interfaces/innerkits/wm", "//foundation/windowmanager/utils/include", # RSSurface diff --git a/dm/test/systemtest/screen_manager_test.cpp b/dm/test/systemtest/screen_manager_test.cpp index 096e557933..0e51151814 100644 --- a/dm/test/systemtest/screen_manager_test.cpp +++ b/dm/test/systemtest/screen_manager_test.cpp @@ -16,6 +16,8 @@ // gtest #include #include "display_test_utils.h" +#include "window.h" +#include "window_option.h" using namespace testing; using namespace testing::ext; @@ -27,6 +29,7 @@ public: static void TearDownTestCase(); virtual void SetUp() override; virtual void TearDown() override; + sptr CreateWindowByDisplayId(DisplayId displayId); static sptr defaultDisplay_; static DisplayId defaultDisplayId_; static std::string defaultName_; @@ -40,6 +43,7 @@ public: const uint32_t maxWaitCount_ = 2000; const uint32_t execTimes_ = 10; const uint32_t acquireFrames_ = 1; + static constexpr uint32_t TEST_SPEEP_S = 1; // test spleep time }; sptr ScreenManagerTest::defaultDisplay_ = nullptr; @@ -76,6 +80,25 @@ void ScreenManagerTest::TearDown() { } +sptr ScreenManagerTest::CreateWindowByDisplayId(DisplayId displayId) +{ + sptr option = new WindowOption(); + if (option == nullptr) { + return nullptr; + } + Rect displayRect = {0, 0, 200, 400}; + option->SetDisplayId(displayId); + option->SetWindowRect(displayRect); + option->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW); + option->SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN); + option->SetWindowName("CreateVirtualWindow01"); + option->AddWindowFlag(WindowFlag::WINDOW_FLAG_NEED_AVOID); + option->RemoveWindowFlag(WindowFlag::WINDOW_FLAG_PARENT_LIMIT); + sptr window = Window::Create(option->GetWindowName(), option); + window->Show(); + return window; +} + namespace { /** * @tc.name: ScreenManager01 @@ -195,6 +218,64 @@ HWTEST_F(ScreenManagerTest, ScreenManager06, Function | MediumTest | Level1) ASSERT_EQ(modeIdx, screen->GetModeId()); } } + +/** + * @tc.name: ScreenManager07 + * @tc.desc: Create a virtual screen as expansion of default screen, and destroy virtual screen + * @tc.type: FUNC + */ +HWTEST_F(ScreenManagerTest, ScreenManager07, Function | MediumTest | Level1) +{ + DisplayTestUtils utils; + ASSERT_TRUE(utils.CreateSurface()); + defaultoption_.surface_ = utils.psurface_; + defaultoption_.isForShot = false; + ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultoption_); + ASSERT_NE(SCREEN_ID_INVALID, virtualScreenId); + std::vector> screens = ScreenManager::GetInstance().GetAllScreens(); + sptr DefaultScreen = screens.front(); + std::vector options = {{DefaultScreen->GetId(), 0, 0}, {virtualScreenId, defaultWidth_, 0}}; + ScreenId expansionId = ScreenManager::GetInstance().MakeExpand(options); + ASSERT_NE(SCREEN_ID_INVALID, expansionId); + ASSERT_EQ(DMError::DM_OK, ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId)); +} + +/** + * @tc.name: ScreenManager08 + * @tc.desc: Create a virtual screen as expansion of default screen, create windowNode on virtual screen, + * and destroy virtual screen + * @tc.type: FUNC + */ +HWTEST_F(ScreenManagerTest, ScreenManager08, Function | MediumTest | Level1) +{ + DisplayTestUtils utils; + ASSERT_TRUE(utils.CreateSurface()); + defaultoption_.surface_ = utils.psurface_; + defaultoption_.isForShot = false; + ScreenId virtualScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultoption_); + ASSERT_NE(SCREEN_ID_INVALID, virtualScreenId); + std::vector> screens = ScreenManager::GetInstance().GetAllScreens(); + sptr DefaultScreen = screens.front(); + DisplayId virtualDisplayId = DISPLAY_ID_INVALD; + std::vector displayIds = DisplayManager::GetInstance().GetAllDisplayIds(); + for (auto& id : displayIds) { + if (id != defaultDisplayId_) { + virtualDisplayId = id; // find the display id of virtual screen + } + } + ASSERT_NE(DISPLAY_ID_INVALD, virtualDisplayId); + sptr window = CreateWindowByDisplayId(virtualDisplayId); + ASSERT_NE(nullptr, window); + sleep(TEST_SPEEP_S); + std::vector options = {{DefaultScreen->GetId(), 0, 0}, {virtualScreenId, defaultWidth_, 0}}; + ScreenId expansionId = ScreenManager::GetInstance().MakeExpand(options); + sleep(TEST_SPEEP_S); + ASSERT_NE(SCREEN_ID_INVALID, expansionId); + ASSERT_EQ(DMError::DM_OK, ScreenManager::GetInstance().DestroyVirtualScreen(virtualScreenId)); + sleep(TEST_SPEEP_S); + window->Destroy(); + // will add NotifyExpandDisconnect check logic. +} } } // namespace Rosen } // namespace OHOS diff --git a/dm/test/unittest/mock_display_manager_adapter.h b/dm/test/unittest/mock_display_manager_adapter.h index f11b0a4841..7e62c0e17b 100644 --- a/dm/test/unittest/mock_display_manager_adapter.h +++ b/dm/test/unittest/mock_display_manager_adapter.h @@ -41,6 +41,7 @@ public: MOCK_METHOD1(SetDisplayState, bool(DisplayState state)); MOCK_METHOD1(GetDisplayState, DisplayState(uint64_t displayId)); MOCK_METHOD2(SetScreenActiveMode, bool(ScreenId screenId, uint32_t modeId)); + MOCK_METHOD2(MakeExpand, DMError(std::vector screenId, std::vector startPoint)); }; } } // namespace OHOS diff --git a/dm/test/unittest/screen_manager_test.cpp b/dm/test/unittest/screen_manager_test.cpp index 9c4ace1580..a84cce9bb3 100644 --- a/dm/test/unittest/screen_manager_test.cpp +++ b/dm/test/unittest/screen_manager_test.cpp @@ -88,6 +88,47 @@ HWTEST_F(ScreenManagerTest, CreateAndDestory02, Function | SmallTest | Level1) ASSERT_EQ(validId, id); ASSERT_EQ(DMError::DM_OK, ret); } + +/** + * @tc.name: MakeExpand_001 + * @tc.desc: Create a virtual screen as expansion of default screen, return default screen id + * @tc.type: FUNC + */ +HWTEST_F(ScreenManagerTest, MakeExpand_001, Function | SmallTest | Level1) +{ + ScreenManagerUtils utils; + ASSERT_TRUE(utils.CreateSurface()); + VirtualScreenOption defaultOption = {defaultName_, defaultWidth_, defaultHeight_, + defaultDensity_, utils.psurface_, defaultFlags_}; + ScreenId validId = 0; // default srceenId(0) + ScreenId virtualScreenId = 1; // VirtualScreen is the second screen(1) + std::unique_ptr m = std::make_unique(); + EXPECT_CALL(m->Mock(), CreateVirtualScreen(_)).Times(1).WillOnce(Return(virtualScreenId)); + EXPECT_CALL(m->Mock(), DestroyVirtualScreen(_)).Times(1).WillOnce(Return(DMError::DM_OK)); + EXPECT_CALL(m->Mock(), MakeExpand(_, _)).Times(1).WillOnce(Return(DMError::DM_OK)); + ScreenId vScreenId = ScreenManager::GetInstance().CreateVirtualScreen(defaultOption); + std::vector options = {{validId, 0, 0}, {vScreenId, defaultWidth_, 0}}; + ScreenId expansionId = ScreenManager::GetInstance().MakeExpand(options); + ASSERT_EQ(expansionId, validId); + DMError ret = ScreenManager::GetInstance().DestroyVirtualScreen(vScreenId); + ASSERT_EQ(vScreenId, virtualScreenId); + ASSERT_EQ(DMError::DM_OK, ret); +} + +/** + * @tc.name: MakeExpand_002 + * @tc.desc: Makepand with empty ExpandOption, return SCREEN_ID_INVALID + * @tc.type: FUNC + */ +HWTEST_F(ScreenManagerTest, MakeExpand_002, Function | SmallTest | Level1) +{ + ScreenId invalidId = SCREEN_ID_INVALID; + std::unique_ptr m = std::make_unique(); + EXPECT_CALL(m->Mock(), MakeExpand(_, _)).Times(1).WillOnce(Return(DMError::DM_ERROR_INVALID_PARAM)); + std::vector options = {}; + ScreenId expansionId = ScreenManager::GetInstance().MakeExpand(options); + ASSERT_EQ(expansionId, invalidId); +} } } // namespace Rosen } // namespace OHOS \ No newline at end of file diff --git a/dmserver/src/abstract_display_controller.cpp b/dmserver/src/abstract_display_controller.cpp index 689f515e14..b0a81d79f5 100644 --- a/dmserver/src/abstract_display_controller.cpp +++ b/dmserver/src/abstract_display_controller.cpp @@ -89,7 +89,7 @@ std::shared_ptr AbstractDisplayController::GetScreenSnapshot(Di { sptr abstractDisplay = GetAbstractDisplay(displayId); if (abstractDisplay == nullptr) { - WLOGFE("DisplayManagerService::GetScreenSnapshot: GetAbstarctDisplay failed"); + WLOGFE("GetScreenSnapshot: GetAbstarctDisplay failed"); return nullptr; } ScreenId dmsScreenId = abstractDisplay->GetAbstractScreenId(); diff --git a/dmserver/src/display_manager_service.cpp b/dmserver/src/display_manager_service.cpp index f9d68ea790..1845e2b66a 100644 --- a/dmserver/src/display_manager_service.cpp +++ b/dmserver/src/display_manager_service.cpp @@ -324,17 +324,15 @@ ScreenId DisplayManagerService::GetScreenIdByDisplayId(DisplayId displayId) cons { sptr abstractDisplay = abstractDisplayController_->GetAbstractDisplay(displayId); if (abstractDisplay == nullptr) { - WLOGFE("DisplayManagerService::GetScreenIdByDisplayId: GetAbstarctDisplay failed"); + WLOGFE("GetScreenIdByDisplayId: GetAbstarctDisplay failed"); return SCREEN_ID_INVALID; } - ScreenId dmsScreenId = abstractDisplay->GetAbstractScreenId(); - return dmsScreenId; + return abstractDisplay->GetAbstractScreenId(); } sptr DisplayManagerService::GetDisplayByDisplayId(DisplayId displayId) const { - sptr abstractDisplay = abstractDisplayController_->GetAbstractDisplay(displayId); - return abstractDisplay; + return abstractDisplayController_->GetAbstractDisplay(displayId); } sptr DisplayManagerService::GetAbstractScreenController() @@ -359,7 +357,7 @@ std::shared_ptr DisplayManagerService::GetRSDisplayNodeByDisplayI { ScreenId dmsScreenId = GetScreenIdByDisplayId(displayId); if (dmsScreenId == SCREEN_ID_INVALID) { - WLOGFE("DisplayManagerService::GetRSDisplayNodeByDisplayId: ScreenId invalid"); + WLOGFE("GetRSDisplayNodeByDisplayId: ScreenId invalid"); return nullptr; } return abstractScreenController_->GetRSDisplayNodeByScreenId(dmsScreenId); @@ -418,7 +416,7 @@ DMError DisplayManagerService::MakeMirror(ScreenId mainScreenId, std::vector& surfaceNode, bool isAdd) { - WLOGI("DisplayManagerService::UpdateRSTree"); + WLOGI("UpdateRSTree"); ScreenId dmsScreenId = GetScreenIdByDisplayId(displayId); if (dmsScreenId == SCREEN_ID_INVALID) { return; -- Gitee