47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
/*
 | 
						|
    tests/test_warnings.cpp -- usage of warnings::warn() and warnings categories.
 | 
						|
 | 
						|
    Copyright (c) 2024 Jan Iwaszkiewicz <jiwaszkiewicz6@gmail.com>
 | 
						|
 | 
						|
    All rights reserved. Use of this source code is governed by a
 | 
						|
    BSD-style license that can be found in the LICENSE file.
 | 
						|
*/
 | 
						|
 | 
						|
#include <pybind11/warnings.h>
 | 
						|
 | 
						|
#include "pybind11_tests.h"
 | 
						|
 | 
						|
#include <utility>
 | 
						|
 | 
						|
TEST_SUBMODULE(warnings_, m) {
 | 
						|
 | 
						|
    // Test warning mechanism base
 | 
						|
    m.def("warn_and_return_value", []() {
 | 
						|
        std::string message = "This is simple warning";
 | 
						|
        py::warnings::warn(message.c_str(), PyExc_Warning);
 | 
						|
        return 21;
 | 
						|
    });
 | 
						|
 | 
						|
    m.def("warn_with_default_category", []() { py::warnings::warn("This is RuntimeWarning"); });
 | 
						|
 | 
						|
    m.def("warn_with_different_category",
 | 
						|
          []() { py::warnings::warn("This is FutureWarning", PyExc_FutureWarning); });
 | 
						|
 | 
						|
    m.def("warn_with_invalid_category",
 | 
						|
          []() { py::warnings::warn("Invalid category", PyExc_Exception); });
 | 
						|
 | 
						|
    // Test custom warnings
 | 
						|
    PYBIND11_CONSTINIT static py::gil_safe_call_once_and_store<py::object> ex_storage;
 | 
						|
    ex_storage.call_once_and_store_result([&]() {
 | 
						|
        return py::warnings::new_warning_type(m, "CustomWarning", PyExc_DeprecationWarning);
 | 
						|
    });
 | 
						|
 | 
						|
    m.def("warn_with_custom_type", []() {
 | 
						|
        py::warnings::warn("This is CustomWarning", ex_storage.get_stored());
 | 
						|
        return 37;
 | 
						|
    });
 | 
						|
 | 
						|
    m.def("register_duplicate_warning",
 | 
						|
          [m]() { py::warnings::new_warning_type(m, "CustomWarning", PyExc_RuntimeWarning); });
 | 
						|
}
 |