From aa03bdad88da0766d800b3034e7610922f76bc8d Mon Sep 17 00:00:00 2001 From: Greg Shuflin Date: Sun, 20 Feb 2022 02:14:49 -0800 Subject: [PATCH] More test niceties --- Cargo.toml | 4 +++- src/main.rs | 36 +++++++++++++++++++++++++++++++----- src/serial.rs | 5 ++--- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 834d407..bc7a621 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,5 +17,7 @@ features = ["spin_no_std"] [package.metadata.bootimage] -test-args = ["-device", "isa-debug-exit,iobase=0xf4,iosize=0x04", "-serial", "stdio"] +test-args = ["-device", "isa-debug-exit,iobase=0xf4,iosize=0x04", "-serial", "stdio", + "-display", "none"] test-success-exit-code = 33 # (0x10 << 1) | 1 +test-timeout = 10 # timeout in seconds diff --git a/src/main.rs b/src/main.rs index 556493f..f831e6f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,6 @@ // #![feature(abi_x86_interrupt, asm)] #![no_std] #![no_main] - #![feature(custom_test_frameworks)] #![test_runner(crate::test_runner)] #![reexport_test_harness_main = "test_main"] @@ -13,12 +12,22 @@ mod serial; use core::panic::PanicInfo; +#[cfg(not(test))] #[panic_handler] fn panic(info: &PanicInfo) -> ! { println!("{info}"); loop {} } +#[cfg(test)] +#[panic_handler] +fn panic(info: &PanicInfo) -> ! { + serial_println!("[failed]\n"); + serial_println!("Error: {}", info); + exit_qemu(QemuExitCode::Failed); + loop {} +} + #[no_mangle] pub extern "C" fn _start() -> ! { #[cfg(test)] @@ -43,11 +52,26 @@ pub fn exit_qemu(exit_code: QemuExitCode) { } } +pub trait TestFunction { + fn run(&self) -> (); +} + +impl TestFunction for T +where + T: Fn(), +{ + fn run(&self) { + serial_print!("{}...\t", core::any::type_name::()); + self(); + serial_println!("[ok]"); + } +} + #[cfg(test)] -fn test_runner(tests: &[&dyn Fn()]) { +fn test_runner(tests: &[&dyn TestFunction]) { serial_println!("Running {} test(s)", tests.len()); for test in tests { - test(); + test.run(); } exit_qemu(QemuExitCode::Success); @@ -55,8 +79,10 @@ fn test_runner(tests: &[&dyn Fn()]) { #[test_case] fn basic_test() { - serial_print!("Trivial test... "); assert_eq!(5, 5); - serial_println!("[ok]"); } +#[test_case] +fn basic_test2() { + assert_eq!(4, 4); +} diff --git a/src/serial.rs b/src/serial.rs index 870f82d..2e56de8 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -1,7 +1,6 @@ -use uart_16550::SerialPort; -use spin::Mutex; use lazy_static::lazy_static; - +use spin::Mutex; +use uart_16550::SerialPort; lazy_static! { pub static ref SERIAL1: Mutex = {