(self)
| 1361 | self.assertEqual(c.shadowed, 30) |
| 1362 | |
| 1363 | def test_default_factory(self): |
| 1364 | # Test a factory that returns a new list. |
| 1365 | @dataclass |
| 1366 | class C: |
| 1367 | x: int |
| 1368 | y: list = field(default_factory=list) |
| 1369 | |
| 1370 | c0 = C(3) |
| 1371 | c1 = C(3) |
| 1372 | self.assertEqual(c0.x, 3) |
| 1373 | self.assertEqual(c0.y, []) |
| 1374 | self.assertEqual(c0, c1) |
| 1375 | self.assertIsNot(c0.y, c1.y) |
| 1376 | self.assertEqual(astuple(C(5, [1])), (5, [1])) |
| 1377 | |
| 1378 | # Test a factory that returns a shared list. |
| 1379 | l = [] |
| 1380 | @dataclass |
| 1381 | class C: |
| 1382 | x: int |
| 1383 | y: list = field(default_factory=lambda: l) |
| 1384 | |
| 1385 | c0 = C(3) |
| 1386 | c1 = C(3) |
| 1387 | self.assertEqual(c0.x, 3) |
| 1388 | self.assertEqual(c0.y, []) |
| 1389 | self.assertEqual(c0, c1) |
| 1390 | self.assertIs(c0.y, c1.y) |
| 1391 | self.assertEqual(astuple(C(5, [1])), (5, [1])) |
| 1392 | |
| 1393 | # Test various other field flags. |
| 1394 | # repr |
| 1395 | @dataclass |
| 1396 | class C: |
| 1397 | x: list = field(default_factory=list, repr=False) |
| 1398 | self.assertEqual(repr(C()), 'TestCase.test_default_factory.<locals>.C()') |
| 1399 | self.assertEqual(C().x, []) |
| 1400 | |
| 1401 | # hash |
| 1402 | @dataclass(unsafe_hash=True) |
| 1403 | class C: |
| 1404 | x: list = field(default_factory=list, hash=False) |
| 1405 | self.assertEqual(astuple(C()), ([],)) |
| 1406 | self.assertEqual(hash(C()), hash(())) |
| 1407 | |
| 1408 | # init (see also test_default_factory_with_no_init) |
| 1409 | @dataclass |
| 1410 | class C: |
| 1411 | x: list = field(default_factory=list, init=False) |
| 1412 | self.assertEqual(astuple(C()), ([],)) |
| 1413 | |
| 1414 | # compare |
| 1415 | @dataclass |
| 1416 | class C: |
| 1417 | x: list = field(default_factory=list, compare=False) |
| 1418 | self.assertEqual(C(), C([1])) |
| 1419 | |
| 1420 | def test_default_factory_with_no_init(self): |
nothing calls this directly
no test coverage detected