Skip to content

Commit 19a53d1

Browse files
committed
Fake tkinter now tracks created fake Canvas objects.
1 parent 34c9d18 commit 19a53d1

File tree

3 files changed

+41
-37
lines changed

3 files changed

+41
-37
lines changed

tests/fake_tkinter.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313
class FakeCanvas:
1414

15-
def __init__(self):
15+
def __init__(self, *args, **kwargs):
16+
self.init_args = mock.call(*args, **kwargs)
1617
self.pack = mock.Mock()
1718
self.config = mock.Mock()
1819
self.xview_scroll = mock.Mock()
@@ -105,7 +106,7 @@ class FakeTkinter:
105106
def __init__(self, screen_width, screen_height):
106107
self.screen_width = screen_width
107108
self.screen_height = screen_height
108-
self.canvas_init_calls = []
109+
self.canvases = []
109110
self.photoimage_init_calls = []
110111

111112
def Tk(self):
@@ -115,8 +116,9 @@ def Toplevel(self):
115116
return FakeToplevel(self.screen_width, self.screen_height)
116117

117118
def Canvas(self, *args, **kwargs):
118-
self.canvas_init_calls.append((args, kwargs))
119-
return FakeCanvas()
119+
canvas = FakeCanvas(*args, **kwargs)
120+
self.canvases.append(canvas)
121+
return canvas
120122

121123
def PhotoImage(self, *args, **kwargs):
122124
self.photoimage_init_calls.append((args, kwargs))

tests/test_canvas.py

+29-25
Original file line numberDiff line numberDiff line change
@@ -44,40 +44,33 @@ def test_create_creates_tkinter_Canvas(self):
4444

4545
_c = canvas.InvertedYCanvas(self.master, 'background')
4646

47-
tkinter_canvas_call_args = self.tkinter.canvas_init_calls
48-
49-
self.assertEqual(len(tkinter_canvas_call_args), 1, 'tkinter.Canvas call count')
47+
self.assertEqual(len(self.tkinter.canvases), 1, 'tkinter.Canvas call count')
5048

5149

5250
def test_create_creates_tkinter_Canvas_with_given_master(self):
5351

5452
_c = canvas.InvertedYCanvas(self.master, 'background')
5553

56-
tkinter_canvas_call_args = self.tkinter.canvas_init_calls
54+
canvas_init_args = self.tkinter.canvases[0].init_args
5755

5856
# Passed a single positional argument: self.master
59-
(single_arg,), _kwargs = tkinter_canvas_call_args[0]
60-
self.assertIs(single_arg, self.master)
57+
self.assertIs(canvas_init_args.args[0], self.master)
6158

6259

6360
def test_create_creates_tkinter_Canvas_with_given_background(self):
6461

6562
_c = canvas.InvertedYCanvas(self.master, 'background')
6663

67-
tkinter_canvas_call_args = self.tkinter.canvas_init_calls
68-
69-
_args, kwargs = tkinter_canvas_call_args[0]
70-
self.assertEqual(kwargs['background'], 'background')
64+
canvas_init_args = self.tkinter.canvases[0].init_args
65+
self.assertEqual(canvas_init_args.kwargs['background'], 'background')
7166

7267

7368
def test_create_creates_tkinter_Canvas_with_zero_highlightthickness(self):
7469

7570
_c = canvas.InvertedYCanvas(self.master, 'background')
7671

77-
tkinter_canvas_call_args = self.tkinter.canvas_init_calls
78-
79-
_args, kwargs = tkinter_canvas_call_args[0]
80-
self.assertEqual(kwargs['highlightthickness'], 0)
72+
canvas_init_args = self.tkinter.canvases[0].init_args
73+
self.assertEqual(canvas_init_args.kwargs['highlightthickness'], 0)
8174

8275

8376
def test_create_polygon_returns_integer_item_id(self):
@@ -96,7 +89,8 @@ def test_create_polygon_inverts_y_coordinates(self):
9689
coords = [0, 0, 1, 1, 2, -2]
9790
_item_id = c.create_polygon(coords, fill='fill', outline='outline', width=42)
9891

