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// Must include this before ICU to avoid stdint redefinition issue. 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/type.h" 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <unicode/ustring.h> 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <unicode/unistr.h> 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "gtest/gtest.h" 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/data/memory_byte_array.h" 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/font.h" 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/font_factory.h" 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/memory_input_stream.h" 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/memory_output_stream.h" 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/table/core/name_table.h" 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/tag.h" 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "test/test_data.h" 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "test/test_font_utils.h" 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly { 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunstatic ByteVector input_buffer; 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunvoid LoadTestFile(FontFactory* factory, FontBuilderArray* font_builders) { 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert(factory); 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun assert(font_builders); 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if (input_buffer.empty()) { 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun LoadFile(SAMPLE_TTF_FILE, &input_buffer); 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun } 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory->LoadFontsForBuilding(&input_buffer, font_builders); 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TestChangeOneName() { 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontFactoryPtr factory; 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory.Attach(FontFactory::GetInstance()); 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontBuilderArray font_builder_array; 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun LoadTestFile(factory, &font_builder_array); 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontBuilderPtr font_builder = font_builder_array[0]; 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameTableBuilderPtr name_builder = down_cast<NameTable::Builder*>( 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font_builder->GetTableBuilder(Tag::name)); 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Change the font name. 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameEntryBuilderPtr neb = 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name_builder->NameBuilder(PlatformId::kWindows, 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsLanguageId::kEnglish_UnitedStates, 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameId::kFontFamilyName); 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun U_STRING_DECL(new_name, "Timothy", 7); 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun neb->SetName(new_name); 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Build the font. 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontPtr font; 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font.Attach(font_builder->Build()); 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Serialize and reload the serialized font. 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun MemoryOutputStream os; 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory->SerializeFont(font, &os); 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun MemoryInputStream is; 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun is.Attach(os.Get(), os.Size()); 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontArray font_array; 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory->LoadFonts(&is, &font_array); 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontPtr new_font = font_array[0]; 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Check the font name. 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameTablePtr name_table = down_cast<NameTable*>(font->GetTable(Tag::name)); 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun UChar* name = name_table->Name(PlatformId::kWindows, 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsLanguageId::kEnglish_UnitedStates, 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameId::kFontFamilyName); 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(name != NULL); 8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_EQ(u_strcmp(name, new_name), 0); 8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete[] name; 8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TestModifyNameTableAndRevert() { 9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontFactoryPtr factory; 9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory.Attach(FontFactory::GetInstance()); 9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontBuilderArray font_builder_array; 9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun LoadTestFile(factory, &font_builder_array); 9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontBuilderPtr font_builder = font_builder_array[0]; 9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameTableBuilderPtr name_builder = down_cast<NameTable::Builder*>( 9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font_builder->GetTableBuilder(Tag::name)); 10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Change the font name. 10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameEntryBuilderPtr neb = 10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name_builder->NameBuilder(PlatformId::kWindows, 10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsLanguageId::kEnglish_UnitedStates, 10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameId::kFontFamilyName); 10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameTable::NameEntry* neb_entry = neb->name_entry(); 10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun UChar* original_name = neb_entry->Name(); 10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(original_name != NULL); 11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun U_STRING_DECL(new_name, "Timothy", 7); 11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun neb->SetName(new_name); 11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name_builder->RevertNames(); 11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Build the font. 11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontPtr font; 11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font.Attach(font_builder->Build()); 11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Serialize and reload the serialized font. 12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun MemoryOutputStream os; 12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory->SerializeFont(font, &os); 12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun MemoryInputStream is; 12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun is.Attach(os.Get(), os.Size()); 12430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontArray font_array; 12530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory->LoadFonts(&is, &font_array); 12630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontPtr new_font = font_array[0]; 12730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 12830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Check the font name. 12930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameTablePtr name_table = down_cast<NameTable*>(font->GetTable(Tag::name)); 13030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun UChar* name = name_table->Name(PlatformId::kWindows, 13130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 13230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsLanguageId::kEnglish_UnitedStates, 13330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameId::kFontFamilyName); 13430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_EQ(u_strcmp(name, original_name), 0); 13630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete[] name; 13730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete[] original_name; 13830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 14030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 14130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TestRemoveOneName() { 14330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontFactoryPtr factory; 14430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory.Attach(FontFactory::GetInstance()); 14530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontBuilderArray font_builder_array; 14630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun LoadTestFile(factory, &font_builder_array); 14730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontBuilderPtr font_builder = font_builder_array[0]; 14830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameTableBuilderPtr name_builder = down_cast<NameTable::Builder*>( 15030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font_builder->GetTableBuilder(Tag::name)); 15130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 15230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(name_builder->Has(PlatformId::kWindows, 15330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 15430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsLanguageId::kEnglish_UnitedStates, 15530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameId::kFontFamilyName)); 15630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(name_builder->Remove(PlatformId::kWindows, 15730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 15830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsLanguageId::kEnglish_UnitedStates, 15930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameId::kFontFamilyName)); 16030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Build the font. 16230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontPtr font; 16330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font.Attach(font_builder->Build()); 16430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Serialize and reload the serialized font. 16630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun MemoryOutputStream os; 16730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory->SerializeFont(font, &os); 16830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun MemoryInputStream is; 16930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun is.Attach(os.Get(), os.Size()); 17030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontArray font_array; 17130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory->LoadFonts(&is, &font_array); 17230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontPtr new_font = font_array[0]; 17330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 17430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Check the font name. 17530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameTablePtr name_table = down_cast<NameTable*>(font->GetTable(Tag::name)); 17630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun UChar* name = name_table->Name(PlatformId::kWindows, 17730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 17830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsLanguageId::kEnglish_UnitedStates, 17930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameId::kFontFamilyName); 18030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(name == NULL); 18130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 18330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 18430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Note: Function is not implemented but the test case is built. Uncomment 18630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// when NameTable::clear() is implemented. 18730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 18830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunbool TestClearAllNamesAndSetOne() { 18930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontFactoryPtr factory; 19030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory.Attach(FontFactory::GetInstance()); 19130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontBuilderArray font_builder_array; 19230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun LoadTestFile(factory, &font_builder_array); 19330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontBuilderPtr font_builder = font_builder_array[0]; 19430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 19530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameTableBuilderPtr name_builder = down_cast<NameTable::Builder*>( 19630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun font_builder->GetTableBuilder(Tag::name)); 19730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 19830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_GT(name_builder->builderCount(), 0); 19930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name_builder->clear(); 20030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_EQ(name_builder->builderCount(), 0); 20130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 20230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Change the font name. 20330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameEntryBuilderPtr neb = 20430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun name_builder->NameBuilder(PlatformId::kWindows, 20530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 20630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsLanguageId::kEnglish_UnitedStates, 20730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameId::kFontFamilyName); 20830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun U_STRING_DECL(new_name, "Fred", 4); 20930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun neb->SetName(new_name); 21030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 21130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Build the font. 21230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontPtr font = font_builder->Build(); 21330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 21430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Serialize and reload the serialized font. 21530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun MemoryOutputStream os; 21630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory->SerializeFont(font, &os); 21730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontArray font_array; 21830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ByteArrayPtr new_ba = new MemoryByteArray(os.Get(), os.Size()); 21930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun factory->LoadFonts(new_ba, &font_array); 22030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun FontPtr new_font = font_array[0]; 22130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 22230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Check the font name. 22330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameTablePtr name_table = down_cast<NameTable*>(font->table(Tag::name)); 22430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun UChar* name = name_table->Name(PlatformId::kWindows, 22530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsEncodingId::kUnicodeUCS2, 22630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WindowsLanguageId::kEnglish_UnitedStates, 22730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun NameId::kFontFamilyName); 22830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_EQ(name_table->NameCount(), 1); 22930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_EQ(u_strcmp(name, new_name), 0); 23030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 23130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun delete[] name; 23230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun return true; 23330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 23430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun*/ 23530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 23630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} // namespace sfntly 23730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 23830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim GurunTEST(NameEditing, All) { 23930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(sfntly::TestChangeOneName()); 24030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(sfntly::TestModifyNameTableAndRevert()); 24130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun EXPECT_TRUE(sfntly::TestRemoveOneName()); 24230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} 243