| /* |
| * Copyright 2011 Google Inc. All Rights Reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include "gtest/gtest.h" |
| #include "sfntly/font.h" |
| #include "sfntly/table/core/os2_table.h" |
| #include "test/serialization_test.h" |
| |
| namespace sfntly { |
| |
| const int32_t OS2_VERSION = 1; |
| const int32_t OS2_XAVG_CHAR_WIDTH = 863; |
| const int32_t OS2_US_WEIGHT_CLASS = 500; |
| const int32_t OS2_US_WIDTH_CLASS = 5; |
| const int32_t OS2_FS_TYPE = 0; |
| const int32_t OS2_YSUBS_XSIZE = 0; |
| const int32_t OS2_YSUBS_YSIZE = 2; |
| const int32_t OS2_YSUBS_XOFFSET = -16560; |
| const int32_t OS2_YSUBS_YOFFSET = 0; |
| const int32_t OS2_YSUPS_XSIZE = -25944; |
| const int32_t OS2_YSUPS_YSIZE = -27176; |
| const int32_t OS2_YSUPS_XOFFSET = -16376; |
| const int32_t OS2_YSUPS_YOFFSET = 1; |
| const int32_t OS2_YSTRIKEOUT_SIZE = 12312; |
| const int32_t OS2_YSTRIKEOUT_POS = -16224; |
| const int32_t OS2_SFAMILY_CLASS = 0; |
| const byte_t OS2_PANOSE[] = { 2, 11, 6, 3, 6, 1, 0, 0, 0, 0 }; |
| const int64_t OS2_UL_UNICODE_RANGE1 = 0xE00002FFL; |
| const int64_t OS2_UL_UNICODE_RANGE2 = 0x520020FBL; |
| const int64_t OS2_UL_UNICODE_RANGE3 = 0L; |
| const int64_t OS2_UL_UNICODE_RANGE4 = 0L; |
| const byte_t OS2_ACH_VEND_ID[] = { 'P', 'f', 'E', 'd' }; |
| const int32_t OS2_FS_SELECTION = 0x0040; |
| const int32_t OS2_US_FIRST_CHAR_IDX = 0x0020; |
| const int32_t OS2_US_LAST_CHAR_IDX = 0xFFFF; |
| const int32_t OS2_STYPO_ASCENDER = 1597; |
| const int32_t OS2_STYPO_DESCENDER = -451; |
| const int32_t OS2_STYPO_LINE_GAP = 0; |
| const int32_t OS2_US_WIN_ASCENT = 2023; |
| const int32_t OS2_US_WIN_DESCENT = 648; |
| const int64_t OS2_UL_CODE_PAGE_RANGE1 = 0x2000019FL; |
| const int64_t OS2_UL_CODE_PAGE_RANGE2 = 0x00000000L; |
| |
| static bool VerifyOS_2(Table* table) { |
| OS2TablePtr os2 = down_cast<OS2Table*>(table); |
| if (os2 == NULL) { |
| return false; |
| } |
| |
| EXPECT_EQ(os2->TableVersion(), OS2_VERSION); |
| EXPECT_EQ(os2->XAvgCharWidth(), OS2_XAVG_CHAR_WIDTH); |
| EXPECT_EQ(os2->UsWeightClass(), OS2_US_WEIGHT_CLASS); |
| EXPECT_EQ(os2->UsWidthClass(), OS2_US_WIDTH_CLASS); |
| EXPECT_EQ(os2->FsType(), OS2_FS_TYPE); |
| EXPECT_EQ(os2->YSubscriptXSize(), OS2_YSUBS_XSIZE); |
| EXPECT_EQ(os2->YSubscriptYSize(), OS2_YSUBS_YSIZE); |
| EXPECT_EQ(os2->YSubscriptXOffset(), OS2_YSUBS_XOFFSET); |
| EXPECT_EQ(os2->YSubscriptYOffset(), OS2_YSUBS_YOFFSET); |
| EXPECT_EQ(os2->YSuperscriptXSize(), OS2_YSUPS_XSIZE); |
| EXPECT_EQ(os2->YSuperscriptYSize(), OS2_YSUPS_YSIZE); |
| EXPECT_EQ(os2->YSuperscriptXOffset(), OS2_YSUPS_XOFFSET); |
| EXPECT_EQ(os2->YSuperscriptYOffset(), OS2_YSUPS_YOFFSET); |
| EXPECT_EQ(os2->YStrikeoutSize(), OS2_YSTRIKEOUT_SIZE); |
| EXPECT_EQ(os2->YStrikeoutPosition(), OS2_YSTRIKEOUT_POS); |
| EXPECT_EQ(os2->SFamilyClass(), OS2_SFAMILY_CLASS); |
| |
| ByteVector panose; |
| os2->Panose(&panose); |
| EXPECT_EQ(panose.size(), sizeof(OS2_PANOSE)); |
| for (size_t i = 0; i < panose.size(); ++i) { |
| EXPECT_EQ(panose[i], OS2_PANOSE[i]); |
| } |
| |
| EXPECT_EQ(os2->UlUnicodeRange1(), OS2_UL_UNICODE_RANGE1); |
| EXPECT_EQ(os2->UlUnicodeRange2(), OS2_UL_UNICODE_RANGE2); |
| EXPECT_EQ(os2->UlUnicodeRange3(), OS2_UL_UNICODE_RANGE3); |
| EXPECT_EQ(os2->UlUnicodeRange4(), OS2_UL_UNICODE_RANGE4); |
| |
| ByteVector vend_id; |
| os2->AchVendId(&vend_id); |
| EXPECT_EQ(vend_id.size(), sizeof(OS2_ACH_VEND_ID)); |
| for (size_t i = 0; i < vend_id.size(); ++i) { |
| EXPECT_EQ(vend_id[i], OS2_ACH_VEND_ID[i]); |
| } |
| |
| EXPECT_EQ(os2->FsSelection(), OS2_FS_SELECTION); |
| EXPECT_EQ(os2->UsFirstCharIndex(), OS2_US_FIRST_CHAR_IDX); |
| EXPECT_EQ(os2->UsLastCharIndex(), OS2_US_LAST_CHAR_IDX); |
| EXPECT_EQ(os2->STypoAscender(), OS2_STYPO_ASCENDER); |
| EXPECT_EQ(os2->STypoDescender(), OS2_STYPO_DESCENDER); |
| EXPECT_EQ(os2->STypoLineGap(), OS2_STYPO_LINE_GAP); |
| EXPECT_EQ(os2->UsWinAscent(), OS2_US_WIN_ASCENT); |
| EXPECT_EQ(os2->UsWinDescent(), OS2_US_WIN_DESCENT); |
| EXPECT_EQ(os2->UlCodePageRange1(), OS2_UL_CODE_PAGE_RANGE1); |
| EXPECT_EQ(os2->UlCodePageRange2(), OS2_UL_CODE_PAGE_RANGE2); |
| |
| // TODO(arthurhsu): SxHeight() not tested |
| // TODO(arthurhsu): SCapHeight() not tested |
| // TODO(arthurhsu): UsDefaultChar() not tested |
| // TODO(arthurhsu): UsBreakChar() not tested |
| // TODO(arthurhsu): UsMaxContext() not tested |
| |
| return true; |
| } |
| |
| bool VerifyOS_2(Table* original, Table* target) { |
| EXPECT_TRUE(VerifyOS_2(original)); |
| EXPECT_TRUE(VerifyOS_2(target)); |
| return true; |
| } |
| |
| } // namespace sfntly |