forked from Rust-related/RustPython
76 lines
1.6 KiB
Python
76 lines
1.6 KiB
Python
def exceptions_eq(e1, e2):
|
|
return type(e1) is type(e2) and e1.args == e2.args
|
|
|
|
def round_trip_repr(e):
|
|
return exceptions_eq(e, eval(repr(e)))
|
|
|
|
# KeyError
|
|
empty_exc = KeyError()
|
|
assert str(empty_exc) == ''
|
|
assert round_trip_repr(empty_exc)
|
|
assert len(empty_exc.args) == 0
|
|
assert type(empty_exc.args) == tuple
|
|
|
|
exc = KeyError('message')
|
|
assert str(exc) == "'message'"
|
|
assert round_trip_repr(exc)
|
|
|
|
assert LookupError.__str__(exc) == "message"
|
|
|
|
exc = KeyError('message', 'another message')
|
|
assert str(exc) == "('message', 'another message')"
|
|
assert round_trip_repr(exc)
|
|
assert exc.args[0] == 'message'
|
|
assert exc.args[1] == 'another message'
|
|
|
|
class A:
|
|
def __repr__(self):
|
|
return 'A()'
|
|
def __str__(self):
|
|
return 'str'
|
|
def __eq__(self, other):
|
|
return type(other) is A
|
|
|
|
exc = KeyError(A())
|
|
assert str(exc) == 'A()'
|
|
assert round_trip_repr(exc)
|
|
|
|
# ImportError / ModuleNotFoundError
|
|
exc = ImportError()
|
|
assert exc.name is None
|
|
assert exc.path is None
|
|
assert exc.msg is None
|
|
assert exc.args == ()
|
|
|
|
exc = ImportError('hello')
|
|
assert exc.name is None
|
|
assert exc.path is None
|
|
assert exc.msg == 'hello'
|
|
assert exc.args == ('hello',)
|
|
|
|
exc = ImportError('hello', name='name', path='path')
|
|
assert exc.name == 'name'
|
|
assert exc.path == 'path'
|
|
assert exc.msg == 'hello'
|
|
assert exc.args == ('hello',)
|
|
|
|
|
|
class NewException(Exception):
|
|
|
|
def __init__(self, value):
|
|
self.value = value
|
|
|
|
|
|
try:
|
|
raise NewException("test")
|
|
except NewException as e:
|
|
assert e.value == "test"
|
|
|
|
|
|
exc = SyntaxError('msg', 1, 2, 3, 4, 5)
|
|
assert exc.msg == 'msg'
|
|
assert exc.filename is None
|
|
assert exc.lineno is None
|
|
assert exc.offset is None
|
|
assert exc.text is None
|