mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #22236: Tkinter tests now don't reuse default root window. New root
window is created for every test class. Fixed Tkinter images copying operations in NoDefaultRoot mode. Tcl command names generated for "after" callbacks now contains a name of original function.
This commit is contained in:
commit
66106626ed
15 changed files with 230 additions and 270 deletions
|
@ -2,26 +2,20 @@ import unittest
|
|||
import tkinter
|
||||
from tkinter import font
|
||||
from test.support import requires, run_unittest
|
||||
import tkinter.test.support as support
|
||||
from tkinter.test.support import AbstractTkTest
|
||||
|
||||
requires('gui')
|
||||
|
||||
class FontTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
support.root_deiconify()
|
||||
|
||||
def tearDown(self):
|
||||
support.root_withdraw()
|
||||
class FontTest(AbstractTkTest, unittest.TestCase):
|
||||
|
||||
def test_font_eq(self):
|
||||
fontname = "TkDefaultFont"
|
||||
try:
|
||||
f = font.Font(name=fontname, exists=True)
|
||||
f = font.Font(root=self.root, name=fontname, exists=True)
|
||||
except tkinter._tkinter.TclError:
|
||||
f = font.Font(name=fontname, exists=False)
|
||||
font1 = font.nametofont(fontname)
|
||||
font2 = font.nametofont(fontname)
|
||||
f = font.Font(root=self.root, name=fontname, exists=False)
|
||||
font1 = font.Font(root=self.root, name=fontname, exists=True)
|
||||
font2 = font.Font(root=self.root, name=fontname, exists=True)
|
||||
self.assertIsNot(font1, font2)
|
||||
self.assertEqual(font1, font2)
|
||||
self.assertNotEqual(font1, font1.copy())
|
||||
|
|
|
@ -278,7 +278,7 @@ class PlaceTest(AbstractWidgetTest, unittest.TestCase):
|
|||
|
||||
def create2(self):
|
||||
t = tkinter.Toplevel(self.root, width=300, height=200, bd=0)
|
||||
t.wm_geometry('+0+0')
|
||||
t.wm_geometry('300x200+0+0')
|
||||
f = tkinter.Frame(t, width=154, height=84, bd=2, relief='raised')
|
||||
f.place_configure(x=48, y=38)
|
||||
f2 = tkinter.Frame(t, width=30, height=60, bd=2, relief='raised')
|
||||
|
@ -479,7 +479,6 @@ class PlaceTest(AbstractWidgetTest, unittest.TestCase):
|
|||
class GridTest(AbstractWidgetTest, unittest.TestCase):
|
||||
|
||||
def tearDown(self):
|
||||
super().tearDown()
|
||||
cols, rows = self.root.grid_size()
|
||||
for i in range(cols + 1):
|
||||
self.root.grid_columnconfigure(i, weight=0, minsize=0, pad=0, uniform='')
|
||||
|
@ -488,10 +487,10 @@ class GridTest(AbstractWidgetTest, unittest.TestCase):
|
|||
self.root.grid_propagate(1)
|
||||
if tcl_version >= (8, 5):
|
||||
self.root.grid_anchor('nw')
|
||||
super().tearDown()
|
||||
|
||||
def test_grid_configure(self):
|
||||
b = tkinter.Button(self.root)
|
||||
self.addCleanup(b.destroy)
|
||||
self.assertEqual(b.grid_info(), {})
|
||||
b.grid_configure()
|
||||
self.assertEqual(b.grid_info()['in'], self.root)
|
||||
|
@ -578,7 +577,6 @@ class GridTest(AbstractWidgetTest, unittest.TestCase):
|
|||
|
||||
def test_grid_configure_row(self):
|
||||
b = tkinter.Button(self.root)
|
||||
self.addCleanup(b.destroy)
|
||||
with self.assertRaisesRegex(TclError, 'bad (row|grid) value "-1": '
|
||||
'must be a non-negative integer'):
|
||||
b.grid_configure(row=-1)
|
||||
|
@ -795,7 +793,7 @@ class GridTest(AbstractWidgetTest, unittest.TestCase):
|
|||
self.root.grid_bbox(0, 0, 0, 'x')
|
||||
with self.assertRaises(TypeError):
|
||||
self.root.grid_bbox(0, 0, 0, 0, 0)
|
||||
t = tkinter.Toplevel(self.root)
|
||||
t = self.root
|
||||
# de-maximize
|
||||
t.wm_geometry('1x1+0+0')
|
||||
t.wm_geometry('')
|
||||
|
@ -823,7 +821,7 @@ class GridTest(AbstractWidgetTest, unittest.TestCase):
|
|||
self.root.grid_location('x', 'y')
|
||||
with self.assertRaisesRegex(TclError, 'bad screen distance "y"'):
|
||||
self.root.grid_location('1c', 'y')
|
||||
t = tkinter.Toplevel(self.root)
|
||||
t = self.root
|
||||
# de-maximize
|
||||
t.wm_geometry('1x1+0+0')
|
||||
t.wm_geometry('')
|
||||
|
|
|
@ -1,16 +1,12 @@
|
|||
import unittest
|
||||
import tkinter
|
||||
from tkinter import ttk
|
||||
from test import support
|
||||
from tkinter.test.support import requires_tcl
|
||||
from tkinter.test.support import AbstractTkTest, requires_tcl
|
||||
|
||||
support.requires('gui')
|
||||
|
||||
|
||||
class MiscTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.root = ttk.setup_master()
|
||||
class MiscTest(AbstractTkTest, unittest.TestCase):
|
||||
|
||||
def test_image_types(self):
|
||||
image_types = self.root.image_types()
|
||||
|
@ -23,15 +19,13 @@ class MiscTest(unittest.TestCase):
|
|||
self.assertIsInstance(image_names, tuple)
|
||||
|
||||
|
||||
class BitmapImageTest(unittest.TestCase):
|
||||
class BitmapImageTest(AbstractTkTest, unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
AbstractTkTest.setUpClass.__func__(cls)
|
||||
cls.testfile = support.findfile('python.xbm', subdir='imghdrdata')
|
||||
|
||||
def setUp(self):
|
||||
self.root = ttk.setup_master()
|
||||
|
||||
def test_create_from_file(self):
|
||||
image = tkinter.BitmapImage('::img::test', master=self.root,
|
||||
foreground='yellow', background='blue',
|
||||
|
@ -107,16 +101,13 @@ class BitmapImageTest(unittest.TestCase):
|
|||
'-foreground {} {} #000000 yellow')
|
||||
|
||||
|
||||
class PhotoImageTest(unittest.TestCase):
|
||||
class PhotoImageTest(AbstractTkTest, unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
AbstractTkTest.setUpClass.__func__(cls)
|
||||
cls.testfile = support.findfile('python.gif', subdir='imghdrdata')
|
||||
|
||||
def setUp(self):
|
||||
self.root = ttk.setup_master()
|
||||
self.wantobjects = self.root.wantobjects()
|
||||
|
||||
def create(self):
|
||||
return tkinter.PhotoImage('::img::test', master=self.root,
|
||||
file=self.testfile)
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
import unittest
|
||||
import tkinter
|
||||
from tkinter import ttk
|
||||
from test import support
|
||||
from tkinter.test.support import AbstractTkTest
|
||||
|
||||
support.requires('gui')
|
||||
|
||||
class MiscTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.root = ttk.setup_master()
|
||||
class MiscTest(AbstractTkTest, unittest.TestCase):
|
||||
|
||||
def test_repr(self):
|
||||
t = tkinter.Toplevel(self.root, name='top')
|
||||
|
|
|
@ -1,19 +1,16 @@
|
|||
import unittest
|
||||
import tkinter
|
||||
from test.support import requires, run_unittest
|
||||
from tkinter.ttk import setup_master
|
||||
from tkinter.test.support import AbstractTkTest
|
||||
|
||||
requires('gui')
|
||||
|
||||
class TextTest(unittest.TestCase):
|
||||
class TextTest(AbstractTkTest, unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.root = setup_master()
|
||||
super().setUp()
|
||||
self.text = tkinter.Text(self.root)
|
||||
|
||||
def tearDown(self):
|
||||
self.text.destroy()
|
||||
|
||||
def test_debug(self):
|
||||
text = self.text
|
||||
olddebug = text.debug()
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import unittest
|
||||
|
||||
from tkinter import Variable, StringVar, IntVar, DoubleVar, BooleanVar, Tk
|
||||
from tkinter import Variable, StringVar, IntVar, DoubleVar, BooleanVar, Tcl
|
||||
|
||||
|
||||
class Var(Variable):
|
||||
|
@ -16,10 +16,10 @@ class Var(Variable):
|
|||
class TestBase(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.root = Tk()
|
||||
self.root = Tcl()
|
||||
|
||||
def tearDown(self):
|
||||
self.root.destroy()
|
||||
del self.root
|
||||
|
||||
|
||||
class TestVariable(TestBase):
|
||||
|
@ -81,7 +81,7 @@ class TestVariable(TestBase):
|
|||
self.root.setvar(b'var\x00name', "value")
|
||||
|
||||
def test_initialize(self):
|
||||
v = Var()
|
||||
v = Var(self.root)
|
||||
self.assertFalse(v.side_effect)
|
||||
v.set("value")
|
||||
self.assertTrue(v.side_effect)
|
||||
|
|
|
@ -66,7 +66,7 @@ class ToplevelTest(AbstractToplevelTest, unittest.TestCase):
|
|||
'takefocus', 'use', 'visual', 'width',
|
||||
)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Toplevel(self.root, **kwargs)
|
||||
|
||||
def test_menu(self):
|
||||
|
@ -105,7 +105,7 @@ class FrameTest(AbstractToplevelTest, unittest.TestCase):
|
|||
'relief', 'takefocus', 'visual', 'width',
|
||||
)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Frame(self.root, **kwargs)
|
||||
|
||||
|
||||
|
@ -120,7 +120,7 @@ class LabelFrameTest(AbstractToplevelTest, unittest.TestCase):
|
|||
'takefocus', 'text', 'visual', 'width',
|
||||
)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.LabelFrame(self.root, **kwargs)
|
||||
|
||||
def test_labelanchor(self):
|
||||
|
@ -158,7 +158,7 @@ class LabelTest(AbstractLabelTest, unittest.TestCase):
|
|||
'underline', 'width', 'wraplength',
|
||||
)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Label(self.root, **kwargs)
|
||||
|
||||
|
||||
|
@ -175,7 +175,7 @@ class ButtonTest(AbstractLabelTest, unittest.TestCase):
|
|||
'state', 'takefocus', 'text', 'textvariable',
|
||||
'underline', 'width', 'wraplength')
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Button(self.root, **kwargs)
|
||||
|
||||
def test_default(self):
|
||||
|
@ -199,7 +199,7 @@ class CheckbuttonTest(AbstractLabelTest, unittest.TestCase):
|
|||
'underline', 'variable', 'width', 'wraplength',
|
||||
)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Checkbutton(self.root, **kwargs)
|
||||
|
||||
|
||||
|
@ -227,7 +227,7 @@ class RadiobuttonTest(AbstractLabelTest, unittest.TestCase):
|
|||
'underline', 'value', 'variable', 'width', 'wraplength',
|
||||
)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Radiobutton(self.root, **kwargs)
|
||||
|
||||
def test_value(self):
|
||||
|
@ -250,7 +250,7 @@ class MenubuttonTest(AbstractLabelTest, unittest.TestCase):
|
|||
)
|
||||
_conv_pixels = staticmethod(pixels_round)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Menubutton(self.root, **kwargs)
|
||||
|
||||
def test_direction(self):
|
||||
|
@ -268,7 +268,7 @@ class MenubuttonTest(AbstractLabelTest, unittest.TestCase):
|
|||
'crashes with Cocoa Tk (issue19733)')
|
||||
def test_image(self):
|
||||
widget = self.create()
|
||||
image = tkinter.PhotoImage('image1')
|
||||
image = tkinter.PhotoImage(master=self.root, name='image1')
|
||||
self.checkParam(widget, 'image', image, conv=str)
|
||||
errmsg = 'image "spam" doesn\'t exist'
|
||||
with self.assertRaises(tkinter.TclError) as cm:
|
||||
|
@ -303,7 +303,7 @@ class MenubuttonTest(AbstractLabelTest, unittest.TestCase):
|
|||
|
||||
class OptionMenuTest(MenubuttonTest, unittest.TestCase):
|
||||
|
||||
def _create(self, default='b', values=('a', 'b', 'c'), **kwargs):
|
||||
def create(self, default='b', values=('a', 'b', 'c'), **kwargs):
|
||||
return tkinter.OptionMenu(self.root, None, default, *values, **kwargs)
|
||||
|
||||
|
||||
|
@ -322,7 +322,7 @@ class EntryTest(AbstractWidgetTest, unittest.TestCase):
|
|||
'validate', 'validatecommand', 'width', 'xscrollcommand',
|
||||
)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Entry(self.root, **kwargs)
|
||||
|
||||
def test_disabledbackground(self):
|
||||
|
@ -396,7 +396,7 @@ class SpinboxTest(EntryTest, unittest.TestCase):
|
|||
'width', 'wrap', 'xscrollcommand',
|
||||
)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Spinbox(self.root, **kwargs)
|
||||
|
||||
test_show = None
|
||||
|
@ -490,9 +490,9 @@ class TextTest(AbstractWidgetTest, unittest.TestCase):
|
|||
'xscrollcommand', 'yscrollcommand',
|
||||
)
|
||||
if tcl_version < (8, 5):
|
||||
wantobjects = False
|
||||
_stringify = True
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Text(self.root, **kwargs)
|
||||
|
||||
def test_autoseparators(self):
|
||||
|
@ -644,9 +644,9 @@ class CanvasTest(AbstractWidgetTest, unittest.TestCase):
|
|||
)
|
||||
|
||||
_conv_pixels = round
|
||||
wantobjects = False
|
||||
_stringify = True
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Canvas(self.root, **kwargs)
|
||||
|
||||
def test_closeenough(self):
|
||||
|
@ -699,7 +699,7 @@ class ListboxTest(AbstractWidgetTest, unittest.TestCase):
|
|||
'takefocus', 'width', 'xscrollcommand', 'yscrollcommand',
|
||||
)
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Listbox(self.root, **kwargs)
|
||||
|
||||
def test_activestyle(self):
|
||||
|
@ -709,7 +709,7 @@ class ListboxTest(AbstractWidgetTest, unittest.TestCase):
|
|||
|
||||
def test_listvariable(self):
|
||||
widget = self.create()
|
||||
var = tkinter.DoubleVar()
|
||||
var = tkinter.DoubleVar(self.root)
|
||||
self.checkVariableParam(widget, 'listvariable', var)
|
||||
|
||||
def test_selectmode(self):
|
||||
|
@ -831,7 +831,7 @@ class ScaleTest(AbstractWidgetTest, unittest.TestCase):
|
|||
)
|
||||
default_orient = 'vertical'
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Scale(self.root, **kwargs)
|
||||
|
||||
def test_bigincrement(self):
|
||||
|
@ -897,10 +897,10 @@ class ScrollbarTest(AbstractWidgetTest, unittest.TestCase):
|
|||
'takefocus', 'troughcolor', 'width',
|
||||
)
|
||||
_conv_pixels = round
|
||||
wantobjects = False
|
||||
_stringify = True
|
||||
default_orient = 'vertical'
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Scrollbar(self.root, **kwargs)
|
||||
|
||||
def test_activerelief(self):
|
||||
|
@ -947,7 +947,7 @@ class PanedWindowTest(AbstractWidgetTest, unittest.TestCase):
|
|||
)
|
||||
default_orient = 'horizontal'
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.PanedWindow(self.root, **kwargs)
|
||||
|
||||
def test_handlepad(self):
|
||||
|
@ -1105,7 +1105,7 @@ class MenuTest(AbstractWidgetTest, unittest.TestCase):
|
|||
)
|
||||
_conv_pixels = noconv
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Menu(self.root, **kwargs)
|
||||
|
||||
def test_postcommand(self):
|
||||
|
@ -1174,7 +1174,7 @@ class MessageTest(AbstractWidgetTest, unittest.TestCase):
|
|||
)
|
||||
_conv_pad_pixels = noconv
|
||||
|
||||
def _create(self, **kwargs):
|
||||
def create(self, **kwargs):
|
||||
return tkinter.Message(self.root, **kwargs)
|
||||
|
||||
def test_aspect(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue