]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-138772: Add tests for Turtle.dot() signature (GH-138773)
authorJan-Eric Nitschke <47750513+JanEricNitschke@users.noreply.github.com>
Thu, 25 Sep 2025 13:46:12 +0000 (15:46 +0200)
committerGitHub <noreply@github.com>
Thu, 25 Sep 2025 13:46:12 +0000 (16:46 +0300)
Lib/test/test_turtle.py

index d02cac284a909acb2661fbd6cfa1c4895a659f0d..12d2eed874148cebaa8a31a551f38a4d50d47027 100644 (file)
@@ -60,12 +60,25 @@ def patch_screen():
     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.__class__": turtle._Screen,
-            "return_value.mode.return_value": "standard",
-        },
+        return_value=mock_screen
     )
 
 
@@ -635,6 +648,28 @@ class TestTurtle(unittest.TestCase):
             self.assertTrue(self.turtle._creatingPoly)
         self.assertFalse(self.turtle._creatingPoly)
 
+    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):