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()