/* * 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/horizontal_metrics_table.h" #include "test/serialization_test.h" namespace sfntly { const int32_t HMTX_ENTRIES_COUNT = 1499; const int32_t HMTX_LSB_COUNT = 3; struct HmtxEntry { int32_t advance_width_; int32_t lsb_; HmtxEntry(int32_t advance_width, int32_t lsb) : advance_width_(advance_width), lsb_(lsb) {} }; const HmtxEntry HMTX_ENTRIES[] = { HmtxEntry(748, 68), // 0 HmtxEntry(0, 0), // 1 HmtxEntry(682, 0), // 2 HmtxEntry(616, 0), // 3 HmtxEntry(421, 103), // 4 HmtxEntry(690, 129), // 5 HmtxEntry(1589, 129), // 6 HmtxEntry(1017, 25), // 7 HmtxEntry(1402, 104), // 8 HmtxEntry(1241, 100), // 9 }; const int32_t NUM_HMTX_ENTRIES = 10; static bool VerifyHMTX(Table* table) { HorizontalMetricsTablePtr hmtx = down_cast(table); if (hmtx == NULL) { return false; } EXPECT_EQ(hmtx->NumberOfHMetrics(), HMTX_ENTRIES_COUNT); EXPECT_EQ(hmtx->NumberOfLSBs(), HMTX_LSB_COUNT); for (int32_t i = 0; i < NUM_HMTX_ENTRIES; ++i) { EXPECT_EQ(hmtx->AdvanceWidth(i), HMTX_ENTRIES[i].advance_width_); EXPECT_EQ(hmtx->LeftSideBearing(i), HMTX_ENTRIES[i].lsb_); } // No such element case. EXPECT_EQ(hmtx->AdvanceWidth(HMTX_ENTRIES_COUNT), HMTX_ENTRIES[0].advance_width_); EXPECT_EQ(hmtx->LeftSideBearing(HMTX_ENTRIES_COUNT), HMTX_ENTRIES[0].lsb_); return true; } bool VerifyHMTX(Table* original, Table* target) { EXPECT_TRUE(VerifyHMTX(original)); EXPECT_TRUE(VerifyHMTX(target)); return true; } } // namespace sfntly