16b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com/* 26b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * Copyright 2011 Google Inc. All Rights Reserved. 36b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * 46b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * Licensed under the Apache License, Version 2.0 (the "License"); 56b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * you may not use this file except in compliance with the License. 66b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * You may obtain a copy of the License at 76b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * 86b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * http://www.apache.org/licenses/LICENSE-2.0 96b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * 106b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * Unless required by applicable law or agreed to in writing, software 116b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * distributed under the License is distributed on an "AS IS" BASIS, 126b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * See the License for the specific language governing permissions and 146b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com * limitations under the License. 156b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com */ 166b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 1774250f66a0f41c5f6ae15cfcebaa402f4f355d5aarthurhsu@google.com#include "test/test_utils.h" 1874250f66a0f41c5f6ae15cfcebaa402f4f355d5aarthurhsu@google.com 196b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include <stdio.h> 206b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include <unicode/ucnv.h> 216b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include <unicode/uchar.h> 226b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 236b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include "gtest/gtest.h" 246b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include "sfntly/font.h" 256b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include "sfntly/data/memory_byte_array.h" 266b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include "sfntly/data/growable_memory_byte_array.h" 276b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include "sfntly/port/file_input_stream.h" 286b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 296b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.comnamespace sfntly { 306b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.comTestUtils::TestUtils() {} 316b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 326b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// static 33246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com// OutputStream CreateOutputStream(const char *file_path) { 346b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// } 356b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 366b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// static 37246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com// void TestUtils::CreateNewFile(const char* file_path) { 386b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// } 396b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 406b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// static 41246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comint32_t TestUtils::EncodeOneChar(UConverter* encoder, int16_t uchar) { 426b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com char* target = new char[ucnv_getMaxCharSize(encoder) * 2]; 436b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com char* target_end; 446b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com UChar* source = new UChar[2]; 456b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com UChar* source_end; 466b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com source[0] = (UChar)uchar; 476b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com source[1] = 0; 486b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com UErrorCode status = U_ZERO_ERROR; 496b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com source_end = source; 506b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com target_end = target; 516b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com ucnv_fromUnicode(encoder, &target_end, target + 4, 526b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com (const UChar**)&source_end, source + sizeof(UChar), 536b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com NULL, TRUE, &status); 546b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com if (!U_SUCCESS(status)) { 556b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com fprintf(stderr, "Error occured in conversion of %d: %s\n", 566b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com uchar, u_errorName(status)); 576b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com delete[] source; 586b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com delete[] target; 596b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com return 0; 606b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com } 616b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com int32_t enc_char = 0; 626b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com for (int32_t position = 0; position < target_end - target; ++position) { 636b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com enc_char <<= 8; 646b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com enc_char |= (target[position] & 0xff); 656b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com } 666b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com delete[] source; 676b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com delete[] target; 686b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com return enc_char; 696b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com} 706b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 716b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// static 72246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comUConverter* TestUtils::GetEncoder(const char* charset_name) { 736b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com if (charset_name == NULL || strcmp(charset_name, "") == 0) 746b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com return NULL; 756b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com UErrorCode status = U_ZERO_ERROR; 766b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com UConverter* conv = ucnv_open(charset_name, &status); 776b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com // if (!U_SUCCESS(status)) 786b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com // return NULL; 796b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com return conv; // returns NULL @ error anyway 806b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com} 816b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 826b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// Get a file's extension 836b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// static 84246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.comconst char* TestUtils::Extension(const char* file_path) { 856b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com if (!file_path) 866b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com return NULL; 876b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com return strrchr(file_path, EXTENSION_SEPARATOR); 886b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com} 896b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com} 90