Chromium Code Reviews| 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..fd692dd9769249842afcfff8199957d292bed43e 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"); |
| + base::string16 cases[] = { kHindi, kThai }; |
|
Alexei Svitkine (slow)
2014/05/01 20:48:09
Nit: Can this be a "const base::string16& cases[]
msw
2014/05/01 22:43:22
This yields "error: 'cases' declared as array of r
|
| + |
| + scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { |
|
Alexei Svitkine (slow)
2014/05/01 20:48:09
Nit: I think you can just use arraysize(cases) her
msw
2014/05/01 22:43:22
Done.
|
| + 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()); |
| } |
| } |