| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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 "sky/engine/config.h" | |
| 6 #include "sky/engine/platform/fonts/GlyphBuffer.h" | |
| 7 | |
| 8 #include <gtest/gtest.h> | |
| 9 #include "sky/engine/platform/fonts/SimpleFontData.h" | |
| 10 #include "sky/engine/wtf/PassRefPtr.h" | |
| 11 #include "sky/engine/wtf/RefPtr.h" | |
| 12 | |
| 13 using 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 { | |
| 23 return adoptRef(new TestSimpleFontData); | |
| 24 } | |
| 25 | |
| 26 private: | |
| 27 TestSimpleFontData() : SimpleFontData(nullptr, 10, false, false) { } | |
| 28 | |
| 29 bool fillGlyphPage(GlyphPage* pageToFill, unsigned offset, unsigned length,
UChar* buffer, unsigned bufferLength) const override | |
| 30 { | |
| 31 return false; | |
| 32 } | |
| 33 }; | |
| 34 | |
| 35 TEST(GlyphBufferTest, StartsEmpty) | |
| 36 { | |
| 37 GlyphBuffer glyphBuffer; | |
| 38 EXPECT_TRUE(glyphBuffer.isEmpty()); | |
| 39 EXPECT_EQ(0u, glyphBuffer.size()); | |
| 40 } | |
| 41 | |
| 42 TEST(GlyphBufferTest, StoresGlyphs) | |
| 43 { | |
| 44 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); | |
| 45 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); | |
| 46 | |
| 47 GlyphBuffer glyphBuffer; | |
| 48 glyphBuffer.add(42, font1.get(), 10); | |
| 49 glyphBuffer.add(43, font1.get(), 15); | |
| 50 glyphBuffer.add(44, font2.get(), FloatSize(12, 2)); | |
| 51 | |
| 52 EXPECT_FALSE(glyphBuffer.isEmpty()); | |
| 53 EXPECT_EQ(3u, glyphBuffer.size()); | |
| 54 | |
| 55 EXPECT_EQ(42, glyphBuffer.glyphAt(0)); | |
| 56 EXPECT_EQ(43, glyphBuffer.glyphAt(1)); | |
| 57 EXPECT_EQ(44, glyphBuffer.glyphAt(2)); | |
| 58 | |
| 59 const Glyph* glyphs = glyphBuffer.glyphs(0); | |
| 60 EXPECT_EQ(42, glyphs[0]); | |
| 61 EXPECT_EQ(43, glyphs[1]); | |
| 62 EXPECT_EQ(44, glyphs[2]); | |
| 63 } | |
| 64 | |
| 65 TEST(GlyphBufferTest, StoresAdvances) | |
| 66 { | |
| 67 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); | |
| 68 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); | |
| 69 | |
| 70 GlyphBuffer glyphBuffer; | |
| 71 glyphBuffer.add(42, font1.get(), 10); | |
| 72 glyphBuffer.add(43, font1.get(), 15); | |
| 73 glyphBuffer.add(44, font2.get(), FloatSize(12, 2)); | |
| 74 | |
| 75 EXPECT_FALSE(glyphBuffer.isEmpty()); | |
| 76 EXPECT_EQ(3u, glyphBuffer.size()); | |
| 77 | |
| 78 EXPECT_EQ(FloatSize(10, 0), glyphBuffer.advanceAt(0)); | |
| 79 EXPECT_EQ(FloatSize(15, 0), glyphBuffer.advanceAt(1)); | |
| 80 EXPECT_EQ(FloatSize(12, 2), glyphBuffer.advanceAt(2)); | |
| 81 | |
| 82 const FloatSize* advances = glyphBuffer.advances(0); | |
| 83 EXPECT_EQ(FloatSize(10, 0), advances[0]); | |
| 84 EXPECT_EQ(FloatSize(15, 0), advances[1]); | |
| 85 EXPECT_EQ(FloatSize(12, 2), advances[2]); | |
| 86 } | |
| 87 | |
| 88 TEST(GlyphBufferTest, StoresSimpleFontData) | |
| 89 { | |
| 90 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); | |
| 91 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); | |
| 92 | |
| 93 GlyphBuffer glyphBuffer; | |
| 94 glyphBuffer.add(42, font1.get(), 10); | |
| 95 glyphBuffer.add(43, font1.get(), 15); | |
| 96 glyphBuffer.add(44, font2.get(), FloatSize(12, 2)); | |
| 97 | |
| 98 EXPECT_FALSE(glyphBuffer.isEmpty()); | |
| 99 EXPECT_EQ(3u, glyphBuffer.size()); | |
| 100 | |
| 101 EXPECT_EQ(font1.get(), glyphBuffer.fontDataAt(0)); | |
| 102 EXPECT_EQ(font1.get(), glyphBuffer.fontDataAt(1)); | |
| 103 EXPECT_EQ(font2.get(), glyphBuffer.fontDataAt(2)); | |
| 104 } | |
| 105 | |
| 106 TEST(GlyphBufferTest, GlyphArrayWithOffset) | |
| 107 { | |
| 108 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); | |
| 109 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); | |
| 110 | |
| 111 GlyphBuffer glyphBuffer; | |
| 112 glyphBuffer.add(42, font1.get(), 10); | |
| 113 glyphBuffer.add(43, font1.get(), 15); | |
| 114 glyphBuffer.add(44, font2.get(), FloatSize(12, 2)); | |
| 115 | |
| 116 EXPECT_FALSE(glyphBuffer.isEmpty()); | |
| 117 EXPECT_EQ(3u, glyphBuffer.size()); | |
| 118 | |
| 119 const Glyph* glyphs = glyphBuffer.glyphs(1); | |
| 120 EXPECT_EQ(43, glyphs[0]); | |
| 121 EXPECT_EQ(44, glyphs[1]); | |
| 122 } | |
| 123 | |
| 124 TEST(GlyphBufferTest, AdvanceArrayWithOffset) | |
| 125 { | |
| 126 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); | |
| 127 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); | |
| 128 | |
| 129 GlyphBuffer glyphBuffer; | |
| 130 glyphBuffer.add(42, font1.get(), 10); | |
| 131 glyphBuffer.add(43, font1.get(), 15); | |
| 132 glyphBuffer.add(44, font2.get(), FloatSize(12, 2)); | |
| 133 | |
| 134 EXPECT_FALSE(glyphBuffer.isEmpty()); | |
| 135 EXPECT_EQ(3u, glyphBuffer.size()); | |
| 136 | |
| 137 const FloatSize* advances = glyphBuffer.advances(1); | |
| 138 EXPECT_EQ(FloatSize(15, 0), advances[0]); | |
| 139 EXPECT_EQ(FloatSize(12, 2), advances[1]); | |
| 140 } | |
| 141 | |
| 142 TEST(GlyphBufferTest, Clear) | |
| 143 { | |
| 144 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); | |
| 145 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); | |
| 146 | |
| 147 GlyphBuffer glyphBuffer; | |
| 148 glyphBuffer.add(42, font1.get(), 10); | |
| 149 glyphBuffer.add(43, font1.get(), 15); | |
| 150 glyphBuffer.add(44, font2.get(), FloatSize(12, 2)); | |
| 151 | |
| 152 EXPECT_FALSE(glyphBuffer.isEmpty()); | |
| 153 EXPECT_EQ(3u, glyphBuffer.size()); | |
| 154 | |
| 155 glyphBuffer.clear(); | |
| 156 | |
| 157 EXPECT_TRUE(glyphBuffer.isEmpty()); | |
| 158 EXPECT_EQ(0u, glyphBuffer.size()); | |
| 159 } | |
| 160 | |
| 161 TEST(GlyphBufferTest, TracksVerticalAdvances) | |
| 162 { | |
| 163 RefPtr<SimpleFontData> font = TestSimpleFontData::create(); | |
| 164 GlyphBuffer glyphBuffer; | |
| 165 EXPECT_FALSE(glyphBuffer.hasVerticalAdvances()); | |
| 166 glyphBuffer.add(42, font.get(), 10); | |
| 167 EXPECT_FALSE(glyphBuffer.hasVerticalAdvances()); | |
| 168 glyphBuffer.add(43, font.get(), FloatSize(15, 0)); | |
| 169 EXPECT_FALSE(glyphBuffer.hasVerticalAdvances()); | |
| 170 glyphBuffer.add(44, font.get(), FloatSize(10, 5)); | |
| 171 EXPECT_TRUE(glyphBuffer.hasVerticalAdvances()); | |
| 172 glyphBuffer.clear(); | |
| 173 EXPECT_FALSE(glyphBuffer.hasVerticalAdvances()); | |
| 174 } | |
| 175 | |
| 176 TEST(GlyphBufferTest, Reverse) | |
| 177 { | |
| 178 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); | |
| 179 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); | |
| 180 | |
| 181 GlyphBuffer glyphBuffer; | |
| 182 glyphBuffer.add(42, font1.get(), 10); | |
| 183 glyphBuffer.add(43, font1.get(), 15); | |
| 184 glyphBuffer.add(44, font2.get(), FloatSize(12, 2)); | |
| 185 | |
| 186 EXPECT_FALSE(glyphBuffer.isEmpty()); | |
| 187 EXPECT_EQ(3u, glyphBuffer.size()); | |
| 188 EXPECT_TRUE(glyphBuffer.hasVerticalAdvances()); | |
| 189 | |
| 190 glyphBuffer.reverse(); | |
| 191 | |
| 192 EXPECT_FALSE(glyphBuffer.isEmpty()); | |
| 193 EXPECT_EQ(3u, glyphBuffer.size()); | |
| 194 EXPECT_TRUE(glyphBuffer.hasVerticalAdvances()); | |
| 195 EXPECT_EQ(44, glyphBuffer.glyphAt(0)); | |
| 196 EXPECT_EQ(43, glyphBuffer.glyphAt(1)); | |
| 197 EXPECT_EQ(42, glyphBuffer.glyphAt(2)); | |
| 198 EXPECT_EQ(FloatSize(12, 2), glyphBuffer.advanceAt(0)); | |
| 199 EXPECT_EQ(FloatSize(15, 0), glyphBuffer.advanceAt(1)); | |
| 200 EXPECT_EQ(FloatSize(10, 0), glyphBuffer.advanceAt(2)); | |
| 201 EXPECT_EQ(font2.get(), glyphBuffer.fontDataAt(0)); | |
| 202 EXPECT_EQ(font1.get(), glyphBuffer.fontDataAt(1)); | |
| 203 EXPECT_EQ(font1.get(), glyphBuffer.fontDataAt(2)); | |
| 204 } | |
| 205 | |
| 206 TEST(GlyphBufferTest, SetAdvanceWidth) | |
| 207 { | |
| 208 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); | |
| 209 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); | |
| 210 | |
| 211 GlyphBuffer glyphBuffer; | |
| 212 glyphBuffer.add(42, font1.get(), 10); | |
| 213 glyphBuffer.add(43, font1.get(), 15); | |
| 214 glyphBuffer.add(44, font2.get(), FloatSize(12, 2)); | |
| 215 | |
| 216 glyphBuffer.setAdvanceWidth(1, 20); | |
| 217 EXPECT_EQ(FloatSize(20, 0), glyphBuffer.advanceAt(1)); | |
| 218 | |
| 219 glyphBuffer.setAdvanceWidth(2, 10); | |
| 220 EXPECT_EQ(FloatSize(10, 2), glyphBuffer.advanceAt(2)); | |
| 221 } | |
| 222 | |
| 223 TEST(GlyphBufferTest, ExpandLastAdvance) | |
| 224 { | |
| 225 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); | |
| 226 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); | |
| 227 | |
| 228 GlyphBuffer glyphBuffer; | |
| 229 glyphBuffer.add(42, font1.get(), 10); | |
| 230 glyphBuffer.add(43, font1.get(), 15); | |
| 231 glyphBuffer.add(44, font2.get(), FloatSize(12, 2)); | |
| 232 | |
| 233 glyphBuffer.expandLastAdvance(20); | |
| 234 EXPECT_EQ(FloatSize(32, 2), glyphBuffer.advanceAt(2)); | |
| 235 } | |
| 236 | |
| 237 } // namespace | |
| OLD | NEW |