improve frappy.errors

- include all secop errors from spec
- add doc strings
- make conversion to and from error report nicer
- move all error classes to frappy.errors
- rename errors clashing with built-in errors

Change-Id: I4d882173b020cd4baf862c5891375b691e67e24a
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30721
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
2023-03-20 15:19:57 +01:00
parent 5db84b3fa1
commit 11a3bed8b8
6 changed files with 162 additions and 96 deletions

View File

@ -21,16 +21,28 @@
# *****************************************************************************
"""test data types."""
import frappy.errors
from frappy.errors import EXCEPTIONS, SECoPError
import pytest
from frappy.errors import RangeError, WrongTypeError, ProgrammingError, \
ConfigError, InternalError, DiscouragedConversion, secop_error, make_secop_error
def test_errors():
"""check consistence of frappy.errors.EXCEPTIONS"""
for e in EXCEPTIONS.values():
assert EXCEPTIONS[e().name] == e
# check that all defined secop errors are in EXCEPTIONS
for cls in frappy.errors.__dict__.values():
if isinstance(cls, type) and issubclass(cls, SECoPError):
if cls != SECoPError:
assert cls().name in EXCEPTIONS
@pytest.mark.parametrize('exc, name, text, echk', [
(RangeError('out of range'), 'RangeError', 'out of range', None),
(WrongTypeError('bad type'), 'WrongType', 'bad type', None),
(ProgrammingError('x'), 'InternalError', 'ProgrammingError: x', None),
(ConfigError('y'), 'InternalError', 'ConfigError: y', None),
(InternalError('z'), 'InternalError', 'z', None),
(DiscouragedConversion('w'), 'InternalError', 'DiscouragedConversion: w', None),
(ValueError('v'), 'InternalError', "ValueError: v", InternalError("ValueError: v")),
(None, 'InternalError', "UnknownError: v", InternalError("UnknownError: v")),
])
def test_errors(exc, name, text, echk):
"""check consistence of frappy.errors"""
if exc:
err = secop_error(exc)
assert err.name == name
assert str(err) == text
recheck = make_secop_error(name, text)
echk = echk or exc
assert type(recheck) == type(echk)
assert str(recheck) == str(echk)