swactor/crates/process/src/mock.rs
Zachery Aaron Shores-Chmielewski 74801d44cf feat: native process manager (#47)
Enable swactor to spawn and manage native processes using ssh.


Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
2026-02-23 04:44:46 +00:00

61 lines
1.6 KiB
Rust

use std::collections::VecDeque;
use crate::action::ProcessAction;
use crate::driver::ProcessDriver;
use crate::event::ProcessEvent;
/// A test-oriented driver that records executed actions and lets you inject events.
pub struct MockDriver {
pending_events: VecDeque<ProcessEvent>,
executed_actions: Vec<ProcessAction>,
}
impl MockDriver {
pub fn new() -> Self {
Self {
pending_events: VecDeque::new(),
executed_actions: Vec::new(),
}
}
/// Queue a single event to be returned by the next `poll()`.
pub fn inject(&mut self, event: ProcessEvent) {
self.pending_events.push_back(event);
}
/// Queue multiple events to be returned by subsequent `poll()` calls.
pub fn inject_many(&mut self, events: impl IntoIterator<Item = ProcessEvent>) {
self.pending_events.extend(events);
}
/// View all actions that have been executed so far.
pub fn executed_actions(&self) -> &[ProcessAction] {
&self.executed_actions
}
/// Take all executed actions, clearing the internal log.
pub fn take_executed_actions(&mut self) -> Vec<ProcessAction> {
std::mem::take(&mut self.executed_actions)
}
/// Number of events waiting to be polled.
pub fn pending_event_count(&self) -> usize {
self.pending_events.len()
}
}
impl Default for MockDriver {
fn default() -> Self {
Self::new()
}
}
impl ProcessDriver for MockDriver {
fn execute(&mut self, action: ProcessAction) {
self.executed_actions.push(action);
}
fn poll(&mut self) -> Vec<ProcessEvent> {
self.pending_events.drain(..).collect()
}
}