| Index: Source/platform/fonts/GlyphPageTreeNodeTest.cpp
|
| diff --git a/Source/platform/fonts/GlyphPageTreeNodeTest.cpp b/Source/platform/fonts/GlyphPageTreeNodeTest.cpp
|
| index eadfa4a359361e1e569d91139e4a73e33b2eed08..51cc356c44e9e2bdad81bd58ef7c77fb17b09e5d 100644
|
| --- a/Source/platform/fonts/GlyphPageTreeNodeTest.cpp
|
| +++ b/Source/platform/fonts/GlyphPageTreeNodeTest.cpp
|
| @@ -11,16 +11,29 @@
|
|
|
| namespace WebCore {
|
|
|
| +class TestCustomFontData : public CustomFontData {
|
| +public:
|
| + static PassRefPtr<TestCustomFontData> create() { return adoptRef(new TestCustomFontData()); }
|
| +private:
|
| + TestCustomFontData() { }
|
| + virtual bool isLoadingFallback() const OVERRIDE { return true; }
|
| +};
|
| +
|
| class TestSimpleFontData : public SimpleFontData {
|
| public:
|
| static PassRefPtr<TestSimpleFontData> create(UChar32 from, UChar32 to)
|
| {
|
| - return adoptRef(new TestSimpleFontData(from, to));
|
| + return adoptRef(new TestSimpleFontData(nullptr, from, to));
|
| + }
|
| +
|
| + static PassRefPtr<TestSimpleFontData> createUnloaded(UChar32 from, UChar32 to)
|
| + {
|
| + return adoptRef(new TestSimpleFontData(TestCustomFontData::create(), from, to));
|
| }
|
|
|
| private:
|
| - TestSimpleFontData(UChar32 from, UChar32 to)
|
| - : SimpleFontData(nullptr, 10, false, false)
|
| + TestSimpleFontData(PassRefPtr<CustomFontData> customData, UChar32 from, UChar32 to)
|
| + : SimpleFontData(customData, 10, false, false)
|
| , m_from(from)
|
| , m_to(to)
|
| {
|
| @@ -51,17 +64,16 @@ 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());
|
| + {
|
| + 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());
|
| + }
|
| EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| }
|
|
|
| @@ -69,20 +81,18 @@ 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());
|
| + {
|
| + 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()->glyphDataForCharacter('A').fontData);
|
| + EXPECT_EQ(dataAtoC, node2->page()->glyphDataForCharacter('C').fontData);
|
| + EXPECT_EQ(dataCtoE, node2->page()->glyphDataForCharacter('E').fontData);
|
| + }
|
| EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| }
|
|
|
| @@ -90,21 +100,20 @@ 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());
|
| + {
|
| + 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()->glyphDataForCharacter('A').fontData);
|
| + EXPECT_EQ(dataBtoC, node->page()->glyphDataForCharacter('B').fontData);
|
| + EXPECT_EQ(dataBtoC, node->page()->glyphDataForCharacter('C').fontData);
|
| + EXPECT_EQ(dataCtoE, node->page()->glyphDataForCharacter('D').fontData);
|
| + EXPECT_EQ(0, node->page()->glyphDataForCharacter('E').fontData);
|
| + }
|
| EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| }
|
|
|
| @@ -112,16 +121,105 @@ 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));
|
| + }
|
| + EXPECT_EQ(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));
|
| +TEST(GlyphPageTreeNode, customData)
|
| +{
|
| + const unsigned kPageNumber = 0;
|
| + size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
|
| + {
|
| + RefPtr<TestSimpleFontData> dataAtoC = TestSimpleFontData::createUnloaded('A', 'C');
|
| + RefPtr<TestSimpleFontData> dataBtoD = TestSimpleFontData::create('B', 'D');
|
| + RefPtr<TestSimpleFontData> dataCtoE = TestSimpleFontData::createUnloaded('C', 'E');
|
| + RefPtr<SegmentedFontData> segmentedData = SegmentedFontData::create();
|
| + segmentedData->appendRange(FontDataRange('A', 'C', dataAtoC));
|
| + segmentedData->appendRange(FontDataRange('B', 'D', dataBtoD));
|
| + segmentedData->appendRange(FontDataRange('C', 'E', dataCtoE));
|
| + GlyphPageTreeNode* node = GlyphPageTreeNode::getRootChild(segmentedData.get(), kPageNumber);
|
| +
|
| + EXPECT_EQ(0, node->page()->glyphDataForCharacter('A').fontData);
|
| + EXPECT_EQ(dataBtoD, node->page()->glyphDataForCharacter('B').fontData);
|
| + EXPECT_EQ(dataBtoD, node->page()->glyphDataForCharacter('C').fontData);
|
| + EXPECT_EQ(dataBtoD, node->page()->glyphDataForCharacter('D').fontData);
|
| + EXPECT_EQ(0, node->page()->glyphDataForCharacter('E').fontData);
|
| +
|
| + EXPECT_EQ(dataAtoC->customFontData(), node->page()->customFontToLoadAt('A'));
|
| + EXPECT_EQ(dataAtoC->customFontData(), node->page()->customFontToLoadAt('B'));
|
| + EXPECT_EQ(dataAtoC->customFontData(), node->page()->customFontToLoadAt('C'));
|
| + EXPECT_EQ(0, node->page()->customFontToLoadAt('D'));
|
| + EXPECT_EQ(dataCtoE->customFontData(), node->page()->customFontToLoadAt('E'));
|
| + }
|
| + EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| +}
|
| +
|
| +TEST(GlyphPageTreeNode, customDataWithMultiplePages)
|
| +{
|
| + const unsigned kPageNumber = 0;
|
| + size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
|
| + {
|
| + RefPtr<TestSimpleFontData> dataAtoC = TestSimpleFontData::createUnloaded('A', 'C');
|
| + RefPtr<TestSimpleFontData> dataBtoD = TestSimpleFontData::create('B', 'D');
|
| + RefPtr<TestSimpleFontData> dataCtoE = TestSimpleFontData::createUnloaded('C', 'E');
|
| + RefPtr<SegmentedFontData> segmentedData1 = SegmentedFontData::create();
|
| + RefPtr<SegmentedFontData> segmentedData2 = SegmentedFontData::create();
|
| + RefPtr<SegmentedFontData> segmentedData3 = SegmentedFontData::create();
|
| + segmentedData1->appendRange(FontDataRange('A', 'C', dataAtoC));
|
| + segmentedData2->appendRange(FontDataRange('B', 'D', dataBtoD));
|
| + segmentedData3->appendRange(FontDataRange('C', 'E', dataCtoE));
|
| + GlyphPageTreeNode* node1 = GlyphPageTreeNode::getRootChild(segmentedData1.get(), kPageNumber);
|
| + GlyphPageTreeNode* node2 = node1->getChild(segmentedData2.get(), kPageNumber);
|
| + GlyphPageTreeNode* node3 = node2->getChild(segmentedData3.get(), kPageNumber);
|
| +
|
| + EXPECT_EQ(0, node3->page()->glyphDataForCharacter('A').fontData);
|
| + EXPECT_EQ(dataBtoD, node3->page()->glyphDataForCharacter('B').fontData);
|
| + EXPECT_EQ(dataBtoD, node3->page()->glyphDataForCharacter('C').fontData);
|
| + EXPECT_EQ(dataBtoD, node3->page()->glyphDataForCharacter('D').fontData);
|
| + EXPECT_EQ(0, node3->page()->glyphDataForCharacter('E').fontData);
|
| +
|
| + EXPECT_EQ(dataAtoC->customFontData(), node3->page()->customFontToLoadAt('A'));
|
| + EXPECT_EQ(dataAtoC->customFontData(), node3->page()->customFontToLoadAt('B'));
|
| + EXPECT_EQ(dataAtoC->customFontData(), node3->page()->customFontToLoadAt('C'));
|
| + EXPECT_EQ(0, node3->page()->customFontToLoadAt('D'));
|
| + EXPECT_EQ(dataCtoE->customFontData(), node3->page()->customFontToLoadAt('E'));
|
| + }
|
| + EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| +}
|
|
|
| - GlyphPageTreeNode::pruneTreeFontData(data.get());
|
| +TEST(GlyphPageTreeNode, systemFallback)
|
| +{
|
| + const unsigned kPageNumber = 0;
|
| + size_t pageCountBeforeTest = GlyphPageTreeNode::treeGlyphPageCount();
|
| + {
|
| + RefPtr<TestSimpleFontData> dataAtoC = TestSimpleFontData::createUnloaded('A', 'C');
|
| + RefPtr<TestSimpleFontData> dataBtoD = TestSimpleFontData::create('B', 'D');
|
| + RefPtr<SegmentedFontData> segmentedData = SegmentedFontData::create();
|
| + segmentedData->appendRange(FontDataRange('A', 'C', dataAtoC));
|
| + GlyphPageTreeNode* node1 = GlyphPageTreeNode::getRootChild(segmentedData.get(), kPageNumber);
|
| + GlyphPageTreeNode* node2 = node1->getChild(dataBtoD.get(), kPageNumber);
|
| + GlyphPageTreeNode* node3 = node2->getChild(0, kPageNumber);
|
| +
|
| + EXPECT_TRUE(node3->isSystemFallback());
|
| +
|
| + EXPECT_EQ(0, node3->page()->glyphDataForCharacter('A').fontData);
|
| + EXPECT_EQ(dataBtoD, node3->page()->glyphDataForCharacter('B').fontData);
|
| + EXPECT_EQ(dataBtoD, node3->page()->glyphDataForCharacter('C').fontData);
|
| + EXPECT_EQ(dataBtoD, node3->page()->glyphDataForCharacter('D').fontData);
|
| +
|
| + EXPECT_EQ(dataAtoC->customFontData(), node3->page()->customFontToLoadAt('A'));
|
| + EXPECT_EQ(dataAtoC->customFontData(), node3->page()->customFontToLoadAt('B'));
|
| + EXPECT_EQ(dataAtoC->customFontData(), node3->page()->customFontToLoadAt('C'));
|
| + EXPECT_EQ(0, node3->page()->customFontToLoadAt('D'));
|
| + }
|
| EXPECT_EQ(pageCountBeforeTest, GlyphPageTreeNode::treeGlyphPageCount());
|
| }
|
|
|
|
|