mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 01:40:46 +08:00
148 lines
7.2 KiB
Python
148 lines
7.2 KiB
Python
import os
|
|
import unittest
|
|
|
|
from src.auto_localization import judge_encoding, parse_lang_str, XamlParser
|
|
|
|
|
|
class TestXamlParser(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.zh_sample_path = 'example/zh-cn.xaml'
|
|
self.zh_new_sample_path = 'example/zh-cn_new.xaml'
|
|
self.en_sample_path = 'example/en-us.xaml'
|
|
self.en_force_sample_path = 'example/en-us_force.xaml'
|
|
self.en_compare_sample_path = 'example/en-us_compare.xaml'
|
|
self.en_update_sample_path = 'example/en-us_update.xaml'
|
|
os.path.abspath(self.zh_sample_path)
|
|
with open(self.zh_sample_path, 'r', encoding='utf-8') as f:
|
|
self.zh_sample_content = f.read()
|
|
with open(self.zh_new_sample_path, 'r', encoding='utf-8') as f:
|
|
self.zh_new_sample_content = f.read()
|
|
with open(self.en_sample_path, 'r', encoding='utf-8') as f:
|
|
self.en_sample_content = f.read()
|
|
with open(self.en_force_sample_path, 'r', encoding='utf-8') as f:
|
|
self.en_force_sample_content = f.read()
|
|
with open(self.en_compare_sample_path, 'r', encoding='utf-8') as f:
|
|
self.en_compare_sample_content = f.read()
|
|
with open(self.en_update_sample_path, 'r', encoding='utf-8') as f:
|
|
self.en_update_sample_content = f.read()
|
|
if not os.path.exists('tests/data'):
|
|
os.makedirs('tests/data')
|
|
self.zh_path = 'tests/data/zh-cn.xaml'
|
|
self.zh_new_path = 'tests/data/zh-cn_new.xaml'
|
|
self.en_force_path = 'tests/data/en-us_force.xaml'
|
|
self.en_compare_path = 'tests/data/en-us_compare.xaml'
|
|
self.en_update_path = 'tests/data/en-us_update.xaml'
|
|
self.zh_tw_path = 'tests/data/zh-tw.xaml'
|
|
self.ja_path = 'tests/data/ja-jp.xaml'
|
|
self.ko_path = 'tests/data/ko-kr.xaml'
|
|
with open(self.zh_path, 'w', encoding='utf-8') as f:
|
|
f.write(self.zh_sample_content)
|
|
with open(self.zh_new_path, 'w', encoding='utf-8') as f:
|
|
f.write(self.zh_new_sample_content)
|
|
with open(self.en_force_path, 'w', encoding='utf-8') as f:
|
|
f.write(self.en_sample_content)
|
|
with open(self.en_compare_path, 'w', encoding='utf-8') as f:
|
|
f.write(self.en_sample_content)
|
|
with open(self.en_update_path, 'w', encoding='utf-8') as f:
|
|
f.write(self.en_sample_content)
|
|
|
|
def test_judge_encoding(self):
|
|
expected_encoding = 'UTF-8'
|
|
result_encoding = judge_encoding(self.zh_path)
|
|
self.assertEqual(expected_encoding, result_encoding)
|
|
|
|
def test_parse_lang_str(self):
|
|
expected_zh_cn_language = "Chinese (Simplified)"
|
|
expected_zh_tw_language = "Chinese (Traditional)"
|
|
expected_en_language = "English"
|
|
expected_ja_language = "Japanese"
|
|
expected_ko_language = "Korean"
|
|
self.assertEqual(expected_zh_cn_language, parse_lang_str(self.zh_path))
|
|
self.assertEqual(expected_zh_tw_language, parse_lang_str(self.zh_tw_path))
|
|
self.assertEqual(expected_en_language, parse_lang_str(self.en_force_path))
|
|
self.assertEqual(expected_en_language, parse_lang_str(self.en_compare_path))
|
|
self.assertEqual(expected_en_language, parse_lang_str(self.en_update_path))
|
|
self.assertEqual(expected_ja_language, parse_lang_str(self.ja_path))
|
|
self.assertEqual(expected_ko_language, parse_lang_str(self.ko_path))
|
|
with self.assertRaises(ValueError):
|
|
parse_lang_str("./test/bla")
|
|
|
|
def test_init(self):
|
|
zh_parser = XamlParser(parse_type=0, file=self.zh_path)
|
|
with self.assertRaises(AssertionError):
|
|
XamlParser(parse_type=1, xaml_string=self.zh_sample_content)
|
|
zh_string_parser = XamlParser(parse_type=1, language='Chinese', xaml_string=self.zh_sample_content)
|
|
self.assertIsInstance(zh_parser, XamlParser)
|
|
self.assertIsInstance(zh_string_parser, XamlParser)
|
|
self.assertFalse(zh_string_parser.write_xaml())
|
|
with self.assertRaises(ValueError):
|
|
XamlParser(parse_type=2)
|
|
with self.assertRaises(AssertionError):
|
|
XamlParser(parse_type=0, file="./test/blah.xaml")
|
|
s = zh_parser.tostring
|
|
self.assertTrue(s.count('
') == 0)
|
|
|
|
def test_xpath(self):
|
|
zh_parser = XamlParser(parse_type=0, file=self.zh_sample_path)
|
|
# 检验空结果
|
|
with self.assertRaises(AssertionError):
|
|
next(zh_parser.xpath('.//test'))
|
|
self.assertIsNone(next(zh_parser.xpath('.//test', accept_empty=True)))
|
|
|
|
# 检验多结果
|
|
with self.assertRaises(AssertionError):
|
|
next(zh_parser.xpath('.//s:String[@x:Key]'))
|
|
self.assertLess(1, len(list(zh_parser.xpath('.//s:String[@x:Key]', only_one=False))))
|
|
|
|
# 检验单结果
|
|
res = list(zh_parser.xpath('.//s:String[@x:Key="Settings"]'))
|
|
self.assertEqual(1, len(res))
|
|
self.assertEqual("设置", res[0].text)
|
|
|
|
def test_translate_compare_structure(self):
|
|
zh_parser = XamlParser(parse_type=0, file=self.zh_sample_path)
|
|
en_parser = XamlParser(parse_type=0, file=self.en_sample_path)
|
|
en_compare_parser = XamlParser(parse_type=0, file=self.en_compare_sample_path)
|
|
self.assertFalse(zh_parser.compare_structure(en_parser))
|
|
self.assertTrue(zh_parser.compare_structure(en_compare_parser))
|
|
|
|
def test_translate_force(self):
|
|
zh_parser = XamlParser(parse_type=0, file=self.zh_path)
|
|
zh_parser.translate_force(self.en_force_path, skip_translate=True)
|
|
with open(self.en_force_path, 'r', encoding='utf-8') as f:
|
|
translated_content = f.read()
|
|
compare_parser = XamlParser(parse_type=0, file=self.en_force_path)
|
|
self.assertEqual(translated_content, self.en_force_sample_content)
|
|
self.assertTrue(zh_parser.compare_structure(compare_parser))
|
|
|
|
def test_translate_compare(self):
|
|
zh_parser = XamlParser(parse_type=0, file=self.zh_path)
|
|
en_parser = XamlParser(parse_type=0, file=self.en_compare_path)
|
|
|
|
en_parser.translate_compare(zh_parser, skip_translate=True)
|
|
|
|
with open(self.en_compare_path, 'r', encoding='utf-8') as f:
|
|
# translated_content = f.read()
|
|
compare_parser = XamlParser(parse_type=0, file=self.en_compare_path)
|
|
# self.assertEqual(translated_content, self.en_compare_sample_content)
|
|
self.assertTrue(zh_parser.compare_structure(compare_parser))
|
|
|
|
def test_update_translate(self):
|
|
zh_parser = XamlParser(parse_type=0, file=self.zh_path)
|
|
zh_new_parser = XamlParser(parse_type=0, file=self.zh_new_path)
|
|
en_parser = XamlParser(parse_type=0, file=self.en_update_path)
|
|
en_new_parser = XamlParser(parse_type=0, file=self.en_compare_path)
|
|
|
|
en_parser.update_translate(zh_parser, zh_new_parser, skip_translate=True)
|
|
en_new_parser.update_translate(zh_parser, zh_new_parser, skip_translate=True)
|
|
with open(self.en_update_path, 'r', encoding='utf-8') as f:
|
|
# translated_content = f.read()
|
|
compare_parser = XamlParser(parse_type=0, file=self.en_update_path)
|
|
# self.assertEqual(translated_content, self.en_update_sample_content)
|
|
self.assertTrue(zh_new_parser.compare_structure(compare_parser))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|