OLD | NEW |
---|---|
(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
| |
OLD | NEW |