| 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());
|
| }
|
| }
|
|
|
|
|