https://github.com/python/cpython/commit/15db2421ceaee4042bec725e0ab38975e3985240
commit: 15db2421ceaee4042bec725e0ab38975e3985240
branch: 3.13
author: Jan-Eric Nitschke <[email protected]>
committer: hugovk <[email protected]>
date: 2025-11-05T17:24:46+02:00
summary:

[3.13] gh-138772: Add tests for Turtle.dot() signature (GH-138773) (#140992)

Co-authored-by: Jan-Eric Nitschke 
<[email protected]>
Co-authored-by: Hugo van Kemenade <[email protected]>

files:
M Lib/test/test_turtle.py

diff --git a/Lib/test/test_turtle.py b/Lib/test/test_turtle.py
index 14121a590a5026..a572ff4b9e91cc 100644
--- a/Lib/test/test_turtle.py
+++ b/Lib/test/test_turtle.py
@@ -1,5 +1,6 @@
 import pickle
 import unittest
+import unittest.mock
 from test import support
 from test.support import import_helper
 from test.support import os_helper
@@ -50,6 +51,34 @@
 """
 
 
+def patch_screen():
+    """Patch turtle._Screen for testing without a display.
+
+    We must patch the _Screen class itself instead of the _Screen
+    instance because instantiating it requires a display.
+    """
+    # Create a mock screen that delegates color validation to the real 
TurtleScreen methods
+    mock_screen = unittest.mock.MagicMock()
+    mock_screen.__class__ = turtle._Screen
+    mock_screen.mode.return_value = "standard"
+    mock_screen._colormode = 1.0
+
+    def mock_iscolorstring(color):
+        valid_colors = {'red', 'green', 'blue', 'black', 'white', 'yellow',
+                        'orange', 'purple', 'pink', 'brown', 'gray', 'grey',
+                        'cyan', 'magenta'}
+
+        return color in valid_colors or (isinstance(color, str) and 
color.startswith('#'))
+
+    mock_screen._iscolorstring = mock_iscolorstring
+    mock_screen._colorstr = turtle._Screen._colorstr.__get__(mock_screen)
+
+    return unittest.mock.patch(
+        "turtle._Screen.__new__",
+        return_value=mock_screen
+    )
+
+
 class TurtleConfigTest(unittest.TestCase):
 
     def get_cfg_file(self, cfg_str):
@@ -461,6 +490,38 @@ def test_teleport(self):
             self.assertTrue(tpen.isdown())
 
 
+class TestTurtle(unittest.TestCase):
+    def setUp(self):
+        with patch_screen():
+            self.turtle = turtle.Turtle()
+
+        # Reset the Screen singleton to avoid reference leaks
+        self.addCleanup(setattr, turtle.Turtle, '_screen', None)
+
+    def test_dot_signature(self):
+        self.turtle.dot()
+        self.turtle.dot(10)
+        self.turtle.dot(size=10)
+        self.turtle.dot((0, 0, 0))
+        self.turtle.dot(size=(0, 0, 0))
+        self.turtle.dot("blue")
+        self.turtle.dot("")
+        self.turtle.dot(size="blue")
+        self.turtle.dot(20, "blue")
+        self.turtle.dot(20, "blue")
+        self.turtle.dot(20, (0, 0, 0))
+        self.turtle.dot(20, 0, 0, 0)
+        with self.assertRaises(TypeError):
+            self.turtle.dot(color="blue")
+        self.assertRaises(turtle.TurtleGraphicsError, self.turtle.dot, 
"_not_a_color_")
+        self.assertRaises(turtle.TurtleGraphicsError, self.turtle.dot, 0, (0, 
0, 0, 0))
+        self.assertRaises(turtle.TurtleGraphicsError, self.turtle.dot, 0, 0, 
0, 0, 0)
+        self.assertRaises(turtle.TurtleGraphicsError, self.turtle.dot, 0, (-1, 
0, 0))
+        self.assertRaises(turtle.TurtleGraphicsError, self.turtle.dot, 0, -1, 
0, 0)
+        self.assertRaises(turtle.TurtleGraphicsError, self.turtle.dot, 0, (0, 
257, 0))
+        self.assertRaises(turtle.TurtleGraphicsError, self.turtle.dot, 0, 0, 
257, 0)
+
+
 class TestModuleLevel(unittest.TestCase):
     def test_all_signatures(self):
         import inspect

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to