﻿# -*- coding: utf-8 -*-
import os
import sys
import time
import test_utils
import test_constants

project_name = "test_font"
display_name = "main_display"
folder_name = 'default_folder'
test_font_output_files = [
"test_font_custom_output_file.c",
"test_font_resources.c",
"test_font_resources.h",
"test_font_specifications.c",
"test_font_specifications.h"]
    
def run_font_add():
    # open font folder
    test_utils.click_resource_group('FONT_GROUP')
    
    # test cancel button
    test_utils.add_font()
    test_utils.cancel_font_edit()
    
    # add font 1bit raw
    test_utils.add_font()   
    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
    test_utils.set_font_name('FONT_1BIT_RAW')
    test_utils.set_font_format('GX_FONT_FORMAT_1BPP')
    test_utils.set_font_height(200)
    test_utils.check_font_custom_output(1)
    test_utils.set_font_custom_output_file('test_font_custom_output_file.c')
    test_utils.save_font_edit()
    
    # add font 1bit compressed
    test_utils.add_font() 
    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
    test_utils.set_font_name('FONT_1BIT_COMPRESSED')
    test_utils.set_font_compression(1)
    test_utils.set_font_format('GX_FONT_FORMAT_1BPP')
    test_utils.set_font_height_post(256, True) 
    test_utils.set_font_height(200)
    test_utils.check_font_custom_output(1)
    test_utils.set_font_custom_output_file('test_font_custom_output_file.c')
    test_utils.save_font_edit()
    
    test_utils.edit_font('FONT_1BIT_COMPRESSED')
    test_utils.check_font_custom_output(0)
    test_utils.save_font_edit()
    
    test_utils.edit_font('FONT_1BIT_COMPRESSED')
    test_utils.check_font_custom_output(1)
    test_utils.set_font_custom_output_file('test_font_custom_output_file.c')
    test_utils.cancel_font_edit()
    
    # save and close project to test custom output file information write to project file
    test_utils.toolbar_save()
    test_utils.close_project(0)
    
    # reopen project to test custom output file information read from project file
    test_utils.open_project(test_utils.DEFAULT_OUTPUT_FILE_PATH + '\\' + project_name + '.gxp', 0) 
    
    # add font 4bit raw
    test_utils.add_font()
    test_utils.set_font_path('..\\..\\fonts\\VeraBd.ttf')
    test_utils.set_font_name('FONT_4BIT_RAW')
    test_utils.set_font_format('GX_FONT_FORMAT_4BPP')
    test_utils.set_font_height(100)
    test_utils.save_font_edit()
    
    # add font 4bit compressed
    test_utils.add_font()  
    test_utils.set_font_path('..\\..\\fonts\\VeraBd.ttf')
    test_utils.set_font_name('FONT_4BIT_COMPRESSED')
    test_utils.set_font_compression(1)
    test_utils.set_font_format('GX_FONT_FORMAT_4BPP')
    test_utils.set_font_height(100)
    test_utils.save_font_edit()
    
    # add font 8bit raw
    test_utils.add_font()  
    test_utils.set_font_path('..\\..\\fonts\\VeraBI.ttf')
    test_utils.set_font_name('FONT_8BIT_RAW')
    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
    test_utils.save_font_edit()
    
    # add font 8bit compressed
    test_utils.add_font()  
    test_utils.set_font_path('..\\..\\fonts\\VeraBI.ttf')
    test_utils.set_font_name('FONT_8BIT_COMPRESSED')
    test_utils.set_font_compression(1)
    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
    test_utils.save_font_edit()
    
    # add font that contain extended characters
    test_utils.add_font()
    test_utils.set_font_path('..\\..\\fonts\\Italica Vetus 1-201.otf')
    test_utils.set_font_name('FONT_OLD_ITALIC')
    test_utils.check_extended_unicode(1)
    test_utils.set_font_height(20)
    test_utils.set_page_range(46, 1, '10300', '10323')
    test_utils.set_page_range(47, 1, '10fffd', '10fffd')
    test_utils.save_font_edit()
    
    # cloce font folder
    test_utils.click_resource_group('FONT_GROUP')

def run_new_project_create(project_name):

    # create a new project
    test_utils.toolbar_create()
    test_utils.set_new_project_path(test_utils.DEFAULT_OUTPUT_FILE_PATH)
    test_utils.set_new_project_name(project_name)
    test_utils.save_new_project_create()
    
    # configure project
    test_utils.configure_project()
    test_utils.configure_x_res(640)
    test_utils.configure_y_res(480)
    test_utils.configure_display_name(display_name)
    test_utils.configure_display_color_format('GX_COLOR_FORMAT_24XRGB')
    test_utils.configure_cpu_type('synergy')
    test_utils.save_project_configure()
    
    # close message dialog when create new
    test_utils.close_message_dialog()
    
