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

Side by Side Diff: ui/gfx/render_text_unittest.cc

Issue 1953133002: [WIP: not for review] Reduce re-layout Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/render_text.h" 5 #include "ui/gfx/render_text.h"
6 6
7 #include <limits.h> 7 #include <limits.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); 732 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance());
733 render_text->SetFontList(FontList("serif, Sans serif, 12px")); 733 render_text->SetFontList(FontList("serif, Sans serif, 12px"));
734 render_text->SetElideBehavior(ELIDE_TAIL); 734 render_text->SetElideBehavior(ELIDE_TAIL);
735 render_text->SetDisplayRect( 735 render_text->SetDisplayRect(
736 Rect(0, 0, expected_render_text->GetContentWidth(), 100)); 736 Rect(0, 0, expected_render_text->GetContentWidth(), 100));
737 render_text->SetObscured(true); 737 render_text->SetObscured(true);
738 render_text->SetText(WideToUTF16(L"abcdef")); 738 render_text->SetText(WideToUTF16(L"abcdef"));
739 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text()); 739 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text());
740 EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText()); 740 EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText());
741 } 741 }
742
742 #endif // !defined(OS_MACOSX) 743 #endif // !defined(OS_MACOSX)
743 744
745 TEST_F(RenderTextTest, MultilineElide) {
746 std::unique_ptr<RenderText> render_text(new RenderTextHarfBuzz);
747 base::string16 input_text;
748 // aim for 3 lines
749 for (int i = 0; i < 20; ++i)
750 input_text.append(ASCIIToUTF16("hello world "));
751 render_text->SetText(input_text);
752 // Apply a style that tweaks the layout to make sure elision is calculated
753 // with these styles. This must be done after |SetText()|.
754 render_text->ApplyStyle(gfx::BOLD, true, gfx::Range(1, 20));
755 render_text->ApplyStyle(gfx::ITALIC, true, gfx::Range(1, 20));
756 render_text->ApplyStyle(gfx::DIAGONAL_STRIKE, true, gfx::Range(1, 20));
757 render_text->SetMultiline(true);
758 render_text->SetElideBehavior(ELIDE_TAIL);
759 render_text->SetMaxLines(3);
760 const gfx::Size size = render_text->GetStringSize();
761 // Fit in 3 lines. (If we knew the width of a word, we could
762 // anticipate word wrap better.)
763 render_text->SetDisplayRect(gfx::Rect((size.width() + 96) / 3, 0));
764 render_text->GetStringSize();
765 EXPECT_EQ(input_text, render_text->GetDisplayText());
766
767 const base::char16 kEllipsisUTF16[] = {0x2026, 0};
768 base::string16 actual_text;
769 // Try widenining the space gradually, one pixel at a time, trying
770 // to trigger a failure in layout.
771 for (int i = (size.width() - 12) / 3; i < (size.width() + 30) / 3; ++i) {
772 render_text->SetDisplayRect(gfx::Rect(i, 0));
773 render_text->GetStringSize();
774 actual_text = render_text->GetDisplayText();
775 EXPECT_TRUE(actual_text.size() < input_text.size());
776 EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) +
777 base::string16(kEllipsisUTF16));
778 EXPECT_EQ(3U, render_text->GetNumLines());
779 }
780 // Now remove line restriction.
781 render_text->SetMaxLines(0);
782 render_text->GetStringSize();
783 EXPECT_EQ(input_text, render_text->GetDisplayText());
784
785 // And put it back.
786 render_text->SetMaxLines(3);
787 render_text->GetStringSize();
788 EXPECT_TRUE(actual_text.size() < input_text.size());
789 EXPECT_EQ(actual_text, input_text.substr(0, actual_text.size() - 1) +
790 base::string16(kEllipsisUTF16));
791 }
792
744 TEST_F(RenderTextTest, ElidedEmail) { 793 TEST_F(RenderTextTest, ElidedEmail) {
745 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance()); 794 std::unique_ptr<RenderText> render_text(RenderText::CreateInstance());
746 render_text->SetText(ASCIIToUTF16("test@example.com")); 795 render_text->SetText(ASCIIToUTF16("test@example.com"));
747 const gfx::Size size = render_text->GetStringSize(); 796 const gfx::Size size = render_text->GetStringSize();
748 797
749 const base::string16 long_email = 798 const base::string16 long_email =
750 ASCIIToUTF16("longemailaddresstest@example.com"); 799 ASCIIToUTF16("longemailaddresstest@example.com");
751 render_text->SetText(long_email); 800 render_text->SetText(long_email);
752 render_text->SetElideBehavior(ELIDE_EMAIL); 801 render_text->SetElideBehavior(ELIDE_EMAIL);
753 render_text->SetDisplayRect(gfx::Rect(size)); 802 render_text->SetDisplayRect(gfx::Rect(size));
(...skipping 2573 matching lines...) Expand 10 before | Expand all | Expand 10 after
3327 EXPECT_FALSE(backend.paint().isLCDRenderText()); 3376 EXPECT_FALSE(backend.paint().isLCDRenderText());
3328 backend.GetHarfbuzzRunList()->runs()[0]->render_params.subpixel_rendering = 3377 backend.GetHarfbuzzRunList()->runs()[0]->render_params.subpixel_rendering =
3329 FontRenderParams::SUBPIXEL_RENDERING_RGB; 3378 FontRenderParams::SUBPIXEL_RENDERING_RGB;
3330 backend.DrawVisualText(); 3379 backend.DrawVisualText();
3331 #endif 3380 #endif
3332 EXPECT_FALSE(backend.paint().isLCDRenderText()); 3381 EXPECT_FALSE(backend.paint().isLCDRenderText());
3333 } 3382 }
3334 } 3383 }
3335 3384
3336 } // namespace gfx 3385 } // namespace gfx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698