mirror of
https://github.com/python/cpython.git
synced 2025-08-27 12:16:04 +00:00
bpo-35960: Fix dataclasses.field throwing away empty metadata. (GH-11815)
This commit is contained in:
parent
a31f4cc881
commit
b01786c881
3 changed files with 15 additions and 3 deletions
|
@ -1737,23 +1737,33 @@ class TestCase(unittest.TestCase):
|
|||
i: int = field(metadata=0)
|
||||
|
||||
# Make sure an empty dict works.
|
||||
d = {}
|
||||
@dataclass
|
||||
class C:
|
||||
i: int = field(metadata={})
|
||||
i: int = field(metadata=d)
|
||||
self.assertFalse(fields(C)[0].metadata)
|
||||
self.assertEqual(len(fields(C)[0].metadata), 0)
|
||||
# Update should work (see bpo-35960).
|
||||
d['foo'] = 1
|
||||
self.assertEqual(len(fields(C)[0].metadata), 1)
|
||||
self.assertEqual(fields(C)[0].metadata['foo'], 1)
|
||||
with self.assertRaisesRegex(TypeError,
|
||||
'does not support item assignment'):
|
||||
fields(C)[0].metadata['test'] = 3
|
||||
|
||||
# Make sure a non-empty dict works.
|
||||
d = {'test': 10, 'bar': '42', 3: 'three'}
|
||||
@dataclass
|
||||
class C:
|
||||
i: int = field(metadata={'test': 10, 'bar': '42', 3: 'three'})
|
||||
i: int = field(metadata=d)
|
||||
self.assertEqual(len(fields(C)[0].metadata), 3)
|
||||
self.assertEqual(fields(C)[0].metadata['test'], 10)
|
||||
self.assertEqual(fields(C)[0].metadata['bar'], '42')
|
||||
self.assertEqual(fields(C)[0].metadata[3], 'three')
|
||||
# Update should work.
|
||||
d['foo'] = 1
|
||||
self.assertEqual(len(fields(C)[0].metadata), 4)
|
||||
self.assertEqual(fields(C)[0].metadata['foo'], 1)
|
||||
with self.assertRaises(KeyError):
|
||||
# Non-existent key.
|
||||
fields(C)[0].metadata['baz']
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue