def test_EmptyMapping():
marker = object()
# It should be possible to 'construct' an instance..
assert EmptyMapping() is EmptyMapping
# Must be passable to dict()
assert dict(EmptyMapping) == {}
# EmptyMapping['x'] raises in various forms.
assert 'x' not in EmptyMapping
with pytest.raises(KeyError):
EmptyMapping['x']
with pytest.raises(KeyError):
del EmptyMapping['x']
EmptyMapping['x'] = 4 # Shouldn't fail
assert 'x' not in EmptyMapping # but it's a no-op
with pytest.raises(KeyError):
EmptyMapping['x']
# Check it's all empty
check_empty_iterable(EmptyMapping, 'EmptyMapping')
check_empty_iterable(EmptyMapping.keys(), 'keys()')
check_empty_iterable(EmptyMapping.values(), 'values()')
check_empty_iterable(EmptyMapping.items(), 'items()', item=('x', 'y'))
# Dict methods
assert EmptyMapping.get('x') is None
assert EmptyMapping.setdefault('x') is None
assert EmptyMapping.get('x', marker) is marker
assert EmptyMapping.setdefault('x', marker) is marker
assert EmptyMapping.pop('x', marker) is marker
with pytest.raises(KeyError):
EmptyMapping.popitem()
with pytest.raises(KeyError):
EmptyMapping.pop('x')
assert not EmptyMapping
assert len(EmptyMapping) == 0
# Should work, but do nothing and return None.
assert EmptyMapping.update({1: 23, 'test': 34, }) is None
assert EmptyMapping.update(other=5, a=1, b=3) is None
# Can't give more than one mapping as a positional argument,
# though.
with pytest.raises(TypeError):
EmptyMapping.update({3: 4}, {1: 2})
# Check it's registered in ABCs.
from collections import abc
assert isinstance(EmptyMapping, abc.Container)
assert isinstance(EmptyMapping, abc.Sized)
assert isinstance(EmptyMapping, abc.Mapping)
assert isinstance(EmptyMapping, abc.MutableMapping)
评论列表
文章目录