Commit f87854e7 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Fix Tkinter tests on Tk 8.5 with patchlevel < 8.5.11 (issue #19085).

parent b8147452
...@@ -3,7 +3,8 @@ import Tkinter ...@@ -3,7 +3,8 @@ import Tkinter
import os import os
from test.test_support import requires, run_unittest from test.test_support import requires, run_unittest
from test_ttk.support import tcl_version, requires_tcl, widget_eq from test_ttk.support import (tcl_version, requires_tcl, get_tk_patchlevel,
widget_eq)
from widget_tests import ( from widget_tests import (
add_standard_options, noconv, noconv_meth, int_round, pixels_round, add_standard_options, noconv, noconv_meth, int_round, pixels_round,
AbstractWidgetTest, StandardOptionsTests, AbstractWidgetTest, StandardOptionsTests,
...@@ -536,7 +537,7 @@ class TextTest(AbstractWidgetTest, unittest.TestCase): ...@@ -536,7 +537,7 @@ class TextTest(AbstractWidgetTest, unittest.TestCase):
def test_selectborderwidth(self): def test_selectborderwidth(self):
widget = self.create() widget = self.create()
self.checkPixelsParam(widget, 'selectborderwidth', self.checkPixelsParam(widget, 'selectborderwidth',
1.3, 2.6, -2, '10p', conv=False, 1.3, 2.6, -2, '10p', conv=noconv,
keep_orig=tcl_version >= (8, 5)) keep_orig=tcl_version >= (8, 5))
def test_spacing1(self): def test_spacing1(self):
...@@ -577,7 +578,11 @@ class TextTest(AbstractWidgetTest, unittest.TestCase): ...@@ -577,7 +578,11 @@ class TextTest(AbstractWidgetTest, unittest.TestCase):
def test_tabs(self): def test_tabs(self):
widget = self.create() widget = self.create()
self.checkParam(widget, 'tabs', (10.2, 20.7, '1i', '2i')) if get_tk_patchlevel() < (8, 5, 11):
self.checkParam(widget, 'tabs', (10.2, 20.7, '1i', '2i'),
expected=('10.2', '20.7', '1i', '2i'))
else:
self.checkParam(widget, 'tabs', (10.2, 20.7, '1i', '2i'))
self.checkParam(widget, 'tabs', '10.2 20.7 1i 2i', self.checkParam(widget, 'tabs', '10.2 20.7 1i 2i',
expected=('10.2', '20.7', '1i', '2i')) expected=('10.2', '20.7', '1i', '2i'))
self.checkParam(widget, 'tabs', '2c left 4c 6c center', self.checkParam(widget, 'tabs', '2c left 4c 6c center',
......
...@@ -41,6 +41,21 @@ def requires_tcl(*version): ...@@ -41,6 +41,21 @@ def requires_tcl(*version):
return unittest.skipUnless(tcl_version >= version, return unittest.skipUnless(tcl_version >= version,
'requires Tcl version >= ' + '.'.join(map(str, version))) 'requires Tcl version >= ' + '.'.join(map(str, version)))
_tk_patchlevel = None
def get_tk_patchlevel():
global _tk_patchlevel
if _tk_patchlevel is None:
tcl = Tkinter.Tcl()
patchlevel = []
for x in tcl.call('info', 'patchlevel').split('.'):
try:
x = int(x, 10)
except ValueError:
x = -1
patchlevel.append(x)
_tk_patchlevel = tuple(patchlevel)
return _tk_patchlevel
units = { units = {
'c': 72 / 2.54, # centimeters 'c': 72 / 2.54, # centimeters
'i': 72, # inches 'i': 72, # inches
......
...@@ -2,31 +2,23 @@ ...@@ -2,31 +2,23 @@
import Tkinter import Tkinter
from ttk import setup_master, Scale from ttk import setup_master, Scale
from test_ttk.support import tcl_version, requires_tcl, pixels_conv, tcl_obj_eq from test_ttk.support import (tcl_version, requires_tcl, get_tk_patchlevel,
pixels_conv, tcl_obj_eq)
noconv = str if tcl_version < (8, 5) else False noconv = noconv_meth = False
if get_tk_patchlevel() < (8, 5, 11):
noconv = str
noconv_meth = noconv and staticmethod(noconv) noconv_meth = noconv and staticmethod(noconv)
def int_round(x): def int_round(x):
return int(round(x)) return int(round(x))
pixels_round = int_round pixels_round = int_round
if tcl_version[:2] == (8, 5): if get_tk_patchlevel()[:3] == (8, 5, 11):
# Issue #19085: Workaround a bug in Tk # Issue #19085: Workaround a bug in Tk
# http://core.tcl.tk/tk/info/3497848 # http://core.tcl.tk/tk/info/3497848
_pixels_round = None pixels_round = int
def pixels_round(x):
global _pixels_round
if _pixels_round is None:
root = setup_master()
patchlevel = root.call('info', 'patchlevel')
patchlevel = tuple(map(int, patchlevel.split('.')))
if patchlevel < (8, 5, 12):
_pixels_round = int
else:
_pixels_round = int_round
return _pixels_round(x)
_sentinel = object() _sentinel = object()
...@@ -424,10 +416,7 @@ class StandardOptionsTests(object): ...@@ -424,10 +416,7 @@ class StandardOptionsTests(object):
def test_wraplength(self): def test_wraplength(self):
widget = self.create() widget = self.create()
if tcl_version < (8, 5): self.checkPixelsParam(widget, 'wraplength', 100)
self.checkPixelsParam(widget, 'wraplength', 100)
else:
self.checkParams(widget, 'wraplength', 100)
def test_xscrollcommand(self): def test_xscrollcommand(self):
widget = self.create() widget = self.create()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment