| 
									
										
										
										
											2010-09-17 23:27:09 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | import tkinter | 
					
						
							|  |  |  | from tkinter import font | 
					
						
							| 
									
										
										
										
											2021-10-13 19:12:48 +03:00
										 |  |  | from test.support import requires, gc_collect, ALWAYS_EQ | 
					
						
							| 
									
										
										
										
											2022-06-22 22:23:37 +02:00
										 |  |  | from test.test_tkinter.support import AbstractTkTest, AbstractDefaultRootTest | 
					
						
							| 
									
										
										
										
											2010-09-17 23:27:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | requires('gui') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 07:18:54 +03:00
										 |  |  | fontname = "TkDefaultFont" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-24 09:07:47 +03:00
										 |  |  | class FontTest(AbstractTkTest, unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2010-09-21 16:26:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 07:18:54 +03:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							| 
									
										
										
										
											2015-11-10 15:30:35 +02:00
										 |  |  |         AbstractTkTest.setUpClass.__func__(cls) | 
					
						
							| 
									
										
										
										
											2010-10-05 11:24:49 +00:00
										 |  |  |         try: | 
					
						
							| 
									
										
										
										
											2015-06-09 07:18:54 +03:00
										 |  |  |             cls.font = font.Font(root=cls.root, name=fontname, exists=True) | 
					
						
							|  |  |  |         except tkinter.TclError: | 
					
						
							|  |  |  |             cls.font = font.Font(root=cls.root, name=fontname, exists=False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_configure(self): | 
					
						
							|  |  |  |         options = self.font.configure() | 
					
						
							|  |  |  |         self.assertGreaterEqual(set(options), | 
					
						
							|  |  |  |             {'family', 'size', 'weight', 'slant', 'underline', 'overstrike'}) | 
					
						
							|  |  |  |         for key in options: | 
					
						
							|  |  |  |             self.assertEqual(self.font.cget(key), options[key]) | 
					
						
							|  |  |  |             self.assertEqual(self.font[key], options[key]) | 
					
						
							|  |  |  |         for key in 'family', 'weight', 'slant': | 
					
						
							|  |  |  |             self.assertIsInstance(options[key], str) | 
					
						
							|  |  |  |             self.assertIsInstance(self.font.cget(key), str) | 
					
						
							|  |  |  |             self.assertIsInstance(self.font[key], str) | 
					
						
							|  |  |  |         sizetype = int if self.wantobjects else str | 
					
						
							|  |  |  |         for key in 'size', 'underline', 'overstrike': | 
					
						
							|  |  |  |             self.assertIsInstance(options[key], sizetype) | 
					
						
							|  |  |  |             self.assertIsInstance(self.font.cget(key), sizetype) | 
					
						
							|  |  |  |             self.assertIsInstance(self.font[key], sizetype) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-27 17:01:31 +03:00
										 |  |  |     def test_unicode_family(self): | 
					
						
							|  |  |  |         family = 'MS \u30b4\u30b7\u30c3\u30af' | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             f = font.Font(root=self.root, family=family, exists=True) | 
					
						
							|  |  |  |         except tkinter.TclError: | 
					
						
							|  |  |  |             f = font.Font(root=self.root, family=family, exists=False) | 
					
						
							|  |  |  |         self.assertEqual(f.cget('family'), family) | 
					
						
							|  |  |  |         del f | 
					
						
							|  |  |  |         gc_collect() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 07:18:54 +03:00
										 |  |  |     def test_actual(self): | 
					
						
							|  |  |  |         options = self.font.actual() | 
					
						
							|  |  |  |         self.assertGreaterEqual(set(options), | 
					
						
							|  |  |  |             {'family', 'size', 'weight', 'slant', 'underline', 'overstrike'}) | 
					
						
							|  |  |  |         for key in options: | 
					
						
							|  |  |  |             self.assertEqual(self.font.actual(key), options[key]) | 
					
						
							|  |  |  |         for key in 'family', 'weight', 'slant': | 
					
						
							|  |  |  |             self.assertIsInstance(options[key], str) | 
					
						
							|  |  |  |             self.assertIsInstance(self.font.actual(key), str) | 
					
						
							|  |  |  |         sizetype = int if self.wantobjects else str | 
					
						
							|  |  |  |         for key in 'size', 'underline', 'overstrike': | 
					
						
							|  |  |  |             self.assertIsInstance(options[key], sizetype) | 
					
						
							|  |  |  |             self.assertIsInstance(self.font.actual(key), sizetype) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_name(self): | 
					
						
							|  |  |  |         self.assertEqual(self.font.name, fontname) | 
					
						
							|  |  |  |         self.assertEqual(str(self.font), fontname) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-29 12:56:55 +02:00
										 |  |  |     def test_equality(self): | 
					
						
							| 
									
										
										
										
											2014-08-24 09:07:47 +03:00
										 |  |  |         font1 = font.Font(root=self.root, name=fontname, exists=True) | 
					
						
							|  |  |  |         font2 = font.Font(root=self.root, name=fontname, exists=True) | 
					
						
							| 
									
										
										
										
											2010-09-17 23:27:09 +00:00
										 |  |  |         self.assertIsNot(font1, font2) | 
					
						
							|  |  |  |         self.assertEqual(font1, font2) | 
					
						
							|  |  |  |         self.assertNotEqual(font1, font1.copy()) | 
					
						
							| 
									
										
										
										
											2020-12-29 12:56:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-17 23:27:09 +00:00
										 |  |  |         self.assertNotEqual(font1, 0) | 
					
						
							| 
									
										
										
										
											2019-08-08 08:42:54 +03:00
										 |  |  |         self.assertEqual(font1, ALWAYS_EQ) | 
					
						
							| 
									
										
										
										
											2010-09-17 23:27:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-29 12:56:55 +02:00
										 |  |  |         root2 = tkinter.Tk() | 
					
						
							|  |  |  |         self.addCleanup(root2.destroy) | 
					
						
							|  |  |  |         font3 = font.Font(root=root2, name=fontname, exists=True) | 
					
						
							|  |  |  |         self.assertEqual(str(font1), str(font3)) | 
					
						
							|  |  |  |         self.assertNotEqual(font1, font3) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 07:18:54 +03:00
										 |  |  |     def test_measure(self): | 
					
						
							|  |  |  |         self.assertIsInstance(self.font.measure('abc'), int) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_metrics(self): | 
					
						
							|  |  |  |         metrics = self.font.metrics() | 
					
						
							|  |  |  |         self.assertGreaterEqual(set(metrics), | 
					
						
							|  |  |  |             {'ascent', 'descent', 'linespace', 'fixed'}) | 
					
						
							|  |  |  |         for key in metrics: | 
					
						
							|  |  |  |             self.assertEqual(self.font.metrics(key), metrics[key]) | 
					
						
							|  |  |  |             self.assertIsInstance(metrics[key], int) | 
					
						
							|  |  |  |             self.assertIsInstance(self.font.metrics(key), int) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_families(self): | 
					
						
							|  |  |  |         families = font.families(self.root) | 
					
						
							| 
									
										
										
										
											2015-06-21 14:41:44 +03:00
										 |  |  |         self.assertIsInstance(families, tuple) | 
					
						
							|  |  |  |         self.assertTrue(families) | 
					
						
							|  |  |  |         for family in families: | 
					
						
							|  |  |  |             self.assertIsInstance(family, str) | 
					
						
							|  |  |  |             self.assertTrue(family) | 
					
						
							| 
									
										
										
										
											2015-06-09 07:18:54 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_names(self): | 
					
						
							|  |  |  |         names = font.names(self.root) | 
					
						
							| 
									
										
										
										
											2015-06-21 14:41:44 +03:00
										 |  |  |         self.assertIsInstance(names, tuple) | 
					
						
							|  |  |  |         self.assertTrue(names) | 
					
						
							|  |  |  |         for name in names: | 
					
						
							|  |  |  |             self.assertIsInstance(name, str) | 
					
						
							|  |  |  |             self.assertTrue(name) | 
					
						
							| 
									
										
										
										
											2015-06-09 07:18:54 +03:00
										 |  |  |         self.assertIn(fontname, names) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-26 05:18:06 +08:00
										 |  |  |     def test_nametofont(self): | 
					
						
							|  |  |  |         testfont = font.nametofont(fontname, root=self.root) | 
					
						
							|  |  |  |         self.assertIsInstance(testfont, font.Font) | 
					
						
							|  |  |  |         self.assertEqual(testfont.name, fontname) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-14 13:02:51 +03:00
										 |  |  |     def test_repr(self): | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             repr(self.font), f'<tkinter.font.Font object {fontname!r}>' | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-19 12:17:08 +02:00
										 |  |  | class DefaultRootTest(AbstractDefaultRootTest, unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_families(self): | 
					
						
							|  |  |  |         self.assertRaises(RuntimeError, font.families) | 
					
						
							|  |  |  |         root = tkinter.Tk() | 
					
						
							|  |  |  |         families = font.families() | 
					
						
							|  |  |  |         self.assertIsInstance(families, tuple) | 
					
						
							|  |  |  |         self.assertTrue(families) | 
					
						
							|  |  |  |         for family in families: | 
					
						
							|  |  |  |             self.assertIsInstance(family, str) | 
					
						
							|  |  |  |             self.assertTrue(family) | 
					
						
							|  |  |  |         root.destroy() | 
					
						
							|  |  |  |         tkinter.NoDefaultRoot() | 
					
						
							|  |  |  |         self.assertRaises(RuntimeError, font.families) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_names(self): | 
					
						
							|  |  |  |         self.assertRaises(RuntimeError, font.names) | 
					
						
							|  |  |  |         root = tkinter.Tk() | 
					
						
							|  |  |  |         names = font.names() | 
					
						
							|  |  |  |         self.assertIsInstance(names, tuple) | 
					
						
							|  |  |  |         self.assertTrue(names) | 
					
						
							|  |  |  |         for name in names: | 
					
						
							|  |  |  |             self.assertIsInstance(name, str) | 
					
						
							|  |  |  |             self.assertTrue(name) | 
					
						
							|  |  |  |         self.assertIn(fontname, names) | 
					
						
							|  |  |  |         root.destroy() | 
					
						
							|  |  |  |         tkinter.NoDefaultRoot() | 
					
						
							|  |  |  |         self.assertRaises(RuntimeError, font.names) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-26 05:18:06 +08:00
										 |  |  |     def test_nametofont(self): | 
					
						
							|  |  |  |         self.assertRaises(RuntimeError, font.nametofont, fontname) | 
					
						
							|  |  |  |         root = tkinter.Tk() | 
					
						
							|  |  |  |         testfont = font.nametofont(fontname) | 
					
						
							|  |  |  |         self.assertIsInstance(testfont, font.Font) | 
					
						
							|  |  |  |         self.assertEqual(testfont.name, fontname) | 
					
						
							|  |  |  |         root.destroy() | 
					
						
							|  |  |  |         tkinter.NoDefaultRoot() | 
					
						
							|  |  |  |         self.assertRaises(RuntimeError, font.nametofont, fontname) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-19 12:17:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-17 23:27:09 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2021-10-13 19:12:48 +03:00
										 |  |  |     unittest.main() |