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
HmtxEntrysfntly::HmtxEntry31 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
VerifyHMTX(Table * table)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
VerifyHMTX(Table * original,Table * target)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