|
9 | 9 | import time |
10 | 10 | import unittest |
11 | 11 | import weakref |
| 12 | +import _tkinter |
12 | 13 | import tkinter |
13 | 14 | from tkinter import TclError, ttk |
14 | 15 | import enum |
|
24 | 25 |
|
25 | 26 | support.requires('gui') |
26 | 27 |
|
| 28 | +def check_version_info(test, vi): |
| 29 | + # The following is almost a copy of tests for sys.version_info. |
| 30 | + test.assertIsInstance(vi[:], tuple) |
| 31 | + test.assertEqual(len(vi), 5) |
| 32 | + test.assertIsInstance(vi[0], int) |
| 33 | + test.assertIsInstance(vi[1], int) |
| 34 | + test.assertIsInstance(vi[2], int) |
| 35 | + test.assertIn(vi[3], ("alpha", "beta", "candidate", "final")) |
| 36 | + test.assertIsInstance(vi[4], int) |
| 37 | + test.assertIsInstance(vi.major, int) |
| 38 | + test.assertIsInstance(vi.minor, int) |
| 39 | + test.assertIsInstance(vi.micro, int) |
| 40 | + test.assertIn(vi.releaselevel, ("alpha", "beta", "final")) |
| 41 | + test.assertIsInstance(vi.serial, int) |
| 42 | + test.assertEqual(vi[0], vi.major) |
| 43 | + test.assertEqual(vi[1], vi.minor) |
| 44 | + test.assertEqual(vi[2], vi.micro) |
| 45 | + test.assertEqual(vi[3], vi.releaselevel) |
| 46 | + test.assertEqual(vi[4], vi.serial) |
| 47 | + test.assertTrue(vi > (1,0,0)) |
| 48 | + if vi.releaselevel == 'final': |
| 49 | + test.assertEqual(vi.serial, 0) |
| 50 | + else: |
| 51 | + test.assertEqual(vi.micro, 0) |
| 52 | + test.assertStartsWith(str(vi), f'{vi.major}.{vi.minor}') |
| 53 | + |
| 54 | + |
| 55 | +class VersionTest(unittest.TestCase): |
| 56 | + |
| 57 | + def test_version_info(self): |
| 58 | + for vi, version, patchlevel in ( |
| 59 | + (tkinter.TCL_VERSION_INFO, _tkinter.TCL_VERSION, _tkinter.TCL_PATCH_LEVEL), |
| 60 | + (tkinter.TK_VERSION_INFO, _tkinter.TK_VERSION, _tkinter.TK_PATCH_LEVEL), |
| 61 | + ): |
| 62 | + with self.subTest(patchlevel=patchlevel): |
| 63 | + check_version_info(self, vi) |
| 64 | + self.assertEqual(str(vi), patchlevel) |
| 65 | + self.assertEqual(f'{vi.major}.{vi.minor}', version) |
| 66 | + self.assertEqual(tkinter.TclVersion, |
| 67 | + float(f'{tkinter.TCL_VERSION_INFO.major}.' |
| 68 | + f'{tkinter.TCL_VERSION_INFO.minor}')) |
| 69 | + |
| 70 | + |
27 | 71 | class MiscTest(AbstractTkTest, unittest.TestCase): |
28 | 72 |
|
29 | 73 | def test_all(self): |
@@ -830,30 +874,10 @@ def test_info_patchlevel(self): |
830 | 874 | vi = self.root.info_patchlevel() |
831 | 875 | f = tkinter.Frame(self.root) |
832 | 876 | self.assertEqual(f.info_patchlevel(), vi) |
833 | | - # The following is almost a copy of tests for sys.version_info. |
834 | | - self.assertIsInstance(vi[:], tuple) |
835 | | - self.assertEqual(len(vi), 5) |
836 | | - self.assertIsInstance(vi[0], int) |
837 | | - self.assertIsInstance(vi[1], int) |
838 | | - self.assertIsInstance(vi[2], int) |
839 | | - self.assertIn(vi[3], ("alpha", "beta", "candidate", "final")) |
840 | | - self.assertIsInstance(vi[4], int) |
841 | | - self.assertIsInstance(vi.major, int) |
842 | | - self.assertIsInstance(vi.minor, int) |
843 | | - self.assertIsInstance(vi.micro, int) |
844 | | - self.assertIn(vi.releaselevel, ("alpha", "beta", "final")) |
845 | | - self.assertIsInstance(vi.serial, int) |
846 | | - self.assertEqual(vi[0], vi.major) |
847 | | - self.assertEqual(vi[1], vi.minor) |
848 | | - self.assertEqual(vi[2], vi.micro) |
849 | | - self.assertEqual(vi[3], vi.releaselevel) |
850 | | - self.assertEqual(vi[4], vi.serial) |
851 | | - self.assertTrue(vi > (1,0,0)) |
852 | | - if vi.releaselevel == 'final': |
853 | | - self.assertEqual(vi.serial, 0) |
854 | | - else: |
855 | | - self.assertEqual(vi.micro, 0) |
856 | | - self.assertStartsWith(str(vi), f'{vi.major}.{vi.minor}') |
| 877 | + check_version_info(self, vi) |
| 878 | + # The Tcl library loaded at runtime should be compatible with |
| 879 | + # the one used for building the module. |
| 880 | + self.assertEqual(vi[:2], tkinter.TCL_VERSION_INFO[:2]) |
857 | 881 |
|
858 | 882 | def test_embedded_null(self): |
859 | 883 | widget = tkinter.Entry(self.root) |
|
0 commit comments