def test_pop_index_error_when_no_default_provided(self, dict_type): proxy = Cut(dict_type({"a": [[1]]})) with pytest.raises(IndexError) as error: proxy.pop("a[0][1]") expected_error = IndexError( f"Cannot access index '1' in path 'a[0][1]', " f"because of error: {repr(IndexError('pop index out of range'))}.") assert str(error.value) == str(expected_error)
def test_attribute_error(self, dict_type): proxy = Cut(dict_type({"a": 42})) with pytest.raises(AttributeError) as error: proxy.pop("a.b") expected_error = AttributeError( "Unable to pop item 'b' in key 'a.b': " "the element must be a dictionary or a list but is of type '<class 'int'>'." ) assert str(error.value) == str(expected_error)
def test_key_error_when_no_default_provided(self, dict_type, data, path, failing_key): proxy = Cut(dict_type(deepcopy(data))) with pytest.raises(KeyError) as error: proxy.pop(path) expected_error = KeyError( f"Cannot access key '{failing_key}' in path '{path}', " f"because of error: {repr(KeyError(failing_key))}.") assert str(error.value) == str(expected_error)
def test_list_index_error_when_no_default_provided(self, dict_type, data, path, failing_index): proxy = Cut(dict_type(deepcopy(data))) with pytest.raises(IndexError) as error: proxy.pop(path) expected_error = IndexError( f"Cannot access index '{failing_index}' in path '{path}', " f"because of error: {repr(IndexError('list index out of range'))}." ) assert str(error.value) == str(expected_error)
def test_with_default(self, dict_type, data, key, default): proxy = Cut(dict_type(deepcopy(data))) assert proxy.pop(key, default) == default
def test_pop(self, dict_type, data, key, result): proxy = Cut(dict_type(deepcopy(data))) assert proxy.pop(key) == result assert key not in proxy