Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(372)

Unified Diff: ui/gfx/render_text_unittest.cc

Issue 252563003: Fix Views inline autocomplete with multi-char graphemes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Extrapolate on the comment. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/render_text_pango.cc ('k') | ui/gfx/render_text_win.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/render_text_unittest.cc
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc
index cbe3dd5a1234d3e44ee4c46253bcca20ba2ce302..5556d8d847d746c2445ac21a99e2e4270545701a 100644
--- a/ui/gfx/render_text_unittest.cc
+++ b/ui/gfx/render_text_unittest.cc
@@ -44,8 +44,7 @@ const wchar_t kRtlLtrRtl[] = L"\x5d0" L"a" L"\x5d1";
#endif
// Checks whether |range| contains |index|. This is not the same as calling
-// |range.Contains(gfx::Range(index))| - as that would return true when
-// |index| == |range.end()|.
+// range.Contains(Range(index)), which returns true if |index| == |range.end()|.
bool IndexInRange(const Range& range, size_t index) {
return index >= range.start() && index < range.end();
}
@@ -295,9 +294,9 @@ TEST_F(RenderTextTest, ObscuredText) {
EXPECT_EQ(1U, render_text->TextIndexToLayoutIndex(2U));
EXPECT_EQ(0U, render_text->LayoutIndexToTextIndex(0U));
EXPECT_EQ(2U, render_text->LayoutIndexToTextIndex(1U));
- EXPECT_TRUE(render_text->IsCursorablePosition(0U));
- EXPECT_FALSE(render_text->IsCursorablePosition(1U));
- EXPECT_TRUE(render_text->IsCursorablePosition(2U));
+ EXPECT_TRUE(render_text->IsValidCursorIndex(0U));
+ EXPECT_FALSE(render_text->IsValidCursorIndex(1U));
+ EXPECT_TRUE(render_text->IsValidCursorIndex(2U));
// FindCursorPosition() should not return positions between a surrogate pair.
render_text->SetDisplayRect(Rect(0, 0, 20, 20));
@@ -443,11 +442,11 @@ TEST_F(RenderTextTest, ElidedText) {
scoped_ptr<RenderText> expected_render_text(RenderText::CreateInstance());
expected_render_text->SetFontList(FontList("serif, Sans serif, 12px"));
- expected_render_text->SetDisplayRect(gfx::Rect(0, 0, 9999, 100));
+ expected_render_text->SetDisplayRect(Rect(0, 0, 9999, 100));
scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
render_text->SetFontList(FontList("serif, Sans serif, 12px"));
- render_text->SetElideBehavior(gfx::ELIDE_AT_END);
+ render_text->SetElideBehavior(ELIDE_AT_END);
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
// Compute expected width
@@ -461,7 +460,7 @@ TEST_F(RenderTextTest, ElidedText) {
input.append(WideToUTF16(L" MMMMMMMMMMM"));
render_text->SetText(input);
- render_text->SetDisplayRect(gfx::Rect(0, 0, expected_width, 100));
+ render_text->SetDisplayRect(Rect(0, 0, expected_width, 100));
EXPECT_EQ(input, render_text->text())
<< "->For case " << i << ": " << cases[i].text << "\n";
EXPECT_EQ(WideToUTF16(cases[i].layout_text), render_text->GetLayoutText())
@@ -473,14 +472,14 @@ TEST_F(RenderTextTest, ElidedText) {
TEST_F(RenderTextTest, ElidedObscuredText) {
scoped_ptr<RenderText> expected_render_text(RenderText::CreateInstance());
expected_render_text->SetFontList(FontList("serif, Sans serif, 12px"));
- expected_render_text->SetDisplayRect(gfx::Rect(0, 0, 9999, 100));
+ expected_render_text->SetDisplayRect(Rect(0, 0, 9999, 100));
expected_render_text->SetText(WideToUTF16(L"**\x2026"));
scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
render_text->SetFontList(FontList("serif, Sans serif, 12px"));
- render_text->SetElideBehavior(gfx::ELIDE_AT_END);
+ render_text->SetElideBehavior(ELIDE_AT_END);
render_text->SetDisplayRect(
- gfx::Rect(0, 0, expected_render_text->GetContentWidth(), 100));
+ Rect(0, 0, expected_render_text->GetContentWidth(), 100));
render_text->SetObscured(true);
render_text->SetText(WideToUTF16(L"abcdef"));
EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text());
@@ -901,17 +900,44 @@ TEST_F(RenderTextTest, GraphemePositions) {
scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) {
+ SCOPED_TRACE(base::StringPrintf("Testing cases[%" PRIuS "]", i));
render_text->SetText(cases[i].text);
size_t next = render_text->IndexOfAdjacentGrapheme(cases[i].index,
CURSOR_FORWARD);
EXPECT_EQ(cases[i].expected_next, next);
- EXPECT_TRUE(render_text->IsCursorablePosition(next));
+ EXPECT_TRUE(render_text->IsValidCursorIndex(next));
size_t previous = render_text->IndexOfAdjacentGrapheme(cases[i].index,
CURSOR_BACKWARD);
EXPECT_EQ(cases[i].expected_previous, previous);
- EXPECT_TRUE(render_text->IsCursorablePosition(previous));
+ EXPECT_TRUE(render_text->IsValidCursorIndex(previous));
+ }
+}
+
+TEST_F(RenderTextTest, MidGraphemeSelectionBounds) {
+ // Test that selection bounds may be set amid multi-character graphemes.
+ const base::string16 kHindi = WideToUTF16(L"\x0915\x093f");
+ const base::string16 kThai = WideToUTF16(L"\x0e08\x0e33");
+ const base::string16 cases[] = { kHindi, kThai };
+
+ scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
+ for (size_t i = 0; i < arraysize(cases); i++) {
+ SCOPED_TRACE(base::StringPrintf("Testing cases[%" PRIuS "]", i));
+ render_text->SetText(cases[i]);
+ EXPECT_TRUE(render_text->IsValidLogicalIndex(1));
+#if !defined(OS_MACOSX)
+ EXPECT_FALSE(render_text->IsValidCursorIndex(1));
+#endif
+ EXPECT_TRUE(render_text->SelectRange(Range(2, 1)));
+ EXPECT_EQ(Range(2, 1), render_text->selection());
+ EXPECT_EQ(1U, render_text->cursor_position());
+ // Although selection bounds may be set within a multi-character grapheme,
+ // cursor movement (e.g. via arrow key) should avoid those indices.
+ render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false);
+ EXPECT_EQ(0U, render_text->cursor_position());
+ render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false);
+ EXPECT_EQ(2U, render_text->cursor_position());
}
}
« no previous file with comments | « ui/gfx/render_text_pango.cc ('k') | ui/gfx/render_text_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698