Add a basic test for CFDE_TextEditEngineTest::GetCharacterInfo().
Make sure GetCharacterInfo() works for a basic case. Also document its
quirks.
Change-Id: Icd83408475dbfd25fd763fb817ea4c417bd282fd
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/83171
Reviewed-by: Hui Yingst <nigi@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fde/cfde_texteditengine_unittest.cpp b/xfa/fde/cfde_texteditengine_unittest.cpp
index 1383113..a0a1683 100644
--- a/xfa/fde/cfde_texteditengine_unittest.cpp
+++ b/xfa/fde/cfde_texteditengine_unittest.cpp
@@ -500,6 +500,44 @@
EXPECT_EQ(11U, engine()->GetIndexForPoint({999999.0f, 9999999.0f}));
}
+TEST_F(CFDE_TextEditEngineTest, GetCharacterInfo) {
+ std::pair<int32_t, CFX_RectF> char_info;
+
+ engine()->Insert(0, L"Hi!");
+ ASSERT_EQ(3U, engine()->GetLength());
+
+ char_info = engine()->GetCharacterInfo(0);
+ EXPECT_EQ(0, char_info.first);
+ EXPECT_FLOAT_EQ(0.0f, char_info.second.Left());
+ EXPECT_FLOAT_EQ(0.0f, char_info.second.Top());
+ EXPECT_FLOAT_EQ(9.996f, char_info.second.Width());
+ EXPECT_FLOAT_EQ(12.0f, char_info.second.Height());
+
+ char_info = engine()->GetCharacterInfo(1);
+ EXPECT_EQ(0, char_info.first);
+ EXPECT_FLOAT_EQ(9.996f, char_info.second.Left());
+ EXPECT_FLOAT_EQ(0.0f, char_info.second.Top());
+ EXPECT_FLOAT_EQ(3.996f, char_info.second.Width());
+ EXPECT_FLOAT_EQ(12.0f, char_info.second.Height());
+
+ char_info = engine()->GetCharacterInfo(2);
+ EXPECT_EQ(0, char_info.first);
+ EXPECT_FLOAT_EQ(13.992f, char_info.second.Left());
+ EXPECT_FLOAT_EQ(0.0f, char_info.second.Top());
+ EXPECT_FLOAT_EQ(3.996f, char_info.second.Width());
+ EXPECT_FLOAT_EQ(12.0f, char_info.second.Height());
+
+ // Allow retrieving the character info for the end of the text, as that
+ // information can be used to determine where to draw a cursor positioned at
+ // the end.
+ char_info = engine()->GetCharacterInfo(3);
+ EXPECT_EQ(0, char_info.first);
+ EXPECT_FLOAT_EQ(17.988f, char_info.second.Left());
+ EXPECT_FLOAT_EQ(0.0f, char_info.second.Top());
+ EXPECT_FLOAT_EQ(0.0f, char_info.second.Width());
+ EXPECT_FLOAT_EQ(12.0f, char_info.second.Height());
+}
+
TEST_F(CFDE_TextEditEngineTest, BoundsForWordAt) {
size_t start_idx;
size_t count;