Home | History | Annotate | Download | only in test
      1 /*
      2  * Copyright 2011 Google Inc. All Rights Reserved.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include "gtest/gtest.h"
     18 #include "sfntly/font.h"
     19 #include "sfntly/table/core/horizontal_metrics_table.h"
     20 #include "test/serialization_test.h"
     21 
     22 namespace sfntly {
     23 
     24 const int32_t HMTX_ENTRIES_COUNT = 1499;
     25 const int32_t HMTX_LSB_COUNT = 3;
     26 
     27 struct HmtxEntry {
     28   int32_t advance_width_;
     29   int32_t lsb_;
     30 
     31   HmtxEntry(int32_t advance_width, int32_t lsb)
     32       : advance_width_(advance_width), lsb_(lsb) {}
     33 };
     34 
     35 const HmtxEntry HMTX_ENTRIES[] = {
     36     HmtxEntry(748, 68),  // 0
     37     HmtxEntry(0, 0),  // 1
     38     HmtxEntry(682, 0),  // 2
     39     HmtxEntry(616, 0),  // 3
     40     HmtxEntry(421, 103),  // 4
     41     HmtxEntry(690, 129),  // 5
     42     HmtxEntry(1589, 129),  // 6
     43     HmtxEntry(1017, 25),  // 7
     44     HmtxEntry(1402, 104),  // 8
     45     HmtxEntry(1241, 100),  // 9
     46 };
     47 const int32_t NUM_HMTX_ENTRIES = 10;
     48 
     49 static bool VerifyHMTX(Table* table) {
     50   HorizontalMetricsTablePtr hmtx = down_cast<HorizontalMetricsTable*>(table);
     51   if (hmtx == NULL) {
     52     return false;
     53   }
     54 
     55   EXPECT_EQ(hmtx->NumberOfHMetrics(), HMTX_ENTRIES_COUNT);
     56   EXPECT_EQ(hmtx->NumberOfLSBs(), HMTX_LSB_COUNT);
     57 
     58   for (int32_t i = 0; i < NUM_HMTX_ENTRIES; ++i) {
     59     EXPECT_EQ(hmtx->AdvanceWidth(i), HMTX_ENTRIES[i].advance_width_);
     60     EXPECT_EQ(hmtx->LeftSideBearing(i), HMTX_ENTRIES[i].lsb_);
     61   }
     62 
     63   // No such element case.
     64   EXPECT_EQ(hmtx->AdvanceWidth(HMTX_ENTRIES_COUNT),
     65             HMTX_ENTRIES[0].advance_width_);
     66   EXPECT_EQ(hmtx->LeftSideBearing(HMTX_ENTRIES_COUNT), HMTX_ENTRIES[0].lsb_);
     67   return true;
     68 }
     69 
     70 bool VerifyHMTX(Table* original, Table* target) {
     71   EXPECT_TRUE(VerifyHMTX(original));
     72   EXPECT_TRUE(VerifyHMTX(target));
     73   return true;
     74 }
     75 
     76 }  // namespace sfntly
     77