aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_tkinter
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2023-08-07 14:11:39 +0300
committerGitHub <noreply@github.com>2023-08-07 14:11:39 +0300
commit3c8e8f3ceeae08fc43d885f5a4c65a3ee4b1a2c8 (patch)
tree3c8a19ba8237d6468c6b28928d90e5acfcff5973 /Lib/test/test_tkinter
parent6925c578a0e3cbb00858e64da813a7ffe79623c4 (diff)
downloadcpython-3c8e8f3ceeae08fc43d885f5a4c65a3ee4b1a2c8.tar.gz
cpython-3c8e8f3ceeae08fc43d885f5a4c65a3ee4b1a2c8.zip
gh-104496: Use correct Tcl or Tk version in Tkinter tests (GH-107688)
In future Tcl and Tk versions can be desynchronized.
Diffstat (limited to 'Lib/test/test_tkinter')
-rw-r--r--Lib/test/test_tkinter/support.py18
-rw-r--r--Lib/test/test_tkinter/test_images.py6
-rw-r--r--Lib/test/test_tkinter/test_widgets.py16
-rw-r--r--Lib/test/test_tkinter/widget_tests.py6
4 files changed, 23 insertions, 23 deletions
diff --git a/Lib/test/test_tkinter/support.py b/Lib/test/test_tkinter/support.py
index 9154ebac5c4..10e64bf40a4 100644
--- a/Lib/test/test_tkinter/support.py
+++ b/Lib/test/test_tkinter/support.py
@@ -79,28 +79,28 @@ def simulate_mouse_click(widget, x, y):
import _tkinter
tcl_version = tuple(map(int, _tkinter.TCL_VERSION.split('.')))
+tk_version = tuple(map(int, _tkinter.TK_VERSION.split('.')))
-def requires_tcl(*version):
- if len(version) <= 2:
- return unittest.skipUnless(tcl_version >= version,
- 'requires Tcl version >= ' + '.'.join(map(str, version)))
+def requires_tk(*version):
+ if len(version) <= 2 and tk_version >= version:
+ return lambda test: test
def deco(test):
@functools.wraps(test)
def newtest(self):
- if get_tk_patchlevel() < version:
- self.skipTest('requires Tcl version >= ' +
+ root = getattr(self, 'root', None)
+ if get_tk_patchlevel(root) < version:
+ self.skipTest('requires Tk version >= ' +
'.'.join(map(str, version)))
test(self)
return newtest
return deco
_tk_patchlevel = None
-def get_tk_patchlevel():
+def get_tk_patchlevel(root):
global _tk_patchlevel
if _tk_patchlevel is None:
- tcl = tkinter.Tcl()
- _tk_patchlevel = tcl.info_patchlevel()
+ _tk_patchlevel = tkinter._parse_version(root.tk.globalgetvar('tk_patchLevel'))
return _tk_patchlevel
units = {
diff --git a/Lib/test/test_tkinter/test_images.py b/Lib/test/test_tkinter/test_images.py
index c07de867ce0..b6ba1c22dcb 100644
--- a/Lib/test/test_tkinter/test_images.py
+++ b/Lib/test/test_tkinter/test_images.py
@@ -2,7 +2,7 @@ import unittest
import tkinter
from test import support
from test.support import os_helper
-from test.test_tkinter.support import AbstractTkTest, AbstractDefaultRootTest, requires_tcl
+from test.test_tkinter.support import AbstractTkTest, AbstractDefaultRootTest, requires_tk
support.requires('gui')
@@ -213,11 +213,11 @@ class PhotoImageTest(AbstractTkTest, unittest.TestCase):
def test_create_from_gif_data(self):
self.check_create_from_data('gif')
- @requires_tcl(8, 6)
+ @requires_tk(8, 6)
def test_create_from_png_file(self):
self.check_create_from_file('png')
- @requires_tcl(8, 6)
+ @requires_tk(8, 6)
def test_create_from_png_data(self):
self.check_create_from_data('png')
diff --git a/Lib/test/test_tkinter/test_widgets.py b/Lib/test/test_tkinter/test_widgets.py
index 34e67c0cbc4..d3f942db7ba 100644
--- a/Lib/test/test_tkinter/test_widgets.py
+++ b/Lib/test/test_tkinter/test_widgets.py
@@ -4,7 +4,7 @@ from tkinter import TclError
import os
from test.support import requires
-from test.test_tkinter.support import (requires_tcl,
+from test.test_tkinter.support import (requires_tk,
get_tk_patchlevel, widget_eq,
AbstractDefaultRootTest)
from test.test_tkinter.widget_tests import (
@@ -613,7 +613,7 @@ class TextTest(AbstractWidgetTest, unittest.TestCase):
widget = self.create()
self.checkColorParam(widget, 'inactiveselectbackground')
- @requires_tcl(8, 6)
+ @requires_tk(8, 6)
def test_configure_insertunfocussed(self):
widget = self.create()
self.checkEnumParam(widget, 'insertunfocussed',
@@ -924,7 +924,7 @@ class CanvasTest(AbstractWidgetTest, unittest.TestCase):
for i in range(4):
self.assertIsInstance(coords[i], float)
- @requires_tcl(8, 6)
+ @requires_tk(8, 6)
def test_moveto(self):
widget = self.create()
i1 = widget.create_rectangle(1, 1, 20, 20, tags='group')
@@ -969,7 +969,7 @@ class ListboxTest(AbstractWidgetTest, unittest.TestCase):
self.checkEnumParam(widget, 'activestyle',
'dotbox', 'none', 'underline')
- test_configure_justify = requires_tcl(8, 6, 5)(StandardOptionsTests.test_configure_justify)
+ test_configure_justify = requires_tk(8, 6, 5)(StandardOptionsTests.test_configure_justify)
def test_configure_listvariable(self):
widget = self.create()
@@ -1108,7 +1108,7 @@ class ScaleTest(AbstractWidgetTest, unittest.TestCase):
def test_configure_from(self):
widget = self.create()
- conv = float if get_tk_patchlevel() >= (8, 6, 10) else float_round
+ conv = float if get_tk_patchlevel(self.root) >= (8, 6, 10) else float_round
self.checkFloatParam(widget, 'from', 100, 14.9, 15.1, conv=conv)
def test_configure_label(self):
@@ -1235,19 +1235,19 @@ class PanedWindowTest(AbstractWidgetTest, unittest.TestCase):
widget = self.create()
self.checkBooleanParam(widget, 'opaqueresize')
- @requires_tcl(8, 6, 5)
+ @requires_tk(8, 6, 5)
def test_configure_proxybackground(self):
widget = self.create()
self.checkColorParam(widget, 'proxybackground')
- @requires_tcl(8, 6, 5)
+ @requires_tk(8, 6, 5)
def test_configure_proxyborderwidth(self):
widget = self.create()
self.checkPixelsParam(widget, 'proxyborderwidth',
0, 1.3, 2.9, 6, -2, '10p',
conv=False)
- @requires_tcl(8, 6, 5)
+ @requires_tk(8, 6, 5)
def test_configure_proxyrelief(self):
widget = self.create()
self.checkReliefParam(widget, 'proxyrelief')
diff --git a/Lib/test/test_tkinter/widget_tests.py b/Lib/test/test_tkinter/widget_tests.py
index f60087a6e9f..31f82f459be 100644
--- a/Lib/test/test_tkinter/widget_tests.py
+++ b/Lib/test/test_tkinter/widget_tests.py
@@ -1,7 +1,7 @@
# Common tests for test_tkinter/test_widgets.py and test_ttk/test_widgets.py
import tkinter
-from test.test_tkinter.support import (AbstractTkTest, tcl_version,
+from test.test_tkinter.support import (AbstractTkTest, tk_version,
pixels_conv, tcl_obj_eq)
import test.support
@@ -22,7 +22,7 @@ class AbstractWidgetTest(AbstractTkTest):
return self._scaling
def _str(self, value):
- if not self._stringify and self.wantobjects and tcl_version >= (8, 6):
+ if not self._stringify and self.wantobjects and tk_version >= (8, 6):
return value
if isinstance(value, tuple):
return ' '.join(map(self._str, value))
@@ -156,7 +156,7 @@ class AbstractWidgetTest(AbstractTkTest):
'flat', 'groove', 'raised', 'ridge', 'solid', 'sunken')
errmsg='bad relief "spam": must be '\
'flat, groove, raised, ridge, solid, or sunken'
- if tcl_version < (8, 6):
+ if tk_version < (8, 6):
errmsg = None
self.checkInvalidParam(widget, name, 'spam',
errmsg=errmsg)