/*
* 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<HorizontalMetricsTable*>(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