Skip to main content

os_test_framework/
panic.rs

1use core::panic::PanicInfo;
2
3use owo_colors::OwoColorize;
4
5use crate::platform::{ExitState, try_platform};
6
7pub fn handle_panic(panic_info: &PanicInfo) -> ! {
8    if let Some(platform) = try_platform() {
9        let mut platform = platform.lock();
10        platform.print(format_args!(
11            " {}\n\n{}\n",
12            "FAILED".bright_red(),
13            panic_info.message()
14        ));
15
16        platform.print(format_args!("test result: {}.", "FAILED".bright_red()));
17        platform.exit(ExitState::Failed)
18    }
19
20    loop {
21        core::hint::spin_loop();
22    }
23}
24
25#[macro_export]
26macro_rules! forward_panic {
27    () => {
28        #[cfg(test)]
29        #[panic_handler]
30        fn _os_test_framework_panic_handler(panic_info: &core::panic::PanicInfo) -> ! {
31            $crate::handle_panic(panic_info);
32        }
33    };
34}