From 3cd47e88c2d3aac67667fc7f6e4a6c35a8aa9cd6 Mon Sep 17 00:00:00 2001 From: duanshaofei Date: Thu, 26 Jun 2025 15:25:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=85=A8=E9=80=89=E5=90=8E=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E9=80=89=E6=8B=A9=E5=90=8E=E8=8F=9C=E5=8D=95=E6=97=A0?= =?UTF-8?q?=E5=85=A8=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: duanshaofei --- .../pattern/web/web_select_overlay.cpp | 7 +-- .../pattern/web/web_select_overlay_test.cpp | 48 +++++++++++++++++-- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/frameworks/core/components_ng/pattern/web/web_select_overlay.cpp b/frameworks/core/components_ng/pattern/web/web_select_overlay.cpp index 6e4eb177ea2..b370c3eedc7 100644 --- a/frameworks/core/components_ng/pattern/web/web_select_overlay.cpp +++ b/frameworks/core/components_ng/pattern/web/web_select_overlay.cpp @@ -338,9 +338,6 @@ void WebSelectOverlay::SetMenuOptions(SelectOverlayInfo& selectInfo, selectInfo.menuInfo.showCopyAll = true; } bool detectFlag = !isSelectAll_; - if (isSelectAll_) { - selectInfo.menuInfo.showCopyAll = false; - } auto value = GetSelectedText(); auto queryWord = std::regex_replace(value, std::regex("^\\s+|\\s+$"), ""); @@ -819,7 +816,7 @@ void WebSelectOverlay::OnMenuItemAction(OptionMenuActionId id, OptionMenuType ty { auto pattern = GetPattern(); CHECK_NULL_VOID(pattern); - if (id != OptionMenuActionId::SELECT_ALL && id != OptionMenuActionId::COPY) { + if (id == OptionMenuActionId::PASTE || id == OptionMenuActionId::CUT) { isSelectAll_ = false; } if (!quickMenuCallback_) { @@ -1125,7 +1122,6 @@ void WebSelectOverlay::UpdateSelectMenuOptions() auto value = GetSelectedText(); auto queryWord = std::regex_replace(value, std::regex("^\\s+|\\s+$"), ""); if (isSelectAll_) { - webSelectInfo_.menuInfo.showCopyAll = true; isSelectAll_ = false; } if (!queryWord.empty()) { @@ -1172,7 +1168,6 @@ void WebSelectOverlay::UpdateAISelectMenu(TextDataDetectType type, const std::st void WebSelectOverlay::UpdateIsSelectAll() { if (isSelectAll_) { - webSelectInfo_.menuInfo.showCopyAll = true; isSelectAll_ = false; } } diff --git a/test/unittest/core/pattern/web/web_select_overlay_test.cpp b/test/unittest/core/pattern/web/web_select_overlay_test.cpp index 913a3019e52..75ae4863791 100644 --- a/test/unittest/core/pattern/web/web_select_overlay_test.cpp +++ b/test/unittest/core/pattern/web/web_select_overlay_test.cpp @@ -5506,11 +5506,42 @@ HWTEST_F(WebSelectOverlayTest, UpdateAIMenuTest001, TestSize.Level1) } /** - * @tc.name: SetMenuOptionsTest001 - * @tc.desc: Test SetMenuOptions. + * @tc.name: OnTouchSelectionChangedTest011 + * @tc.desc: Test OnTouchSelectionChanged. + * @tc.type: FUNC + */ +HWTEST_F(WebSelectOverlayTest, OnTouchSelectionChangedTest011, TestSize.Level1) +{ + auto* stack = ViewStackProcessor::GetInstance(); + ASSERT_NE(stack, nullptr); + auto nodeId = stack->ClaimNodeId(); + auto frameNode = + FrameNode::GetOrCreateFrameNode(V2::WEB_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr(); }); + stack->Push(frameNode); + auto webPattern = frameNode->GetPattern(); + ASSERT_NE(webPattern, nullptr); + WebSelectOverlay overlay(webPattern); + webPattern->OnModifyDone(); + ASSERT_NE(webPattern->delegate_, nullptr); + auto insertHandle = nullptr; + ASSERT_EQ(insertHandle, nullptr); + auto startSelectionHandle = std::make_shared(); + ASSERT_NE(startSelectionHandle, nullptr); + auto endSelectionHandle = std::make_shared(); + ASSERT_NE(endSelectionHandle, nullptr); + overlay.isShowHandle_ = true; + overlay.selectOverlayDragging_ = true; + overlay.isSelectAll_ = true; + overlay.OnTouchSelectionChanged(insertHandle, startSelectionHandle, endSelectionHandle); + EXPECT_EQ(overlay.isSelectAll_, true); +} + +/** + * @tc.name: OnMenuItemActionTestSelectAll + * @tc.desc: Test OnMenuItemAction. * @tc.type: FUNC */ -HWTEST_F(WebSelectOverlayTest, SetMenuOptionsTest001, TestSize.Level1) +HWTEST_F(WebSelectOverlayTest, OnMenuItemActionTestSelectAll, TestSize.Level1) { auto* stack = ViewStackProcessor::GetInstance(); EXPECT_NE(stack, nullptr); @@ -5527,9 +5558,16 @@ HWTEST_F(WebSelectOverlayTest, SetMenuOptionsTest001, TestSize.Level1) std::shared_ptr callback = std::make_shared(); SelectOverlayInfo selectInfo; - overlay.isSelectAll_ = true; + auto flags = g_editStateFlags; + g_editStateFlags = 0; overlay.SetMenuOptions(selectInfo, params, callback); - EXPECT_EQ(overlay.isSelectAll_, true); + overlay.isSelectAll_ = true; + overlay.OnMenuItemAction(OptionMenuActionId::PASTE, OptionMenuType::TOUCH_MENU); + ASSERT_EQ(overlay.isSelectAll_, false); + overlay.isSelectAll_ = true; + overlay.OnMenuItemAction(OptionMenuActionId::CUT, OptionMenuType::TOUCH_MENU); + EXPECT_EQ(overlay.isSelectAll_, false); + g_editStateFlags = flags; } /** -- Gitee From 2c338491cc755ac13156f29ac52bea212f8d8301 Mon Sep 17 00:00:00 2001 From: duanshaofei Date: Thu, 26 Jun 2025 16:57:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=85=A8=E9=80=89=E5=90=8E=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E9=80=89=E6=8B=A9=E5=90=8E=E8=8F=9C=E5=8D=95=E6=97=A0?= =?UTF-8?q?=E5=85=A8=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: duanshaofei --- .../pattern/web/web_select_overlay.cpp | 1 + .../core/pattern/web/web_select_overlay_test.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/frameworks/core/components_ng/pattern/web/web_select_overlay.cpp b/frameworks/core/components_ng/pattern/web/web_select_overlay.cpp index b370c3eedc7..0a60f6aa339 100644 --- a/frameworks/core/components_ng/pattern/web/web_select_overlay.cpp +++ b/frameworks/core/components_ng/pattern/web/web_select_overlay.cpp @@ -929,6 +929,7 @@ void WebSelectOverlay::OnHandleMoveStart(const GestureEvent& event, bool isFirst void WebSelectOverlay::OnHandleMoveDone(const RectF& rect, bool isFirst) { HideMagnifier(); + isSelectAll_ = false; selectOverlayDragging_ = false; webSelectInfo_.menuInfo.showCopyAll = true; UpdateSelectMenuOptions(); diff --git a/test/unittest/core/pattern/web/web_select_overlay_test.cpp b/test/unittest/core/pattern/web/web_select_overlay_test.cpp index 75ae4863791..8ba79b3cf56 100644 --- a/test/unittest/core/pattern/web/web_select_overlay_test.cpp +++ b/test/unittest/core/pattern/web/web_select_overlay_test.cpp @@ -5570,6 +5570,20 @@ HWTEST_F(WebSelectOverlayTest, OnMenuItemActionTestSelectAll, TestSize.Level1) g_editStateFlags = flags; } +/** + * @tc.name: UpdateSelectMenuOptionsTest002 + * @tc.desc: Test function UpdateSelectMenuOptions. + * @tc.type: FUNC + */ +HWTEST_F(WebSelectOverlayTest, UpdateSelectMenuOptionsTest002, TestSize.Level1) +{ + WeakPtr textBase = nullptr; + WebSelectOverlay overlay(textBase); + overlay.isSelectAll_ = true; + overlay.UpdateSelectMenuOptions(); + EXPECT_FALSE(overlay.isSelectAll_); +} + /** * @tc.name: UpdateTouchHandleForOverlayTestSelectAll * @tc.desc: Test OnTouchSelectionChanged. -- Gitee