use xbasic::basic_io::BasicIO;
use xbasic::xbasic::XBasic;
pub struct TestIO {
expected: &'static str,
actual: String,
}
impl TestIO {
pub fn new(expected: &'static str) -> Self {
Self {
expected,
actual: String::new(),
}
}
pub fn check(&self) {
assert_eq!(self.expected, self.actual);
}
}
impl BasicIO for TestIO {
fn read_line(&mut self) -> String {
unimplemented!()
}
fn write_line(&mut self, line: String) {
self.actual += &(line + "\n");
}
}
#[allow(dead_code)]
pub fn test_program(program: &'static str, expected: &'static str) {
let tio = TestIO::new(expected);
let mut xb = XBasic::new(tio);
match xb.run(program) {
Ok(_) => (),
Err(_) => {
for error in xb.error_handler.errors {
println!("{}", error);
}
panic!();
}
}
xb.get_io().check();
}