@@ -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