From 93d0c502cc7517a998dbd9db7512b95494199764 Mon Sep 17 00:00:00 2001 From: Karthikeyan Singaravelan Date: Wed, 8 Jan 2020 22:58:50 +0530 Subject: [PATCH 1/2] Add test cases for dataclasses. * Add test for repr output of field and dataclass params. * Add test for ValueError to be raised when both default and default_factory are passed. --- Lib/test/test_dataclasses.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 8f9fb2ce8c169c..dc0a30d1b88b1c 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -45,6 +45,25 @@ class C: o = C(42) self.assertEqual(o.x, 42) + def test_field_default_default_factory_error(self): + msg = "cannot specify both default and default_factory" + with self.assertRaisesRegex(ValueError, msg): + @dataclass + class C: + x: int = field(default=1, default_factory=int) + + def test_field_repr(self): + int_field = field(default=1, init=True, repr=False) + int_field.name = "id" + repr_output = repr(int_field) + expected_output = "Field(name='id',type=None," \ + f"default=1,default_factory={MISSING!r}," \ + "init=True,repr=False,hash=None," \ + "compare=True,metadata=mappingproxy({})," \ + "_field_type=None)" + + self.assertEqual(repr_output, expected_output) + def test_named_init_params(self): @dataclass class C: @@ -479,6 +498,18 @@ class C: self.assertNotEqual(C(3), C(4, 10)) self.assertNotEqual(C(3, 10), C(4, 10)) + def test_dataclass_params_repr(self): + @dataclass(init=True, repr=True) + class C: + pass + + repr_output = repr(C.__dataclass_params__) + expected_output = "_DataclassParams(init=True,repr=True," \ + "eq=True,order=False,unsafe_hash=False," \ + "frozen=False)" + + self.assertEqual(repr_output, expected_output) + def test_hash_field_rules(self): # Test all 6 cases of: # hash=True/False/None From edcda32dcef51c277cf0aaaf5bbc21465c71fa7d Mon Sep 17 00:00:00 2001 From: Karthikeyan Singaravelan Date: Thu, 9 Jan 2020 18:23:20 +0530 Subject: [PATCH 2/2] Remove dataclass_params repr testcase. --- Lib/test/test_dataclasses.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index dc0a30d1b88b1c..e8fe455fc19b42 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -498,18 +498,6 @@ class C: self.assertNotEqual(C(3), C(4, 10)) self.assertNotEqual(C(3, 10), C(4, 10)) - def test_dataclass_params_repr(self): - @dataclass(init=True, repr=True) - class C: - pass - - repr_output = repr(C.__dataclass_params__) - expected_output = "_DataclassParams(init=True,repr=True," \ - "eq=True,order=False,unsafe_hash=False," \ - "frozen=False)" - - self.assertEqual(repr_output, expected_output) - def test_hash_field_rules(self): # Test all 6 cases of: # hash=True/False/None