1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
# -*- coding: utf-8 -*-
"""Fonts height, duplication and UTF-8 compatibility testing script."""
import itertools as it
import sys
import art
from art.params import NON_ASCII_FONTS
from font_wizard import is_utf8, is_ascii
Failed1 = 0
Failed2 = 0
Failed3 = 0
Failed4 = 0
Font_List = list(art.params.FONT_MAP)
Message1 = "Font height test "
Message2 = "Font duplication test "
Message3 = "Font UTF-8 compatibility test "
Message4 = "{0}-font duplication -- > {1},{2}"
Message5 = "Font width test "
def print_result(flag_list, message_list):
"""
Print final result.
:param flag_list: list of test flags
:type flag_list: list
:param message_list: list of test messages
:type message_list: list
:return: None
"""
print("Art version : {}".format(art.__version__))
print("Number of fonts : {}".format(art.FONT_COUNTER))
for index, flag in enumerate(flag_list):
if flag == 0:
print(message_list[index] + "passed!")
else:
print(message_list[index] + "failed!")
if __name__ == "__main__":
for font in Font_List:
height_list = []
font_data = ""
first_line_list = [x.split("\n")[0] in ["", " "] for x in art.get_font_dic(font).values()]
last_line_list = [x.split("\n")[-1] in ["", " "] for x in art.get_font_dic(font).values()]
for letter, letter_data in art.get_font_dic(font).items():
letter_data_split = letter_data.split("\n")
width_list = [len(x) for x in letter_data_split]
if letter_data_split[-1] in ["", " "] and all(last_line_list):
width_list = width_list[:-1]
if width_list and letter_data_split[0] in ["", " "] and all(first_line_list):
width_list = width_list[1:]
if len(set(width_list)) > 1:
print(
"Width error in font {0}, letter {1}".format(
font, letter))
Failed4 += 1
if letter_data:
height_list.append(len(letter_data_split))
font_data += letter_data
ascii_flag = is_ascii(font_data)
if len(set(height_list)) != 1:
print("Height error in font : " + font)
Failed1 += 1
if not is_utf8(font_data):
Failed3 += 1
print("UTF-8 compatibility error in font : " + font)
if ascii_flag and font in NON_ASCII_FONTS:
print(
"Font type warning : {0} is ASCII but imported as NON-ASCII".format(font))
if not ascii_flag and font not in NON_ASCII_FONTS:
print(
"Font type warning : {0} is NON-ASCII but imported as ASCII".format(font))
for font1, font2 in it.combinations(Font_List, 2):
if len(art.get_font_dic(font1)) == len(art.get_font_dic(font2)):
if art.get_font_dic(font1) == art.get_font_dic(font2):
Failed2 += 1
print(Message4.format(str(Failed2), font1, font2))
else:
font1_keys = set(art.get_font_dic(font1))
font2_keys = set(art.get_font_dic(font2))
inter_keys = list(font1_keys.intersection(font2_keys))
font1_map = []
font2_map = []
for letter in inter_keys:
font1_map.append(art.get_font_dic(font1)[letter])
font2_map.append(art.get_font_dic(font2)[letter])
if font1_map == font2_map:
Failed2 += 1
print(Message4.format(str(Failed2), font1, font2))
print_result([Failed1, Failed2, Failed3, Failed4], [
Message1, Message2, Message3, Message5])
sys.exit(Failed2 + Failed1 + Failed3 + Failed4)
|