17db96d56Sopenharmony_ciimport unittest 27db96d56Sopenharmony_ciimport tkinter 37db96d56Sopenharmony_cifrom tkinter import font 47db96d56Sopenharmony_cifrom test.support import requires, gc_collect, ALWAYS_EQ 57db96d56Sopenharmony_cifrom tkinter.test.support import AbstractTkTest, AbstractDefaultRootTest 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_cirequires('gui') 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_cifontname = "TkDefaultFont" 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ciclass FontTest(AbstractTkTest, unittest.TestCase): 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci @classmethod 147db96d56Sopenharmony_ci def setUpClass(cls): 157db96d56Sopenharmony_ci AbstractTkTest.setUpClass.__func__(cls) 167db96d56Sopenharmony_ci try: 177db96d56Sopenharmony_ci cls.font = font.Font(root=cls.root, name=fontname, exists=True) 187db96d56Sopenharmony_ci except tkinter.TclError: 197db96d56Sopenharmony_ci cls.font = font.Font(root=cls.root, name=fontname, exists=False) 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci def test_configure(self): 227db96d56Sopenharmony_ci options = self.font.configure() 237db96d56Sopenharmony_ci self.assertGreaterEqual(set(options), 247db96d56Sopenharmony_ci {'family', 'size', 'weight', 'slant', 'underline', 'overstrike'}) 257db96d56Sopenharmony_ci for key in options: 267db96d56Sopenharmony_ci self.assertEqual(self.font.cget(key), options[key]) 277db96d56Sopenharmony_ci self.assertEqual(self.font[key], options[key]) 287db96d56Sopenharmony_ci for key in 'family', 'weight', 'slant': 297db96d56Sopenharmony_ci self.assertIsInstance(options[key], str) 307db96d56Sopenharmony_ci self.assertIsInstance(self.font.cget(key), str) 317db96d56Sopenharmony_ci self.assertIsInstance(self.font[key], str) 327db96d56Sopenharmony_ci sizetype = int if self.wantobjects else str 337db96d56Sopenharmony_ci for key in 'size', 'underline', 'overstrike': 347db96d56Sopenharmony_ci self.assertIsInstance(options[key], sizetype) 357db96d56Sopenharmony_ci self.assertIsInstance(self.font.cget(key), sizetype) 367db96d56Sopenharmony_ci self.assertIsInstance(self.font[key], sizetype) 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci def test_unicode_family(self): 397db96d56Sopenharmony_ci family = 'MS \u30b4\u30b7\u30c3\u30af' 407db96d56Sopenharmony_ci try: 417db96d56Sopenharmony_ci f = font.Font(root=self.root, family=family, exists=True) 427db96d56Sopenharmony_ci except tkinter.TclError: 437db96d56Sopenharmony_ci f = font.Font(root=self.root, family=family, exists=False) 447db96d56Sopenharmony_ci self.assertEqual(f.cget('family'), family) 457db96d56Sopenharmony_ci del f 467db96d56Sopenharmony_ci gc_collect() 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci def test_actual(self): 497db96d56Sopenharmony_ci options = self.font.actual() 507db96d56Sopenharmony_ci self.assertGreaterEqual(set(options), 517db96d56Sopenharmony_ci {'family', 'size', 'weight', 'slant', 'underline', 'overstrike'}) 527db96d56Sopenharmony_ci for key in options: 537db96d56Sopenharmony_ci self.assertEqual(self.font.actual(key), options[key]) 547db96d56Sopenharmony_ci for key in 'family', 'weight', 'slant': 557db96d56Sopenharmony_ci self.assertIsInstance(options[key], str) 567db96d56Sopenharmony_ci self.assertIsInstance(self.font.actual(key), str) 577db96d56Sopenharmony_ci sizetype = int if self.wantobjects else str 587db96d56Sopenharmony_ci for key in 'size', 'underline', 'overstrike': 597db96d56Sopenharmony_ci self.assertIsInstance(options[key], sizetype) 607db96d56Sopenharmony_ci self.assertIsInstance(self.font.actual(key), sizetype) 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci def test_name(self): 637db96d56Sopenharmony_ci self.assertEqual(self.font.name, fontname) 647db96d56Sopenharmony_ci self.assertEqual(str(self.font), fontname) 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci def test_equality(self): 677db96d56Sopenharmony_ci font1 = font.Font(root=self.root, name=fontname, exists=True) 687db96d56Sopenharmony_ci font2 = font.Font(root=self.root, name=fontname, exists=True) 697db96d56Sopenharmony_ci self.assertIsNot(font1, font2) 707db96d56Sopenharmony_ci self.assertEqual(font1, font2) 717db96d56Sopenharmony_ci self.assertNotEqual(font1, font1.copy()) 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci self.assertNotEqual(font1, 0) 747db96d56Sopenharmony_ci self.assertEqual(font1, ALWAYS_EQ) 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci root2 = tkinter.Tk() 777db96d56Sopenharmony_ci self.addCleanup(root2.destroy) 787db96d56Sopenharmony_ci font3 = font.Font(root=root2, name=fontname, exists=True) 797db96d56Sopenharmony_ci self.assertEqual(str(font1), str(font3)) 807db96d56Sopenharmony_ci self.assertNotEqual(font1, font3) 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_ci def test_measure(self): 837db96d56Sopenharmony_ci self.assertIsInstance(self.font.measure('abc'), int) 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci def test_metrics(self): 867db96d56Sopenharmony_ci metrics = self.font.metrics() 877db96d56Sopenharmony_ci self.assertGreaterEqual(set(metrics), 887db96d56Sopenharmony_ci {'ascent', 'descent', 'linespace', 'fixed'}) 897db96d56Sopenharmony_ci for key in metrics: 907db96d56Sopenharmony_ci self.assertEqual(self.font.metrics(key), metrics[key]) 917db96d56Sopenharmony_ci self.assertIsInstance(metrics[key], int) 927db96d56Sopenharmony_ci self.assertIsInstance(self.font.metrics(key), int) 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci def test_families(self): 957db96d56Sopenharmony_ci families = font.families(self.root) 967db96d56Sopenharmony_ci self.assertIsInstance(families, tuple) 977db96d56Sopenharmony_ci self.assertTrue(families) 987db96d56Sopenharmony_ci for family in families: 997db96d56Sopenharmony_ci self.assertIsInstance(family, str) 1007db96d56Sopenharmony_ci self.assertTrue(family) 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci def test_names(self): 1037db96d56Sopenharmony_ci names = font.names(self.root) 1047db96d56Sopenharmony_ci self.assertIsInstance(names, tuple) 1057db96d56Sopenharmony_ci self.assertTrue(names) 1067db96d56Sopenharmony_ci for name in names: 1077db96d56Sopenharmony_ci self.assertIsInstance(name, str) 1087db96d56Sopenharmony_ci self.assertTrue(name) 1097db96d56Sopenharmony_ci self.assertIn(fontname, names) 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci def test_nametofont(self): 1127db96d56Sopenharmony_ci testfont = font.nametofont(fontname, root=self.root) 1137db96d56Sopenharmony_ci self.assertIsInstance(testfont, font.Font) 1147db96d56Sopenharmony_ci self.assertEqual(testfont.name, fontname) 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci def test_repr(self): 1177db96d56Sopenharmony_ci self.assertEqual( 1187db96d56Sopenharmony_ci repr(self.font), f'<tkinter.font.Font object {fontname!r}>' 1197db96d56Sopenharmony_ci ) 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ciclass DefaultRootTest(AbstractDefaultRootTest, unittest.TestCase): 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci def test_families(self): 1257db96d56Sopenharmony_ci self.assertRaises(RuntimeError, font.families) 1267db96d56Sopenharmony_ci root = tkinter.Tk() 1277db96d56Sopenharmony_ci families = font.families() 1287db96d56Sopenharmony_ci self.assertIsInstance(families, tuple) 1297db96d56Sopenharmony_ci self.assertTrue(families) 1307db96d56Sopenharmony_ci for family in families: 1317db96d56Sopenharmony_ci self.assertIsInstance(family, str) 1327db96d56Sopenharmony_ci self.assertTrue(family) 1337db96d56Sopenharmony_ci root.destroy() 1347db96d56Sopenharmony_ci tkinter.NoDefaultRoot() 1357db96d56Sopenharmony_ci self.assertRaises(RuntimeError, font.families) 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci def test_names(self): 1387db96d56Sopenharmony_ci self.assertRaises(RuntimeError, font.names) 1397db96d56Sopenharmony_ci root = tkinter.Tk() 1407db96d56Sopenharmony_ci names = font.names() 1417db96d56Sopenharmony_ci self.assertIsInstance(names, tuple) 1427db96d56Sopenharmony_ci self.assertTrue(names) 1437db96d56Sopenharmony_ci for name in names: 1447db96d56Sopenharmony_ci self.assertIsInstance(name, str) 1457db96d56Sopenharmony_ci self.assertTrue(name) 1467db96d56Sopenharmony_ci self.assertIn(fontname, names) 1477db96d56Sopenharmony_ci root.destroy() 1487db96d56Sopenharmony_ci tkinter.NoDefaultRoot() 1497db96d56Sopenharmony_ci self.assertRaises(RuntimeError, font.names) 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci def test_nametofont(self): 1527db96d56Sopenharmony_ci self.assertRaises(RuntimeError, font.nametofont, fontname) 1537db96d56Sopenharmony_ci root = tkinter.Tk() 1547db96d56Sopenharmony_ci testfont = font.nametofont(fontname) 1557db96d56Sopenharmony_ci self.assertIsInstance(testfont, font.Font) 1567db96d56Sopenharmony_ci self.assertEqual(testfont.name, fontname) 1577db96d56Sopenharmony_ci root.destroy() 1587db96d56Sopenharmony_ci tkinter.NoDefaultRoot() 1597db96d56Sopenharmony_ci self.assertRaises(RuntimeError, font.nametofont, fontname) 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ciif __name__ == "__main__": 1637db96d56Sopenharmony_ci unittest.main() 164