/*
 * Copyright (c) 2020-2022 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "ui_test_font.h"

#include "graphic_config.h"

#include "common/screen.h"
#if ENABLE_VECTOR_FONT
#else
#include "common/ui_text_language.h"
#endif
#include "components/ui_label.h"
#include "font/ui_font.h"
#if ENABLE_MULTI_FONT
#include "font/ui_multi_font_manager.h"
#endif

namespace OHOS {
namespace {
const int16_t GAP = 5;
const int16_t TITLE_HEIGHT = 20;
const uint16_t LABEL_WIDTH = 400;
const uint16_t LABEL_HEIGHT = 50;
const uint16_t FONT_SIZE = 30;
const uint16_t FONT_EMOJI_SIZE = 100;
const char* SOURCE_HAN_SANS_SC_REGULAR = "SourceHanSansSC-Regular.otf";
const char* ROBOTO_CONDENSED_REGULAR = "RobotoCondensed-Regular.ttf";
const char* DEFAULT_EMOJI_FILENAME = "NotoColorEmojiCompat.ttf";
#if ENABLE_MULTI_FONT
const int16_t F_HWEMOJI_REGULAR_30_32 = 99;
#endif
} // namespace

void UITestFont::SetUp()
{
    if (container_ == nullptr) {
        container_ = new UIScrollView();
        container_->SetThrowDrag(true);
        container_->SetHorizontalScrollState(false);
        container_->Resize(Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight() - BACK_BUTTON_HEIGHT);
        positionX_ = 50; // 50: init position x
        positionY_ = 5;  // 5: init position y
    }
}

void UITestFont::TearDown()
{
    DeleteChildren(container_);
    container_ = nullptr;
}

void UITestFont::InnerTestTitle(const char* title)
{
    UILabel* titleLabel = new UILabel();
    titleLabel->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, positionY_, Screen::GetInstance().GetWidth(),
                            TITLE_LABEL_DEFAULT_HEIGHT);
#if ENABLE_VECTOR_FONT
    titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, DEFAULT_VECTOR_FONT_SIZE);
#else
    titleLabel->SetFontId(F_SOURCEHANSANSSC_REGULAR_18_4);
#endif
    titleLabel->SetText(title);
    container_->Add(titleLabel);
    positionY_ += TITLE_HEIGHT + GAP;
}

const UIView* UITestFont::GetTestView()
{
    UIKitFontTestDisplay001();
    UIKitFontTestDisplay002();
    UIKitFontTestDisplay003();
    UIKitFontTestDisplay004();
    UIKitFontTestDisplay005();
    UIKitFontTestDisplay006();
    UIKitFontTestDisplay007();
    UIKitFontTestDisplay008();
    UIKitFontTestDisplay009();
    UIKitFontTestDisplay010();
    UIKitFontTestBaseline001();
    UIKitFontTestBaseline002();
    UIKitFontTestLineHeight001();
    UIKitFontTestLineHeight002();
#if ENABLE_MULTI_FONT
    UIKitFontMultiLanguage001();
    UIKitFontMultiLanguage002();
#endif
    UIKitFontTestBackgroundColor();
    UIKitFontTestForegroundColor();
    UIKitFontTestLineBackgroundSpan();
    UIKitFontTestAbsoluteSizeSpan();
    UIKitFontTestRelativeSizeSpan();
    UIKitFontTestDisplayNegativeLineSpace001();
    UIKitFontTestDisplayNegativeLineSpace002();
    UIKitFontTestDisplayEmoji001();
    UIKitFontTestDisplayEmoji002();
    UIKitFontTestDisplayEmoji003();
    return container_;
}

void UITestFont::UIKitFontTestDisplay001()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display single line Chinese");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("轻量图形子系统");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT + GAP;
}

void UITestFont::UIKitFontTestDisplay002()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display multiline Chinese");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText(" 你好\n轻量图形子系统");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP;  // 2 : double
}


void UITestFont::UIKitFontTestDisplay003()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display single line English");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("uikit test");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT + GAP;
}


void UITestFont::UIKitFontTestDisplay004()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display multiline English");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText(" Hello\n uikit");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}


void UITestFont::UIKitFontTestDisplay005()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display single line Chinese and English");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("你好,轻量级图形 uikit");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT + GAP;
}

void UITestFont::UIKitFontTestDisplay006()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display multiline Chinese and English");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("你好\n轻量级图形 uikit");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}


void UITestFont::UIKitFontTestDisplay007()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display single line text color");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetStyle(STYLE_TEXT_COLOR, Color::Red().full);
    label->SetText("你好,轻量级图形");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT + GAP;
}

void UITestFont::UIKitFontTestDisplay008()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display multiline text color");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetStyle(STYLE_TEXT_COLOR, Color::Yellow().full);
    label->SetText("你好\n 轻量级图形 uikit");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}


void UITestFont::UIKitFontTestDisplay009()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display multiline text color");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_ + 100, positionY_);  // 100 : offset x
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
    label->SetLineBreakMode(UILabel::LineBreakMode::LINE_BREAK_ADAPT);
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->Rotate(90, Vector2<float> {0, 0}); // 90 : angle
    label->SetText("轻量级图形");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 4 + GAP; // 4 : coefficient
}


void UITestFont::UIKitFontTestDisplay010()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display multiline text color");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_ + 100, positionY_); // 100 : offset x
    label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT); // 2 : half
    label->SetLineBreakMode(UILabel::LineBreakMode::LINE_BREAK_MARQUEE);
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->Rotate(90, Vector2<float> {0, 0}); // 90 : angle
    label->SetText("轻量级图形,轻量级图形,轻量级图形");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 4 + GAP; // 4 : coefficient
}


void UITestFont::UIKitFontTestBaseline001()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle("Font baseline alignment");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT); // 2 : half
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("hello, uikit");

    UILabel* label2 = new UILabel();
    label2->SetPosition(positionX_ + (LABEL_WIDTH / 2), positionY_); // 2 : half
    label2->Resize(LABEL_WIDTH, LABEL_HEIGHT);
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
    label2->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
#else
    label2->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
#endif
    label2->SetText("hello, uikit");

    container_->Add(label);
    container_->Add(label2);
    positionY_ += LABEL_HEIGHT + GAP;
}

void UITestFont::UIKitFontTestBaseline002()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Font baseline alignment");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT); // 2 : half
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("hello, uikit");
    label->SetStyle(STYLE_LINE_HEIGHT, 30); // 30 : line height

    UILabel* label2 = new UILabel();
    label2->SetPosition(positionX_ + (LABEL_WIDTH / 2), positionY_); // 2 : half
    label2->Resize(LABEL_WIDTH, LABEL_HEIGHT);
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
    label2->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
#else
    label2->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
#endif
    label2->SetText("hello, uikit");
    label2->SetStyle(STYLE_LINE_HEIGHT, 30); // 30 : line height

    container_->Add(label);
    container_->Add(label2);
    positionY_ += LABEL_HEIGHT + GAP;
}

void UITestFont::UIKitFontTestLineHeight001()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Font lineheight alignment");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT * 2); // 2 : half
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("hello,\n uikit");

    UILabel* label2 = new UILabel();
    label2->SetPosition(positionX_ + (LABEL_WIDTH / 2), positionY_); // 2 : half
    label2->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT * 2); // 2 : half
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
    label2->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
#else
    label2->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
#endif
    label2->SetText("hello,\n uikit");

    container_->Add(label);
    container_->Add(label2);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}

void UITestFont::UIKitFontTestLineHeight002()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Font lineheight alignment");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT * 2); // 2 : half
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("hello,\n uikit");
    label->SetStyle(STYLE_LINE_HEIGHT, 40); // 40 : line height

    UILabel* label2 = new UILabel();
    label2->SetPosition(positionX_ + (LABEL_WIDTH / 2), positionY_); // 2 : half
    label2->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT * 2); // 2 : half
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
    label2->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
#else
    label2->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
#endif
    label2->SetText("hello,\n uikit");
    label2->SetStyle(STYLE_LINE_HEIGHT, 40); // 40 : line height

    container_->Add(label);
    container_->Add(label2);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}

#if ENABLE_MULTI_FONT
void UITestFont::UIKitFontMultiLanguage001()
{
    if (container_ == nullptr) {
        return;
    }
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
    uint16_t findPath[] = {UIFont::GetInstance()->GetFontId(SOURCE_HAN_SANS_SC_REGULAR)};
    UIMultiFontManager::GetInstance()->SetSearchFontList(UIFont::GetInstance()->GetFontId(ROBOTO_CONDENSED_REGULAR),
                                                         findPath, sizeof(findPath));
#else
    uint16_t findPath[] = {F_SOURCEHANSANSSC_REGULAR_30_4};
    UIMultiFontManager::GetInstance()->SetSearchFontList(F_ROBOTOCONDENSED_REGULAR_30_4, findPath, sizeof(findPath));
#endif
    InnerTestTitle(" Display multilingual display");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
#if ENABLE_VECTOR_FONT
    label->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
#endif
    label->SetText("Hello, Test of GUI");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT + GAP;
}

void UITestFont::UIKitFontMultiLanguage002()
{
    if (container_ == nullptr) {
        return;
    }
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
    uint16_t findPath[] = {UIFont::GetInstance()->GetFontId(SOURCE_HAN_SANS_SC_REGULAR)};
    UIMultiFontManager::GetInstance()->SetSearchFontList(UIFont::GetInstance()->GetFontId(ROBOTO_CONDENSED_REGULAR),
                                                         findPath, sizeof(findPath));
#else
    uint16_t findPath[] = {F_SOURCEHANSANSSC_REGULAR_30_4};
    UIMultiFontManager::GetInstance()->SetSearchFontList(F_ROBOTOCONDENSED_REGULAR_30_4, findPath, sizeof(findPath));
#endif
    InnerTestTitle(" Display multilingual display");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
#if ENABLE_VECTOR_FONT
    label->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
#endif
    label->SetText("Hello\n Test of GUI");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}
#endif // ENABLE_MULTI_FONT

void UITestFont::UIKitFontTestBackgroundColor()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display background color ");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetBackgroundColorSpan(Color::Red(), 0, 2); // 0 : start index; 2 : end index
    label->SetBackgroundColorSpan(Color::Yellow(), 5, 6); // 5 : start index; 6 : end index
    label->SetText("轻量图形子系统");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT + GAP;
}

void UITestFont::UIKitFontTestForegroundColor()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Change some font colors ");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetForegroundColorSpan(Color::Blue(), 1, 3); // 1 : start index; 2 : end index
    label->SetForegroundColorSpan(Color::Red(), 6, 9); // 6 : start index; 9 : end index
    label->SetText("轻量图形子\n系统轻量图形子系统轻量图形子系统轻量图形子系统轻量图形子系统轻量图形子系统");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}

void UITestFont::UIKitFontTestLineBackgroundSpan()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Display LineBackgroundSpan ");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetLineBackgroundSpan(Color::Blue(), 1, 3); // 1 : start index; 3 : end index
    label->SetLineBackgroundSpan(Color::Red(), 5, 5); // 5 : start index; 5 : end index
    label->SetText("轻量图\n形子系统");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}

void UITestFont::UIKitFontTestAbsoluteSizeSpan()
{
    if (container_ == nullptr) {
            return;
        }
    InnerTestTitle(" Display absolute size span");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("轻量图形子系统\n轻量图形子系统");
    label->SetAbsoluteSizeSpan(1, 2, 38); // 1 : start index; 2 : end index; 38 absolute font size
    label->SetAbsoluteSizeSpan(2, 3, 18); // 2 : start index; 3 : end index; 18 absolute font size
    label->SetAbsoluteSizeSpan(3, 4, 24); // 3 : start index; 4 : end index; 24 absolute font size
    label->SetAbsoluteSizeSpan(10, 11, 14); // 10 : start index; 11 : end index; 14 font size
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}

void UITestFont::UIKitFontTestRelativeSizeSpan()
{
    if (container_ == nullptr) {
            return;
        }
    InnerTestTitle(" Display Relative size span");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetText("轻量图形子系统\n轻量图形子系统");
    label->SetRelativeSizeSpan(1, 2, 0.8f); // 1 : start index; 2 : end index; 0.8f relative font size
    label->SetRelativeSizeSpan(10, 11, 0.6f); // 1 : start index; 2 : end index; 0.6f relative font size
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}

void UITestFont::UIKitFontTestDisplayEmoji001()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle("Emoij");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);

#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT * 3); // 2 : double; 3 : triple
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    UIFont::GetInstance()->RegisterFontInfo(DEFAULT_EMOJI_FILENAME);
    label->SetFont(DEFAULT_EMOJI_FILENAME, FONT_EMOJI_SIZE);
    label->SetText("💋💋😂😂😂");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 3 + GAP; // 3 : triple
#else
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2);
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#if defined(ENABLE_MULTI_FONT) && ENABLE_MULTI_FONT
    uint16_t findPath[] = {F_HWEMOJI_REGULAR_30_32};
    UIMultiFontManager::GetInstance()->SetSearchFontList(F_SOURCEHANSANSSC_REGULAR_30_4, findPath, sizeof(findPath));
#endif
    label->SetText("\xEF\x80\x80\xEF\x80\x81\xEF\x80\x82\xEF\x80\x83\xEF\x80\x84\xEF\x80\x85\xEF\x80\x86\xEF\x80\x87"
                   "\xEF\x80\x80\xEF\x80\x81\xEF\x80\x82\xEF\x80\x83\xEF\x80\x84\xEF\x80\x85\xEF\x80\x86\xEF\x80\x87");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double;
#endif
}

void UITestFont::UIKitFontTestDisplayEmoji002()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle("Text and Emoij");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);

#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT * 6); // 2 : double; 6 : six times
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    UIFont::GetInstance()->RegisterFontInfo(DEFAULT_EMOJI_FILENAME);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_EMOJI_SIZE);
    label->SetText("轻量图形子系统💋💋😂😂");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 6 + GAP; // 6 : six times
#if defined(ENABLE_MULTI_FONT) && ENABLE_MULTI_FONT
    uint16_t findPath[] = {UIFont::GetInstance()->GetFontId(DEFAULT_EMOJI_FILENAME, FONT_EMOJI_SIZE)};
    UIMultiFontManager::GetInstance()->SetSearchFontList(
        UIFont::GetInstance()->GetFontId(SOURCE_HAN_SANS_SC_REGULAR, FONT_EMOJI_SIZE), findPath, sizeof(findPath));
#endif
#else
    label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 3); // 3 : triple
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#if defined(ENABLE_MULTI_FONT) && ENABLE_MULTI_FONT
    uint16_t findPath[] = {F_HWEMOJI_REGULAR_30_32};
    UIMultiFontManager::GetInstance()->SetSearchFontList(F_SOURCEHANSANSSC_REGULAR_30_4, findPath, sizeof(findPath));
#endif
    label->SetText("轻量图形子系统\xEF\x80\x80\xEF\x80\x81\xEF\x80\x82\xEF\x80\x83\xEF\x80\x84鴻蒙");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 3 + GAP; // 3 : triple
#endif
}

void UITestFont::UIKitFontTestDisplayEmoji003()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle("Text and Emoij line break");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);

#if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
    label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT * 12); // 2 : double; 12 : twelve times
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    UIFont::GetInstance()->RegisterFontInfo(DEFAULT_EMOJI_FILENAME);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_EMOJI_SIZE);
    label->SetText("轻量图形子系统💋😂😂😂您好,轻量图形子系统,鴻蒙😂");
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 6 + GAP; // 6 : six times
#else
    label->Resize(380, LABEL_HEIGHT * 3); // 3 : triple
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#if defined(ENABLE_MULTI_FONT) && ENABLE_MULTI_FONT
    uint16_t findPath[] = {F_HWEMOJI_REGULAR_30_32};
    UIMultiFontManager::GetInstance()->SetSearchFontList(F_SOURCEHANSANSSC_REGULAR_30_4, findPath, sizeof(findPath));
#endif
    label->SetText("轻量图形子系统鴻蒙操作系統\xEF\x80\x80\xEF\x80\x80"); // EF8080
    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 3 + GAP; // 3 : triple
#endif
}

void UITestFont::UIKitFontTestDisplayNegativeLineSpace001()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Negative linespace with one line not enabled ");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT *2); // 2 : double
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetStyle(STYLE_LINE_HEIGHT, FONT_SIZE);
    label->SetStyle(STYLE_LINE_SPACE, -20); // -20 : lineSpace_
    label->SetText("lineSpace_ = -20, with one line.");

    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}

void UITestFont::UIKitFontTestDisplayNegativeLineSpace002()
{
    if (container_ == nullptr) {
        return;
    }
    InnerTestTitle(" Negative linespace with two line is enabled. It is more clear when bounds can be seen. ");
    UILabel* label = new UILabel();
    label->SetPosition(positionX_, positionY_);
    label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT *2); // 2 : double
#if ENABLE_VECTOR_FONT
    UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
    label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
#else
    label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
#endif
    label->SetStyle(STYLE_LINE_SPACE, -20); // -20 : lineSpace_

    label->SetText("lineSpace_ = -20, \n with two line.");

    container_->Add(label);
    positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
}
} // namespace OHOS