summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_dataclasses.py
diff options
context:
space:
mode:
authorZackery Spytz <zspytz@gmail.com>2021-04-05 19:41:01 (GMT)
committerGitHub <noreply@github.com>2021-04-05 19:41:01 (GMT)
commit75220674c07abfc90c2cd7862d04cfa2e2354450 (patch)
tree7da8600bce2e46bd148120f8dc5044946fb6385a /Lib/test/test_dataclasses.py
parent14829b09eb652f457cf837836909169746a810f0 (diff)
downloadcpython-75220674c07abfc90c2cd7862d04cfa2e2354450.zip
cpython-75220674c07abfc90c2cd7862d04cfa2e2354450.tar.gz
cpython-75220674c07abfc90c2cd7862d04cfa2e2354450.tar.bz2
bpo-36470: Allow dataclasses.replace() to handle InitVars with default values (GH-20867)
Co-Authored-By: Claudiu Popa <pcmanticore@gmail.com> Automerge-Triggered-By: GH:ericvsmith
Diffstat (limited to 'Lib/test/test_dataclasses.py')
-rw-r--r--Lib/test/test_dataclasses.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py
index 0bfed41..4f5c3c8 100644
--- a/Lib/test/test_dataclasses.py
+++ b/Lib/test/test_dataclasses.py
@@ -3251,6 +3251,24 @@ class TestReplace(unittest.TestCase):
c = replace(c, x=3, y=5)
self.assertEqual(c.x, 15)
+ def test_initvar_with_default_value(self):
+ @dataclass
+ class C:
+ x: int
+ y: InitVar[int] = None
+ z: InitVar[int] = 42
+
+ def __post_init__(self, y, z):
+ if y is not None:
+ self.x += y
+ if z is not None:
+ self.x += z
+
+ c = C(x=1, y=10, z=1)
+ self.assertEqual(replace(c), C(x=12))
+ self.assertEqual(replace(c, y=4), C(x=12, y=4, z=42))
+ self.assertEqual(replace(c, y=4, z=1), C(x=12, y=4, z=1))
+
def test_recursive_repr(self):
@dataclass
class C: