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

Unified Diff: ui/gfx/render_text_unittest.cc

Issue 1919123002: RenderTextMac: Cache the SkTypeface on the TextRun [reland] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes, and a test, but somewhat orthogonal Created 4 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_mac.mm ('k') | no next file » | 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 4b15f1b19794ab98349ec7a80ba879ac08332027..90d1604a4b86a78f79941cca4700bcd34a0276e8 100644
--- a/ui/gfx/render_text_unittest.cc
+++ b/ui/gfx/render_text_unittest.cc
@@ -236,6 +236,61 @@ class TestRectangleBuffer {
DISALLOW_COPY_AND_ASSIGN(TestRectangleBuffer);
};
+// Helper to run the same test expectations on all RenderText backends.
+class RenderTextAllBackends {
+ public:
+ RenderTextAllBackends() : renderer_(&canvas_), current_(nullptr) {}
+
+ bool Advance() {
+ if (!current_) {
+ current_ = &render_text_harfbuzz_;
+ return true;
+ }
+#if defined(OS_MACOSX)
+ if (current_ == &render_text_harfbuzz_) {
+ current_ = &render_text_mac_;
+ return true;
+ }
+#endif
+
+ return false;
+ }
+
+ const char* GetName() const {
+ return current_ == &render_text_harfbuzz_ ? "Harfbuzz" : "Mac";
+ }
+
+ RenderText* operator->() {
+ return current_;
+ }
+
+ void DrawVisualText() {
+ test::RenderTextTestApi test_api(current_);
+ test_api.DrawVisualText(&renderer_);
+ }
+
+ void GetTextLogAndReset(std::vector<TestSkiaTextRenderer::TextLog>* log) {
+ renderer_.GetTextLogAndReset(log);
+ }
+
+ SkTypeface* GetTypeface() {
+ SkPaint& paint = test::RenderTextTestApi::GetRendererPaint(&renderer_);
+ return paint.getTypeface();
+ }
+
+ private:
+ Canvas canvas_;
+ TestSkiaTextRenderer renderer_;
+ RenderText* current_;
+
+ RenderTextHarfBuzz render_text_harfbuzz_;
+#if defined(OS_MACOSX)
+ RenderTextMac render_text_mac_;
+#endif
+
+ DISALLOW_COPY_AND_ASSIGN(RenderTextAllBackends);
+};
+
} // namespace
using RenderTextTest = testing::Test;
@@ -3183,40 +3238,57 @@ TEST_F(RenderTextTest, Mac_ElidedText) {
// Ensure color changes are picked up by the RenderText implementation.
TEST_F(RenderTextTest, ColorChange) {
- RenderTextHarfBuzz render_text_harfbuzz;
-#if defined(OS_MACOSX)
- RenderTextMac render_text_mac;
-#endif
-
- RenderText* backend[] = {
- &render_text_harfbuzz,
-#if defined(OS_MACOSX)
- &render_text_mac,
-#endif
- };
-
- Canvas canvas;
- TestSkiaTextRenderer renderer(&canvas);
+ RenderTextAllBackends backend;
- for (size_t i = 0; i < arraysize(backend); ++i) {
- SCOPED_TRACE(testing::Message() << "backend: " << i);
- test::RenderTextTestApi test_api(backend[i]);
- backend[i]->SetText(ASCIIToUTF16("x"));
- test_api.DrawVisualText(&renderer);
+ while (backend.Advance()) {
+ SCOPED_TRACE(testing::Message() << "backend: " << backend.GetName());
+ backend->SetText(ASCIIToUTF16("x"));
+ backend.DrawVisualText();
std::vector<TestSkiaTextRenderer::TextLog> text_log;
-
- renderer.GetTextLogAndReset(&text_log);
+ backend.GetTextLogAndReset(&text_log);
EXPECT_EQ(1u, text_log.size());
EXPECT_EQ(SK_ColorBLACK, text_log[0].color);
- backend[i]->SetColor(SK_ColorRED);
- test_api.DrawVisualText(&renderer);
+ backend->SetColor(SK_ColorRED);
+ backend.DrawVisualText();
+ backend.GetTextLogAndReset(&text_log);
- renderer.GetTextLogAndReset(&text_log);
EXPECT_EQ(1u, text_log.size());
EXPECT_EQ(SK_ColorRED, text_log[0].color);
}
}
+// Ensure style information propagates to the typeface on the text renderer.
+TEST_F(RenderTextTest, StylePropagated) {
+ RenderTextAllBackends backend;
+
+ // Default-constructed fonts on Mac are system fonts. These can have all kinds
+ // of weird weights and style, which are preserved by PlatformFontMac, but do
+ // not map simply to a SkTypeface::Style (the full details in SkFontStyle is
+ // needed). They also vary depending on the OS version, so set a known font.
+ gfx::FontList font_list(gfx::Font("Arial", 10));
+
+ while (backend.Advance()) {
+ SCOPED_TRACE(testing::Message() << "backend: " << backend.GetName());
+ backend->SetText(ASCIIToUTF16("x"));
+ backend->SetFontList(font_list);
+
+ backend.DrawVisualText();
+ EXPECT_EQ(SkTypeface::kNormal, backend.GetTypeface()->style());
+
+ backend->SetStyle(TextStyle::BOLD, true);
+ backend.DrawVisualText();
+ EXPECT_EQ(SkTypeface::kBold, backend.GetTypeface()->style());
+
+ backend->SetStyle(TextStyle::ITALIC, true);
+ backend.DrawVisualText();
+ EXPECT_EQ(SkTypeface::kBoldItalic, backend.GetTypeface()->style());
+
+ backend->SetStyle(TextStyle::BOLD, false);
+ backend.DrawVisualText();
+ EXPECT_EQ(SkTypeface::kItalic, backend.GetTypeface()->style());
+ }
+}
+
} // namespace gfx
« no previous file with comments | « ui/gfx/render_text_mac.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698