Virtual IO

Virtual IO is a rust library for easily implementing stdin and stdout in a testable way. It replaces all println! and print! macro calls.

```rs use virtual_io::{VirtualIo, Vio};

fn getname() -> String { getnamebase(&mut virtualio::new()) }

fn getnamebase(vio: &mut impl VirtualIo) -> String { vio.print("What is your name? "); let name = vio.read_line(); vio.println(format!("Hello, {}!", name)); name }

[cfg(test)]

mod test { use super::*; use virtual_io::VioFakeBuilder;

#[test]
fn test_get_name() {
    // Create a fake version of vio that we can inject into the base
    // function.
    let mut vio = VioFakeBuilder::new()
        // Add the expected io calls.
        .expect_stdout("What is your name? ")
        .provide_stdin("John")
        .expect_stdout("Hello, John!\n")
        // Build the fake vio.
        .build();
    // Assert that the return value is correct.
    assert_eq!(get_name_base(&mut vio), "John");
    // Assert that all io operations were identical to what was expected.
    assert_eq!(vio.get_actual(), vio.get_expected());
}

} ```