From 16f1228cbbd9f2ce8a2fafb5fe175dca5c37f0ef Mon Sep 17 00:00:00 2001 From: jiangxiaofeng20 Date: Fri, 12 Sep 2025 16:50:35 +0800 Subject: [PATCH] StartUIAbilitiesInSplitWindowMode Signed-off-by: jiangxiaofeng20 --- .../ui_ability_lifecycle_manager.cpp | 5 + .../ability_manager_proxy_test.cpp | 38 ++ ...bility_manager_service_thirteenth_test.cpp | 437 ++++++++++++++++++ .../mock/include/mock_my_status.h | 1 + .../mock/src/mock_permission_verification.cpp | 2 +- .../ability_manager_stub_second_test.cpp | 3 +- .../ability_manager_stub_test.cpp | 88 ++++ .../ui_ability_lifecycle_manager_test.cpp | 122 +++++ .../ui_extension_context_test.cpp | 18 + 9 files changed, 712 insertions(+), 2 deletions(-) diff --git a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp index 48f7efdcf65..c20fa1fecb4 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -2596,6 +2596,11 @@ int32_t UIAbilityLifecycleManager::MoveAbilityToFront(const SpecifiedRequest &sp HandleAbilitiesRequestDone(requestId, requestListId, sessionInfo); return ERR_OK; } + if (specifiedRequest.abilityRequest.isStartInSplitMode) { + SendSessionInfoToSCBInSplitMode(specifiedRequest.abilityRequest.primaryWindowId, callerAbility, sessionInfo); + abilityRecord->RemoveWindowMode(); + return ERR_OK; + } SendSessionInfoToSCB(callerAbility, sessionInfo); abilityRecord->RemoveWindowMode(); return ERR_OK; diff --git a/test/unittest/ability_manager_proxy_test/ability_manager_proxy_test.cpp b/test/unittest/ability_manager_proxy_test/ability_manager_proxy_test.cpp index ea09e78bb57..e537c762ff9 100644 --- a/test/unittest/ability_manager_proxy_test/ability_manager_proxy_test.cpp +++ b/test/unittest/ability_manager_proxy_test/ability_manager_proxy_test.cpp @@ -2866,6 +2866,44 @@ HWTEST_F(AbilityManagerProxyTest, AbilityManagerProxy_RestartApp_0100, TestSize. EXPECT_EQ(static_cast(AbilityManagerInterfaceCode::RESTART_APP), mock_->code_); } +/* + * Feature: AbilityManagerService + * Function: StartUIAbilitiesInSplitWindowMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowMode + * EnvConditions: NA + * CaseDescription: Verify the normal process of StartUIAbilitiesInSplitWindowMode callerToken nullptr + */ +HWTEST_F(AbilityManagerProxyTest, AbilityManagerProxy_StartUIAbilitiesInSplitWindowMode_001, TestSize.Level1) +{ + sptr callerToken = nullptr; + int32_t primaryWindowId = 1; + AAFwk::Want want; + auto res = proxy_->StartUIAbilitiesInSplitWindowMode(primaryWindowId, want, callerToken); + EXPECT_EQ(res, INVALID_CALLER_TOKEN); +} + +/* + * Feature: AbilityManagerService + * Function: StartUIAbilitiesInSplitWindowMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowMode + * EnvConditions: NA + * CaseDescription: Verify the normal process of StartUIAbilities + */ +HWTEST_F(AbilityManagerProxyTest, AbilityManagerProxy_StartUIAbilitiesInSplitWindowMode_002, TestSize.Level1) +{ + EXPECT_CALL(*mock_, SendRequest(_, _, _, _)) + .Times(1) + .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerStubMock::InvokeSendRequest)); + + OHOS::sptr callerToken = sptr(new (std::nothrow) MockAbilityToken()); + int32_t primaryWindowId = 1; + AAFwk::Want want; + auto res = proxy_->StartUIAbilitiesInSplitWindowMode(primaryWindowId, want, callerToken); + EXPECT_EQ(res, NO_ERROR); +} + /* * Feature: AbilityManagerService * Function: StartUIAbilities diff --git a/test/unittest/ability_manager_service_thirteenth_test/ability_manager_service_thirteenth_test.cpp b/test/unittest/ability_manager_service_thirteenth_test/ability_manager_service_thirteenth_test.cpp index 7d18dcaa658..c909ab21099 100644 --- a/test/unittest/ability_manager_service_thirteenth_test/ability_manager_service_thirteenth_test.cpp +++ b/test/unittest/ability_manager_service_thirteenth_test/ability_manager_service_thirteenth_test.cpp @@ -1263,6 +1263,443 @@ HWTEST_F(AbilityManagerServiceThirteenthTest, KillProcessWithReason_003, TestSiz TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest KillProcessWithReason_003 end"); } +/* + * Feature: AbilityManagerService + * Name: StartUIAbilitiesInSplitWindowMode_001 + * Function: StartUIAbilitiesInSplitWindowMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowMode SCB false + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, StartUIAbilitiesInSplitWindowMode_001, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_001 start"); + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + Want want; + want.SetElementName("com.ohos.test", "MainAbility"); + + int32_t windowId = 1; + sptr callerToken = nullptr; + MyStatus::GetInstance().sbjIsSceneBoardEnabled_ = false; + + EXPECT_EQ(abilityMs_->StartUIAbilitiesInSplitWindowMode(windowId, want, callerToken), + ERR_CAPABILITY_NOT_SUPPORT); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_001 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartUIAbilitiesInSplitWindowMode_002 + * Function: StartUIAbilitiesInSplitWindowMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowMode SUPPORT_LINKAGE_SCENE false + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, StartUIAbilitiesInSplitWindowMode_002, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_002 start"); + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + Want want; + want.SetElementName("com.ohos.test", "MainAbility"); + + int32_t windowId = 1; + sptr callerToken = nullptr; + MyStatus::GetInstance().sbjIsSceneBoardEnabled_ = true; + MyStatus::GetInstance().paramGetBoolParameter_ = false; + + EXPECT_EQ(abilityMs_->StartUIAbilitiesInSplitWindowMode(windowId, want, callerToken), + ERR_CAPABILITY_NOT_SUPPORT); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_002 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartUIAbilitiesInSplitWindowMode_003 + * Function: StartUIAbilitiesInSplitWindowMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowMode SUPPORT_LINKAGE_SCENE false + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, StartUIAbilitiesInSplitWindowMode_003, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_003 start"); + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + Want want; + int32_t windowId = 1; + sptr callerToken = nullptr; + MyStatus::GetInstance().sbjIsSceneBoardEnabled_ = true; + MyStatus::GetInstance().paramGetBoolParameter_ = true; + MyStatus::GetInstance().isSystemAppCall_ = false; + EXPECT_EQ(abilityMs_->StartUIAbilitiesInSplitWindowMode(windowId, want, callerToken), + ERR_NOT_SYSTEM_APP); + MyStatus::GetInstance().isSystemAppCall_ = true; + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_003 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartUIAbilitiesInSplitWindowMode_004 + * Function: StartUIAbilitiesInSplitWindowMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowMode callerToken is null + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, StartUIAbilitiesInSplitWindowMode_004, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_004 start"); + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + + Want want; + want.SetElementName("com.ohos.test", "MainAbility"); + + int32_t windowId = 1; + sptr callerToken = nullptr; + MyStatus::GetInstance().sbjIsSceneBoardEnabled_ = true; + MyStatus::GetInstance().paramGetBoolParameter_ = true; + EXPECT_EQ(abilityMs_->StartUIAbilitiesInSplitWindowMode(windowId, want, callerToken), + ERR_INVALID_CALLER); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_004 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartUIAbilitiesInSplitWindowMode_005 + * Function: StartUIAbilitiesInSplitWindowMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowMode verifyToken failed + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, StartUIAbilitiesInSplitWindowMode_005, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_005 start"); + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + auto mockSubManagersHelper = std::make_shared(nullptr, nullptr); + EXPECT_NE(mockSubManagersHelper, nullptr); + auto mockCurrentUIAbilityManager = std::make_shared(0); + EXPECT_NE(mockCurrentUIAbilityManager, nullptr); + abilityMs_->subManagersHelper_ = mockSubManagersHelper; + abilityMs_->subManagersHelper_->currentUIAbilityManager_ = mockCurrentUIAbilityManager; + + Want want; + want.SetElementName("com.ohos.test", "MainAbility"); + + int32_t windowId = 1; + sptr callerToken = MockToken(AbilityType::EXTENSION); + MyStatus::GetInstance().sbjIsSceneBoardEnabled_ = true; + MyStatus::GetInstance().paramGetBoolParameter_ = true; + MyStatus::GetInstance().smhVerificationAllToken_ = false; + EXPECT_EQ(abilityMs_->StartUIAbilitiesInSplitWindowMode(windowId, want, callerToken), + ERR_INVALID_CALLER); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_005 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartUIAbilitiesInSplitWindowMode_006 + * Function: StartUIAbilitiesInSplitWindowMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowModeHandleWant failed + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, StartUIAbilitiesInSplitWindowMode_006, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_006 start"); + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + auto mockSubManagersHelper = std::make_shared(nullptr, nullptr); + EXPECT_NE(mockSubManagersHelper, nullptr); + auto mockCurrentUIAbilityManager = std::make_shared(0); + EXPECT_NE(mockCurrentUIAbilityManager, nullptr); + abilityMs_->subManagersHelper_ = mockSubManagersHelper; + abilityMs_->subManagersHelper_->currentUIAbilityManager_ = mockCurrentUIAbilityManager; + + Want want; + int32_t windowId = 1; + sptr callerToken = MockToken(AbilityType::EXTENSION); + MyStatus::GetInstance().sbjIsSceneBoardEnabled_ = true; + MyStatus::GetInstance().paramGetBoolParameter_ = true; + MyStatus::GetInstance().smhVerificationAllToken_ = true; + EXPECT_NE(abilityMs_->StartUIAbilitiesInSplitWindowMode(windowId, want, callerToken), + ERR_OK); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowMode_006 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartUIAbilitiesInSplitWindowModeHandleWant_001 + * Function: StartUIAbilitiesInSplitWindowModeHandleWant + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowModeHandleWant failed + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, StartUIAbilitiesInSplitWindowModeHandleWant_001, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, + "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowModeHandleWant_001 start"); + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + + Want want; + AbilityRequest abilityRequest; + int32_t windowId = 1; + int32_t validUserId = abilityMs_->GetValidUserId(DEFAULT_INVAL_VALUE); + int32_t appIndex = 0; + sptr callerToken = MockToken(AbilityType::EXTENSION); + + EXPECT_NE(abilityMs_->StartUIAbilitiesInSplitWindowModeHandleWant(want, callerToken, abilityRequest), + ERR_OK); + + TAG_LOGI(AAFwkTag::TEST, + "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowModeHandleWant_001 end"); +} + +/* + * Feature: AbilityManagerService + * Name: StartUIAbilitiesInSplitWindowModeHandleWant_002 + * Function: StartUIAbilitiesInSplitWindowModeHandleWant + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowModeHandleWant generateRequest + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, StartUIAbilitiesInSplitWindowModeHandleWant_002, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, + "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowModeHandleWant_002 start"); + auto abilityMs_ = std::make_shared(); + + Want want; + want.SetElementName("com.ohos.test", "MainAbility"); + AbilityRequest abilityRequest; + int32_t windowId = 1; + int32_t validUserId = abilityMs_->GetValidUserId(DEFAULT_INVAL_VALUE); + int32_t appIndex = 0; + std::shared_ptr abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); + EXPECT_NE(abilityRecord, nullptr); + sptr callerToken = abilityRecord->GetToken(); + + EXPECT_EQ(abilityMs_->StartUIAbilitiesInSplitWindowModeHandleWant(want, callerToken, abilityRequest), + RESOLVE_ABILITY_ERR); + + TAG_LOGI(AAFwkTag::TEST, + "AbilityManagerServiceThirteenthTest StartUIAbilitiesInSplitWindowModeHandleWant_002 end"); +} +/* + * Feature: AbilityManagerService + * Name: CheckWantForSplitMode_001 + * Function: CheckWantForSplitMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService CheckWantForSplitMode verifyToken failed + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, CheckWantForSplitMode_001, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_001 start"); + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + auto mockSubManagersHelper = std::make_shared(nullptr, nullptr); + EXPECT_NE(mockSubManagersHelper, nullptr); + auto mockCurrentUIAbilityManager = std::make_shared(0); + EXPECT_NE(mockCurrentUIAbilityManager, nullptr); + abilityMs_->subManagersHelper_ = mockSubManagersHelper; + abilityMs_->subManagersHelper_->currentUIAbilityManager_ = mockCurrentUIAbilityManager; + + Want want; + want.SetElementName("com.ohos.test", "MainAbility"); + want.SetParam(AAFwk::Want::DESTINATION_PLUGIN_ABILITY, true); + + int32_t windowId = 1; + int32_t validUserId = abilityMs_->GetValidUserId(DEFAULT_INVAL_VALUE); + int32_t appIndex = 0; + sptr callerToken = MockToken(AbilityType::EXTENSION); + + EXPECT_EQ(abilityMs_->CheckWantForSplitMode(want, callerToken, validUserId, appIndex), + START_UI_ABILITIES_NOT_SUPPORT_START_PLUGIN); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_001 end"); +} + +/* + * Feature: AbilityManagerService + * Name: CheckWantForSplitMode_003 + * Function: CheckWantForSplitMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService CheckWantForSplitMode dlp failed with dlp + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, CheckWantForSplitMode_002, TestSize.Level1) +{ + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + auto mockSubManagersHelper = std::make_shared(nullptr, nullptr); + EXPECT_NE(mockSubManagersHelper, nullptr); + auto mockCurrentUIAbilityManager = std::make_shared(0); + EXPECT_NE(mockCurrentUIAbilityManager, nullptr); + abilityMs_->subManagersHelper_ = mockSubManagersHelper; + abilityMs_->subManagersHelper_->currentUIAbilityManager_ = mockCurrentUIAbilityManager; + + Want want; + want.SetElementName("com.ohos.test", "MainAbility"); + want.SetParam(DLP_PARAMS_SANDBOX, true); + int32_t windowId = 1; + int32_t validUserId = abilityMs_->GetValidUserId(DEFAULT_INVAL_VALUE); + int32_t appIndex = 0; + sptr callerToken = MockToken(AbilityType::EXTENSION); + + EXPECT_EQ(abilityMs_->CheckWantForSplitMode(want, callerToken, validUserId, appIndex), + START_UI_ABILITIES_NOT_SUPPORT_DLP); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_002 end"); +} + +/* + * Feature: AbilityManagerService + * Name: CheckWantForSplitMode_003 + * Function: CheckWantForSplitMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService CheckWantForSplitMode appCloneIndexError + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, CheckWantForSplitMode_003, TestSize.Level1) +{ + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + + Want want; + AbilityRequest abilityRequest; + std::shared_ptr abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); + EXPECT_NE(abilityRecord, nullptr); + sptr callerToken = abilityRecord->GetToken(); + int32_t windowId = 1; + int32_t validUserId = abilityMs_->GetValidUserId(DEFAULT_INVAL_VALUE); + int32_t appIndex = 0; + + want.SetParam(Want::PARAM_APP_CLONE_INDEX_KEY, -5); + + EXPECT_EQ(abilityMs_->CheckWantForSplitMode(want, callerToken, validUserId, appIndex), + ERR_APP_CLONE_INDEX_INVALID); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_003 end"); +} + +/* + * Feature: AbilityManagerService + * Name: CheckWantForSplitMode_004 + * Function: CheckWantForSplitMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService CheckWantForSplitMode ImplicitStartError + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, CheckWantForSplitMode_004, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_004 start"); + + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + + Want want; + AbilityRequest abilityRequest; + std::shared_ptr abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); + EXPECT_NE(abilityRecord, nullptr); + sptr callerToken = abilityRecord->GetToken(); + int32_t windowId = 1; + int32_t validUserId = abilityMs_->GetValidUserId(DEFAULT_INVAL_VALUE); + int32_t appIndex = 0; + + EXPECT_EQ(abilityMs_->CheckWantForSplitMode(want, callerToken, validUserId, appIndex), + START_UI_ABILITIES_NOT_SUPPORT_IMPLICIT_START); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_004 end"); +} + +/* + * Feature: AbilityManagerService + * Name: CheckWantForSplitMode_005 + * Function: CheckWantForSplitMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService CheckWantForSplitMode createInstance + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, CheckWantForSplitMode_005, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_005 start"); + + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + + Want want; + AbilityRequest abilityRequest; + std::shared_ptr abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); + EXPECT_NE(abilityRecord, nullptr); + sptr callerToken = abilityRecord->GetToken(); + int32_t windowId = 1; + int32_t validUserId = abilityMs_->GetValidUserId(DEFAULT_INVAL_VALUE); + int32_t appIndex = 0; + + want.SetParam(AAFwk::Want::CREATE_APP_INSTANCE_KEY, true); + EXPECT_EQ(abilityMs_->CheckWantForSplitMode(want, callerToken, validUserId, appIndex), + START_UI_ABILITIES_NOT_SUPPORT_CREATE_APP_INSTANCE_KEY); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_005 end"); +} + +/* + * Feature: AbilityManagerService + * Name: CheckWantForSplitMode_006 + * Function: CheckWantForSplitMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService CheckWantForSplitMode multiInstanceError + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, CheckWantForSplitMode_006, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_006 start"); + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + + Want want; + want.SetElementName("com.ohos.test", "MainAbility"); + AbilityRequest abilityRequest; + std::shared_ptr abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); + EXPECT_NE(abilityRecord, nullptr); + sptr callerToken = abilityRecord->GetToken(); + MyStatus::GetInstance().isSupportMultiInstance_ = false; + std::string instanceKey = "MainAbility"; + want.SetParam(AAFwk::Want::APP_INSTANCE_KEY, instanceKey); + int32_t windowId = 1; + int32_t validUserId = abilityMs_->GetValidUserId(DEFAULT_INVAL_VALUE); + int32_t appIndex = 0; + EXPECT_NE(abilityMs_->CheckWantForSplitMode(want, callerToken, validUserId, appIndex), + ERR_OK); + MyStatus::GetInstance().isSupportMultiInstance_ = true; + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_006 end"); +} + +/* + * Feature: AbilityManagerService + * Name: CheckWantForSplitMode_007 + * Function: CheckWantForSplitMode + * SubFunction: NA + * FunctionPoints: AbilityManagerService CheckWantForSplitMode return ok + */ +HWTEST_F(AbilityManagerServiceThirteenthTest, CheckWantForSplitMode_007, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_007 start"); + + auto abilityMs_ = std::make_shared(); + EXPECT_NE(abilityMs_, nullptr); + + Want want; + want.SetElementName("com.ohos.test", "MainAbility"); + AbilityRequest abilityRequest; + std::shared_ptr abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); + EXPECT_NE(abilityRecord, nullptr); + sptr callerToken = abilityRecord->GetToken(); + int32_t windowId = 1; + int32_t validUserId = abilityMs_->GetValidUserId(DEFAULT_INVAL_VALUE); + int32_t appIndex = 0; + + EXPECT_EQ(abilityMs_->CheckWantForSplitMode(want, callerToken, validUserId, appIndex), + ERR_OK); + + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceThirteenthTest CheckWantForSplitMode_007 end"); +} + /* * Feature: AbilityManagerService * Name: StartUIAbilities_001 diff --git a/test/unittest/ability_manager_service_thirteenth_test/mock/include/mock_my_status.h b/test/unittest/ability_manager_service_thirteenth_test/mock/include/mock_my_status.h index 2e70cea8687..43e3191e051 100644 --- a/test/unittest/ability_manager_service_thirteenth_test/mock/include/mock_my_status.h +++ b/test/unittest/ability_manager_service_thirteenth_test/mock/include/mock_my_status.h @@ -54,6 +54,7 @@ public: std::shared_ptr acmGetUIExtensionBySessionFromServiceMap_ = nullptr; bool isSupportStartAbilities_ = true; bool isSupportMultiInstance_ = true; + bool isSystemAppCall_ = true; }; } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/ability_manager_service_thirteenth_test/mock/src/mock_permission_verification.cpp b/test/unittest/ability_manager_service_thirteenth_test/mock/src/mock_permission_verification.cpp index 21662cabbbf..eea78805160 100644 --- a/test/unittest/ability_manager_service_thirteenth_test/mock/src/mock_permission_verification.cpp +++ b/test/unittest/ability_manager_service_thirteenth_test/mock/src/mock_permission_verification.cpp @@ -125,7 +125,7 @@ bool PermissionVerification::JudgeCallerIsAllowedToUseSystemAPI() const } bool PermissionVerification::IsSystemAppCall() const { - return true; + return MyStatus::GetInstance().isSystemAppCall_; } } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/ability_manager_stub_second_test/ability_manager_stub_second_test.cpp b/test/unittest/ability_manager_stub_second_test/ability_manager_stub_second_test.cpp index 9657204182c..e8a77421343 100644 --- a/test/unittest/ability_manager_stub_second_test/ability_manager_stub_second_test.cpp +++ b/test/unittest/ability_manager_stub_second_test/ability_manager_stub_second_test.cpp @@ -559,7 +559,8 @@ HWTEST_F(AbilityManagerStubSecondTest, OnRemoteRequestInnerFourteenth_0100, Test static_cast(AbilityManagerInterfaceCode::GET_UI_EXTENSION_ROOT_HOST_INFO), static_cast(AbilityManagerInterfaceCode::GET_UI_EXTENSION_SESSION_INFO), static_cast(AbilityManagerInterfaceCode::PRELOAD_UIEXTENSION_ABILITY), - static_cast(AbilityManagerInterfaceCode::TERMINATE_UI_SERVICE_EXTENSION_ABILITY) + static_cast(AbilityManagerInterfaceCode::TERMINATE_UI_SERVICE_EXTENSION_ABILITY), + static_cast(AbilityManagerInterfaceCode::START_UI_ABILITIES_IN_SPLIT_WINDOW_MODE) }; int i = 0; diff --git a/test/unittest/ability_manager_stub_test/ability_manager_stub_test.cpp b/test/unittest/ability_manager_stub_test/ability_manager_stub_test.cpp index f9a2f77ec09..15c77523e97 100644 --- a/test/unittest/ability_manager_stub_test/ability_manager_stub_test.cpp +++ b/test/unittest/ability_manager_stub_test/ability_manager_stub_test.cpp @@ -3749,6 +3749,94 @@ HWTEST_F(AbilityManagerStubTest, ChangeUIAbilityVisibilityBySCB_0100, TestSize.L TAG_LOGI(AAFwkTag::TEST, "end"); } +/* + * Feature: AbilityManagerService + * Function: StartUIAbilitiesInSplitWindowModeInner + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowModeInner + * EnvConditions: NA + * CaseDescription: want is nullptr + */ +HWTEST_F(AbilityManagerStubTest, AbilityManagerStub_StartUIAbilitiesInSplitWindowModeInner_001, TestSize.Level1) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + WriteInterfaceToken(data); + int32_t primaryWindowId = 1; + data.WriteInt32(primaryWindowId); + Want want = nullptr; + data.WriteParcelable(&want); + sptr token = + sptr(new (std::nothrow) AppExecFwk::MockAbilityToken()); + data.WriteRemoteObject(token); + + int res = stub_->OnRemoteRequest( + static_cast(AbilityManagerInterfaceCode::START_UI_ABILITIES_IN_SPLIT_WINDOW_MODE), data, reply, + option); + EXPECT_EQ(res, ERR_INVALID_VALUE); +} + +/* + * Feature: AbilityManagerService + * Function: StartUIAbilitiesInSplitWindowModeInner + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowModeInner + * EnvConditions: NA + * CaseDescription: callToken is nullptr + */ +HWTEST_F(AbilityManagerStubTest, AbilityManagerStub_StartUIAbilitiesInSplitWindowModeInner_001, TestSize.Level1) +{ +MessageParcel data; + MessageParcel reply; + MessageOption option; + + WriteInterfaceToken(data); + int32_t primaryWindowId = 1; + data.WriteInt32(primaryWindowId); + + Want want; + data.WriteParcelable(&want); + + sptr token = nullptr; + data.WriteRemoteObject(token); + + int res = stub_->OnRemoteRequest( + static_cast(AbilityManagerInterfaceCode::START_UI_ABILITIES_IN_SPLIT_WINDOW_MODE), data, reply, + option); + EXPECT_EQ(res, INVALID_CALLER_TOKEN); +} + +/* + * Feature: AbilityManagerService + * Function: StartUIAbilitiesInSplitWindowModeInner + * SubFunction: NA + * FunctionPoints: AbilityManagerService StartUIAbilitiesInSplitWindowModeInner + * EnvConditions: NA + * CaseDescription: NO_ERROR + */ +HWTEST_F(AbilityManagerStubTest, AbilityManagerStub_StartUIAbilitiesInSplitWindowModeInner_001, TestSize.Level1) +{ +MessageParcel data; + MessageParcel reply; + MessageOption option; + + WriteInterfaceToken(data); + int32_t primaryWindowId = 1; + data.WriteInt32(primaryWindowId); + + Want want; + data.WriteParcelable(&want); + + sptr token = + sptr(new (std::nothrow) AppExecFwk::MockAbilityToken()); + data.WriteRemoteObject(token); + + int res = stub_->OnRemoteRequest( + static_cast(AbilityManagerInterfaceCode::START_UI_ABILITIES_IN_SPLIT_WINDOW_MODE), data, reply, + option); + EXPECT_EQ(res, NO_ERROR); +} /* * Feature: AbilityManagerService * Function: StartUIAbilitiesInner diff --git a/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp b/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp index 0f44336760d..9eadd09e79a 100644 --- a/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp +++ b/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp @@ -1994,6 +1994,76 @@ HWTEST_F(UIAbilityLifecycleManagerTest, NotifySCBPendingActivation_001, TestSize EXPECT_NE(uiAbilityLifecycleManager, nullptr); } +/** + * @tc.name: UIAbilityLifecycleManager_NotifySCBPendingActivation_0200 + * @tc.desc: NotifySCBPendingActivation + * @tc.type: FUNC + */ +HWTEST_F(UIAbilityLifecycleManagerTest, NotifySCBPendingActivation_002, TestSize.Level1) +{ + auto uiAbilityLifecycleManager = std::make_unique(); + EXPECT_NE(uiAbilityLifecycleManager, nullptr); + AbilityRequest abilityRequest; + Rosen::SessionInfo info; + sptr sessionInfo(new SessionInfo()); + sessionInfo->sessionToken = new Rosen::Session(info); + sessionInfo->persistentId = 1; + abilityRequest.sessionInfo = sessionInfo; + auto abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); + uiAbilityLifecycleManager->sessionAbilityMap_.emplace(sessionInfo->persistentId, abilityRecord); + auto token = abilityRecord->GetToken(); + EXPECT_NE(token, nullptr); + abilityRequest.callerToken = token->AsObject(); + abilityRequest.isStartInSplitMode = true; + std::string errMsg; + uiAbilityLifecycleManager->NotifySCBPendingActivation(sessionInfo, abilityRequest, errMsg); + EXPECT_NE(uiAbilityLifecycleManager, nullptr); +} + +/** + * @tc.name: UIAbilityLifecycleManager_NotifySCBPendingActivationInSplitMode_0100 + * @tc.desc: NotifySCBPendingActivationInSplitMode + * @tc.type: FUNC + */ +HWTEST_F(UIAbilityLifecycleManagerTest, NotifySCBPendingActivationInSplitMode_001, TestSize.Level1) +{ + auto uiAbilityLifecycleManager = std::make_unique(); + EXPECT_NE(uiAbilityLifecycleManager, nullptr); + AbilityRequest abilityRequest; + Rosen::SessionInfo info; + sptr sessionInfo(new SessionInfo()); + sessionInfo->sessionToken = new Rosen::Session(info); + sessionInfo->persistentId = 1; + abilityRequest.sessionInfo = sessionInfo; + auto abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); + uiAbilityLifecycleManager->sessionAbilityMap_.emplace(sessionInfo->persistentId, abilityRecord); + auto token = abilityRecord->GetToken(); + EXPECT_NE(token, nullptr); + abilityRequest.callerToken = token->AsObject(); + std::string errMsg; + uiAbilityLifecycleManager->NotifySCBPendingActivationInSplitMode(sessionInfo, abilityRequest); + EXPECT_NE(uiAbilityLifecycleManager, nullptr); +} +/** + * @tc.name: UIAbilityLifecycleManager_CreateSessionConfigurations_0100 + * @tc.desc: CreateSessionConfigurations + * @tc.type: FUNC + */ +HWTEST_F(UIAbilityLifecycleManagerTest, CreateSessionConfigurations_001, TestSize.Level1) +{ + auto uiAbilityLifecycleManager = std::make_unique(); + EXPECT_NE(uiAbilityLifecycleManager, nullptr); + AbilityRequest abilityRequest; + Rosen::SessionInfo info; + sptr sessionInfo(new SessionInfo()); + sessionInfo->sessionToken = new Rosen::Session(info); + sessionInfo->persistentId = 1; + std::vector> sessionInfoList; + std::vector configList; + int32_t primaryWindowId = 1; + uiAbilityLifecycleManager->CreateSessionConfigurations(sessionInfoList, primaryWindowId, configList, sessionInfo); + EXPECT_NE(uiAbilityLifecycleManager, nullptr); +} /** * @tc.name: UIAbilityLifecycleManager_ResolveLocked_0100 * @tc.desc: ResolveLocked @@ -2634,6 +2704,30 @@ HWTEST_F(UIAbilityLifecycleManagerTest, MoveAbilityToFront_001, TestSize.Level1) uiAbilityLifecycleManager.reset(); } +/** + * @tc.name: UIAbilityLifecycleManager_MoveAbilityToFront_0200 + * @tc.desc: MoveAbilityToFront + * @tc.type: FUNC + */ +HWTEST_F(UIAbilityLifecycleManagerTest, MoveAbilityToFront_002, TestSize.Level1) +{ + auto uiAbilityLifecycleManager = std::make_shared(); + AbilityRequest abilityRequest; + SpecifiedRequest specifiedRequest(0, abilityRequest); + int res = uiAbilityLifecycleManager->MoveAbilityToFront(specifiedRequest, nullptr, nullptr); + EXPECT_EQ(res, ERR_INVALID_VALUE); + + specifiedRequest.abilityRequest.sessionInfo = new SessionInfo(); + specifiedRequest.abilityRequest.appInfo.bundleName = "com.example.unittest"; + specifiedRequest.abilityRequest.abilityInfo.name = "MainAbility"; + specifiedRequest.abilityRequest.abilityInfo.type = AppExecFwk::AbilityType::PAGE; + specifiedRequest.abilityRequest.isStartInSplitMode = true; + std::shared_ptr abilityRecord = AbilityRecord::CreateAbilityRecord(specifiedRequest.abilityRequest); + res = uiAbilityLifecycleManager->MoveAbilityToFront(specifiedRequest, abilityRecord, nullptr); + EXPECT_EQ(res, ERR_OK); + + uiAbilityLifecycleManager.reset(); +} /** * @tc.name: UIAbilityLifecycleManager_SendSessionInfoToSCB_0100 * @tc.desc: SendSessionInfoToSCB @@ -2732,6 +2826,34 @@ HWTEST_F(UIAbilityLifecycleManagerTest, SendSessionInfoToSCB_0300, TestSize.Leve uiAbilityLifecycleManager.reset(); } +/** + * @tc.name: UIAbilityLifecycleManager_SendSessionInfoToSCBInSplitMode_0100 + * @tc.desc: SendSessionInfoToSCBInSplitMode + * @tc.type: FUNC + */ +HWTEST_F(UIAbilityLifecycleManagerTest, SendSessionInfoToSCBInSplitMode_0100, TestSize.Level1) +{ + auto uiAbilityLifecycleManager = std::make_shared(); + EXPECT_NE(uiAbilityLifecycleManager, nullptr); + Rosen::SessionInfo info; + uiAbilityLifecycleManager->rootSceneSession_ = new Rosen::Session(info); + sptr sessionInfo(new SessionInfo()); + AbilityRequest abilityRequest; + sessionInfo->sessionToken = new Rosen::Session(info); + sessionInfo->want.SetParam(KEY_REQUEST_ID, std::string("123456")); + abilityRequest.sessionInfo = sessionInfo; + abilityRequest.appInfo.bundleName = "com.example.unittest"; + abilityRequest.abilityInfo.name = "MainAbility"; + abilityRequest.abilityInfo.type = AppExecFwk::AbilityType::PAGE; + std::shared_ptr callerAbility = AbilityRecord::CreateAbilityRecord(abilityRequest); + abilityRequest.primaryWindowId = 1; + int res = uiAbilityLifecycleManager->SendSessionInfoToSCBInSplitMode(abilityRequest.primaryWindowId, callerAbility, + sessionInfo); + EXPECT_EQ(res, ERR_OK); + + uiAbilityLifecycleManager.reset(); +} + /** * @tc.name: UIAbilityLifecycleManager_StartAbilityBySpecifed_0100 * @tc.desc: StartAbilityBySpecifed diff --git a/test/unittest/ui_extension_context_test/ui_extension_context_test.cpp b/test/unittest/ui_extension_context_test/ui_extension_context_test.cpp index 7ed09d8f644..964353feb40 100644 --- a/test/unittest/ui_extension_context_test/ui_extension_context_test.cpp +++ b/test/unittest/ui_extension_context_test/ui_extension_context_test.cpp @@ -183,6 +183,24 @@ HWTEST_F(UIExtensionContextTest, StartAbilityForResult_0200, TestSize.Level1) TAG_LOGI(AAFwkTag::TEST, "StartAbilityForResult_0200 end"); } +/** + * @tc.number: StartUIAbilitiesInSplitWindowMode_0100 + * @tc.name: StartUIAbilitiesInSplitWindowMode + * @tc.desc: StartUIAbilitiesInSplitWindowMode. + */ +HWTEST_F(UIExtensionContextTest, StartUIAbilitiesInSplitWindowMode_0100, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "StartUIAbilitiesInSplitWindowMode_0100 start"); + + auto context = std::make_shared(); + int32_t primaryWindowId = 1; + AAFwk::Want want; + auto ret = context->StartUIAbilitiesInSplitWindowMode(primaryWindowId, want); + EXPECT_NE(ret, ERR_OK); + + TAG_LOGI(AAFwkTag::TEST, "StartUIAbilitiesInSplitWindowMode_0100 end"); +} + /** * @tc.number: StartUIAbilities_0100 * @tc.name: StartUIAbilities -- Gitee