1373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka/* 2373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * Copyright (C) 2017 The Android Open Source Project 3373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * 4373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License"); 5373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * you may not use this file except in compliance with the License. 6373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * You may obtain a copy of the License at 7373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * 8373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * http://www.apache.org/licenses/LICENSE-2.0 9373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * 10373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * Unless required by applicable law or agreed to in writing, software 11373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS, 12373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * See the License for the specific language governing permissions and 14373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka * limitations under the License. 15373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka */ 16373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 17373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka#include <gtest/gtest.h> 18373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 19373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka#include <fcntl.h> 20373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka#include <sys/mman.h> 21373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka#include <sys/stat.h> 22373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka#include <utils/Log.h> 23373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 24373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka#include "SkFontMgr.h" 25373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka#include "SkStream.h" 26373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 27373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka#include "hwui/MinikinSkia.h" 28373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka#include "hwui/Typeface.h" 29373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 30373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonakausing namespace android; 31373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 32373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonakanamespace { 33373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 34373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonakaconstexpr char kRobotoRegular[] = "/system/fonts/Roboto-Regular.ttf"; 35373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonakaconstexpr char kRobotoBold[] = "/system/fonts/Roboto-Bold.ttf"; 36373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonakaconstexpr char kRobotoItalic[] = "/system/fonts/Roboto-Italic.ttf"; 37373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonakaconstexpr char kRobotoBoldItalic[] = "/system/fonts/Roboto-BoldItalic.ttf"; 38373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 39373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonakavoid unmap(const void* ptr, void* context) { 40373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka void* p = const_cast<void*>(ptr); 41373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka size_t len = reinterpret_cast<size_t>(context); 42373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka munmap(p, len); 43373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 44373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 45373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonakastd::shared_ptr<minikin::FontFamily> buildFamily(const char* fileName) { 46373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka int fd = open(fileName, O_RDONLY); 47373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka LOG_ALWAYS_FATAL_IF(fd == -1, "Failed to open file %s", fileName); 48373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka struct stat st = {}; 49373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka LOG_ALWAYS_FATAL_IF(fstat(fd, &st) == -1, "Failed to stat file %s", fileName); 50373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka void* data = mmap(nullptr, st.st_size, PROT_READ, MAP_SHARED, fd, 0); 51373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka sk_sp<SkData> skData = 52373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka SkData::MakeWithProc(data, st.st_size, unmap, reinterpret_cast<void*>(st.st_size)); 53373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<SkStreamAsset> fontData(new SkMemoryStream(skData)); 54373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault()); 55373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka sk_sp<SkTypeface> typeface(fm->createFromStream(fontData.release())); 56373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka LOG_ALWAYS_FATAL_IF(typeface == nullptr, "Failed to make typeface from %s", fileName); 57373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::shared_ptr<minikin::MinikinFont> font = std::make_shared<MinikinFontSkia>( 58373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::move(typeface), data, st.st_size, 0, std::vector<minikin::FontVariation>()); 59373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka return std::make_shared<minikin::FontFamily>( 60373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::vector<minikin::Font>({ minikin::Font(std::move(font), minikin::FontStyle()) })); 61373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 62373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 63373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonakastd::vector<std::shared_ptr<minikin::FontFamily>> makeSingleFamlyVector(const char* fileName) { 64373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka return std::vector<std::shared_ptr<minikin::FontFamily>>({ buildFamily(fileName) }); 65373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 66373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 67373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, resolveDefault_and_setDefaultTest) { 68373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> regular( 69373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoRegular), 70373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); 71373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(regular.get(), Typeface::resolveDefault(regular.get())); 72373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 73373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface* old = Typeface::resolveDefault(nullptr); // Keep the original to restore it later. 74373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka ASSERT_NE(nullptr, old); 75373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 76373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::setDefault(regular.get()); 77373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(regular.get(), Typeface::resolveDefault(nullptr)); 78373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 79373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::setDefault(old); // Restore to the original. 80373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 81373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 82373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createWithDifferentBaseWeight) { 83373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold(Typeface::createWithDifferentBaseWeight(nullptr, 700)); 84373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, bold->fStyle.getWeight()); 85373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 86373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, bold->fSkiaStyle); 87373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 88373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> light(Typeface::createWithDifferentBaseWeight(nullptr, 300)); 89373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(3, light->fStyle.getWeight()); 90373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(light->fStyle.getItalic()); 91373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, light->fSkiaStyle); 92373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 93373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 94373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createRelativeTest_fromRegular) { 95373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.DEFAULT, Typeface.NORMAL); 96373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> normal(Typeface::createRelative(nullptr, SkTypeface::kNormal)); 97373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, normal->fStyle.getWeight()); 98373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(normal->fStyle.getItalic()); 99373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, normal->fSkiaStyle); 100373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 101373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.DEFAULT, Typeface.BOLD); 102373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold(Typeface::createRelative(nullptr, SkTypeface::kBold)); 103373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, bold->fStyle.getWeight()); 104373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 105373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, bold->fSkiaStyle); 106373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 107373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.DEFAULT, Typeface.ITALIC); 108373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> italic(Typeface::createRelative(nullptr, SkTypeface::kItalic)); 109373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, italic->fStyle.getWeight()); 110373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(italic->fStyle.getItalic()); 111373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 112373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 113373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.DEFAULT, Typeface.BOLD_ITALIC); 114373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> boldItalic( 115373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createRelative(nullptr, SkTypeface::kBoldItalic)); 116373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, boldItalic->fStyle.getWeight()); 117373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(boldItalic->fStyle.getItalic()); 118373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBoldItalic, boldItalic->fSkiaStyle); 119373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 120373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 121373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createRelativeTest_BoldBase) { 122373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> base(Typeface::createWithDifferentBaseWeight(nullptr, 700)); 123373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 124373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create("sans-serif-bold"), Typeface.NORMAL); 125373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> normal(Typeface::createRelative(base.get(), SkTypeface::kNormal)); 126373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, normal->fStyle.getWeight()); 127373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(normal->fStyle.getItalic()); 128373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, normal->fSkiaStyle); 129373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 130373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create("sans-serif-bold"), Typeface.BOLD); 131373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold(Typeface::createRelative(base.get(), SkTypeface::kBold)); 132373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(10, bold->fStyle.getWeight()); 133373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 134373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, bold->fSkiaStyle); 135373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 136373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create("sans-serif-bold"), Typeface.ITALIC); 137373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> italic(Typeface::createRelative(base.get(), SkTypeface::kItalic)); 138373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, italic->fStyle.getWeight()); 139373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(italic->fStyle.getItalic()); 140373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 141373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 142373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create("sans-serif-bold"), Typeface.BOLD_ITALIC); 143373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> 144373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka boldItalic(Typeface::createRelative(base.get(), SkTypeface::kBoldItalic)); 145373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(10, boldItalic->fStyle.getWeight()); 146373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(boldItalic->fStyle.getItalic()); 147373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBoldItalic, boldItalic->fSkiaStyle); 148373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 149373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 150373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createRelativeTest_LightBase) { 151373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> base(Typeface::createWithDifferentBaseWeight(nullptr, 300)); 152373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 153373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create("sans-serif-light"), Typeface.NORMAL); 154373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> normal(Typeface::createRelative(base.get(), SkTypeface::kNormal)); 155373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(3, normal->fStyle.getWeight()); 156373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(normal->fStyle.getItalic()); 157373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, normal->fSkiaStyle); 158373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 159373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create("sans-serif-light"), Typeface.BOLD); 160373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold(Typeface::createRelative(base.get(), SkTypeface::kBold)); 161373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(6, bold->fStyle.getWeight()); 162373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 163373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, bold->fSkiaStyle); 164373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 165373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create("sans-serif-light"), Typeface.ITLIC); 166373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> italic(Typeface::createRelative(base.get(), SkTypeface::kItalic)); 167373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(3, italic->fStyle.getWeight()); 168373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(italic->fStyle.getItalic()); 169373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 170373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 171373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create("sans-serif-light"), Typeface.BOLD_ITALIC); 172373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> 173373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka boldItalic(Typeface::createRelative(base.get(), SkTypeface::kBoldItalic)); 174373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(6, boldItalic->fStyle.getWeight()); 175373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(boldItalic->fStyle.getItalic()); 176373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBoldItalic, boldItalic->fSkiaStyle); 177373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 178373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 179373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createRelativeTest_fromBoldStyled) { 180373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> base(Typeface::createRelative(nullptr, SkTypeface::kBold)); 181373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 182373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create(Typeface.DEFAULT, Typeface.BOLD), Typeface.NORMAL); 183373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> normal(Typeface::createRelative(base.get(), SkTypeface::kNormal)); 184373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, normal->fStyle.getWeight()); 185373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(normal->fStyle.getItalic()); 186373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, normal->fSkiaStyle); 187373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 188373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java Typeface.create(Typeface.create(Typeface.DEFAULT, Typeface.BOLD), Typeface.BOLD); 189373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold(Typeface::createRelative(base.get(), SkTypeface::kBold)); 190373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, bold->fStyle.getWeight()); 191373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 192373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, bold->fSkiaStyle); 193373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 194373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create(Typeface.DEFAULT, Typeface.BOLD), Typeface.ITALIC); 195373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> italic(Typeface::createRelative(base.get(), SkTypeface::kItalic)); 196373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, normal->fStyle.getWeight()); 197373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(italic->fStyle.getItalic()); 198373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 199373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 200373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 201373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface.create(Typeface.create(Typeface.DEFAULT, Typeface.BOLD), Typeface.BOLD_ITALIC); 202373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> 203373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka boldItalic(Typeface::createRelative(base.get(), SkTypeface::kBoldItalic)); 204373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, boldItalic->fStyle.getWeight()); 205373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(boldItalic->fStyle.getItalic()); 206373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBoldItalic, boldItalic->fSkiaStyle); 207373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 208373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 209373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createRelativeTest_fromItalicStyled) { 210373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> base(Typeface::createRelative(nullptr, SkTypeface::kItalic)); 211373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 212373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 213373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface.create(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC), Typeface.NORMAL); 214373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> normal(Typeface::createRelative(base.get(), SkTypeface::kNormal)); 215373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, normal->fStyle.getWeight()); 216373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(normal->fStyle.getItalic()); 217373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, normal->fSkiaStyle); 218373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 219373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, Typeface.create(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC), Typeface.BOLD); 220373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold(Typeface::createRelative(base.get(), SkTypeface::kBold)); 221373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, bold->fStyle.getWeight()); 222373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 223373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, bold->fSkiaStyle); 224373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 225373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 226373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface.create(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC), Typeface.ITALIC); 227373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> italic(Typeface::createRelative(base.get(), SkTypeface::kItalic)); 228373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, italic->fStyle.getWeight()); 229373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(italic->fStyle.getItalic()); 230373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 231373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 232373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 233373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface.create(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC), Typeface.BOLD_ITALIC); 234373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> 235373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka boldItalic(Typeface::createRelative(base.get(), SkTypeface::kBoldItalic)); 236373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, boldItalic->fStyle.getWeight()); 237373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(boldItalic->fStyle.getItalic()); 238373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBoldItalic, boldItalic->fSkiaStyle); 239373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 240373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 241373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createRelativeTest_fromSpecifiedStyled) { 242373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> base(Typeface::createAbsolute(nullptr, 400, false)); 243373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 244373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 245373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface typeface = new Typeface.Builder(invalid).setFallback("sans-serif") 246373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // .setWeight(700).setItalic(false).build(); 247373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface.create(typeface, Typeface.NORMAL); 248373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> normal(Typeface::createRelative(base.get(), SkTypeface::kNormal)); 249373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, normal->fStyle.getWeight()); 250373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(normal->fStyle.getItalic()); 251373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, normal->fSkiaStyle); 252373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 253373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 254373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface typeface = new Typeface.Builder(invalid).setFallback("sans-serif") 255373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // .setWeight(700).setItalic(false).build(); 256373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface.create(typeface, Typeface.BOLD); 257373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold(Typeface::createRelative(base.get(), SkTypeface::kBold)); 258373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, bold->fStyle.getWeight()); 259373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 260373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, bold->fSkiaStyle); 261373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 262373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 263373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface typeface = new Typeface.Builder(invalid).setFallback("sans-serif") 264373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // .setWeight(700).setItalic(false).build(); 265373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface.create(typeface, Typeface.ITALIC); 266373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> italic(Typeface::createRelative(base.get(), SkTypeface::kItalic)); 267373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, italic->fStyle.getWeight()); 268373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(italic->fStyle.getItalic()); 269373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 270373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 271373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 272373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface typeface = new Typeface.Builder(invalid).setFallback("sans-serif") 273373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // .setWeight(700).setItalic(false).build(); 274373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // Typeface.create(typeface, Typeface.BOLD_ITALIC); 275373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> 276373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka boldItalic(Typeface::createRelative(base.get(), SkTypeface::kBoldItalic)); 277373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, boldItalic->fStyle.getWeight()); 278373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(boldItalic->fStyle.getItalic()); 279373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBoldItalic, boldItalic->fSkiaStyle); 280373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 281373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 282373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createAbsolute) { 283373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 284373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // new Typeface.Builder(invalid).setFallback("sans-serif").setWeight(400).setItalic(false) 285373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // .build(); 286373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> regular(Typeface::createAbsolute(nullptr, 400, false)); 287373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, regular->fStyle.getWeight()); 288373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(regular->fStyle.getItalic()); 289373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, regular->fSkiaStyle); 290373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 291373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 292373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // new Typeface.Builder(invalid).setFallback("sans-serif").setWeight(700).setItalic(false) 293373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // .build(); 294373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold(Typeface::createAbsolute(nullptr, 700, false)); 295373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, bold->fStyle.getWeight()); 296373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 297373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, bold->fSkiaStyle); 298373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 299373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 300373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // new Typeface.Builder(invalid).setFallback("sans-serif").setWeight(400).setItalic(true) 301373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // .build(); 302373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> italic(Typeface::createAbsolute(nullptr, 400, true)); 303373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, italic->fStyle.getWeight()); 304373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(italic->fStyle.getItalic()); 305373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 306373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 307373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 308373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // new Typeface.Builder(invalid).setFallback("sans-serif").setWeight(700).setItalic(true) 309373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // .build(); 310373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> boldItalic(Typeface::createAbsolute(nullptr, 700, true)); 311373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, boldItalic->fStyle.getWeight()); 312373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(boldItalic->fStyle.getItalic()); 313373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBoldItalic, boldItalic->fSkiaStyle); 314373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 315373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 316373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // new Typeface.Builder(invalid).setFallback("sans-serif").setWeight(1100).setItalic(true) 317373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // .build(); 318373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> over1000(Typeface::createAbsolute(nullptr, 1100, false)); 319373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(10, over1000->fStyle.getWeight()); 320373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(over1000->fStyle.getItalic()); 321373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, over1000->fSkiaStyle); 322373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 323373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 324373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createFromFamilies_Single) { 325373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, new Typeface.Builder("Roboto-Regular.ttf").setWeight(400).setItalic(false).build(); 326373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> regular( 327373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoRegular), 400, false)); 328373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, regular->fStyle.getWeight()); 329373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(regular->fStyle.getItalic()); 330373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, regular->fSkiaStyle); 331373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 332373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, new Typeface.Builder("Roboto-Bold.ttf").setWeight(700).setItalic(false).build(); 333373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold( 334373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoBold), 700, false)); 335373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, bold->fStyle.getWeight()); 336373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 337373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, bold->fSkiaStyle); 338373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 339373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, new Typeface.Builder("Roboto-Italic.ttf").setWeight(400).setItalic(true).build(); 340373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> italic( 341373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoItalic), 400, true)); 342373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, italic->fStyle.getWeight()); 343373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(italic->fStyle.getItalic()); 344373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 345373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 346373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 347373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // new Typeface.Builder("Roboto-BoldItalic.ttf").setWeight(700).setItalic(true).build(); 348373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> boldItalic( 349373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoBoldItalic), 700, true)); 350373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, boldItalic->fStyle.getWeight()); 351373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(boldItalic->fStyle.getItalic()); 352373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 353373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 354373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, 355373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // new Typeface.Builder("Roboto-BoldItalic.ttf").setWeight(1100).setItalic(false).build(); 356373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> over1000( 357373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoBold), 1100, false)); 358373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(10, over1000->fStyle.getWeight()); 359373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(over1000->fStyle.getItalic()); 360373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, over1000->fSkiaStyle); 361373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 362373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 363373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createFromFamilies_Single_resolveByTable) { 364373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, new Typeface.Builder("Roboto-Regular.ttf").build(); 365373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> regular( 366373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoRegular), 367373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); 368373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, regular->fStyle.getWeight()); 369373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(regular->fStyle.getItalic()); 370373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kNormal, regular->fSkiaStyle); 371373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 372373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, new Typeface.Builder("Roboto-Bold.ttf").build(); 373373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> bold( 374373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoBold), 375373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); 376373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, bold->fStyle.getWeight()); 377373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(bold->fStyle.getItalic()); 378373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kBold, bold->fSkiaStyle); 379373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 380373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, new Typeface.Builder("Roboto-Italic.ttf").build(); 381373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> italic( 382373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoItalic), 383373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); 384373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, italic->fStyle.getWeight()); 385373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(italic->fStyle.getItalic()); 386373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 387373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 388373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka // In Java, new Typeface.Builder("Roboto-BoldItalic.ttf").build(); 389373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> boldItalic( 390373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka Typeface::createFromFamilies(makeSingleFamlyVector(kRobotoBoldItalic), 391373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); 392373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, boldItalic->fStyle.getWeight()); 393373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_TRUE(boldItalic->fStyle.getItalic()); 394373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(SkTypeface::kItalic, italic->fSkiaStyle); 395373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 396373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 397373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createFromFamilies_Family) { 398373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::vector<std::shared_ptr<minikin::FontFamily>> families = { 399373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka buildFamily(kRobotoRegular), buildFamily(kRobotoBold), buildFamily(kRobotoItalic), 400373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka buildFamily(kRobotoBoldItalic) 401373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka }; 402373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> typeface(Typeface::createFromFamilies(std::move(families), 403373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); 404373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(4, typeface->fStyle.getWeight()); 405373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(typeface->fStyle.getItalic()); 406373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 407373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 408373b15bda93c8b400c5e1271bc93cbef26af503fSeigo NonakaTEST(TypefaceTest, createFromFamilies_Family_withoutRegular) { 409373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::vector<std::shared_ptr<minikin::FontFamily>> families = { 410373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka buildFamily(kRobotoBold), buildFamily(kRobotoItalic), buildFamily(kRobotoBoldItalic) 411373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka }; 412373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka std::unique_ptr<Typeface> typeface(Typeface::createFromFamilies(std::move(families), 413373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); 414373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_EQ(7, typeface->fStyle.getWeight()); 415373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka EXPECT_FALSE(typeface->fStyle.getItalic()); 416373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} 417373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka 418373b15bda93c8b400c5e1271bc93cbef26af503fSeigo Nonaka} // namespace 419