10000 [3.10] Add more tkinter.Canvas tests (GH-98475) (#98477) · python/cpython@97106d3 · GitHub
[go: up one dir, main page]

Skip to content

Commit 97106d3

Browse files
miss-islingtonserhiy-storchakaAlexWaygood
authored
[3.10] Add more tkinter.Canvas tests (GH-98475) (#98477)
Add more tkinter.Canvas tests (GH-98475) It is a prerequisite for GH-94473. Add tests for the coords() method and for creation of some Canvas items. (cherry picked from commit ff173ed) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
1 parent e77af82 commit 97106d3

File tree

1 file changed

+158
-0
lines changed

1 file changed

+158
-0
lines changed

Lib/tkinter/test/test_tkinter/test_widgets.py

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,164 @@ def test_configure_yscrollincrement(self):
781781
self.checkPixelsParam(widget, 'yscrollincrement',
782782
10, 0, 11.2, 13.6, -10, '0.1i')
783783

784+
def _test_option_joinstyle(self, c, factory):
785+
for joinstyle in 'bevel', 'miter', 'round':
786+
i = factory(joinstyle=joinstyle)
787+
self.assertEqual(c.itemcget(i, 'joinstyle'), joinstyle)
788+
self.assertRaises(TclError, factory, joinstyle='spam')
789+
790+
def _test_option_smooth(self, c, factory):
791+
for smooth in 1, True, '1', 'true', 'yes', 'on':
792+
i = factory(smooth=smooth)
793+
self.assertEqual(c.itemcget(i, 'smooth'), 'true')
794+
for smooth in 0, False, '0', 'false', 'no', 'off':
795+
i = factory(smooth=smooth)
796+
self.assertEqual(c.itemcget(i, 'smooth'), '0')
797+
i = factory(smooth=True, splinestep=30)
798+
self.assertEqual(c.itemcget(i, 'smooth'), 'true')
799+
self.assertEqual(c.itemcget(i, 'splinestep'), '30')
800+
i = factory(smooth='raw', splinestep=30)
801+
self.assertEqual(c.itemcget(i, 'smooth'), 'raw')
802+
self.assertEqual(c.itemcget(i, 'splinestep'), '30')
803+
self.assertRaises(TclError, factory, smooth='spam')
804+
805+
def test_create_rectangle(self):
806+
c = self.create()
807+
i1 = c.create_rectangle(20, 30, 60, 10)
808+
self.assertEqual(c.coords(i1), [20.0, 10.0, 60.0, 30.0])
809+
self.assertEqual(c.bbox(i1), (19, 9, 61, 31))
810+
811+
i2 = c.create_rectangle([21, 31, 61, 11])
812+
self.assertEqual(c.coords(i2), [21.0, 11.0, 61.0, 31.0])
813+
self.assertEqual(c.bbox(i2), (20, 10, 62, 32))
814+
815+
i3 = c.create_rectangle((22, 32), (62, 12))
816+
self.assertEqual(c.coords(i3), [22.0, 12.0, 62.0, 32.0])
817+
self.assertEqual(c.bbox(i3), (21, 11, 63, 33))
818+
819+
i4 = c.create_rectangle([(23, 33), (63, 13)])
820+
self.assertEqual(c.coords(i4), [23.0, 13.0, 63.0, 33.0])
821+
self.assertEqual(c.bbox(i4), (22, 12, 64, 34))
822+
823+
self.assertRaises(TclError, c.create_rectangle, 20, 30, 60)
824+
self.assertRaises(TclError, c.create_rectangle, [20, 30, 60])
825+
self.assertRaises(TclError, c.create_rectangle, 20, 30, 40, 50, 60, 10)
826+
self.assertRaises(TclError, c.create_rectangle, [20, 30, 40, 50, 60, 10])
827+
self.assertRaises(TclError, c.create_rectangle, 20, 30)
828+
self.assertRaises(TclError, c.create_rectangle, [20, 30])
829+
self.assertRaises(IndexError, c.create_rectangle)
830+
self.assertRaises(IndexError, c.create_rectangle, [])
831+
832+
def test_create_line(self):
833+
c = self.create()
834+
i1 = c.create_line(20, 30, 40, 50, 60, 10)
835+
self.assertEqual(c.coords(i1), [20.0, 30.0, 40.0, 50.0, 60.0, 10.0])
836+
self.assertEqual(c.bbox(i1), (18, 8, 62, 52))
837+
self.assertEqual(c.itemcget(i1, 'arrow'), 'none')
838+
self.assertEqual(c.itemcget(i1, 'arrowshape'), '8 10 3')
839+
self.assertEqual(c.itemcget(i1, 'capstyle'), 'butt')
840+
self.assertEqual(c.itemcget(i1, 'joinstyle'), 'round')
841+
self.assertEqual(c.itemcget(i1, 'smooth'), '0')
842+
self.assertEqual(c.itemcget(i1, 'splinestep'), '12')
843+
844+
i2 = c.create_line([21, 31, 41, 51, 61, 11])
845+
self.assertEqual(c.coords(i2), [21.0, 31.0, 41.0, 51.0, 61.0, 11.0])
846+
self.assertEqual(c.bbox(i2), (19, 9, 63, 53))
847+
848+
i3 = c.create_line((22, 32), (42, 52), (62, 12))
849+
self.assertEqual(c.coords(i3), [22.0, 32.0, 42.0, 52.0, 62.0, 12.0])
850+
self.assertEqual(c.bbox(i3), (20, 10, 64, 54))
851+
852+
i4 = c.create_line([(23, 33), (43, 53), (63, 13)])
853+
self.assertEqual(c.coords(i4), [23.0, 33.0, 43.0, 53.0, 63.0, 13.0])
854+
self.assertEqual(c.bbox(i4), (21, 11, 65, 55))
855+
856+
self.assertRaises(TclError, c.create_line, 20, 30, 60)
857+
self.assertRaises(TclError, c.create_line, [20, 30, 60])
858+
self.assertRaises(TclError, c.create_line, 20, 30)
859+
self.assertRaises(TclError, c.create_line, [20, 30])
860+
self.assertRaises(IndexError, c.create_line)
861+
self.assertRaises(IndexError, c.create_line, [])
862+
863+
for arrow in 'none', 'first', 'last', 'both':
864+
i = c.create_line(20, 30, 60, 10, arrow=arrow)
865+
self.assertEqual(c.itemcget(i, 'arrow'), arrow)
866+
i = c.create_line(20, 30, 60, 10, arrow='first', arrowshape=[10, 15, 5])
867+
self.assertEqual(c.itemcget(i, 'arrowshape'), '10 15 5')
868+
self.assertRaises(TclError, c.create_line, 20, 30, 60, 10, arrow='spam')
869+
870+
for capstyle in 'butt', 'projecting', 'round':
871+
i = c.create_line(20, 30, 60, 10, capstyle=capstyle)
872+
self.assertEqual(c.itemcget(i, 'capstyle'), capstyle)
873+
self.assertRaises(TclError, c.create_line, 20, 30, 60, 10, capstyle='spam')
874+
875+
self._test_option_joinstyle(c,
876+
lambda **kwargs: c.create_line(20, 30, 40, 50, 60, 10, **kwargs))
877+
self._test_option_smooth(c,
878+
lambda **kwargs: c.create_line(20, 30, 60, 10, **kwargs))
879+
880+
def test_create_polygon(self):
881+
c = self.create()
882+
i1 = c.create_polygon(20, 30, 40, 50, 60, 10)
883+
self.assertEqual(c.coords(i1), [20.0, 30.0, 40.0, 50.0, 60.0, 10.0])
884+
self.assertEqual(c.bbox(i1), (19, 9, 61, 51))
885+
self.assertEqual(c.itemcget(i1, 'joinstyle'), 'round')
886+
self.assertEqual(c.itemcget(i1, 'smooth'), '0')
887+
self.assertEqual(c.itemcget(i1, 'splinestep'), '12')
888+
889+
i2 = c.create_polygon([21, 31, 41, 51, 61, 11])
890+
self.assertEqual(c.coords(i2), [21.0, 31.0, 41.0, 51.0, 61.0, 11.0])
891+
self.assertEqual(c.bbox(i2), (20, 10, 62, 52))
892+
893+
i3 = c.create_polygon((22, 32), (42, 52), (62, 12))
894+
self.assertEqual(c.coords(i3), [22.0, 32.0, 42.0, 52.0, 62.0, 12.0])
895+
self.assertEqual(c.bbox(i3), (21, 11, 63, 53))
896+
897+
i4 = c.create_polygon([(23, 33), (43, 53), (63, 13)])
898+
self.assertEqual(c.coords(i4), [23.0, 33.0, 43.0, 53.0, 63.0, 13.0])
899+
self.assertEqual(c.bbox(i4), (22, 12, 64, 54))
900+
901+
self.assertRaises(TclError, c.create_polygon, 20, 30, 60)
902+
self.assertRaises(TclError, c.create_polygon, [20, 30, 60])
903+
self.assertRaises(IndexError, c.create_polygon)
904+
self.assertRaises(IndexError, c.create_polygon, [])
905+
906+
self._test_option_joinstyle(c,
907+
lambda **kwargs: c.create_polygon(20, 30, 40, 50, 60, 10, **kwargs))
908+
self._test_option_smooth(c,
909+
lambda **kwargs: c.create_polygon(20, 30, 40, 50, 60, 10, **kwargs))
910+
911+
def test_coords(self):
912+
c = self.create()
913+
i = c.create_line(20, 30, 40, 50, 60, 10, tags='x')
914+
self.assertEqual(c.coords(i), [20.0, 30.0, 40.0, 50.0, 60.0, 10.0])
915+
self.assertEqual(c.coords('x'), [20.0, 30.0, 40.0, 50.0, 60.0, 10.0])
916+
self.assertEqual(c.bbox(i), (18, 8, 62, 52))
917+
918+
c.coords(i, 50, 60, 70, 80, 90, 40)
919+
self.assertEqual(c.coords(i), [50.0, 60.0, 70.0, 80.0, 90.0, 40.0])
920+
self.assertEqual(c.bbox(i), (48, 38, 92, 82))
921+
922+
c.coords(i, [21, 31, 41, 51, 61, 11])
923+
self.assertEqual(c.coords(i), [21.0, 31.0, 41.0, 51.0, 61.0, 11.0])
924+
925+
c.coords(i, 20, 30, 60, 10)
926+
self.assertEqual(c.coords(i), [20.0, 30.0, 60.0, 10.0])
927+
self.assertEqual(c.bbox(i), (18, 8, 62, 32))
928+
929+
self.assertRaises(TclError, c.coords, i, 20, 30, 60)
930+
self.assertRaises(TclError, c.coords, i, [20, 30, 60])
931+
self.assertRaises(TclError, c.coords, i, 20, 30)
932+
self.assertRaises(TclError, c.coords, i, [20, 30])
933+
934+
c.coords(i, '20', '30c', '60i', '10p')
935+
coords = c.coords(i)
936+
self.assertIsInstance(coords, list)
937+
self.assertEqual(len(coords), 4)
938+
self.assertEqual(coords[0], 20)
939+
for i in range(4):
940+
self.assertIsInstance(coords[i], float)
941+
784942
@requires_tcl(8, 6)
785943
def test_moveto(self):
786944
widget = self.create()

0 commit comments

Comments
 (0)
0