| Index: Source/platform/fonts/GlyphPageTreeNodeTest.cpp
|
| diff --git a/Source/platform/fonts/GlyphPageTreeNodeTest.cpp b/Source/platform/fonts/GlyphPageTreeNodeTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..eadfa4a359361e1e569d91139e4a73e33b2eed08
|
| --- /dev/null
|
| +++ b/Source/platform/fonts/GlyphPageTreeNodeTest.cpp
|
| @@ -0,0 +1,128 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "config.h"
|
| +#include "platform/fonts/GlyphPageTreeNode.h"
|
| +
|
| +#include "platform/fonts/SegmentedFontData.h"
|
| +#include "platform/fonts/SimpleFontData.h"
|
| +#include <gtest/gtest.h>
|
| +
|
| +namespace WebCore {
|
| +
|
| +class TestSimpleFontData : public SimpleFontData {
|
| +public:
|
| + static PassRefPtr<TestSimpleFontData> create(UChar32 from, UChar32 to)
|
| + {
|
| + return adoptRef(new TestSimpleFontData(from, to));
|
| + }
|
| +
|
| +private:
|
| + TestSimpleFontData(UChar32 from, UChar32 to)
|
| + : SimpleFontData(nullptr, 10, false, false)
|
| + , m_from(from)
|
| + , m_to(to)
|
| + {
|
| + }
|
| +
|
| + bool fillGlyphPage(GlyphPage* pageToFill, unsigned offset, unsigned length, UChar* buffer, unsigned bufferLength) const OVERRIDE
|
| + {
|
| + const Glyph kGlyph = 1;
|
| + String bufferString(buffer, bufferLength);
|
| + unsigned bufferIndex = 0;
|
| + bool hasGlyphs = false;
|
| + for (unsigned i = 0; i < length; i++) {
|
| + UChar32 c = bufferString.characterStartingAt(bufferIndex);
|
| + bufferIndex += U16_LENGTH(c);
|
| + if (m_from <= c && c <= m_to) {
|
| + pageToFill->setGlyphDataForIndex(offset + i, kGlyph, this);
|
| + hasGlyphs = true;
|
| + }
|
| + }
|
| + return hasGlyphs;
|
| + }
|
| +
|
| + UChar32 m_from;
|
| + UChar32 m_to;
|
| +};
|
| +
|
| +TEST(GlyphPageTreeNode, rootChild)
|
| +{
|
| + const unsigned kPageNumber = 0;
|
| + size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
|
| +
|
| + RefPtr<TestSimpleFontData> data = TestSimpleFontData::create('a', 'z');
|
| + GlyphPageTreeNode* node = GlyphPageTreeNode::getRootChild(data.get(), kPageNumber);
|
| + EXPECT_EQ(pageCountBeforeTest + 1, GlyphPageTreeNode::treeGlyphPageCount());
|
| + EXPECT_TRUE(node->page()->glyphAt('a'));
|
| + EXPECT_FALSE(node->page()->glyphAt('A'));
|
| + EXPECT_FALSE(node->isSystemFallback());
|
| + EXPECT_EQ(1u, node->level());
|
| + EXPECT_EQ(node, node->page()->owner());
|
| +
|
| + GlyphPageTreeNode::pruneTreeFontData(data.get());
|
| + EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| +}
|
| +
|
| +TEST(GlyphPageTreeNode, level2)
|
| +{
|
| + const unsigned kPageNumber = 0;
|
| + size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
|
| +
|
| + RefPtr<TestSimpleFontData> dataAtoC = TestSimpleFontData::create('A', 'C');
|
| + RefPtr<TestSimpleFontData> dataCtoE = TestSimpleFontData::create('C', 'E');
|
| + GlyphPageTreeNode* node1 = GlyphPageTreeNode::getRootChild(dataAtoC.get(), kPageNumber);
|
| + GlyphPageTreeNode* node2 = node1->getChild(dataCtoE.get(), kPageNumber);
|
| + EXPECT_EQ(pageCountBeforeTest + 3, GlyphPageTreeNode::treeGlyphPageCount());
|
| +
|
| + EXPECT_EQ(2u, node2->level());
|
| + EXPECT_EQ(dataAtoC, node2->page()->fontDataForCharacter('A'));
|
| + EXPECT_EQ(dataAtoC, node2->page()->fontDataForCharacter('C'));
|
| + EXPECT_EQ(dataCtoE, node2->page()->fontDataForCharacter('E'));
|
| +
|
| + GlyphPageTreeNode::pruneTreeFontData(dataAtoC.get());
|
| + GlyphPageTreeNode::pruneTreeFontData(dataCtoE.get());
|
| + EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| +}
|
| +
|
| +TEST(GlyphPageTreeNode, segmentedData)
|
| +{
|
| + const unsigned kPageNumber = 0;
|
| + size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
|
| +
|
| + RefPtr<TestSimpleFontData> dataBtoC = TestSimpleFontData::create('B', 'C');
|
| + RefPtr<TestSimpleFontData> dataCtoE = TestSimpleFontData::create('C', 'E');
|
| + RefPtr<SegmentedFontData> segmentedData = SegmentedFontData::create();
|
| + segmentedData->appendRange(FontDataRange('A', 'C', dataBtoC));
|
| + segmentedData->appendRange(FontDataRange('C', 'D', dataCtoE));
|
| + GlyphPageTreeNode* node = GlyphPageTreeNode::getRootChild(segmentedData.get(), kPageNumber);
|
| +
|
| + EXPECT_EQ(0, node->page()->fontDataForCharacter('A'));
|
| + EXPECT_EQ(dataBtoC, node->page()->fontDataForCharacter('B'));
|
| + EXPECT_EQ(dataBtoC, node->page()->fontDataForCharacter('C'));
|
| + EXPECT_EQ(dataCtoE, node->page()->fontDataForCharacter('D'));
|
| + EXPECT_EQ(0, node->page()->fontDataForCharacter('E'));
|
| +
|
| + GlyphPageTreeNode::pruneTreeCustomFontData(segmentedData.get());
|
| + EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| +}
|
| +
|
| +TEST(GlyphPageTreeNode, outsideBMP)
|
| +{
|
| + const unsigned kPageNumber = 0x1f300 / GlyphPage::size;
|
| + size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
|
| +
|
| + RefPtr<TestSimpleFontData> data = TestSimpleFontData::create(0x1f310, 0x1f320);
|
| + GlyphPageTreeNode* node = GlyphPageTreeNode::getRootChild(data.get(), kPageNumber);
|
| + EXPECT_EQ(pageCountBeforeTest + 1, GlyphPageTreeNode::treeGlyphPageCount());
|
| + EXPECT_FALSE(node->page()->glyphForCharacter(0x1f30f));
|
| + EXPECT_TRUE(node->page()->glyphForCharacter(0x1f310));
|
| + EXPECT_TRUE(node->page()->glyphForCharacter(0x1f320));
|
| + EXPECT_FALSE(node->page()->glyphForCharacter(0x1f321));
|
| +
|
| + GlyphPageTreeNode::pruneTreeFontData(data.get());
|
| + EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| +}
|
| +
|
| +} // namespace WebCore
|
|
|