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/glyph_table.h"
20f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com#include "test/serialization_test.h"
21f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
22f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comnamespace sfntly {
23f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
24f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com// We spot check only glyph id 33.
256b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comconst int32_t GLYPH33_OFFSET = 0xAC8;
26f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comconst int32_t GLYPH33_LENGTH = 40;
27f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comconst int32_t GLYPH33_XMIN = 92;
28f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comconst int32_t GLYPH33_YMIN = 20;
29f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comconst int32_t GLYPH33_XMAX = 797;
30f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comconst int32_t GLYPH33_YMAX = 1235;
31f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
32f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com// TODO(arthurhsu): Tuffy does not have composite glyphs.  Need better testing.
33f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.comstatic bool VerifyGLYF(Table* table) {
34f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  GlyphTablePtr glyf_table = down_cast<GlyphTable*>(table);
35f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  if (glyf_table == NULL) {
36f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com    return false;
37f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  }
38f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
39f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  GlyphPtr glyf;
40f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  glyf.Attach(glyf_table->GetGlyph(GLYPH33_OFFSET, GLYPH33_LENGTH));
41f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  if (glyf == NULL) {
42f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com    return false;
43f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  }
44f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
45f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  EXPECT_EQ(glyf->XMin(), GLYPH33_XMIN);
46f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  EXPECT_EQ(glyf->YMin(), GLYPH33_YMIN);
47f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  EXPECT_EQ(glyf->XMax(), GLYPH33_XMAX);
48f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  EXPECT_EQ(glyf->YMax(), GLYPH33_YMAX);
49f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
50f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  return true;
51f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com}
52f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
53f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.combool VerifyGLYF(Table* original, Table* target) {
54f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  EXPECT_TRUE(VerifyGLYF(original));
55f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  EXPECT_TRUE(VerifyGLYF(target));
56f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com  return true;
57f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com}
58f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com
59f7c13bf6ff210e3c018971a6f219bb626ae00378arthurhsu@google.com}  // namespace sfntly
60