diff --git a/src/interrupts.rs b/src/interrupts.rs index e9bb9236c..4fdeb2b70 100644 --- a/src/interrupts.rs +++ b/src/interrupts.rs @@ -30,13 +30,8 @@ extern "x86-interrupt" fn double_fault_handler( panic!("EXCEPTION: DOUBLE FAULT\n{:#?}", stack_frame); } -#[cfg(test)] -use crate::{serial_print, serial_println}; - #[test_case] fn test_breakpoint_exception() { - serial_print!("test_breakpoint_exception..."); // invoke a breakpoint exception x86_64::instructions::interrupts::int3(); - serial_println!("[ok]"); } diff --git a/src/lib.rs b/src/lib.rs index c910eef53..fb8414895 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,11 +16,25 @@ pub fn init() { gdt::init(); interrupts::init_idt(); } +pub trait Testable { + fn run(&self) -> (); +} + +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 Fn()]) { +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 b5cd3b428..a496a6d25 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,3 +40,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 d81f11688..70f29521a 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 f5cf85e55..c409647e5 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 d624bcbe1..375f51c03 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); }