#[cfg(feature = "mock")]
use rust_expect::mock::{
MockBuilder, MockSession, MockTransport, Scenario, login_mock, shell_mock, simple_mock,
};
fn main() {
println!("rust-expect Mock Testing Example");
println!("=================================\n");
#[cfg(not(feature = "mock"))]
{
println!("This example requires the 'mock' feature.");
println!("Run with: cargo run --example mock_testing --features mock");
}
#[cfg(feature = "mock")]
run_examples();
}
#[cfg(feature = "mock")]
fn run_examples() {
println!("1. Simple mock transport...");
let transport = simple_mock("Hello, World!\n");
println!(" Created mock with pre-queued output");
println!(" EOF status: {}", transport.is_eof());
println!("\n2. Using MockBuilder...");
let _transport = MockBuilder::new()
.output("Welcome to the system\n")
.delay_ms(100)
.output("Login: ")
.delay_ms(50)
.output("Password: ")
.delay_ms(100)
.output("Login successful!\n$ ")
.exit(0)
.build();
println!(" Built mock with multiple outputs and delays");
println!("\n3. Pre-built scenarios...");
let _login = login_mock();
println!(" Created login scenario mock");
let _shell = shell_mock("$ ");
println!(" Created shell scenario mock");
println!("\n4. Custom scenarios...");
let scenario = Scenario::new("ftp-session")
.initial_output("220 FTP Server Ready\n")
.expect_respond("USER anonymous", "331 Password required\n")
.expect_respond("PASS guest@", "230 User logged in\n")
.expect_respond("PWD", "257 \"/\" is current directory\n")
.expect_respond("QUIT", "221 Goodbye\n");
println!(" Created FTP session scenario: {}", scenario.name());
let _ftp_mock = MockTransport::from_scenario(&scenario);
println!(" Mock transport ready for testing");
println!("\n5. Mock session for testing...");
let scenario = Scenario::new("ssh-login")
.initial_output("user@host's password: ")
.expect_respond("secret123", "\nWelcome to Ubuntu 22.04\n$ ")
.expect_respond("whoami", "user\n$ ")
.expect_respond("exit", "logout\n");
let _session = MockSession::from_scenario(&scenario);
println!(" Created mock SSH session");
println!(" Ready for expect script testing");
println!("\n6. Mock testing workflow...");
let scenario = Scenario::new("test-case")
.initial_output("Enter value: ")
.expect_respond("42", "Answer accepted\nResult: 84\n");
let _mock = MockSession::from_scenario(&scenario);
println!(" Mock testing enables:");
println!(" - Fast, deterministic tests");
println!(" - No real process spawning");
println!(" - Precise control over timing");
println!(" - Simulating error conditions");
println!("\n7. Event timeline mock...");
let _transport = MockBuilder::new()
.output("Connecting...")
.delay_ms(500)
.output(" connected!\n")
.output("Ready> ")
.delay_ms(100)
.output("Processing...")
.delay_ms(1000)
.output(" done!\n")
.eof()
.build();
println!(" Created timeline with realistic delays");
println!(" Useful for testing timeout handling");
println!("\nMock testing examples completed successfully!");
}