From f40e8f07ace90807351f4ca0e5953ee7ff7ebe40 Mon Sep 17 00:00:00 2001 From: CheerfulRicky Date: Wed, 12 Mar 2025 09:16:28 +0800 Subject: [PATCH] add test to coverage Signed-off-by: CheerfulRicky --- .../include/reminder_swing_decision_center.h | 29 +--- .../advanced_notification_slot_service.cpp | 1 + .../smart_reminder_center.cpp | 1 + .../src/reminder_swing_decision_center.cpp | 160 ------------------ .../ans/src/slot_manager/slot_manager.cpp | 1 + services/ans/test/unittest/BUILD.gn | 6 +- .../reminder_swing_decision_center_test.cpp | 66 +++++++- 7 files changed, 74 insertions(+), 190 deletions(-) diff --git a/services/ans/include/reminder_swing_decision_center.h b/services/ans/include/reminder_swing_decision_center.h index acd468324..a61f6b971 100644 --- a/services/ans/include/reminder_swing_decision_center.h +++ b/services/ans/include/reminder_swing_decision_center.h @@ -23,13 +23,7 @@ #include "ans_log_wrapper.h" #include "ans_inner_errors.h" -#include "common_event_subscriber.h" -#include "common_event_manager.h" -#include "common_event_support.h" -#include "nlohmann/json.hpp" -#include "notification_config_parse.h" #include "swing_callback_proxy.h" -#include "system_event_subscriber.h" namespace OHOS { namespace Notification { @@ -42,31 +36,10 @@ public: static sptr swingCallback_; void ResetSwingCallbackProxy(); ErrCode RegisterSwingCallback(const sptr &swingCallback); - void UpdateCrossDeviceNotificationStatus(bool isEnable); - string GetSwingDeviceType(); - void OnScreenLock(); - void OnScreenUnlock(); - void OnUpdateDeviceStatus(const std::string &deviceType); - void OnSmartReminderStatusChanged(); - void SwingExecuteDecision(bool isScreenUnlockTrigger = false); -private: - void GetCcmSwingRemind(); - bool IsStatifySwingCrossDeviceStatus(); - void DisableSwingStatus(); + private: static mutex swingMutex_; - string enableSwingDeviceType_; - string enableSwingDeviceStatus_; - bool isCrossDeviceNotificationEnable_ = false; - bool isSupportSwingSmartRemind_ = false; - bool isSwingExecuting_ = false; - bool isScreenUnlock_ = false; sptr swingRecipient_ = nullptr; - - constexpr static inline const char* AFFTECED_BY = "affectedBy"; - constexpr static inline const char* SWING_FILTER = "swingEnableFilter"; - constexpr static inline const uint32_t UNLOCK_TRIGGER = 0; - constexpr static inline const uint32_t NONE_UNLOCK_TRIGGER = 1; }; class SwingCallbackRecipient : public IRemoteObject::DeathRecipient { diff --git a/services/ans/src/advanced_notification_slot_service.cpp b/services/ans/src/advanced_notification_slot_service.cpp index 40b07170b..61e2eafbd 100644 --- a/services/ans/src/advanced_notification_slot_service.cpp +++ b/services/ans/src/advanced_notification_slot_service.cpp @@ -34,6 +34,7 @@ #endif #include "advanced_notification_inline.cpp" +#include "notification_config_parse.h" #include "notification_extension_wrapper.h" #include "notification_analytics_util.h" #include "liveview_all_scenarios_extension_wrapper.h" diff --git a/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp b/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp index f8435177d..34280a6ea 100644 --- a/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp +++ b/services/ans/src/notification_smart_reminder/smart_reminder_center.cpp @@ -19,6 +19,7 @@ #include "ans_log_wrapper.h" #include "ipc_skeleton.h" #include "notification_bundle_option.h" +#include "notification_config_parse.h" #include "notification_local_live_view_content.h" #include "notification_preferences.h" #include "os_account_manager.h" diff --git a/services/ans/src/reminder_swing_decision_center.cpp b/services/ans/src/reminder_swing_decision_center.cpp index a7c446d2b..971d77822 100644 --- a/services/ans/src/reminder_swing_decision_center.cpp +++ b/services/ans/src/reminder_swing_decision_center.cpp @@ -64,166 +64,6 @@ void ReminderSwingDecisionCenter::ResetSwingCallbackProxy() swingCallback_ = nullptr; } -void ReminderSwingDecisionCenter::GetCcmSwingRemind() -{ - nlohmann::json root; - string swingJsonPoint = "/"; - swingJsonPoint.append(NotificationConfigParse::CFG_KEY_NOTIFICATION_SERVICE); - swingJsonPoint.append("/"); - swingJsonPoint.append(SWING_FILTER); - swingJsonPoint.append("/"); - swingJsonPoint.append(AFFTECED_BY); - isSupportSwingSmartRemind_ = false; - if (!NotificationConfigParse::GetInstance()->GetConfigJson(swingJsonPoint, root)) { - ANS_LOGI("Failed to get swingJsonPoint CCM config file."); - return; - } - - nlohmann::json affects = root[NotificationConfigParse::CFG_KEY_NOTIFICATION_SERVICE][SWING_FILTER][AFFTECED_BY]; - - if (affects.is_null() || !affects.is_array() || affects.empty()) { - ANS_LOGI("GetCcmSwingRemind failed as invalid ccmSwingRemind json."); - return; - } - - for (auto &affect : affects) { - if (affect.is_null() || !affect.is_object()) { - continue; - } - if (affect[ReminderAffected::DEVICE_TYPE].is_null() || - !affect[ReminderAffected::DEVICE_TYPE].is_string() || - affect[ReminderAffected::STATUS].is_null() || - !affect[ReminderAffected::STATUS].is_string()) { - continue; - } - enableSwingDeviceType_ = affect[ReminderAffected::DEVICE_TYPE].get(); - enableSwingDeviceStatus_ = affect[ReminderAffected::STATUS].get(); - ANS_LOGI("GetCcmSwingRemind deviceType: %{public}s status: %{public}s", enableSwingDeviceType_.c_str(), - enableSwingDeviceStatus_.c_str()); - isSupportSwingSmartRemind_ = true; - } -} - -string ReminderSwingDecisionCenter::GetSwingDeviceType() -{ - return enableSwingDeviceType_; -} - -void ReminderSwingDecisionCenter::UpdateCrossDeviceNotificationStatus(bool isEnable) -{ - isCrossDeviceNotificationEnable_ = isEnable; - ANS_LOGD("UpdateCrossDeviceNotificationStatus %{public}d", isEnable); -} - -void ReminderSwingDecisionCenter::OnSmartReminderStatusChanged() -{ - SwingExecuteDecision(false); -} - -void ReminderSwingDecisionCenter::DisableSwingStatus() -{ - if (!isSwingExecuting_) { - return; - } - isSwingExecuting_ = false; - lock_guard lock(swingMutex_); - if (swingCallback_ == nullptr) { - return; - } - ANS_LOGD("DisableSwingStatus"); - swingCallback_->OnUpdateStatus(false, NONE_UNLOCK_TRIGGER); -} - -void ReminderSwingDecisionCenter::SwingExecuteDecision(bool isScreenUnlockTrigger) -{ - ANS_LOGD("SwingExecuteDecision"); - if (!isSupportSwingSmartRemind_) { - ANS_LOGI("is not SupportSwingSmartRemind"); - return; - } - - if (!isCrossDeviceNotificationEnable_) { - ANS_LOGI("crossDeviceNotification disable"); - DisableSwingStatus(); - return; - } - - bool isSmartReminderEnable = false; - if (ERR_OK != NotificationPreferences::GetInstance()->IsSmartReminderEnabled(enableSwingDeviceType_, - isSmartReminderEnable)) { - ANS_LOGI("IsSmartReminderEnable error"); - return; - } - - if (!isSmartReminderEnable) { - ANS_LOGI("IsSmartReminderEnable false"); - DisableSwingStatus(); - return; - } - lock_guard lock(swingMutex_); - if (swingCallback_ == nullptr) { - ANS_LOGI("swingCallback_ is null"); - return; - } - - int triggerMode = isScreenUnlockTrigger ? UNLOCK_TRIGGER : NONE_UNLOCK_TRIGGER; - bool isSwingCrossDeviceStatusStatified = IsStatifySwingCrossDeviceStatus(); - if (isScreenUnlock_ && isSwingCrossDeviceStatusStatified) { - if (!isSwingExecuting_) { - isSwingExecuting_ = true; - swingCallback_->OnUpdateStatus(true, triggerMode); - ANS_LOGI("swing OnUpdateStatus enable triggerMode %{public}d", triggerMode); - } else { - ANS_LOGD("isSwingExecuting_ %{public}d", isSwingExecuting_); - } - } else { - if (isSwingExecuting_) { - isSwingExecuting_ = false; - swingCallback_->OnUpdateStatus(false, triggerMode); - ANS_LOGI("swing OnUpdateStatus disable triggerMode %{public}d", triggerMode); - } else { - ANS_LOGD("isScreenUnlock_ %{public}d isSwingCrossDeviceStatusStatified %{public}d ", - isScreenUnlock_, isSwingCrossDeviceStatusStatified); - } - } -} - -bool ReminderSwingDecisionCenter::IsStatifySwingCrossDeviceStatus() -{ - uint32_t status = - DelayedSingleton::GetInstance()->GetDeviceStatus(enableSwingDeviceType_); - bool isSatisfied = SmartReminderCenter::GetInstance()->CompareStatus(enableSwingDeviceStatus_, bitset<4>(status)); - return isSatisfied; -} - -void ReminderSwingDecisionCenter::OnUpdateDeviceStatus(const std::string &deviceType) -{ - if (deviceType.empty() || enableSwingDeviceType_.empty()) { - return; - } - if (deviceType.compare(enableSwingDeviceType_) == 0) { - SwingExecuteDecision(false); - } -} - -void ReminderSwingDecisionCenter::OnScreenLock() -{ - ANS_LOGI("OnScreenLock"); - if (isScreenUnlock_) { - isScreenUnlock_ = false; - SwingExecuteDecision(true); - } -} - -void ReminderSwingDecisionCenter::OnScreenUnlock() -{ - ANS_LOGI("OnScreenUnlock"); - if (!isScreenUnlock_) { - isScreenUnlock_ = true; - SwingExecuteDecision(true); - } -} - void SwingCallbackRecipient::OnRemoteDied(const wptr &remote) { ANS_LOGI("Swing Callback died, remove the proxy object"); diff --git a/services/ans/src/slot_manager/slot_manager.cpp b/services/ans/src/slot_manager/slot_manager.cpp index 8c025b163..948822b53 100644 --- a/services/ans/src/slot_manager/slot_manager.cpp +++ b/services/ans/src/slot_manager/slot_manager.cpp @@ -34,6 +34,7 @@ #endif #include "../advanced_notification_inline.cpp" +#include "notification_config_parse.h" #include "notification_extension_wrapper.h" #include "notification_analytics_util.h" diff --git a/services/ans/test/unittest/BUILD.gn b/services/ans/test/unittest/BUILD.gn index 0c6bd4163..a3d8b11d6 100644 --- a/services/ans/test/unittest/BUILD.gn +++ b/services/ans/test/unittest/BUILD.gn @@ -47,7 +47,6 @@ ohos_unittest("ans_unit_test") { "notification_local_live_view_subscriber_manager_test.cpp", "notification_slot_filter_test.cpp", "permission_filter_test.cpp", - "reminder_swing_decision_center_test.cpp", ] deps = [ @@ -63,6 +62,11 @@ ohos_unittest("ans_unit_test") { include_dirs += [ "${services_path}/distributed/include" ] } + if (notification_smart_reminder_supported) { + sources += [ "reminder_swing_decision_center_test.cpp" ] + defines += [ "NOTIFICATION_SMART_REMINDER_SUPPORTED" ] + } + external_deps = [ "ability_base:want", "ability_base:zuri", diff --git a/services/ans/test/unittest/reminder_swing_decision_center_test.cpp b/services/ans/test/unittest/reminder_swing_decision_center_test.cpp index 7d1d7ba7d..7aec2fda0 100644 --- a/services/ans/test/unittest/reminder_swing_decision_center_test.cpp +++ b/services/ans/test/unittest/reminder_swing_decision_center_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -14,7 +14,12 @@ */ #ifdef NOTIFICATION_SMART_REMINDER_SUPPORTED #include "gtest/gtest.h" +#define private public #include "reminder_swing_decision_center.h" +#include "notification_preferences.h" +#include "smart_reminder_center.h" +#include "reminder_affected.h" +#undef private #include "mock_swing_callback_stub.h" using namespace testing::ext; @@ -65,6 +70,65 @@ HWTEST_F(ReminderSwingDecisionCenterTest, RegisterSwingCallback_00002, Function int ret = reminderSwingDecisionCenter_.RegisterSwingCallback(swingCallback); ASSERT_EQ(ret, (int)ERR_OK); } + +HWTEST_F(ReminderSwingDecisionCenterTest, NormalResetSwingCallbackProxyTest, Function | SmallTest | Level1) +{ + // Arrange + reminderSwingDecisionCenter_.swingCallback_ = new (std::nothrow)MockSwingCallBackStub(); + reminderSwingDecisionCenter_.swingRecipient_ = new (std::nothrow)SwingCallbackRecipient(); + + // Act + reminderSwingDecisionCenter_.ResetSwingCallbackProxy(); + + // Assert + EXPECT_EQ(reminderSwingDecisionCenter_.swingCallback_, nullptr); + EXPECT_NE(reminderSwingDecisionCenter_.swingRecipient_, nullptr); +} + +// 测试ResetSwingCallbackProxy方法 - swingCallback_为nullptr +HWTEST_F(ReminderSwingDecisionCenterTest, NullSwingCallbackResetSwingCallbackProxyTest, Function | SmallTest | Level1) +{ + // Arrange + reminderSwingDecisionCenter_.swingCallback_ = nullptr; + reminderSwingDecisionCenter_.swingRecipient_ = new (std::nothrow)SwingCallbackRecipient(); + + // Act + reminderSwingDecisionCenter_.ResetSwingCallbackProxy(); + + // Assert + EXPECT_EQ(reminderSwingDecisionCenter_.swingCallback_, nullptr); + EXPECT_NE(reminderSwingDecisionCenter_.swingRecipient_, nullptr); +} + +// 测试ResetSwingCallbackProxy方法 - swingRecipient_为nullptr +HWTEST_F(ReminderSwingDecisionCenterTest, NullSwingRecipientResetSwingCallbackProxyTest, Function | SmallTest | Level1) +{ + // Arrange + reminderSwingDecisionCenter_.swingCallback_ = new (std::nothrow)MockSwingCallBackStub(); + reminderSwingDecisionCenter_.swingRecipient_ = nullptr; + + // Act + reminderSwingDecisionCenter_.ResetSwingCallbackProxy(); + + // Assert + EXPECT_EQ(reminderSwingDecisionCenter_.swingCallback_, nullptr); + EXPECT_EQ(reminderSwingDecisionCenter_.swingRecipient_, nullptr); +} + +// 测试ResetSwingCallbackProxy方法 - 所有指针都为nullptr +HWTEST_F(ReminderSwingDecisionCenterTest, AllNullResetSwingCallbackProxyTest, Function | SmallTest | Level1) +{ + // Arrange + reminderSwingDecisionCenter_.swingCallback_ = nullptr; + reminderSwingDecisionCenter_.swingRecipient_ = nullptr; + + // Act + reminderSwingDecisionCenter_.ResetSwingCallbackProxy(); + + // Assert + EXPECT_EQ(reminderSwingDecisionCenter_.swingCallback_, nullptr); + EXPECT_EQ(reminderSwingDecisionCenter_.swingRecipient_, nullptr); +} } //namespace Notification } //namespace OHOS #endif \ No newline at end of file -- Gitee