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 "config.h" |
| 6 #include "platform/fonts/GlyphBuffer.h" |
| 7 |
| 8 #include "platform/fonts/SimpleFontData.h" |
| 9 #include "wtf/PassRefPtr.h" |
| 10 #include "wtf/RefPtr.h" |
| 11 #include <gtest/gtest.h> |
| 12 |
| 13 using namespace WebCore; |
| 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 |