| Index: ui/gfx/render_text_unittest.cc
|
| diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc
|
| index 91aa96d49e30dfcf904d8c9765a26e4fe8753d5d..2b8b4cc3d5f1e516c7c2c303f1b04ee8460b03ee 100644
|
| --- a/ui/gfx/render_text_unittest.cc
|
| +++ b/ui/gfx/render_text_unittest.cc
|
| @@ -739,8 +739,57 @@ TEST_F(RenderTextTest, ElidedObscuredText) {
|
| EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text());
|
| EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText());
|
| }
|
| +
|
| #endif // !defined(OS_MACOSX)
|
|
|
| +TEST_F(RenderTextTest, MultilineElide) {
|
| + std::unique_ptr<RenderText> render_text(new RenderTextHarfBuzz);
|
| + base::string16 input_text;
|
| + // aim for 3 lines
|
| + for (int i = 0; i < 20; ++i)
|
| + input_text.append(ASCIIToUTF16("hello world "));
|
| + render_text->SetText(input_text);
|
| + // Apply a style that tweaks the layout to make sure elision is calculated
|
| + // with these styles. This must be done after |SetText()|.
|
| + render_text->ApplyStyle(gfx::BOLD, true, gfx::Range(1, 20));
|
| + render_text->ApplyStyle(gfx::ITALIC, true, gfx::Range(1, 20));
|
| + render_text->ApplyStyle(gfx::DIAGONAL_STRIKE, true, gfx::Range(1, 20));
|
| + render_text->SetMultiline(true);
|
| + render_text->SetElideBehavior(ELIDE_TAIL);
|
| + render_text->SetMaxLines(3);
|
| + const gfx::Size size = render_text->GetStringSize();
|
| + // Fit in 3 lines. (If we knew the width of a word, we could
|
| + // anticipate word wrap better.)
|
| + render_text->SetDisplayRect(gfx::Rect((size.width() + 96) / 3, 0));
|
| + render_text->GetStringSize();
|
| + EXPECT_EQ(input_text, render_text->GetDisplayText());
|
| +
|
| + const base::char16 kEllipsisUTF16[] = {0x2026, 0};
|
| + base::string16 actual_text;
|
| + // Try widenining the space gradually, one pixel at a time, trying
|
| + // to trigger a failure in layout.
|
| + for (int i = (size.width() - 12) / 3; i < (size.width() + 30) / 3; ++i) {
|
| + render_text->SetDisplayRect(gfx::Rect(i, 0));
|
| + render_text->GetStringSize();
|
| + actual_text = render_text->GetDisplayText();
|
| + EXPECT_TRUE(actual_text.size() < input_text.size());
|
| + EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) +
|
| + base::string16(kEllipsisUTF16));
|
| + EXPECT_EQ(3U, render_text->GetNumLines());
|
| + }
|
| + // Now remove line restriction.
|
| + render_text->SetMaxLines(0);
|
| + render_text->GetStringSize();
|
| + EXPECT_EQ(input_text, render_text->GetDisplayText());
|
| +
|
| + // And put it back.
|
| + render_text->SetMaxLines(3);
|
| + render_text->GetStringSize();
|
| + EXPECT_TRUE(actual_text.size() < input_text.size());
|
| + EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) +
|
| + base::string16(kEllipsisUTF16));
|
| +}
|
| +
|
| TEST_F(RenderTextTest, ElidedEmail) {
|
| std::unique_ptr<RenderText> render_text(RenderText::CreateInstance());
|
| render_text->SetText(ASCIIToUTF16("test@example.com"));
|
|
|