Deleted Added
sdiff udiff text old ( 11986:c12e4625ab56 ) new ( 12391:ceeca8b41e4b )
full compact
1import pytest
2
3
4def test_error_already_set(msg):
5 from pybind11_tests import throw_already_set
6
7 with pytest.raises(RuntimeError) as excinfo:
8 throw_already_set(False)
9 assert msg(excinfo.value) == "Unknown internal error occurred"
10
11 with pytest.raises(ValueError) as excinfo:
12 throw_already_set(True)
13 assert msg(excinfo.value) == "foo"
14
15
16def test_python_call_in_catch():
17 from pybind11_tests import python_call_in_destructor
18
19 d = {}
20 assert python_call_in_destructor(d) is True
21 assert d["good"] is True
22
23
24def test_custom(msg):
25 from pybind11_tests import (MyException, MyException5, MyException5_1,
26 throws1, throws2, throws3, throws4, throws5, throws5_1,
27 throws_logic_error)
28
29 # Can we catch a MyException?"
30 with pytest.raises(MyException) as excinfo:
31 throws1()
32 assert msg(excinfo.value) == "this error should go to a custom type"
33
34 # Can we translate to standard Python exceptions?
35 with pytest.raises(RuntimeError) as excinfo:
36 throws2()
37 assert msg(excinfo.value) == "this error should go to a standard Python exception"
38
39 # Can we handle unknown exceptions?
40 with pytest.raises(RuntimeError) as excinfo:
41 throws3()
42 assert msg(excinfo.value) == "Caught an unknown exception!"
43
44 # Can we delegate to another handler by rethrowing?
45 with pytest.raises(MyException) as excinfo:
46 throws4()
47 assert msg(excinfo.value) == "this error is rethrown"
48
49 # "Can we fall-through to the default handler?"
50 with pytest.raises(RuntimeError) as excinfo:
51 throws_logic_error()
52 assert msg(excinfo.value) == "this error should fall through to the standard handler"
53
54 # Can we handle a helper-declared exception?
55 with pytest.raises(MyException5) as excinfo:
56 throws5()
57 assert msg(excinfo.value) == "this is a helper-defined translated exception"
58
59 # Exception subclassing:
60 with pytest.raises(MyException5) as excinfo:
61 throws5_1()
62 assert msg(excinfo.value) == "MyException5 subclass"
63 assert isinstance(excinfo.value, MyException5_1)
64
65 with pytest.raises(MyException5_1) as excinfo:
66 throws5_1()
67 assert msg(excinfo.value) == "MyException5 subclass"
68
69 with pytest.raises(MyException5) as excinfo:
70 try:
71 throws5()
72 except MyException5_1:
73 raise RuntimeError("Exception error: caught child from parent")
74 assert msg(excinfo.value) == "this is a helper-defined translated exception"