mirror of
https://github.com/python/cpython
synced 2026-09-29 12:10:30 +03:00
gh-109956: Also test typing.NamedTuple with copy.replace() (GH-109957)
This commit is contained in:
parent
8c071373f1
commit
bb2e96f6f4
1 changed files with 18 additions and 8 deletions
|
|
@ -936,14 +936,24 @@ class TestReplace(unittest.TestCase):
|
|||
|
||||
def test_namedtuple(self):
|
||||
from collections import namedtuple
|
||||
Point = namedtuple('Point', 'x y', defaults=(0,))
|
||||
p = Point(11, 22)
|
||||
self.assertEqual(copy.replace(p), (11, 22))
|
||||
self.assertEqual(copy.replace(p, x=1), (1, 22))
|
||||
self.assertEqual(copy.replace(p, y=2), (11, 2))
|
||||
self.assertEqual(copy.replace(p, x=1, y=2), (1, 2))
|
||||
with self.assertRaisesRegex(ValueError, 'unexpected field name'):
|
||||
copy.replace(p, x=1, error=2)
|
||||
from typing import NamedTuple
|
||||
PointFromCall = namedtuple('Point', 'x y', defaults=(0,))
|
||||
class PointFromInheritance(PointFromCall):
|
||||
pass
|
||||
class PointFromClass(NamedTuple):
|
||||
x: int
|
||||
y: int = 0
|
||||
for Point in (PointFromCall, PointFromInheritance, PointFromClass):
|
||||
with self.subTest(Point=Point):
|
||||
p = Point(11, 22)
|
||||
self.assertIsInstance(p, Point)
|
||||
self.assertEqual(copy.replace(p), (11, 22))
|
||||
self.assertIsInstance(copy.replace(p), Point)
|
||||
self.assertEqual(copy.replace(p, x=1), (1, 22))
|
||||
self.assertEqual(copy.replace(p, y=2), (11, 2))
|
||||
self.assertEqual(copy.replace(p, x=1, y=2), (1, 2))
|
||||
with self.assertRaisesRegex(ValueError, 'unexpected field name'):
|
||||
copy.replace(p, x=1, error=2)
|
||||
|
||||
def test_dataclass(self):
|
||||
from dataclasses import dataclass
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue