summaryrefslogtreecommitdiff
path: root/kernel/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/lib.rs')
-rw-r--r--kernel/src/lib.rs16
1 files changed, 10 insertions, 6 deletions
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 {}
}