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 6e4eb177ea23925d1596de64044838ccd7b9b02c..0a60f6aa33908032d594ca6e0c50e0862421a214 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_) { @@ -932,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(); @@ -1125,7 +1123,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 +1169,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 913a3019e5246f7cb57a4582475533cdc259f091..8ba79b3cf56d62a9a97cce583c8c1c0ea1c1d908 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, SetMenuOptionsTest001, TestSize.Level1) +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, OnMenuItemActionTestSelectAll, TestSize.Level1) { auto* stack = ViewStackProcessor::GetInstance(); EXPECT_NE(stack, nullptr); @@ -5527,9 +5558,30 @@ 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; +} + +/** + * @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_); } /**