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

Side by Side Diff: Source/platform/fonts/GlyphPageTreeNodeTest.cpp

Issue 240003002: Add unit test for GlyphPageTreeNode. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: more tests Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/platform/fonts/GlyphPageTreeNode.cpp ('k') | Source/platform/fonts/SimpleFontData.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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/GlyphPageTreeNode.h"
7
8 #include "platform/fonts/SegmentedFontData.h"
9 #include "platform/fonts/SimpleFontData.h"
10 #include <gtest/gtest.h>
11
12 namespace WebCore {
13
14 class TestSimpleFontData : public SimpleFontData {
15 public:
16 static PassRefPtr<TestSimpleFontData> create(UChar32 from, UChar32 to)
17 {
18 return adoptRef(new TestSimpleFontData(from, to));
19 }
20
21 private:
22 TestSimpleFontData(UChar32 from, UChar32 to)
23 : SimpleFontData(nullptr, 10, false, false)
24 , m_from(from)
25 , m_to(to)
26 {
27 }
28
29 bool fillGlyphPage(GlyphPage* pageToFill, unsigned offset, unsigned length, UChar* buffer, unsigned bufferLength) const OVERRIDE
30 {
31 const Glyph kGlyph = 1;
32 String bufferString(buffer, bufferLength);
33 unsigned bufferIndex = 0;
34 bool hasGlyphs = false;
35 for (unsigned i = 0; i < length; i++) {
36 UChar32 c = bufferString.characterStartingAt(bufferIndex);
37 bufferIndex += U16_LENGTH(c);
38 if (m_from <= c && c <= m_to) {
39 pageToFill->setGlyphDataForIndex(offset + i, kGlyph, this);
40 hasGlyphs = true;
41 }
42 }
43 return hasGlyphs;
44 }
45
46 UChar32 m_from;
47 UChar32 m_to;
48 };
49
50 TEST(GlyphPageTreeNode, rootChild)
51 {
52 const unsigned kPageNumber = 0;
53 size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
54
55 RefPtr<TestSimpleFontData> data = TestSimpleFontData::create('a', 'z');
56 GlyphPageTreeNode* node = GlyphPageTreeNode::getRootChild(data.get(), kPageN umber);
57 EXPECT_EQ(pageCountBeforeTest + 1, GlyphPageTreeNode::treeGlyphPageCount());
58 EXPECT_TRUE(node->page()->glyphAt('a'));
59 EXPECT_FALSE(node->page()->glyphAt('A'));
60 EXPECT_FALSE(node->isSystemFallback());
61 EXPECT_EQ(1u, node->level());
62 EXPECT_EQ(node, node->page()->owner());
63
64 GlyphPageTreeNode::pruneTreeFontData(data.get());
65 EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
66 }
67
68 TEST(GlyphPageTreeNode, level2)
69 {
70 const unsigned kPageNumber = 0;
71 size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
72
73 RefPtr<TestSimpleFontData> dataAtoC = TestSimpleFontData::create('A', 'C');
74 RefPtr<TestSimpleFontData> dataCtoE = TestSimpleFontData::create('C', 'E');
75 GlyphPageTreeNode* node1 = GlyphPageTreeNode::getRootChild(dataAtoC.get(), k PageNumber);
76 GlyphPageTreeNode* node2 = node1->getChild(dataCtoE.get(), kPageNumber);
77 EXPECT_EQ(pageCountBeforeTest + 3, GlyphPageTreeNode::treeGlyphPageCount());
78
79 EXPECT_EQ(2u, node2->level());
80 EXPECT_EQ(dataAtoC, node2->page()->fontDataForCharacter('A'));
81 EXPECT_EQ(dataAtoC, node2->page()->fontDataForCharacter('C'));
82 EXPECT_EQ(dataCtoE, node2->page()->fontDataForCharacter('E'));
83
84 GlyphPageTreeNode::pruneTreeFontData(dataAtoC.get());
85 GlyphPageTreeNode::pruneTreeFontData(dataCtoE.get());
86 EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
87 }
88
89 TEST(GlyphPageTreeNode, segmentedData)
90 {
91 const unsigned kPageNumber = 0;
92 size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
93
94 RefPtr<TestSimpleFontData> dataBtoC = TestSimpleFontData::create('B', 'C');
95 RefPtr<TestSimpleFontData> dataCtoE = TestSimpleFontData::create('C', 'E');
96 RefPtr<SegmentedFontData> segmentedData = SegmentedFontData::create();
97 segmentedData->appendRange(FontDataRange('A', 'C', dataBtoC));
98 segmentedData->appendRange(FontDataRange('C', 'D', dataCtoE));
99 GlyphPageTreeNode* node = GlyphPageTreeNode::getRootChild(segmentedData.get( ), kPageNumber);
100
101 EXPECT_EQ(0, node->page()->fontDataForCharacter('A'));
102 EXPECT_EQ(dataBtoC, node->page()->fontDataForCharacter('B'));
103 EXPECT_EQ(dataBtoC, node->page()->fontDataForCharacter('C'));
104 EXPECT_EQ(dataCtoE, node->page()->fontDataForCharacter('D'));
105 EXPECT_EQ(0, node->page()->fontDataForCharacter('E'));
106
107 GlyphPageTreeNode::pruneTreeCustomFontData(segmentedData.get());
108 EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
109 }
110
111 TEST(GlyphPageTreeNode, outsideBMP)
112 {
113 const unsigned kPageNumber = 0x1f300 / GlyphPage::size;
114 size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
115
116 RefPtr<TestSimpleFontData> data = TestSimpleFontData::create(0x1f310, 0x1f32 0);
117 GlyphPageTreeNode* node = GlyphPageTreeNode::getRootChild(data.get(), kPageN umber);
118 EXPECT_EQ(pageCountBeforeTest + 1, GlyphPageTreeNode::treeGlyphPageCount());
119 EXPECT_FALSE(node->page()->glyphForCharacter(0x1f30f));
120 EXPECT_TRUE(node->page()->glyphForCharacter(0x1f310));
121 EXPECT_TRUE(node->page()->glyphForCharacter(0x1f320));
122 EXPECT_FALSE(node->page()->glyphForCharacter(0x1f321));
123
124 GlyphPageTreeNode::pruneTreeFontData(data.get());
125 EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
126 }
127
128 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/platform/fonts/GlyphPageTreeNode.cpp ('k') | Source/platform/fonts/SimpleFontData.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698