| |
@@ -0,0 +1,82 @@
|
| |
+ import subprocess
|
| |
+ import sys
|
| |
+
|
| |
+ class fonttest:
|
| |
+
|
| |
+ def __init__(self, fontname, coverage_lang_list="en"):
|
| |
+ self.fontname = fontname
|
| |
+ self.coverage_lang_list = coverage_lang_list
|
| |
+ self.out = dict()
|
| |
+ self.out["err"] = list()
|
| |
+ self.test_init()
|
| |
+
|
| |
+ def execute_command(self, command_str):
|
| |
+ out, err = subprocess.Popen(command_str, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
|
| |
+ return (str(out, 'utf-8'), str(err, 'utf-8'))
|
| |
+
|
| |
+ def get_font_family(self):
|
| |
+ # get font family
|
| |
+ font_family, err = self.execute_command("fc-list | grep {0} | cut -d':' -f2".format(self.fontname))
|
| |
+ #get all font file path
|
| |
+ font_filepath, err = self.execute_command("fc-list | grep {0} | cut -d':' -f1".format(self.fontname))
|
| |
+ font_filepath = font_filepath.split("\n")
|
| |
+ self.out["font file list"] = list(filter(None, font_filepath))
|
| |
+
|
| |
+ # if font file exist create a font family list
|
| |
+ if not err and font_family:
|
| |
+ font_family = set(font_family.split("\n"))
|
| |
+ font_family = map(str.strip, font_family)
|
| |
+ self.out["font family list"] = list(filter(None, font_family))
|
| |
+ # return self.out_font_family
|
| |
+ else:
|
| |
+ self.out["err"].append("invalid test or parameter in font family test")
|
| |
+ self.out["err"].append(err)
|
| |
+ sys.stdout.write("invalid test or parameter in font family test")
|
| |
+
|
| |
+ def get_font_conf(self):
|
| |
+ # get list of font conf files
|
| |
+ font_conflist, err = self.execute_command("fc-conflist | grep {0}".format(self.fontname))
|
| |
+
|
| |
+ if not err and font_conflist:
|
| |
+ font_conflist = font_conflist.split("\n")
|
| |
+ self.out["font conf list"] = list(filter(None, font_conflist))
|
| |
+ else:
|
| |
+ self.out["err"].append("invalid test or parameter in font conf test")
|
| |
+ self.out["err"].append(err)
|
| |
+ sys.stdout.write("invalid test or parameter in font conf test")
|
| |
+
|
| |
+ def get_lang_coverage(self):
|
| |
+ self.out["lang covarage"] = dict()
|
| |
+ for font_file_path in self.out["font file list"]:
|
| |
+ font_langlist, err = self.execute_command("fc-query -f 'lang: %{lang}' "+font_file_path)
|
| |
+
|
| |
+ if not err and font_langlist:
|
| |
+ font_langlist = font_langlist.split("|")
|
| |
+ font_langlist[0] = font_langlist[0].replace("lang: ","")
|
| |
+ out_lang_dict = dict()
|
| |
+ for lang in self.coverage_lang_list:
|
| |
+ out_lang_dict[lang] = lang in font_langlist
|
| |
+
|
| |
+ self.out["lang covarage"][font_file_path] = out_lang_dict
|
| |
+
|
| |
+ if False in out_lang_dict.values():
|
| |
+ self.out["err"].append("one or more lang coverage failed for font file:{0}".format(font_file_path))
|
| |
+ self.out["err"].append(out_lang_dict)
|
| |
+ sys.stdout.write("fail")
|
| |
+ else:
|
| |
+ self.out["err"].append("invalid test or parameter in font lang coverage test")
|
| |
+ self.out["err"].append(err)
|
| |
+ sys.stdout.write("invalid test or parameter in font lang coverage test")
|
| |
+
|
| |
+ def test_init(self):
|
| |
+ self.get_font_family()
|
| |
+ self.get_font_conf()
|
| |
+ self.get_lang_coverage()
|
| |
+ if self.out["err"]:
|
| |
+ sys.stderr.write("Test failed\n")
|
| |
+ else:
|
| |
+ sys.stdout.write("All Test Passed\n")
|
| |
+
|
| |
+ if __name__ == "__main__":
|
| |
+ obj = fonttest(fontname="shobhika", coverage_lang_list=["en","mr","hi"])
|
| |
+ print(obj.out)
|
| |
Adding CI tests