From 79d800d83f7ba28186afdf22b743a3ed88de4780 Mon Sep 17 00:00:00 2001 From: "zhanghangkai@huawei.com" Date: Tue, 1 Jul 2025 10:50:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E6=9D=BF=E6=94=AF=E6=8C=81inspectorKe?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhanghangkai@huawei.com Change-Id: Id5d96682f877075d23775104a77ef1e6cbe75c93 --- .../core/components_ng/base/inspector.cpp | 32 +++++- test/unittest/core/base/inspector_test_ng.cpp | 106 ++++++++++++++++++ 2 files changed, 137 insertions(+), 1 deletion(-) diff --git a/frameworks/core/components_ng/base/inspector.cpp b/frameworks/core/components_ng/base/inspector.cpp index 909775705bb..fac939a2d66 100644 --- a/frameworks/core/components_ng/base/inspector.cpp +++ b/frameworks/core/components_ng/base/inspector.cpp @@ -400,6 +400,35 @@ void GenerateParameters(InspectorChildrenParameters& inspectorParameters, inspectorParameters.isLayoutInspector = isLayoutInspector; } +RefPtr GetContainerModal(const RefPtr& pageNode) +{ + CHECK_NULL_RETURN(pageNode, nullptr); + auto parent = pageNode->GetParent(); + while (parent) { + if (parent->GetTag() == V2::CONTAINER_MODAL_ETS_TAG) { + return parent; + } + parent = parent->GetParent(); + } + return nullptr; +} + +RefPtr GetOverlayNodeWithContainerModal(const RefPtr& pageNode) +{ + CHECK_NULL_RETURN(pageNode, nullptr); + auto containerNode = GetContainerModal(pageNode); + if (containerNode) { + auto containerParent = containerNode->GetParent(); + if (containerParent) { + auto overlayNode = containerParent->GetChildren().back(); + if (overlayNode->GetTag() != V2::CONTAINER_MODAL_ETS_TAG) { + return overlayNode; + } + } + } + return nullptr; +} + RefPtr GetOverlayNode(const RefPtr& pageNode) { CHECK_NULL_RETURN(pageNode, nullptr); @@ -409,7 +438,8 @@ RefPtr GetOverlayNode(const RefPtr& pageNode) CHECK_NULL_RETURN(stageParent, nullptr); auto overlayNode = stageParent->GetChildren().back(); if (overlayNode->GetTag() == "stage") { - return nullptr; + auto overlayNodeWithContainerModal = GetOverlayNodeWithContainerModal(pageNode); + return overlayNodeWithContainerModal ? overlayNodeWithContainerModal : nullptr; } return overlayNode; } diff --git a/test/unittest/core/base/inspector_test_ng.cpp b/test/unittest/core/base/inspector_test_ng.cpp index 9ef9276ca7f..c0947dd943c 100755 --- a/test/unittest/core/base/inspector_test_ng.cpp +++ b/test/unittest/core/base/inspector_test_ng.cpp @@ -1849,4 +1849,110 @@ HWTEST_F(InspectorTestNg, InspectorTestNg027, TestSize.Level1) hasInternalIds = HasInternalIds(children); ASSERT_TRUE(hasInternalIds); } + +/** + * @tc.name: GetOverlayNode_001 + * @tc.desc: Test the operation of GetOverlayNode in stage overlay + * column + * |--stage + * |--PageA + * |--frameNode + * |--overlay + * @tc.type: FUNC + */ +HWTEST_F(InspectorTestNg, GetOverlayNode_001, TestSize.Level1) +{ + // tc.steps: step1. build tree + auto context1 = PipelineContext::GetCurrentContext(); + ASSERT_NE(context1, nullptr); + auto id0 = ElementRegister::GetInstance()->MakeUniqueId(); + RefPtr columnNode = FrameNode::CreateFrameNode("Column", id0, AceType::MakeRefPtr(), false); + + auto id = ElementRegister::GetInstance()->MakeUniqueId(); + RefPtr stageNode = FrameNode::CreateFrameNode("stage", id, AceType::MakeRefPtr(), false); + context1->stageManager_ = AceType::MakeRefPtr(stageNode); + stageNode->children_.clear(); + columnNode->AddChild(stageNode); + + auto overlayNode = FrameNode::CreateFrameNode( + "overlayNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr(), false); + columnNode->AddChild(overlayNode); + auto testNode = FrameNode::CreateFrameNode( + "testNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr(), false); + overlayNode->AddChild(testNode); + + // tc.steps: step2 GetOverlayNode in containermodal + auto id2 = ElementRegister::GetInstance()->MakeUniqueId(); + const RefPtr pageA = FrameNode::CreateFrameNode("PageA", id2, + AceType::MakeRefPtr(AceType::MakeRefPtr())); + stageNode->AddChild(pageA); + + auto frameNode = FrameNode::CreateFrameNode( + "frameNode0", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr(), false); + pageA->AddChild(frameNode); + NG::InspectorTreeMap treesInfos; + Inspector::GetInspectorTree(treesInfos); + auto it = treesInfos.find(testNode->GetId()); + EXPECT_TRUE(it != treesInfos.end()); + + context1->stageManager_ = nullptr; +} + +/** + * @tc.name: GetOverlayNode_001 + * @tc.desc: Test the operation of GetOverlayNode in containermodal overlay + * column + * |--ContainerModal + * |--stage + * |--PageA + * |--frameNode + * |--overlay + * @tc.type: FUNC + */ +HWTEST_F(InspectorTestNg, GetOverlayNode_002, TestSize.Level1) +{ + // tc.steps: step1. build tree + auto context1 = PipelineContext::GetCurrentContext(); + ASSERT_NE(context1, nullptr); + + auto columnNode = FrameNode::CreateFrameNode( + "Column", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr(), false); + + auto id0 = ElementRegister::GetInstance()->MakeUniqueId(); + RefPtr contianerNode + = FrameNode::CreateFrameNode(V2::CONTAINER_MODAL_ETS_TAG, id0, AceType::MakeRefPtr(), false); + columnNode->AddChild(contianerNode); + + auto id = ElementRegister::GetInstance()->MakeUniqueId(); + RefPtr stageNode = FrameNode::CreateFrameNode("stage", id, AceType::MakeRefPtr(), false); + context1->stageManager_ = AceType::MakeRefPtr(stageNode); + stageNode->children_.clear(); + contianerNode->AddChild(stageNode); + + auto overlayNode = FrameNode::CreateFrameNode( + "overlayNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr(), false); + columnNode->AddChild(overlayNode); + + auto testNode = FrameNode::CreateFrameNode( + "testNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr(), false); + overlayNode->AddChild(testNode); + + // tc.steps: step2 GetOverlayNode in containermodal + auto id2 = ElementRegister::GetInstance()->MakeUniqueId(); + const RefPtr pageA = FrameNode::CreateFrameNode("PageA", id2, + AceType::MakeRefPtr(AceType::MakeRefPtr())); + stageNode->AddChild(pageA); + + auto frameNode = FrameNode::CreateFrameNode( + "frameNode0", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr(), false); + pageA->AddChild(frameNode); + + NG::InspectorTreeMap treesInfos; + Inspector::GetInspectorTree(treesInfos); + + auto it = treesInfos.find(testNode->GetId()); + EXPECT_TRUE(it != treesInfos.end()); + + context1->stageManager_ = nullptr; +} } // namespace OHOS::Ace::NG -- Gitee