def run_widgets_add():
    test_utils.select_project_tree_node("window")  
    screen_name = "main_window"
    
    test_utils.edit_widget_props("ID_WIDGET_NAME", screen_name)
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 0)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 480)
    
    #Add a prompt and set it's font to FONT_1BIT_RAW
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 0)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 165)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_STRING_VAL", "1 bit raw")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_1BIT_RAW")
    
    #Add a prompt and set it's font to FONT_1BIT_COMPRESSED
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 145)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 136)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_STRING_VAL", "200height")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_1BIT_COMPRESSED")
    
    #Add a prompt and set it's font to FONT_4BIT_RAW
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 269)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 81)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_STRING_VAL", "4 bit raw")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_4BIT_RAW")
    
    #Add a prompt and set it's font to FONT_4BIT_COMPRESSED
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 331)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 90)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_STRING_VAL", "4 bit compressed")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_4BIT_COMPRESSED")
    
    #Add a prompt and set it's font to FONT_8BIT_RAW
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 3)
    test_utils.edit_widget_props("ID_YPOS", 421)
    test_utils.edit_widget_props("ID_WIDTH", 189)
    test_utils.edit_widget_props("ID_HEIGHT", 56)
    test_utils.edit_widget_props("ID_STRING_VAL", "font 8 bit raw")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_8BIT_RAW")
    
    #Add a prompt and set it's font to FONT_8BIT_COMPRESSED
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 197)
    test_utils.edit_widget_props("ID_YPOS", 421)
    test_utils.edit_widget_props("ID_WIDTH", 267)
    test_utils.edit_widget_props("ID_HEIGHT", 56)
    test_utils.edit_widget_props("ID_STRING_VAL", "font 8 bit compressed")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_8BIT_COMPRESSED")
 
    #Add a prompt to test extended unicode support feature
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 467)
    test_utils.edit_widget_props("ID_YPOS", 421)
    test_utils.edit_widget_props("ID_WIDTH", 170)
    test_utils.edit_widget_props("ID_HEIGHT", 56)
    test_utils.edit_widget_props("ID_STRING_VAL", "𐌀𐌁𐌂𐌃𐌄𐌅𐌞𐌟𐌠𐌡𐌢𐌣􏿽")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_OLD_ITALIC")
    
def add_text_color():
    # open color group folder
    test_utils.click_resource_group('COLOR_GROUP')
    
    # test cancel button
    test_utils.add_color()
    test_utils.set_color_name('TEXT_COLOR')
    test_utils.set_color_red(0)
    test_utils.set_color_green(0)
    test_utils.set_color_blue(0)
    test_utils.save_color_edit()
    
    test_utils.edit_color('TEXT')
    test_utils.set_color_red(0)
    test_utils.set_color_green(0)
    test_utils.set_color_blue(0)
    test_utils.save_color_edit()
    
    # close color group folder
    test_utils.click_resource_group('COLOR_GROUP')
    
