1f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com/*
2f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com * Copyright 2011 Google Inc. All Rights Reserved.
3f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com *
4f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com * Licensed under the Apache License, Version 2.0 (the "License");
5f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com * you may not use this file except in compliance with the License.
6f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com * You may obtain a copy of the License at
7f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com *
8f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com *      http://www.apache.org/licenses/LICENSE-2.0
9f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com *
10f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com * Unless required by applicable law or agreed to in writing, software
11f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com * distributed under the License is distributed on an "AS IS" BASIS,
12f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com * See the License for the specific language governing permissions and
14f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com * limitations under the License.
15f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com */
16f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
17f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com#include "gtest/gtest.h"
18f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com#include "sfntly/font.h"
195af34fd773f8cfee82321393504f558ddf67c628arthurhsu@google.com#include "sfntly/table/truetype/loca_table.h"
20f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com#include "test/serialization_test.h"
21f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
22f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comnamespace sfntly {
23f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
246b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comconst int32_t LOCA_NUM_LOCAS = 1503;
25f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comconst int32_t LOCAS[] = {
26f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com    0x00000,  // 0
276b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x00058,  // 1
286b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x00058,  // 2
296b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x00058,  // 3
306b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x00058,  // 4
316b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x000B8,  // 5
326b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x00138,  // 6
336b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x001A4,  // 7
346b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x0025C,  // 8
356b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x00328,  // 9
366b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com    0x003B8,  // 10
37f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com};
386b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comconst int32_t NUM_TEST_LOCAS = 11;
39f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
40f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comstatic bool VerifyLOCA(Table* table) {
41f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  LocaTablePtr loca = down_cast<LocaTable*>(table);
42f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  if (loca == NULL) {
43f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com    return false;
44f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  }
45f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
46f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  EXPECT_EQ(loca->NumLocas(), LOCA_NUM_LOCAS);
47b54cce09c1fc2b09e2adae43d7eb017b47b0cccfarthurhsu@google.com  EXPECT_EQ(loca->num_glyphs(), LOCA_NUM_LOCAS - 1);
48f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
496b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com  for (int32_t i = 0; i < NUM_TEST_LOCAS - 1; ++i) {
50f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com    EXPECT_EQ(loca->GlyphOffset(i), LOCAS[i]);
51f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com    EXPECT_EQ(loca->GlyphLength(i), LOCAS[i + 1] - LOCAS[i]);
52f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  }
53f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  return true;
54f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com}
55f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
56f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.combool VerifyLOCA(Table* original, Table* target) {
57f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  EXPECT_TRUE(VerifyLOCA(original));
58f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  EXPECT_TRUE(VerifyLOCA(target));
59f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  return true;
60f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com}
61f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
62f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com}  // namespace sfntly
63