Skip to content

Commit bb2e96f

Browse files
authored
gh-109956: Also test typing.NamedTuple with copy.replace() (GH-109957)
1 parent 8c07137 commit bb2e96f

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

Lib/test/test_copy.py

+18-8
Original file line numberDiff line numberDiff line change
@@ -936,14 +936,24 @@ def __replace__(self, **changes):
936936

937937
def test_namedtuple(self):
938938
from collections import namedtuple
939-
Point = namedtuple('Point', 'x y', defaults=(0,))
940-
p = Point(11, 22)
941-
self.assertEqual(copy.replace(p), (11, 22))
942-
self.assertEqual(copy.replace(p, x=1), (1, 22))
943-
self.assertEqual(copy.replace(p, y=2), (11, 2))
944-
self.assertEqual(copy.replace(p, x=1, y=2), (1, 2))
945-
with self.assertRaisesRegex(ValueError, 'unexpected field name'):
946-
copy.replace(p, x=1, error=2)
939+
from typing import NamedTuple
940+
PointFromCall = namedtuple('Point', 'x y', defaults=(0,))
941+
class PointFromInheritance(PointFromCall):
942+
pass
943+
class PointFromClass(NamedTuple):
944+
x: int
945+
y: int = 0
946+
for Point in (PointFromCall, PointFromInheritance, PointFromClass):
947+
with self.subTest(Point=Point):
948+
p = Point(11, 22)
949+
self.assertIsInstance(p, Point)
950+
self.assertEqual(copy.replace(p), (11, 22))
951+
self.assertIsInstance(copy.replace(p), Point)
952+
self.assertEqual(copy.replace(p, x=1), (1, 22))
953+
self.assertEqual(copy.replace(p, y=2), (11, 2))
954+
self.assertEqual(copy.replace(p, x=1, y=2), (1, 2))
955+
with self.assertRaisesRegex(ValueError, 'unexpected field name'):
956+
copy.replace(p, x=1, error=2)
947957

948958
def test_dataclass(self):
949959
from dataclasses import dataclass

0 commit comments

Comments
 (0)