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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/platform/fonts/GlyphPageTreeNode.cpp ('k') | Source/platform/fonts/SimpleFontData.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« 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