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