def run_kerning_font_test():
    # open font folder
    test_utils.click_resource_group('FONT_GROUP')

    #Add new font which doesn't contain a kerning table but the checkbox 'include kerning info' is selected on.
    test_utils.add_font()
    test_utils.set_font_path('..\\..\\fonts\\Italica Vetus 1-201.otf')
    test_utils.set_font_name('FONT_WITHOUT_KERNING_INFO')
    test_utils.set_font_compression(0)
    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
    test_utils.set_font_generate_kerning(1)
    test_utils.save_font_edit()
    test_utils.close_message_dialog()
    test_utils.delete_font('FONT_WITHOUT_KERNING_INFO')
    
    #edit font and set kerning true to make font generate kerning table
    test_utils.add_font()
    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
    test_utils.set_font_name('FONT_1BIT')
    test_utils.set_font_format('GX_FONT_FORMAT_1BPP')
    test_utils.set_font_generate_kerning(0)
    test_utils.save_font_edit()
    
    test_utils.add_font()
    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
    test_utils.set_font_name('FONT_1BIT_KERNING')
    test_utils.set_font_format('GX_FONT_FORMAT_1BPP')
    test_utils.set_font_generate_kerning(1)
    test_utils.save_font_edit()

    test_utils.add_font()
    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
    test_utils.set_font_name('FONT_4BIT')
    test_utils.set_font_format('GX_FONT_FORMAT_4BPP')
    test_utils.set_font_height(50)
    test_utils.set_font_generate_kerning(0)
    test_utils.save_font_edit()
    
    test_utils.add_font()
    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
    test_utils.set_font_name('FONT_4BIT_KERNING')
    test_utils.set_font_format('GX_FONT_FORMAT_4BPP')
    test_utils.set_font_height(50)
    test_utils.set_font_generate_kerning(1)
    test_utils.save_font_edit()
    
    test_utils.add_font()
    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
    test_utils.set_font_name('FONT_8BIT')
    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
    test_utils.set_font_height(150)
    test_utils.set_font_generate_kerning(0)
    test_utils.save_font_edit()
    
    test_utils.add_font()
    test_utils.set_font_path('..\\..\\fonts\\Vera.ttf')
    test_utils.set_font_name('FONT_8BIT_KERNING')
    test_utils.set_font_format('GX_FONT_FORMAT_8BPP')
    test_utils.set_font_height(150)
    test_utils.set_font_generate_kerning(1)
    test_utils.save_font_edit()
    
    #Add widget to test the kerning glyph draw
    test_utils.select_project_tree_node(folder_name)
    test_utils.add_widget('GX_TYPE_WINDOW')
    screen_name = "Font_kerning_test_window"
    
    test_utils.edit_widget_props("ID_WIDGET_NAME", screen_name)
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 0)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 480)
    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
    
    #Add a prompt and set it's font to FONT_8BIT
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 0)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 160)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_8BIT")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_8BIT")
    
    #Add a prompt and set it's font to FONT_8BIT_KERNING
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 160)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 160)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_8BIT_KERNING")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_8BIT_KERNING")
    
    #Add a prompt and set it's font to FONT_4BIT
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 320)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 60)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_4BIT")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_4BIT")
    
    #Add a prompt and set it's font to FONT_4BIT_KERNING
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 380)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 60)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_4BIT_KERNING")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_4BIT_KERNING")
    
    #Add a prompt and set it's font to FONT_1BIT
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 440)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 20)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_1BIT")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_1BIT")
    
    #Add a prompt and set it's font to FONT_1BIT_KERNING
    test_utils.select_project_tree_node(screen_name)
    test_utils.add_widget('GX_TYPE_PROMPT')
    test_utils.edit_widget_props("ID_XPOS", 0)
    test_utils.edit_widget_props("ID_YPOS", 460)
    test_utils.edit_widget_props("ID_WIDTH", 640)
    test_utils.edit_widget_props("ID_HEIGHT", 20)
    test_utils.edit_widget_props("ID_TEXT_ALIGN", 'Left')
    test_utils.edit_widget_props("ID_BORDER_COMBO", test_constants.BORDER_TYPE_NONE)
    test_utils.edit_widget_props("ID_STRING_VAL", "FAWAVAYLTLV_1BIT_KERNING")
    test_utils.edit_widget_props("ID_FONT_SELECT_0", "FONT_1BIT_KERNING")
    test_utils.compare_result()

    #test the output will not be changed
    print('save project')
    test_utils.toolbar_save()
    test_utils.generate_all()
    test_utils.click_generate_button(1)
    test_utils.cmp_output_files(test_font_output_files)
    
def test_custom_system_font():
    test_utils.open_project("test_system_font.gxp")
    test_utils.compare_result()

def test_font_height():
    test_utils.open_project("test_font_height.gxp")
    test_utils.compare_result()

def get_test_header(): 
    notes =  "*          Studio Add/Edit Font Test                  *\n"
    notes += "*                                                     *\n"
    notes += "* Test compressed font                                *\n"
    notes += "* Test extended unicode support                       *\n"
    notes += "* Test font height                                    *\n"
    return notes
    
def run_font_tests(generate, screenshot):

    test_utils.output_test_header(get_test_header())
    test_utils.setup(generate, screenshot, 'test_font_golden_file')
    
    print('create new project')
    run_new_project_create(project_name)
    
    print('add fonts')
    run_font_add()
    
    print('add widgets')
    run_widgets_add()
    test_utils.compare_result()
    
    screen_name = "main_window"
    
    # change color format to 8
    test_utils.configure_project()
    test_utils.configure_display_color_format('GX_COLOR_FORMAT_8BIT_PALETTE')
    test_utils.set_aa_text_colors(16)
    test_utils.save_project_configure()
    add_text_color()
    test_utils.select_project_tree_node('prompt_2')
    test_utils.edit_widget_props("ID_NORMAL_TEXT_COLOR", 'TEXT_COLOR')
    test_utils.select_project_tree_node(screen_name)
    test_utils.compare_result()
    
    # disable dave2d drawing
    test_utils.configure_project()
    test_utils.open_advanced_settings()
    test_utils.check_2d_drawing_engine(0)
    test_utils.save_synergy_settings_dialog()
    test_utils.save_project_configure()
    test_utils.select_project_tree_node(screen_name)
    test_utils.compare_result()
    
    # change cpu type to generic
    test_utils.configure_project()
    test_utils.configure_cpu_type('generic')
    test_utils.save_project_configure()
    test_utils.select_project_tree_node(screen_name)
    test_utils.compare_result()
    
    print('run kerning font test')
    test_utils.configure_project()
    #Change display color format to 16bpp first.
    test_utils.configure_display_color_format('GX_COLOR_FORMAT_565RGB')
    test_utils.save_project_configure()
    test_utils.select_project_tree_node(screen_name)
    run_kerning_font_test()
    
    print('run custom system font test')
    test_custom_system_font()
    
    print('run font height test')
    test_font_height()
    
    test_utils.write_end('Font Tests')
