14dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org// Copyright (c) 2011 The Chromium Authors. All rights reserved.
24dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org// Use of this source code is governed by a BSD-style license that can be
34dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org// found in the LICENSE file.
44dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
54dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#include <gtest/gtest.h>
64dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
74dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#include "gsub.h"
84dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#include "ots.h"
94dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#include "ots-memory-stream.h"
104dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#include "vhea.h"
114dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#include "vmtx.h"
124dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
134dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#define SET_TABLE(name, capname) \
144dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  do { file.name = new ots::OpenType##capname; } while (0)
154dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#define SET_LAYOUT_TABLE(name, capname)                    \
164dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  do {                                                     \
174dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    if (!file.name) {                                      \
184dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org      SET_TABLE(name, capname);                            \
194dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    }                                                      \
204dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    file.name->data = reinterpret_cast<const uint8_t*>(1); \
214dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    file.name->length = 1;                                 \
224dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  } while (0)
234dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#define DROP_TABLE(name) \
244dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  do { delete file.name; file.name = NULL; } while (0)
254dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#define DROP_LAYOUT_TABLE(name) \
264dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  do { file.name->data = NULL; file.name->length = 0; } while (0)
274dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
284dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgnamespace {
294dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
304dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgclass TableDependenciesTest : public ::testing::Test {
314dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org protected:
324dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  virtual void SetUp() {
334dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    SET_LAYOUT_TABLE(gsub, GSUB);
344dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    SET_TABLE(vhea, VHEA);
354dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    SET_TABLE(vmtx, VMTX);
364dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  }
374dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
384dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  virtual void TearDown() {
394dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    DROP_TABLE(gsub);
404dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    DROP_TABLE(vhea);
414dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org    DROP_TABLE(vmtx);
424dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  }
434dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  ots::OpenTypeFile file;
444dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org};
454dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org}  // namespace
464dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
474dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgTEST_F(TableDependenciesTest, TestVhea) {
484dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  EXPECT_TRUE(ots::ots_vhea_should_serialise(&file));
494dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org}
504dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
514dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgTEST_F(TableDependenciesTest, TestVmtx) {
524dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  EXPECT_TRUE(ots::ots_vmtx_should_serialise(&file));
534dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org}
544dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
554dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgTEST_F(TableDependenciesTest, TestVheaVmtx) {
564dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  DROP_TABLE(vmtx);
574dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  EXPECT_FALSE(ots::ots_vhea_should_serialise(&file));
584dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org}
594dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
604dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgTEST_F(TableDependenciesTest, TestVmtxVhea) {
614dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  DROP_TABLE(vhea);
624dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  EXPECT_FALSE(ots::ots_vmtx_should_serialise(&file));
634dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org}
644dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
654dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgTEST_F(TableDependenciesTest, TestVheaGsub) {
664dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  DROP_LAYOUT_TABLE(gsub);
674dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  EXPECT_FALSE(ots::ots_vhea_should_serialise(&file));
684dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  DROP_TABLE(gsub);
694dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  EXPECT_FALSE(ots::ots_vhea_should_serialise(&file));
704dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org}
714dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
724dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgTEST_F(TableDependenciesTest, TestVmtxGsub) {
734dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  DROP_LAYOUT_TABLE(gsub);
744dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  EXPECT_FALSE(ots::ots_vmtx_should_serialise(&file));
754dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  DROP_TABLE(gsub);
764dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  EXPECT_FALSE(ots::ots_vmtx_should_serialise(&file));
774dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org}
784dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
79