diff --git a/src/interrupts.rs b/src/interrupts.rs index 846447c8..1816ab88 100644 --- a/src/interrupts.rs +++ b/src/interrupts.rs @@ -109,13 +109,8 @@ extern "x86-interrupt" fn keyboard_interrupt_handler(_stack_frame: &mut Interrup } } -#[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 25e2527e..d438d5b2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -25,11 +25,25 @@ pub fn init() { unsafe { interrupts::PICS.lock().initialize() }; x86_64::instructions::interrupts::enable(); } +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 84d42343..6ece60e5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -71,3 +71,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 ff501c62..8052d20f 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. /// @@ -180,18 +177,14 @@ 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] @@ -199,8 +192,6 @@ fn test_println_output() { use core::fmt::Write; use x86_64::instructions::interrupts; - serial_print!("test_println_output... "); - let s = "Some test string that fits on a single line"; interrupts::without_interrupts(|| { let mut writer = WRITER.lock(); @@ -210,6 +201,4 @@ fn test_println_output() { 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); } diff --git a/tests/stack_overflow.rs b/tests/stack_overflow.rs index 0b5a654d..71ad12d6 100644 --- a/tests/stack_overflow.rs +++ b/tests/stack_overflow.rs @@ -9,7 +9,7 @@ use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame}; #[no_mangle] pub extern "C" fn _start() -> ! { - serial_print!("stack_overflow... "); + serial_print!("stack_overflow::stack_overflow...\t"); blog_os::gdt::init(); init_test_idt();