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