130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Copyright 2011 Google Inc. All Rights Reserved. 330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Licensed under the Apache License, Version 2.0 (the "License"); 530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * you may not use this file except in compliance with the License. 630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * You may obtain a copy of the License at 730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * http://www.apache.org/licenses/LICENSE-2.0 930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Unless required by applicable law or agreed to in writing, software 1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * distributed under the License is distributed on an "AS IS" BASIS, 1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * See the License for the specific language governing permissions and 1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * limitations under the License. 1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun */ 1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/type.h" 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <assert.h> 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <unicode/ucnv.h> 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <string> 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <iostream> 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "gtest/gtest.h" 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/font.h" 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/font_factory.h" 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/core/cmap_table.h" 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/data/memory_byte_array.h" 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/core/font_header_table.h" 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/tag.h" 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "test/test_utils.h" 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "test/test_font_utils.h" 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "test/test_data.h" 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#if GTEST_HAS_PARAM_TEST 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly { 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunusing ::testing::TestWithParam; 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunusing ::testing::Values; 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass CMapTestCase { 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public: 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CMapTestCase(const char* font_name, 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t first_platform_id, 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t first_encoding_id, 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* first_charset_name, 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t second_platform_id, 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t second_encoding_id, 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* second_charset_name, 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t low_char, 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t high_char) 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun : font_name_(font_name), 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun first_platform_id_(first_platform_id), 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun first_encoding_id_(first_encoding_id), 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun first_charset_name_(first_charset_name), 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun second_platform_id_(second_platform_id), 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun second_encoding_id_(second_encoding_id), 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun second_charset_name_(second_charset_name), 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun low_char_(low_char), 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun high_char_(high_char) { 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* font_name() const { return font_name_; } 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t first_platform_id() const { return first_platform_id_; } 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t first_encoding_id() const { return first_encoding_id_; } 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* first_charset_name() const { return first_charset_name_; } 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t second_platform_id() const { return second_platform_id_; } 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t second_encoding_id() const { return second_encoding_id_; } 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* second_charset_name() const { return second_charset_name_; } 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t low_char() const { return low_char_; } 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t high_char() const { return high_char_; } 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun private: 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* font_name_; 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t first_platform_id_; 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t first_encoding_id_; 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* first_charset_name_; 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t second_platform_id_; 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t second_encoding_id_; 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun const char* second_charset_name_; 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t low_char_; 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t high_char_; 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass CMapTests : public :: testing::TestWithParam<CMapTestCase> { 8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public: 8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CMapTests() : encoder1_(NULL), encoder2_(NULL), successful_setup_(false) { 8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual void SetUp() {} 9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual void TearDown(); 9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun void CommonSetUp(FontArray* font_array); 9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun void CompareCMaps(); 9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Ptr<CMapTable::CMap> cmap1_; 9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Ptr<CMapTable::CMap> cmap2_; 9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun UConverter* encoder1_; 10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun UConverter* encoder2_; 10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool successful_setup_; 10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun::std::ostream& operator<<(::std::ostream& os, const CMapTestCase *test_case) { 10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return os << "(" 10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun << test_case->font_name() << ", " 10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun << test_case->first_platform_id() << ", " 10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun << test_case->first_encoding_id() << ", " 10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun << test_case->first_charset_name() << ", " 11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun << test_case->second_platform_id() << ", " 11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun << test_case->second_encoding_id() << ", " 11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun << test_case->second_charset_name() << ", " 11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun << test_case->low_char() << ", " 11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun << test_case->high_char() << ")"; 11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid CMapTests::CommonSetUp(FontArray* font_array) { 11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ASSERT_NE(font_array, reinterpret_cast<FontArray*>(NULL)); 11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ASSERT_FALSE(font_array->empty()); 12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Ptr<Font> font; 12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font = font_array->at(0); 12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ASSERT_NE(font, reinterpret_cast<Font*>(NULL)); 12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Ptr<CMapTable> cmap_table = 12430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun down_cast<CMapTable*>(font->GetTable(Tag::cmap)); 12530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun cmap1_.Attach(cmap_table->GetCMap(GetParam().first_platform_id(), 12630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun GetParam().first_encoding_id())); 12730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ASSERT_NE((cmap1_), reinterpret_cast<CMapTable::CMap*>(NULL)); 12830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun cmap2_.Attach(cmap_table->GetCMap(GetParam().second_platform_id(), 12930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun GetParam().second_encoding_id())); 13030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ASSERT_NE((cmap2_), reinterpret_cast<CMapTable::CMap*>(NULL)); 13130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun encoder1_ = TestUtils::GetEncoder(GetParam().first_charset_name()); 13230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun encoder2_ = TestUtils::GetEncoder(GetParam().second_charset_name()); 13330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun successful_setup_ = true; 13430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 13530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid CMapTests::TearDown() { 13730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if (encoder1_) 13830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ucnv_close(encoder1_); 13930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if (encoder2_) 14030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ucnv_close(encoder2_); 14130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 14230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid CMapTests::CompareCMaps() { 14430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ASSERT_TRUE(successful_setup_); 14530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun for (int32_t uchar = GetParam().low_char(); 14630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun uchar <= GetParam().high_char(); ++uchar) { 14730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t c1 = uchar; 14830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if (encoder1_ != NULL) 14930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun c1 = TestUtils::EncodeOneChar(encoder1_, (int16_t)uchar); 15030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t c2 = uchar; 15130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if (encoder2_ != NULL) 15230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun c2 = TestUtils::EncodeOneChar(encoder2_, (int16_t)uchar); 15330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t glyph_id1 = cmap1_->GlyphId(c1); 15430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t glyph_id2 = cmap2_->GlyphId(c2); 15530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef SFNTLY_DEBUG_CMAP 15630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if (glyph_id1 != glyph_id2) 15730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf(stderr, "%x: g1=%x, %x: g2=%x\n", c1, glyph_id1, c2, glyph_id2); 15830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 15930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ASSERT_EQ(glyph_id1, glyph_id2); 16030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 16130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifdef SFNTLY_SFNTLY_DEBUG_CMAPCMAP 16230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun fprintf(stderr, "\n"); 16330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif 16430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 16530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTEST_P(CMapTests, GlyphsBetweenCMapsFingerprint) { 16730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Ptr<FontFactory> font_factory; 16830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font_factory.Attach(FontFactory::GetInstance()); 16930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font_factory->FingerprintFont(true); 17030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontArray font_array; 17130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun LoadFont(GetParam().font_name(), font_factory, &font_array); 17230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CommonSetUp(&font_array); 17330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CompareCMaps(); 17430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 17530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 17630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTEST_P(CMapTests, GlyphsBetweenCMapsNoFingerprint) { 17730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun Ptr<FontFactory> font_factory; 17830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font_factory.Attach(FontFactory::GetInstance()); 17930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontArray font_array; 18030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun LoadFont(GetParam().font_name(), font_factory, &font_array); 18130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CommonSetUp(&font_array); 18230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CompareCMaps(); 18330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 18430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTEST_P(CMapTests, GlyphsBetweenCMapsUsingByteVector) { 18630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontArray font_array; 18730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun LoadFontUsingByteVector(GetParam().font_name(), true, &font_array); 18830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CommonSetUp(&font_array); 18930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CompareCMaps(); 19030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 19130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 19230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunCMapTestCase kCMapTestsTestCases[] = { 19330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CMapTestCase(SAMPLE_TTF_FILE, 19430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun PlatformId::kWindows, 19530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 19630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NULL, 19730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun PlatformId::kUnicode, 19830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun UnicodeEncodingId::kUnicode2_0_BMP, 19930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NULL, 20030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun (int32_t)0x20, 20130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun (int32_t)0x7f), 20230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 20330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 20430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunINSTANTIATE_TEST_CASE_P(CMapTests, 20530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun CMapTests, 20630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ::testing::ValuesIn(kCMapTestsTestCases)); 20730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 20830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 20930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#else 21030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 21130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTEST(DummyTest, ValueParameterizedTestsAreNotSupportedOnThisPlatform) {} 21230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 21330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif // GTEST_HAS_PARAM 214