You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							87 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							87 lines
						
					
					
						
							2.8 KiB
						
					
					
				| import pytest | |
| 
 | |
| 
 | |
| def test_std_exception(msg): | |
|     from pybind11_tests import throw_std_exception | |
| 
 | |
|     with pytest.raises(RuntimeError) as excinfo: | |
|         throw_std_exception() | |
|     assert msg(excinfo.value) == "This exception was intentionally thrown." | |
| 
 | |
| 
 | |
| def test_error_already_set(msg): | |
|     from pybind11_tests import throw_already_set | |
| 
 | |
|     with pytest.raises(RuntimeError) as excinfo: | |
|         throw_already_set(False) | |
|     assert msg(excinfo.value) == "Unknown internal error occurred" | |
| 
 | |
|     with pytest.raises(ValueError) as excinfo: | |
|         throw_already_set(True) | |
|     assert msg(excinfo.value) == "foo" | |
| 
 | |
| 
 | |
| def test_python_call_in_catch(): | |
|     from pybind11_tests import python_call_in_destructor | |
| 
 | |
|     d = {} | |
|     assert python_call_in_destructor(d) is True | |
|     assert d["good"] is True | |
| 
 | |
| 
 | |
| def test_exception_matches(): | |
|     from pybind11_tests import exception_matches | |
|     exception_matches() | |
| 
 | |
| 
 | |
| def test_custom(msg): | |
|     from pybind11_tests import (MyException, MyException5, MyException5_1, | |
|                                 throws1, throws2, throws3, throws4, throws5, throws5_1, | |
|                                 throws_logic_error) | |
| 
 | |
|     # Can we catch a MyException?" | |
|     with pytest.raises(MyException) as excinfo: | |
|         throws1() | |
|     assert msg(excinfo.value) == "this error should go to a custom type" | |
| 
 | |
|     # Can we translate to standard Python exceptions? | |
|     with pytest.raises(RuntimeError) as excinfo: | |
|         throws2() | |
|     assert msg(excinfo.value) == "this error should go to a standard Python exception" | |
| 
 | |
|     # Can we handle unknown exceptions? | |
|     with pytest.raises(RuntimeError) as excinfo: | |
|         throws3() | |
|     assert msg(excinfo.value) == "Caught an unknown exception!" | |
| 
 | |
|     # Can we delegate to another handler by rethrowing? | |
|     with pytest.raises(MyException) as excinfo: | |
|         throws4() | |
|     assert msg(excinfo.value) == "this error is rethrown" | |
| 
 | |
|     # "Can we fall-through to the default handler?" | |
|     with pytest.raises(RuntimeError) as excinfo: | |
|         throws_logic_error() | |
|     assert msg(excinfo.value) == "this error should fall through to the standard handler" | |
| 
 | |
|     # Can we handle a helper-declared exception? | |
|     with pytest.raises(MyException5) as excinfo: | |
|         throws5() | |
|     assert msg(excinfo.value) == "this is a helper-defined translated exception" | |
| 
 | |
|     # Exception subclassing: | |
|     with pytest.raises(MyException5) as excinfo: | |
|         throws5_1() | |
|     assert msg(excinfo.value) == "MyException5 subclass" | |
|     assert isinstance(excinfo.value, MyException5_1) | |
| 
 | |
|     with pytest.raises(MyException5_1) as excinfo: | |
|         throws5_1() | |
|     assert msg(excinfo.value) == "MyException5 subclass" | |
| 
 | |
|     with pytest.raises(MyException5) as excinfo: | |
|         try: | |
|             throws5() | |
|         except MyException5_1: | |
|             raise RuntimeError("Exception error: caught child from parent") | |
|     assert msg(excinfo.value) == "this is a helper-defined translated exception"
 |