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 176a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com// Must include at the first line to avoid ICU / stdint conflict. 186a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com#include "sfntly/port/type.h" 1974250f66a0f41c5f6ae15cfcebaa402f4f355d5aarthurhsu@google.com 206b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include <stdio.h> 216b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include <unicode/ucnv.h> 226b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include <unicode/uchar.h> 236b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 246b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include "gtest/gtest.h" 256b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com#include "test/test_utils.h" 266b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 276b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.comnamespace sfntly { 286b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 296b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// Check if proper encoding is being performed 306b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// Conversion is done from UTF16 to UTF8, SJIS 31246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.combool TestEncoding() { 32246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com UConverter* conv = TestUtils::GetEncoder("utf8"); 336b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com EXPECT_TRUE(conv != NULL); 346b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com // Ūnĭcōde̽ 356b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com UChar from[8] = {0x016A, 0x006E, 0x012D, 0x0063, 0x014D, 0x0064, 0x0065, 366b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 0x033D}; 376b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com int32_t want[12] = {0xc5, 0xaa, 0x6e, 0xc4, 0xad, 0x63, 0xc5, 0x8d, 0x64, 386b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 0x65, 0xcc, 0xbd}; 396b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com int32_t i, j = 0; 406b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com for (i = 0; i < 7; ++i) { 41246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com int32_t encoded = TestUtils::EncodeOneChar(conv, (int16_t)from[i]); 426b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com for (; encoded; encoded <<= 8) { 436b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com byte_t b = (encoded & 0xff000000) >> 24; 446b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com if (!b) 456b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com continue; 466b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com EXPECT_EQ(want[j], b); 476b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com if (want[j++] != b) { 486b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com ucnv_close(conv); 496b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com return false; 506b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com } 516b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com } 526b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com } 536b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com ucnv_close(conv); 546b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com return true; 556b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com} 566b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 576b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com// Check if the proper extension is obtained 58246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.combool TestExtension() { 596b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com // usual file name 606b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com const char *result; 61246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com result = TestUtils::Extension("../data/ext/tuffy.ttf"); 626b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com EXPECT_EQ(strcmp(result, ".ttf"), 0); 636b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 646b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com // more than one 'extension' 65246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com result = TestUtils::Extension("tuffy.ttf.fake"); 666b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com EXPECT_EQ(strcmp(result, ".fake"), 0); 676b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 686b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com // no extension 69246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com result = TestUtils::Extension("tuffy"); 706b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com EXPECT_STREQ(result, NULL); 716b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 726b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com // bogus extension 73246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com result = TestUtils::Extension("tuffy."); 746b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com EXPECT_EQ(strcmp(result, "."), 0); 756b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 766b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com return true; 776b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com} 786b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com 796b5ae74df6b2ff199c63923219c9a18bd9c4d931arthurhsu@google.com} // namespace sfntly 806a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com 816a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.comTEST(TestUtils, All) { 826a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com ASSERT_TRUE(sfntly::TestExtension()); 836a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com ASSERT_TRUE(sfntly::TestEncoding()); 846a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com} 85