diff --git a/adapter/ohos/osal/image_analyzer_adapter_impl.cpp b/adapter/ohos/osal/image_analyzer_adapter_impl.cpp index 4e573d53c0fc85bd2a7d8a60ee3fa09feef62f64..8fcba0c487acc05c9371e3ac67ba198ed6542793 100644 --- a/adapter/ohos/osal/image_analyzer_adapter_impl.cpp +++ b/adapter/ohos/osal/image_analyzer_adapter_impl.cpp @@ -73,7 +73,10 @@ void* ImageAnalyzerAdapterImpl::ConvertPixmapNapi(const RefPtr& pixelM auto engine = EngineHelper::GetCurrentEngine(); CHECK_NULL_RETURN(engine, {}); napi_handle_scope scope = nullptr; - napi_open_handle_scope(env_, &scope); + auto status = napi_open_handle_scope(env_, &scope); + if (status != napi_ok || status == nullptr) { + return nullptr; + } NativeEngine* nativeEngine = engine->GetNativeEngine(); auto env = reinterpret_cast(nativeEngine); auto napiValue = OHOS::Media::PixelMapNapi::CreatePixelMap(env, pixelMap->GetPixelMapSharedPtr()); diff --git a/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp b/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp index 8b38bbdaec7584b41c572e8c8182a65a40828366..20bc3a1be236b23afe5da2668fb4a26163fa24e8 100644 --- a/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp +++ b/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp @@ -30,9 +30,16 @@ void BadgePattern::OnModifyDone() return; } + auto needCreateText = false; auto lastFrameNode = AceType::DynamicCast(frameNode->GetChildren().back()); - CHECK_NULL_VOID(lastFrameNode); - if (lastFrameNode->GetId() != textNodeId_) { + if (lastFrameNode) { + needCreateText = lastFrameNode->GetId() != textNodeId_; + } else { + auto lastUINode = AceType::DynamicCast(frameNode->GetChildren().back()); + CHECK_NULL_VOID(lastUINode); + needCreateText = true; + } + if (needCreateText) { textNodeId_ = ElementRegister::GetInstance()->MakeUniqueId(); lastFrameNode = FrameNode::GetOrCreateFrameNode( V2::TEXT_ETS_TAG, textNodeId_, []() { return AceType::MakeRefPtr(); }); diff --git a/test/unittest/core/pattern/badge/badge_test_ng.cpp b/test/unittest/core/pattern/badge/badge_test_ng.cpp index 1d1b0088667ff06ec94d2f316078338e5141a1e1..ae651bbd95624c636c0638d95a048f049014a301 100644 --- a/test/unittest/core/pattern/badge/badge_test_ng.cpp +++ b/test/unittest/core/pattern/badge/badge_test_ng.cpp @@ -1244,6 +1244,62 @@ HWTEST_F(BadgeTestNg, UpdateBadgePatternTest009, TestSize.Level1) EXPECT_EQ(layoutProperty->GetBadgeBorderWidth(), width); // should not update } +/** + * @tc.name: BadgePatternTest011 + * @tc.desc: test badge pattern OnModifyDone. + * @tc.type: FUNC + */ +HWTEST_F(BadgeTestNg, BadgePatternTest011, TestSize.Level0) +{ + BadgeModelNG badge; + BadgeParameters badgeParameters; + badgeParameters.badgeMaxCount = 99; + badgeParameters.badgeFontSize = BADGE_FONT_SIZE; + badge.Create(badgeParameters); + GetInstance(); + + // test frameNode has not + pattern_->OnModifyDone(); + + // add frameNode child + auto ifNodeId = ElementRegister::GetInstance()->MakeUniqueId(); + auto ifNode = IfElseNode::GetOrCreateIfElseNode(ifNodeId); + ASSERT_NE(ifNode, nullptr); + ifNode->MountToParent(frameNode_); + pattern_->OnModifyDone(); + + // add textNode child + auto textNodeId = ElementRegister::GetInstance()->MakeUniqueId(); + auto textNode = FrameNode::GetOrCreateFrameNode( + V2::TEXT_ETS_TAG, textNodeId, []() { return AceType::MakeRefPtr(); }); + ASSERT_NE(textNode, nullptr); + textNode->MountToParent(frameNode_); + pattern_->OnModifyDone(); + + // update badge layoutProperty and go to different branch + layoutProperty_->UpdateBadgeValue(""); + pattern_->OnModifyDone(); + + layoutProperty_->UpdateBadgeValue("test"); + pattern_->OnModifyDone(); + + layoutProperty_->UpdateBadgeCount(1); + pattern_->OnModifyDone(); + EXPECT_EQ(layoutProperty_->GetBadgeCountValue(), 1); + + layoutProperty_->UpdateBadgeCount(100); + pattern_->OnModifyDone(); + EXPECT_EQ(layoutProperty_->GetBadgeCountValue(), 100); + + layoutProperty_->UpdateBadgeCount(-1); + pattern_->OnModifyDone(); + EXPECT_EQ(layoutProperty_->GetBadgeCountValue(), -1); + + layoutProperty_->UpdateBadgeCount(-0); + pattern_->OnModifyDone(); + EXPECT_EQ(layoutProperty_->GetBadgeCountValue(), -0); +} + /** * @tc.name: BadgeModelNGSetBadgeParameMaxCount * @tc.desc: Test badge SetBadgeParam.