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

Side by Side Diff: third_party/WebKit/Source/platform/fonts/shaping/ShapeResultBloberizerTest.cpp

Issue 2714413003: Remove GlyphBuffer (Closed)
Patch Set: format Created 3 years, 9 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "platform/fonts/shaping/ShapeResultBloberizer.h"
6
7 #include "platform/fonts/Font.h"
8 #include "platform/fonts/SimpleFontData.h"
9 #include "platform/fonts/shaping/ShapeResultTestInfo.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "wtf/Optional.h"
12
13 namespace blink {
14
15 namespace {
16
17 // Minimal TestSimpleFontData implementation.
18 // Font has no glyphs, but that's okay.
19 class TestSimpleFontData : public SimpleFontData {
20 public:
21 static PassRefPtr<TestSimpleFontData> create() {
22 return adoptRef(new TestSimpleFontData);
23 }
24
25 private:
26 TestSimpleFontData() : SimpleFontData(nullptr, 10, false, false) {}
27 };
28
29 } // anonymous namespace
30
31 TEST(ShapeResultBloberizerTest, StartsEmpty) {
32 Font font;
33 ShapeResultBloberizer bloberizer(font, 1);
34
35 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingRunFontData(bloberizer),
36 nullptr);
37 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingRunGlyphs(bloberizer).size(),
38 0ul);
39 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingRunOffsets(bloberizer).size(),
40 0ul);
41 EXPECT_FALSE(
42 ShapeResultBloberizerTestInfo::hasPendingRunVerticalOffsets(bloberizer));
43 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingBlobRunCount(bloberizer),
44 0ul);
45 EXPECT_EQ(ShapeResultBloberizerTestInfo::committedBlobCount(bloberizer), 0ul);
46
47 EXPECT_TRUE(bloberizer.blobs().isEmpty());
48 }
49
50 TEST(ShapeResultBloberizerTest, StoresGlyphsOffsets) {
51 Font font;
52 ShapeResultBloberizer bloberizer(font, 1);
53
54 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
55 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
56
57 // 2 pending glyphs
58 bloberizer.add(42, font1.get(), 10);
59 bloberizer.add(43, font1.get(), 15);
60
61 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingRunFontData(bloberizer),
62 font1.get());
63 EXPECT_FALSE(
64 ShapeResultBloberizerTestInfo::hasPendingRunVerticalOffsets(bloberizer));
65 {
66 const auto& glyphs =
67 ShapeResultBloberizerTestInfo::pendingRunGlyphs(bloberizer);
68 EXPECT_EQ(glyphs.size(), 2ul);
69 EXPECT_EQ(42, glyphs[0]);
70 EXPECT_EQ(43, glyphs[1]);
71
72 const auto& offsets =
73 ShapeResultBloberizerTestInfo::pendingRunOffsets(bloberizer);
74 EXPECT_EQ(offsets.size(), 2ul);
75 EXPECT_EQ(10, offsets[0]);
76 EXPECT_EQ(15, offsets[1]);
77 }
78
79 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingBlobRunCount(bloberizer),
80 0ul);
81 EXPECT_EQ(ShapeResultBloberizerTestInfo::committedBlobCount(bloberizer), 0ul);
82
83 // one more glyph, different font => pending run flush
84 bloberizer.add(44, font2.get(), 12);
85
86 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingRunFontData(bloberizer),
87 font2.get());
88 EXPECT_FALSE(
89 ShapeResultBloberizerTestInfo::hasPendingRunVerticalOffsets(bloberizer));
90 {
91 const auto& glyphs =
92 ShapeResultBloberizerTestInfo::pendingRunGlyphs(bloberizer);
93 EXPECT_EQ(glyphs.size(), 1ul);
94 EXPECT_EQ(44, glyphs[0]);
95
96 const auto& offsets =
97 ShapeResultBloberizerTestInfo::pendingRunOffsets(bloberizer);
98 EXPECT_EQ(offsets.size(), 1ul);
99 EXPECT_EQ(12, offsets[0]);
100 }
101
102 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingBlobRunCount(bloberizer),
103 1ul);
104 EXPECT_EQ(ShapeResultBloberizerTestInfo::committedBlobCount(bloberizer), 0ul);
105
106 // flush everything (1 blob w/ 2 runs)
107 EXPECT_EQ(bloberizer.blobs().size(), 1ul);
108 }
109
110 TEST(ShapeResultBloberizerTest, StoresGlyphsVerticalOffsets) {
111 Font font;
112 ShapeResultBloberizer bloberizer(font, 1);
113
114 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
115 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
116
117 // 2 pending glyphs
118 bloberizer.add(42, font1.get(), FloatPoint(10, 0));
119 bloberizer.add(43, font1.get(), FloatPoint(15, 0));
120
121 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingRunFontData(bloberizer),
122 font1.get());
123 EXPECT_TRUE(
124 ShapeResultBloberizerTestInfo::hasPendingRunVerticalOffsets(bloberizer));
125 {
126 const auto& glyphs =
127 ShapeResultBloberizerTestInfo::pendingRunGlyphs(bloberizer);
128 EXPECT_EQ(glyphs.size(), 2ul);
129 EXPECT_EQ(42, glyphs[0]);
130 EXPECT_EQ(43, glyphs[1]);
131
132 const auto& offsets =
133 ShapeResultBloberizerTestInfo::pendingRunOffsets(bloberizer);
134 EXPECT_EQ(offsets.size(), 4ul);
135 EXPECT_EQ(10, offsets[0]);
136 EXPECT_EQ(0, offsets[1]);
137 EXPECT_EQ(15, offsets[2]);
138 EXPECT_EQ(0, offsets[3]);
139 }
140
141 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingBlobRunCount(bloberizer),
142 0ul);
143 EXPECT_EQ(ShapeResultBloberizerTestInfo::committedBlobCount(bloberizer), 0ul);
144
145 // one more glyph, different font => pending run flush
146 bloberizer.add(44, font2.get(), FloatPoint(12, 2));
147
148 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingRunFontData(bloberizer),
149 font2.get());
150 EXPECT_TRUE(
151 ShapeResultBloberizerTestInfo::hasPendingRunVerticalOffsets(bloberizer));
152 {
153 const auto& glyphs =
154 ShapeResultBloberizerTestInfo::pendingRunGlyphs(bloberizer);
155 EXPECT_EQ(glyphs.size(), 1ul);
156 EXPECT_EQ(44, glyphs[0]);
157
158 const auto& offsets =
159 ShapeResultBloberizerTestInfo::pendingRunOffsets(bloberizer);
160 EXPECT_EQ(offsets.size(), 2ul);
161 EXPECT_EQ(12, offsets[0]);
162 EXPECT_EQ(2, offsets[1]);
163 }
164
165 EXPECT_EQ(ShapeResultBloberizerTestInfo::pendingBlobRunCount(bloberizer),
166 1ul);
167 EXPECT_EQ(ShapeResultBloberizerTestInfo::committedBlobCount(bloberizer), 0ul);
168
169 // flush everything (1 blob w/ 2 runs)
170 EXPECT_EQ(bloberizer.blobs().size(), 1ul);
171 }
172
173 } // namespace blink
drott 2017/03/23 15:36:52 Could you perhaps add a test case which modifies t
f(malita) 2017/03/23 19:30:17 I tried and initially got stuck because OpenTypeVe
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698