130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Copyright 2011 Google Inc. All Rights Reserved. 330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Licensed under the Apache License, Version 2.0 (the "License"); 530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * you may not use this file except in compliance with the License. 630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * You may obtain a copy of the License at 730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * http://www.apache.org/licenses/LICENSE-2.0 930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Unless required by applicable law or agreed to in writing, software 1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * distributed under the License is distributed on an "AS IS" BASIS, 1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * See the License for the specific language governing permissions and 1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * limitations under the License. 1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun */ 1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "gtest/gtest.h" 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/font.h" 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/truetype/glyph_table.h" 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "test/serialization_test.h" 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly { 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// We spot check only glyph id 33. 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t GLYPH33_OFFSET = 0xAC8; 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t GLYPH33_LENGTH = 40; 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t GLYPH33_XMIN = 92; 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t GLYPH33_YMIN = 20; 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t GLYPH33_XMAX = 797; 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunconst int32_t GLYPH33_YMAX = 1235; 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// TODO(arthurhsu): Tuffy does not have composite glyphs. Need better testing. 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunstatic bool VerifyGLYF(Table* table) { 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun GlyphTablePtr glyf_table = down_cast<GlyphTable*>(table); 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if (glyf_table == NULL) { 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return false; 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun GlyphPtr glyf; 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun glyf.Attach(glyf_table->GetGlyph(GLYPH33_OFFSET, GLYPH33_LENGTH)); 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if (glyf == NULL) { 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return false; 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_EQ(glyf->XMin(), GLYPH33_XMIN); 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_EQ(glyf->YMin(), GLYPH33_YMIN); 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_EQ(glyf->XMax(), GLYPH33_XMAX); 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_EQ(glyf->YMax(), GLYPH33_YMAX); 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool VerifyGLYF(Table* original, Table* target) { 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(VerifyGLYF(original)); 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(VerifyGLYF(target)); 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} // namespace sfntly 60