diff --git a/Lib/test/test_turtle.py b/Lib/test/test_turtle.py index c75a002a89b4c4..4adb39b637f4e7 100644 --- a/Lib/test/test_turtle.py +++ b/Lib/test/test_turtle.py @@ -465,6 +465,19 @@ def test_teleport(self): tpen.teleport(-100, -100, fill_gap=fill_gap_value) self.assertTrue(tpen.isdown()) +class TestRawTurtle(unittest.TestCase): + def setUp(self): + try: + self.screen = turtle.Screen() + except turtle.TK.TclError: + raise unittest.SkipTest() # cannot instantiate RawTurtle without a screen + + def test_clone(self): + raw_turtle = turtle.RawTurtle(self.screen) + another_turtle = raw_turtle.clone() + self.assertEqual(another_turtle.currentLineItem, another_turtle.items[-1]) + self.assertNotIn(raw_turtle.currentLineItem, another_turtle.items) + class TestTurtleScreen(unittest.TestCase): def test_save_raises_if_wrong_extension(self) -> None: diff --git a/Lib/turtle.py b/Lib/turtle.py index 8a5801f2efe625..9c05a438704421 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -2836,6 +2836,7 @@ def clone(self): q.turtle._item = [screen._createpoly() for item in screen._shapes[self.turtle.shapeIndex]._data] q.currentLineItem = screen._createline() + q.items[-1] = q.currentLineItem q._update() return q diff --git a/Misc/NEWS.d/next/Library/2024-11-04-15-08-02.gh-issue-126399.-4rB22.rst b/Misc/NEWS.d/next/Library/2024-11-04-15-08-02.gh-issue-126399.-4rB22.rst new file mode 100644 index 00000000000000..c8744076d8b56b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-11-04-15-08-02.gh-issue-126399.-4rB22.rst @@ -0,0 +1 @@ +Fix :meth:`turtle.clone` items management when clearing cloned turtle items.