diff --git a/src/lib.rs b/src/lib.rs index 28ac15df..32165e72 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,11 +14,25 @@ pub mod vga_buffer; pub fn init() { interrupts::init_idt(); } +pub trait Testable { + fn run(&self) -> (); +} -pub fn test_runner(tests: &[&dyn Fn()]) { +impl Testable for T +where + T: Fn(), +{ + fn run(&self) { + serial_print!("{}...\t", core::any::type_name::()); + self(); + serial_println!("[ok]"); + } +} + +pub fn test_runner(tests: &[&dyn Testable]) { serial_println!("Running {} tests", tests.len()); for test in tests { - test(); + test.run(); } exit_qemu(QemuExitCode::Success); } diff --git a/src/main.rs b/src/main.rs index bf5529ad..1c974898 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,3 +36,8 @@ fn panic(info: &PanicInfo) -> ! { fn panic(info: &PanicInfo) -> ! { blog_os::test_panic_handler(info) } + +#[test_case] +fn trivial_assertion() { + assert_eq!(1, 1); +} diff --git a/src/vga_buffer.rs b/src/vga_buffer.rs index d81f1168..70f29521 100644 --- a/src/vga_buffer.rs +++ b/src/vga_buffer.rs @@ -3,9 +3,6 @@ use lazy_static::lazy_static; use spin::Mutex; use volatile::Volatile; -#[cfg(test)] -use crate::{serial_print, serial_println}; - lazy_static! { /// A global `Writer` instance that can be used for printing to the VGA text buffer. /// @@ -175,30 +172,22 @@ pub fn _print(args: fmt::Arguments) { #[test_case] fn test_println_simple() { - serial_print!("test_println... "); println!("test_println_simple output"); - serial_println!("[ok]"); } #[test_case] fn test_println_many() { - serial_print!("test_println_many... "); for _ in 0..200 { println!("test_println_many output"); } - serial_println!("[ok]"); } #[test_case] fn test_println_output() { - serial_print!("test_println_output... "); - let s = "Some test string that fits on a single line"; println!("{}", s); for (i, c) in s.chars().enumerate() { let screen_char = WRITER.lock().buffer.chars[BUFFER_HEIGHT - 2][i].read(); assert_eq!(char::from(screen_char.ascii_character), c); } - - serial_println!("[ok]"); } diff --git a/tests/basic_boot.rs b/tests/basic_boot.rs index f5cf85e5..c409647e 100644 --- a/tests/basic_boot.rs +++ b/tests/basic_boot.rs @@ -4,7 +4,7 @@ #![test_runner(blog_os::test_runner)] #![reexport_test_harness_main = "test_main"] -use blog_os::{println, serial_print, serial_println}; +use blog_os::println; use core::panic::PanicInfo; #[no_mangle] // don't mangle the name of this function @@ -21,7 +21,5 @@ fn panic(info: &PanicInfo) -> ! { #[test_case] fn test_println() { - serial_print!("test_println... "); println!("test_println output"); - serial_println!("[ok]"); } diff --git a/tests/should_panic.rs b/tests/should_panic.rs index d624bcbe..375f51c0 100644 --- a/tests/should_panic.rs +++ b/tests/should_panic.rs @@ -13,7 +13,7 @@ pub extern "C" fn _start() -> ! { } fn should_fail() { - serial_print!("should_fail... "); + serial_print!("should_panic::should_fail...\t"); assert_eq!(0, 1); }