Skip to content

Commit c55ec4e

Browse files
committed
add test case with init=True and user-defined __init__
1 parent 204ec65 commit c55ec4e

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

Lib/test/test_dataclasses/__init__.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,7 +1413,7 @@ class C:
14131413
C().x
14141414
self.assertEqual(factory.call_count, 2)
14151415

1416-
def test_default_factory_with_no_init_method(self):
1416+
def test_default_factory_and_init_method_interaction(self):
14171417
# See https://github.com/python/cpython/issues/89529.
14181418

14191419
@dataclass
@@ -1452,8 +1452,8 @@ class C(base_class):
14521452
self.assertListEqual(C().x, [])
14531453

14541454
with self.subTest('user-defined __init__', base_class=base_class,
1455-
init=False, slots=slots, field_init=field_init):
1456-
@dataclass(init=False, slots=slots)
1455+
init=True, slots=slots, field_init=field_init):
1456+
@dataclass(init=True, slots=slots)
14571457
class C(base_class):
14581458
x: list = field(init=field_init, default_factory=list)
14591459
def __init__(self, *a, **kw):
@@ -1468,6 +1468,16 @@ def __init__(self, *a, **kw):
14681468
class C(base_class):
14691469
x: list = field(init=field_init, default_factory=list)
14701470

1471+
with self.subTest('user-defined __init__', base_class=base_class,
1472+
init=False, slots=slots, field_init=field_init):
1473+
@dataclass(init=False, slots=slots)
1474+
class C(base_class):
1475+
x: list = field(init=field_init, default_factory=list)
1476+
def __init__(self, *a, **kw):
1477+
# deliberately use something else
1478+
self.x = 'world'
1479+
self.assertEqual(C().x, 'world')
1480+
14711481
def test_default_factory_not_called_if_value_given(self):
14721482
# We need a factory that we can test if it's been called.
14731483
factory = Mock()

0 commit comments

Comments
 (0)