1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2021-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// gtest 17e0dac50fSopenharmony_ci#include <gtest/gtest.h> 18e0dac50fSopenharmony_ci#include <gmock/gmock.h> 19e0dac50fSopenharmony_ci#include "window_test_utils.h" 20e0dac50fSopenharmony_ci#include "ability_context_impl.h" 21e0dac50fSopenharmony_ci#include "context_impl.h" 22e0dac50fSopenharmony_ci#include "iremote_object_mocker.h" 23e0dac50fSopenharmony_ci#include "mock_session.h" 24e0dac50fSopenharmony_ci#include "mock_window_adapter.h" 25e0dac50fSopenharmony_ci#include "window_session_impl.h" 26e0dac50fSopenharmony_ci#include "window_scene_session_impl.h" 27e0dac50fSopenharmony_ci#include "singleton_mocker.h" 28e0dac50fSopenharmony_ci 29e0dac50fSopenharmony_ci 30e0dac50fSopenharmony_ciusing namespace testing; 31e0dac50fSopenharmony_ciusing namespace testing::ext; 32e0dac50fSopenharmony_ci 33e0dac50fSopenharmony_cinamespace OHOS { 34e0dac50fSopenharmony_cinamespace Rosen { 35e0dac50fSopenharmony_ciusing Mocker = SingletonMocker<WindowAdapter, MockWindowAdapter>; 36e0dac50fSopenharmony_ci 37e0dac50fSopenharmony_ciusing Utils = WindowTestUtils; 38e0dac50fSopenharmony_ciclass WindowRecoverTest : public testing::Test { 39e0dac50fSopenharmony_cipublic: 40e0dac50fSopenharmony_ci static void SetUpTestCase(); 41e0dac50fSopenharmony_ci static void TearDownTestCase(); 42e0dac50fSopenharmony_ci void SetUp() override; 43e0dac50fSopenharmony_ci void TearDown() override; 44e0dac50fSopenharmony_ci 45e0dac50fSopenharmony_ci std::unique_ptr<Mocker> m = std::make_unique<Mocker>(); 46e0dac50fSopenharmony_ci}; 47e0dac50fSopenharmony_ci 48e0dac50fSopenharmony_civoid WindowRecoverTest::SetUpTestCase() {} 49e0dac50fSopenharmony_ci 50e0dac50fSopenharmony_civoid WindowRecoverTest::TearDownTestCase() {} 51e0dac50fSopenharmony_ci 52e0dac50fSopenharmony_civoid WindowRecoverTest::SetUp() {} 53e0dac50fSopenharmony_ci 54e0dac50fSopenharmony_civoid WindowRecoverTest::TearDown() {} 55e0dac50fSopenharmony_ci 56e0dac50fSopenharmony_cinamespace { 57e0dac50fSopenharmony_ci/** 58e0dac50fSopenharmony_ci * @tc.name: RecoverAndReconnectSceneSession 59e0dac50fSopenharmony_ci * @tc.desc: RecoverAndReconnectSceneSession 60e0dac50fSopenharmony_ci * @tc.type: FUNC 61e0dac50fSopenharmony_ci */ 62e0dac50fSopenharmony_ciHWTEST_F(WindowRecoverTest, RecoverAndReconnectSceneSession, Function | SmallTest | Level2) 63e0dac50fSopenharmony_ci{ 64e0dac50fSopenharmony_ci sptr<WindowOption> option = new (std::nothrow) WindowOption(); 65e0dac50fSopenharmony_ci ASSERT_NE(nullptr, option); 66e0dac50fSopenharmony_ci option->SetWindowName("RecoverAndReconnectSceneSession"); 67e0dac50fSopenharmony_ci sptr<WindowSceneSessionImpl> windowSceneSession = new (std::nothrow) WindowSceneSessionImpl(option); 68e0dac50fSopenharmony_ci ASSERT_NE(nullptr, windowSceneSession); 69e0dac50fSopenharmony_ci windowSceneSession->property_->SetPersistentId(1112); 70e0dac50fSopenharmony_ci windowSceneSession->property_->SetParentId(1000); 71e0dac50fSopenharmony_ci windowSceneSession->property_->SetParentPersistentId(1000); 72e0dac50fSopenharmony_ci windowSceneSession->property_->SetWindowType(WindowType::WINDOW_TYPE_APP_MAIN_WINDOW); 73e0dac50fSopenharmony_ci 74e0dac50fSopenharmony_ci std::shared_ptr<AbilityRuntime::AbilityContextImpl> context = 75e0dac50fSopenharmony_ci std::make_shared<AbilityRuntime::AbilityContextImpl>(); 76e0dac50fSopenharmony_ci ASSERT_NE(nullptr, context); 77e0dac50fSopenharmony_ci SessionInfo sessionInfo = { "CreateTestBundle", "CreateTestModule", "CreateTestAbility" }; 78e0dac50fSopenharmony_ci sptr<SessionMocker> session = new (std::nothrow) SessionMocker(sessionInfo); 79e0dac50fSopenharmony_ci ASSERT_NE(nullptr, session); 80e0dac50fSopenharmony_ci std::shared_ptr<AppExecFwk::AbilityInfo> abilityInfo = std::make_shared<AppExecFwk::AbilityInfo>(); 81e0dac50fSopenharmony_ci context->SetAbilityInfo(abilityInfo); 82e0dac50fSopenharmony_ci sptr<IRemoteObject> sessionToken = new (std::nothrow) IRemoteObjectMocker(); 83e0dac50fSopenharmony_ci ASSERT_NE(nullptr, sessionToken); 84e0dac50fSopenharmony_ci context->SetToken(sessionToken); 85e0dac50fSopenharmony_ci std::shared_ptr<AppExecFwk::ApplicationInfo> applicationInfo = std::make_shared<AppExecFwk::ApplicationInfo>(); 86e0dac50fSopenharmony_ci ASSERT_NE(nullptr, applicationInfo); 87e0dac50fSopenharmony_ci applicationInfo->apiCompatibleVersion = 12; 88e0dac50fSopenharmony_ci auto stageContent = std::make_shared<AbilityRuntime::ContextImpl>(); 89e0dac50fSopenharmony_ci ASSERT_NE(nullptr, stageContent); 90e0dac50fSopenharmony_ci stageContent->SetApplicationInfo(applicationInfo); 91e0dac50fSopenharmony_ci stageContent->InitHapModuleInfo(abilityInfo); 92e0dac50fSopenharmony_ci context->stageContext_ = stageContent; 93e0dac50fSopenharmony_ci 94e0dac50fSopenharmony_ci struct RSSurfaceNodeConfig config; 95e0dac50fSopenharmony_ci std::shared_ptr<RSSurfaceNode> windowSceneSessionSurfaceNode = RSSurfaceNode::Create(config); 96e0dac50fSopenharmony_ci windowSceneSession->surfaceNode_ = windowSceneSessionSurfaceNode; 97e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, windowSceneSession->Create(context, session)); 98e0dac50fSopenharmony_ci 99e0dac50fSopenharmony_ci std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr; 100e0dac50fSopenharmony_ci sptr<WindowSessionProperty> property = nullptr; 101e0dac50fSopenharmony_ci sptr<IRemoteObject> token = nullptr; 102e0dac50fSopenharmony_ci EXPECT_CALL(m->Mock(), RecoverAndReconnectSceneSession(_, _, _, _, _, _)).WillOnce(DoAll( 103e0dac50fSopenharmony_ci SaveArg<2>(&surfaceNode), SaveArg<4>(&property), SaveArg<5>(&token), Return(WMError::WM_OK) 104e0dac50fSopenharmony_ci )); 105e0dac50fSopenharmony_ci windowSceneSession->RecoverAndReconnectSceneSession(); 106e0dac50fSopenharmony_ci ASSERT_EQ(surfaceNode, windowSceneSession->surfaceNode_); 107e0dac50fSopenharmony_ci ASSERT_EQ(property, windowSceneSession->property_); 108e0dac50fSopenharmony_ci ASSERT_EQ(token, sessionToken); 109e0dac50fSopenharmony_ci windowSceneSession->Destroy(false, false); 110e0dac50fSopenharmony_ci} 111e0dac50fSopenharmony_ci 112e0dac50fSopenharmony_ci/** 113e0dac50fSopenharmony_ci * @tc.name: RecoverAndConnectSpecificSession 114e0dac50fSopenharmony_ci * @tc.desc: RecoverAndConnectSpecificSession 115e0dac50fSopenharmony_ci * @tc.type: FUNC 116e0dac50fSopenharmony_ci*/ 117e0dac50fSopenharmony_ciHWTEST_F(WindowRecoverTest, RecoverAndConnectSpecificSession, Function | SmallTest | Level3) 118e0dac50fSopenharmony_ci{ 119e0dac50fSopenharmony_ci sptr<WindowOption> option = new (std::nothrow) WindowOption(); 120e0dac50fSopenharmony_ci ASSERT_NE(nullptr, option); 121e0dac50fSopenharmony_ci option->SetWindowName("RecoverAndConnectSpecificSession"); 122e0dac50fSopenharmony_ci sptr<WindowSceneSessionImpl> windowSceneSession = new (std::nothrow) WindowSceneSessionImpl(option); 123e0dac50fSopenharmony_ci ASSERT_NE(nullptr, windowSceneSession); 124e0dac50fSopenharmony_ci windowSceneSession->property_->SetPersistentId(1112); 125e0dac50fSopenharmony_ci windowSceneSession->property_->SetWindowType(WindowType::APP_SUB_WINDOW_BASE); 126e0dac50fSopenharmony_ci windowSceneSession->property_->SetIsUIExtFirstSubWindow(true); 127e0dac50fSopenharmony_ci 128e0dac50fSopenharmony_ci std::shared_ptr<AbilityRuntime::AbilityContextImpl> context = 129e0dac50fSopenharmony_ci std::make_shared<AbilityRuntime::AbilityContextImpl>(); 130e0dac50fSopenharmony_ci ASSERT_NE(nullptr, context); 131e0dac50fSopenharmony_ci SessionInfo sessionInfo = { "CreateTestBundle", "CreateTestModule", "CreateTestAbility" }; 132e0dac50fSopenharmony_ci sptr<SessionMocker> session = new (std::nothrow) SessionMocker(sessionInfo); 133e0dac50fSopenharmony_ci ASSERT_NE(nullptr, session); 134e0dac50fSopenharmony_ci sptr<IRemoteObject> sessionToken = new (std::nothrow) IRemoteObjectMocker(); 135e0dac50fSopenharmony_ci ASSERT_NE(nullptr, sessionToken); 136e0dac50fSopenharmony_ci context->SetToken(sessionToken); 137e0dac50fSopenharmony_ci struct RSSurfaceNodeConfig config; 138e0dac50fSopenharmony_ci std::shared_ptr<RSSurfaceNode> windowSceneSessionSurfaceNode = RSSurfaceNode::Create(config); 139e0dac50fSopenharmony_ci ASSERT_NE(nullptr, windowSceneSessionSurfaceNode); 140e0dac50fSopenharmony_ci windowSceneSession->surfaceNode_ = windowSceneSessionSurfaceNode; 141e0dac50fSopenharmony_ci ASSERT_EQ(WMError::WM_OK, windowSceneSession->Create(context, session)); 142e0dac50fSopenharmony_ci 143e0dac50fSopenharmony_ci std::shared_ptr<RSSurfaceNode> surfaceNode = nullptr; 144e0dac50fSopenharmony_ci sptr<WindowSessionProperty> property = nullptr; 145e0dac50fSopenharmony_ci sptr<IRemoteObject> token = nullptr; 146e0dac50fSopenharmony_ci EXPECT_CALL(m->Mock(), RecoverAndConnectSpecificSession(_, _, _, _, _, _)).WillOnce(DoAll( 147e0dac50fSopenharmony_ci SaveArg<2>(&surfaceNode), SaveArg<3>(&property), SaveArg<5>(&token) 148e0dac50fSopenharmony_ci )); 149e0dac50fSopenharmony_ci windowSceneSession->RecoverAndConnectSpecificSession(); 150e0dac50fSopenharmony_ci ASSERT_EQ(surfaceNode, windowSceneSession->surfaceNode_); 151e0dac50fSopenharmony_ci ASSERT_EQ(property, windowSceneSession->property_); 152e0dac50fSopenharmony_ci ASSERT_EQ(token, sessionToken); 153e0dac50fSopenharmony_ci windowSceneSession->Destroy(false, false); 154e0dac50fSopenharmony_ci} 155e0dac50fSopenharmony_ci} // namespace 156e0dac50fSopenharmony_ci} // namespace Rosen 157e0dac50fSopenharmony_ci} // namespace OHOS 158