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