99-
c._canvas.create_polygon.assert_called_once_with(
92+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
93+
wrapped_tkinter_canvas.create_polygon.assert_called_once_with(
10094
[0, 0, 1, -1, 2, 2],
10195
fill=mock.ANY,
10296
outline=mock.ANY,
@@ -110,7 +104,8 @@ def test_create_polygon_passes_args_to_Canvas_create_polygon(self):
110104

111105
_item_id = c.create_polygon([], fill='fill', outline='outline', width=42)
112106

113-
c._canvas.create_polygon.assert_called_once_with(
107+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
108+
wrapped_tkinter_canvas.create_polygon.assert_called_once_with(
114109
mock.ANY,
115110
fill='fill',
116111
outline='outline',
@@ -133,7 +128,8 @@ def test_create_image_inverts_y_coordinate(self):
133128

134129
_item_id = c.create_image(42, 24, image=None, anchor=None)
135130

136-
c._canvas.create_image.assert_called_with(
131+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
132+
wrapped_tkinter_canvas.create_image.assert_called_with(
137133
42, -24, image=mock.ANY, anchor=mock.ANY
138134
)
139135

@@ -144,7 +140,8 @@ def test_create_image_passes_args_to_Canvas_create_image(self):
144140

145141
_item_id = c.create_image(42, 24, image='image', anchor='anchor')
146142

147-
c._canvas.create_image.assert_called_with(
143+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
144+
wrapped_tkinter_canvas.create_image.assert_called_with(
148145
mock.ANY, mock.ANY, image='image', anchor='anchor'
149146
)
150147

@@ -165,7 +162,8 @@ def test_create_line_inverts_y_coordinates(self):
165162
coords = [0, 0, 1, 1, 2, -2]
166163
_item_id = c.create_line(coords, fill='fill', width=42, capstyle='capstyle')
167164

168-
c._canvas.create_line.assert_called_with(
165+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
166+
wrapped_tkinter_canvas.create_line.assert_called_with(
169167
[0, 0, 1, -1, 2, 2], fill=mock.ANY, width=mock.ANY, capstyle=mock.ANY,
170168
)
171169

@@ -176,7 +174,8 @@ def test_create_line_passes_args_to_Canvas_create_line(self):
176174

177175
_item_id = c.create_line([], fill='fill', width=42, capstyle='capstyle')
178176

179-
c._canvas.create_line.assert_called_with(
177+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
178+
wrapped_tkinter_canvas.create_line.assert_called_with(
180179
mock.ANY, fill='fill', width=42, capstyle='capstyle',
181180
)
182181

@@ -187,7 +186,8 @@ def test_move_calls_canvas_move_with_same_item_id(self):
187186

188187
c.move(42, 0, 0)
189188

190-
c._canvas.move.assert_called_with(42, mock.ANY, mock.ANY)
189+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
190+
wrapped_tkinter_canvas.move.assert_called_with(42, mock.ANY, mock.ANY)
191191

192192

193193
def test_move_calls_canvas_move_with_inverted_y(self):
@@ -196,7 +196,8 @@ def test_move_calls_canvas_move_with_inverted_y(self):
196196

197197
c.move(None, 42, 24)
198198

199-
c._canvas.move.assert_called_with(mock.ANY, 42, -24)
199+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
200+
wrapped_tkinter_canvas.move.assert_called_with(mock.ANY, 42, -24)
200201

201202

202203
def test_coords_calls_canvas_coords_with_same_item_id(self):
@@ -205,7 +206,8 @@ def test_coords_calls_canvas_coords_with_same_item_id(self):
205206

206207
c.coords(42, [])
207208

208-
c._canvas.coords.assert_called_with(42, mock.ANY)
209+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
210+
wrapped_tkinter_canvas.coords.assert_called_with(42, mock.ANY)
209211

210212

211213
def test_coords_calls_canvas_coords_with_inverted_y_coords(self):
@@ -214,7 +216,8 @@ def test_coords_calls_canvas_coords_with_inverted_y_coords(self):
214216

215217
c.coords(None, [1, 2, 3, 4, 5, 6])
216218

217-
c._canvas.coords.assert_called_with(
219+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
220+
wrapped_tkinter_canvas.coords.assert_called_with(
218221
mock.ANY, [1, -2, 3, -4, 5, -6]
219222
)
220223

@@ -235,8 +238,9 @@ def test_attribute_access_returns_tkinter_Canvas_attribute(self):
235238
'tag_raise',
236239
)
237240

241+
wrapped_tkinter_canvas = self.tkinter.canvases[0]
238242
for name in names:
239243
with self.subTest(attr_name=name):
240244
result = getattr(c, name)
241-
underlying = getattr(c._canvas, name)
245+
underlying = getattr(wrapped_tkinter_canvas, name)
242246
self.assertIs(result, underlying)

tests/test_window.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,10 @@ def test_canvas_default_fill_is_white(self):
112112

113113
w = self._Window()
114114

115-
canvas_init_call_args = self.tkinter.canvas_init_calls
116-
self.assertEqual(len(canvas_init_call_args), 1, 'Non single canvas init.')
115+
self.assertEqual(len(self.tkinter.canvases), 1, 'Non single canvas init.')
117116

118-
(_tk_window,), kwargs = canvas_init_call_args[0]
119-
self.assertEqual(kwargs['background'], 'white')
117+
canvas_init_args = self.tkinter.canvases[0].init_args
118+
self.assertEqual(canvas_init_args.kwargs['background'], 'white')
120119

121120

122121
def test_canvas_origin_is_centered(self):
@@ -199,11 +198,10 @@ def test_custom_fill_passed_to_canvas(self):
199198

200199
w = self._Window(fill_color='orange')
201200

202-
canvas_init_call_args = self.tkinter.canvas_init_calls
203-
self.assertEqual(len(canvas_init_call_args), 1, 'Non single canvas init.')
201+
self.assertEqual(len(self.tkinter.canvases), 1, 'Non single canvas init.')
204202

205-
(_tk_window,), kwargs = canvas_init_call_args[0]
206-
self.assertEqual(kwargs['background'], 'orange')
203+
canvas_init_args = self.tkinter.canvases[0].init_args
204+
self.assertEqual(canvas_init_args.kwargs['background'], 'orange')
207205

208206

209207
def test_custom_title_passed_to_tk_window(self):

0 commit comments

Comments
 (0)