/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include "session_manager/include/screen_session_manager.h" #include "display_manager_agent_default.h" #include "iconsumer_surface.h" #include using namespace testing; using namespace testing::ext; namespace OHOS { namespace Rosen { class ScreenSessionManagerTest : public testing::Test { public: static void SetUpTestCase(); static void TearDownTestCase(); void SetUp() override; void TearDown() override; static sptr ssm_; ScreenId DEFAULT_SCREEN_ID {0}; ScreenId VIRTUAL_SCREEN_ID {2}; }; sptr ScreenSessionManagerTest::ssm_ = nullptr; void ScreenSessionManagerTest::SetUpTestCase() { ssm_ = new ScreenSessionManager(); } void ScreenSessionManagerTest::TearDownTestCase() { ssm_ = nullptr; } void ScreenSessionManagerTest::SetUp() { } void ScreenSessionManagerTest::TearDown() { } namespace { /** * @tc.name: RegisterDisplayManagerAgent * @tc.desc: ScreenSesionManager rigister display manager agent * @tc.type: FUNC */ HWTEST_F(ScreenSessionManagerTest, RegisterDisplayManagerAgent, Function | SmallTest | Level3) { sptr displayManagerAgent = new DisplayManagerAgentDefault(); DisplayManagerAgentType type = DisplayManagerAgentType::DISPLAY_STATE_LISTENER; ASSERT_EQ(DMError::DM_ERROR_NULLPTR, ssm_->RegisterDisplayManagerAgent(nullptr, type)); ASSERT_EQ(DMError::DM_ERROR_NULLPTR, ssm_->UnregisterDisplayManagerAgent(nullptr, type)); ASSERT_EQ(DMError::DM_ERROR_NULLPTR, ssm_->UnregisterDisplayManagerAgent(displayManagerAgent, type)); ASSERT_EQ(DMError::DM_OK, ssm_->RegisterDisplayManagerAgent(displayManagerAgent, type)); ASSERT_EQ(DMError::DM_OK, ssm_->UnregisterDisplayManagerAgent(displayManagerAgent, type)); } /** * @tc.name: ScreenPower * @tc.desc: ScreenSesionManager screen power * @tc.type: FUNC */ HWTEST_F(ScreenSessionManagerTest, ScreenPower, Function | SmallTest | Level3) { PowerStateChangeReason reason = PowerStateChangeReason::POWER_BUTTON; ScreenPowerState state = ScreenPowerState::POWER_ON; DisplayState displayState = DisplayState::ON; ASSERT_EQ(false, ssm_->WakeUpBegin(reason)); ASSERT_EQ(false, ssm_->WakeUpEnd()); ASSERT_EQ(false, ssm_->SuspendBegin(reason)); ASSERT_EQ(false, ssm_->SuspendEnd()); ASSERT_EQ(false, ssm_->SetScreenPowerForAll(state, reason)); ASSERT_EQ(true, ssm_->SetDisplayState(displayState)); ASSERT_EQ(DisplayState::ON, ssm_->GetDisplayState(0)); } /** * @tc.name: GetDisplaySnapshot * @tc.desc: ScreenSesionManager screen shot * @tc.type: FUNC */ HWTEST_F(ScreenSessionManagerTest, GetDisplaySnapshot, Function | SmallTest | Level3) { DisplayId displayId(0); DmErrorCode* errorCode = nullptr; ASSERT_EQ(nullptr, ssm_->GetDisplaySnapshot(displayId, errorCode)); } /** * @tc.name: VirtualScreen * @tc.desc: ScreenSesionManager virtual screen * @tc.type: FUNC */ HWTEST_F(ScreenSessionManagerTest, VirtualScreen, Function | SmallTest | Level3) { sptr displayManagerAgent = new DisplayManagerAgentDefault(); VirtualScreenOption virtualOption; virtualOption.name_ = "testVirtualOption"; auto screenId = ssm_->CreateVirtualScreen(virtualOption, displayManagerAgent->AsObject()); if (screenId != VIRTUAL_SCREEN_ID) { ASSERT_TRUE(screenId != VIRTUAL_SCREEN_ID); } std::vector mirrorScreenIds; ScreenId mainScreenId(DEFAULT_SCREEN_ID); ScreenId screenGroupId{1}; ASSERT_EQ(DMError::DM_ERROR_INVALID_PARAM, ssm_->MakeMirror(mainScreenId, mirrorScreenIds, screenGroupId)); mirrorScreenIds.push_back(VIRTUAL_SCREEN_ID); ASSERT_NE(DMError::DM_OK, ssm_->MakeMirror(mainScreenId, mirrorScreenIds, screenGroupId)); auto result1 = ssm_->SetVirtualScreenSurface(VIRTUAL_SCREEN_ID, nullptr); ASSERT_EQ(DMError::DM_ERROR_RENDER_SERVICE_FAILED, result1); sptr surface = OHOS::IConsumerSurface::Create(); auto result2 = ssm_->SetVirtualScreenSurface(VIRTUAL_SCREEN_ID, surface->GetProducer()); if (DMError::DM_ERROR_RENDER_SERVICE_FAILED == result2) { ASSERT_EQ(DMError::DM_ERROR_RENDER_SERVICE_FAILED, result2); } if (DMError::DM_OK != result2) { ASSERT_NE(DMError::DM_OK, ssm_->DestroyVirtualScreen(VIRTUAL_SCREEN_ID)); } } } } // namespace Rosen } // namespace OHOS