diff --git a/test/unittest/core/pattern/text_input/BUILD.gn b/test/unittest/core/pattern/text_input/BUILD.gn index ea73b0a5e253711904329d790260cca0a3e023d4..9f858f20e51eda812fd00e7c16eeec24e9633d63 100644 --- a/test/unittest/core/pattern/text_input/BUILD.gn +++ b/test/unittest/core/pattern/text_input/BUILD.gn @@ -52,6 +52,7 @@ ace_unittest("TextInputTest") { "text_input_test.cpp", "text_input_update_test.cpp", "text_input_wordbreak_test.cpp", + "text_select_controller_test.cpp", "$ace_root/test/mock/core/common/mock_font_manager.cpp", ] cflags = [ "-fno-access-control" ] diff --git a/test/unittest/core/pattern/text_input/text_input_base.h b/test/unittest/core/pattern/text_input/text_input_base.h index 7abdbae59c5bc72e6bf395d28d2e262d6f8518a3..da2a45943339dd25a65ffabef1655c6b2559985a 100644 --- a/test/unittest/core/pattern/text_input/text_input_base.h +++ b/test/unittest/core/pattern/text_input/text_input_base.h @@ -111,6 +111,11 @@ protected: RefPtr layoutProperty_; RefPtr accessibilityProperty_; }; + +class TextSelectControllerTest : public TestNG { + void SetUp() override; + void TearDown() override; +}; } // namespace OHOS::Ace::NG #endif // FOUNDATION_ACE_TEST_UNITTEST_CORE_PATTERN_TEXTFIELD_TEXTINPUT_TEST_NG_H \ No newline at end of file diff --git a/test/unittest/core/pattern/text_input/text_select_controller_test.cpp b/test/unittest/core/pattern/text_input/text_select_controller_test.cpp new file mode 100755 index 0000000000000000000000000000000000000000..b974b844ef2e8cc2f8737b661c1c9ff9d66f11ad --- /dev/null +++ b/test/unittest/core/pattern/text_input/text_select_controller_test.cpp @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2022-2024 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "test/mock/base/mock_task_executor.h" +#include "test/mock/core/render/mock_paragraph.h" +#include "text_input_base.h" + +#include "base/memory/ace_type.h" +#include "core/components_ng/pattern/text/span/span_object.h" +#include "core/components_ng/pattern/text/span_node.h" + +namespace OHOS::Ace::NG { + +void TextSelectControllerTest::SetUp() {} + +void TextSelectControllerTest::TearDown() {} + +/** + * @tc.name: FitCaretMetricsToContentRect001 + * @tc.desc: Test FitCaretMetricsToContentRect + * @tc.type: FUNC + */ +HWTEST_F(TextSelectControllerTest, FitCaretMetricsToContentRect001, TestSize.Level1) +{ + auto refPattern = AceType::MakeRefPtr(); + ASSERT_NE(refPattern, nullptr); + WeakPtr pattern = refPattern; + auto textSelectController = AceType::MakeRefPtr(pattern); + ASSERT_NE(textSelectController, nullptr); + textSelectController->pattern_ = refPattern; + CaretMetricsF caretMetrics; + caretMetrics.height = 2.0; + textSelectController->contentRect_.height_ = 1.0; + textSelectController->FitCaretMetricsToContentRect(caretMetrics); + EXPECT_EQ(caretMetrics.height, textSelectController->contentRect_.Height()); +} + +/** + * @tc.name: UpdateSelectByOffset001 + * @tc.desc: Test UpdateSelectByOffset + * @tc.type: FUNC + */ +HWTEST_F(TextSelectControllerTest, UpdateSelectByOffset001, TestSize.Level1) +{ + auto refPattern = AceType::MakeRefPtr(); + ASSERT_NE(refPattern, nullptr); + WeakPtr pattern = refPattern; + auto textSelectController = AceType::MakeRefPtr(pattern); + ASSERT_NE(textSelectController, nullptr); + textSelectController->pattern_ = refPattern; + auto textFieldPattern = AceType::MakeRefPtr(); + ASSERT_NE(textFieldPattern, nullptr); + textFieldPattern->textRect_ = { 0, 0, 0, 0 }; + Offset localOffset = { 2, 2 }; + textSelectController->UpdateSelectByOffset(localOffset); + EXPECT_EQ(textSelectController->firstHandleInfo_.index, 0); +} + +/** + * @tc.name: UpdateSelectByOffset002 + * @tc.desc: Test UpdateSelectByOffset + * @tc.type: FUNC + */ +HWTEST_F(TextSelectControllerTest, UpdateSelectByOffset002, TestSize.Level1) +{ + auto refPattern = AceType::MakeRefPtr(); + ASSERT_NE(refPattern, nullptr); + WeakPtr pattern = refPattern; + auto textSelectController = AceType::MakeRefPtr(pattern); + ASSERT_NE(textSelectController, nullptr); + textSelectController->pattern_ = refPattern; + textSelectController->contentController_ = AceType::MakeRefPtr(textSelectController->pattern_); + ASSERT_NE(textSelectController->contentController_, nullptr); + Offset localOffset = { 2, 2 }; + textSelectController->firstHandleInfo_.index = 2; + textSelectController->secondHandleInfo_.index = 1; + textSelectController->contentController_->content_ = u"hhh"; + textSelectController->UpdateSelectByOffset(localOffset); + EXPECT_EQ(textSelectController->firstHandleInfo_.index, 2); +} + +/** + * @tc.name: MoveCaretAnywhere001 + * @tc.desc: Test MoveCaretAnywhere + * @tc.type: FUNC + */ +HWTEST_F(TextSelectControllerTest, MoveCaretAnywhere001, TestSize.Level1) +{ + auto refPattern = AceType::MakeRefPtr(); + ASSERT_NE(refPattern, nullptr); + WeakPtr pattern = refPattern; + auto textSelectController = AceType::MakeRefPtr(pattern); + ASSERT_NE(textSelectController, nullptr); + textSelectController->contentController_ = AceType::MakeRefPtr(textSelectController->pattern_); + ASSERT_NE(textSelectController->contentController_, nullptr); + Offset localOffset; + RectF Offset = { 0, 0, 0, 0 }; + textSelectController->contentController_->content_ = u"hhh"; + textSelectController->CalcCaretOffsetByOffset(localOffset); + EXPECT_EQ(textSelectController->caretInfo_.rect, Offset); +} + +/** + * @tc.name: FireSelectEvent001 + * @tc.desc: Test FireSelectEvent + * @tc.type: FUNC + */ +HWTEST_F(TextSelectControllerTest, FireSelectEvent001, TestSize.Level1) +{ + auto refPattern = AceType::MakeRefPtr(); + ASSERT_NE(refPattern, nullptr); + WeakPtr pattern = refPattern; + auto textSelectController = AceType::MakeRefPtr(pattern); + ASSERT_NE(textSelectController, nullptr); + OnAccessibilityCallback onAccessibilityCallback; + textSelectController->onAccessibilityCallback_ = std::move(onAccessibilityCallback); + textSelectController->FireSelectEvent(); + EXPECT_EQ(textSelectController->paragraph_, nullptr); +} + +/** + * @tc.name: IsClickAtBoundary001 + * @tc.desc: Test IsClickAtBoundary + * @tc.type: FUNC + */ +HWTEST_F(TextSelectControllerTest, IsClickAtBoundary001, TestSize.Level1) +{ + auto refPattern = AceType::MakeRefPtr(); + ASSERT_NE(refPattern, nullptr); + WeakPtr pattern = refPattern; + auto textSelectController = AceType::MakeRefPtr(pattern); + ASSERT_NE(textSelectController, nullptr); + textSelectController->contentController_ = AceType::MakeRefPtr(textSelectController->pattern_); + ASSERT_NE(textSelectController->contentController_, nullptr); + textSelectController->pattern_ = refPattern; + int32_t index = 3; + Offset touchOffset = { 0, 0 }; + textSelectController->contentController_->content_ = u"hhh"; + auto result = textSelectController->IsClickAtBoundary(index, touchOffset); + EXPECT_EQ(result, true); +} + +/** + * @tc.name: IsTouchAtLineEnd001 + * @tc.desc: Test IsTouchAtLineEnd + * @tc.type: FUNC + */ +HWTEST_F(TextSelectControllerTest, IsTouchAtLineEnd001, TestSize.Level1) +{ + auto refPattern = AceType::MakeRefPtr(); + ASSERT_NE(refPattern, nullptr); + WeakPtr pattern = refPattern; + auto textSelectController = AceType::MakeRefPtr(pattern); + ASSERT_NE(textSelectController, nullptr); + textSelectController->contentController_ = AceType::MakeRefPtr(textSelectController->pattern_); + ASSERT_NE(textSelectController->contentController_, nullptr); + + textSelectController->paragraph_ = MockParagraph::GetOrCreateMockParagraph(); + ASSERT_NE(textSelectController->paragraph_, nullptr); + + Offset localOffset = { 3, 3 }; + textSelectController->contentController_->content_ = u"hhh"; + auto result = textSelectController->IsTouchAtLineEnd(localOffset); + EXPECT_EQ(result, true); +} +} // namespace OHOS::Ace::NG \ No newline at end of file