From 403c53fd6c7059c159db1604eb178251239fc4bf Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Mon, 4 Nov 2019 03:25:16 +0100 Subject: Implement serial connection and basic testing --- kernel/src/lib.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'kernel/src/lib.rs') diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs index 74daa8a..8d967ad 100644 --- a/kernel/src/lib.rs +++ b/kernel/src/lib.rs @@ -10,8 +10,8 @@ extern crate compiler_builtins; mod io; use core::fmt::Write; -use io::vga_text; use io::vga_text::OStream; +use io::{qemu, serial, vga_text}; #[cfg(test)] pub fn test_runner(tests: &[&dyn Fn(&mut OStream)]) { @@ -26,6 +26,8 @@ pub fn test_runner(tests: &[&dyn Fn(&mut OStream)]) { #[test_case] fn test01(stdout: &mut OStream) { write!(stdout, "running test01 . . . OK"); + write!(serial::SerialStream::new(), "running test01 . . . OK\n"); + assert_eq!(0, 1); } #[no_mangle] @@ -33,16 +35,14 @@ pub extern "C" fn _start() -> ! { if cfg!(test) { #[cfg(test)] test_main(); - loop {} + qemu::exit_qemu(qemu::QemuExitCode::Success); } - let mut stdout = vga_text::OStream::new(); + let mut stdout = OStream::new(); stdout.clear(); write!(&mut stdout, "hello world!"); - // panic!("i has panicing"); - core::iter::successors(Some(0), |n| Some(n + 1)) .for_each(|n| write!(&mut stdout, "hello world {}!", n).unwrap()); @@ -52,7 +52,7 @@ pub extern "C" fn _start() -> ! { #[panic_handler] #[no_mangle] pub extern "C" fn panic_handler(_info: &core::panic::PanicInfo) -> ! { - let mut stderr = vga_text::OStream::new(); + let mut stderr = OStream::new(); stderr.set_state(vga_text::CharState::from_colors( vga_text::Color::LightRed, vga_text::Color::Red, @@ -75,5 +75,9 @@ pub extern "C" fn panic_handler(_info: &core::panic::PanicInfo) -> ! { vga_text::Color::Red, )); stderr.print_centered(text.as_bytes()); + if cfg!(test) { + write!(serial::SerialStream::new(), "Testing failed\n"); + qemu::exit_qemu(qemu::QemuExitCode::Failed); + } loop {} } -- cgit v1.2.3-54-g00ecf