-
-
Notifications
You must be signed in to change notification settings - Fork 33.3k
[3.13] gh-138772: Add tests for Turtle.dot() signature (GH-138773) #140992
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…H-138773) (cherry picked from commit 2462807) Co-authored-by: Jan-Eric Nitschke <[email protected]>
|
Let's keep it minimal and just add It can be another decision whether to backport all the other stuff. |
|
Should be ready now |
Co-authored-by: Hugo van Kemenade <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you!
| 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") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These lines
self.turtle.dot(size="blue")and
with self.assertRaises(TypeError):
self.turtle.dot(color="blue")are surprising.
I've tested these and it worked as here, but it doesn't make sense.
And the docs say size is an integer, and color is a color string, as expected.
Is it a bug, alright?
(just checked before open a new issue)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, it is a bit weird, but the actual logic is:
def dot(self, size=None, *color):
"""Draw a dot with diameter size, using color.
Optional arguments:
size -- an integer >= 1 (if given)
color -- a colorstring or a numeric color tuple
Draw a circular dot with diameter size, using color.
If size is not given, the maximum of pensize+4 and 2*pensize is used.
Example (for a Turtle instance named turtle):
>>> turtle.dot()
>>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50)
"""
if not color:
if isinstance(size, (str, tuple)):
color = self._colorstr(size)
size = self._pensize + max(self._pensize, 4)
else:
color = self._pencolor
if not size:
size = self._pensize + max(self._pensize, 4)
else:
if size is None:
size = self._pensize + max(self._pensize, 4)
color = self._colorstr(color)And the correct matching typehint is
@overload
def dot(self, size: int | _Color | None = None) -> None: ...
@overload
def dot(self, size: int | None, color: _Color, /) -> None: ...
@overload
def dot(self, size: int | None, r: float, g: float, b: float, /) -> None: ...The signature from the docs is
turtle.dot()
turtle.dot(size)
turtle.dot(color, /)
turtle.dot(size, color, /)
turtle.dot(size, r, g, b, /)This makes it pretty clear the "color" is not a keyword arg, so (color="blue") shouldnt, work. But to make ("blue") and (20) work you have to have (size="blue") be valid, even though is probably isnt desired or recommended.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've opened an issue concerning size="blue": #141062
(cherry picked from commit 2462807)
Wasnt 100% sure how to best do this, because all of the
TestTurtleScreenandTestTurtletests didn't exist at all in 3.13. So i just chose the simples way and clicked "accept incoming" on the resolution which added all tests in these classes because i think it makes sense. And obviously added the required imports.Or should i keep it to the absolutely minimal changes and only do