use anyhow::Result;
use crate::phase::{run_phase_analysis, PhaseAnalysisReport, PhaseOptions, PhaseSelection};
pub trait PhaseRunner {
fn run(&self, options: PhaseOptions, selection: PhaseSelection) -> Result<PhaseAnalysisReport>;
}
#[derive(Debug, Default, Clone, Copy)]
pub struct DefaultPhaseRunner;
impl PhaseRunner for DefaultPhaseRunner {
fn run(&self, options: PhaseOptions, selection: PhaseSelection) -> Result<PhaseAnalysisReport> {
run_phase_analysis(options, selection)
}
}
#[cfg(test)]
mod tests {
use super::*;
use tempfile::tempdir;
#[test]
fn default_runner_executes_phase_analysis() {
let dir = tempdir().expect("tempdir");
std::fs::create_dir_all(dir.path().join("src")).expect("mkdir");
std::fs::write(dir.path().join("src/lib.rs"), "pub fn run()->bool{true}\n").expect("write");
let runner = DefaultPhaseRunner;
let report = runner
.run(
PhaseOptions {
root: dir.path().to_path_buf(),
..PhaseOptions::default()
},
PhaseSelection::Single(1),
)
.expect("runner report");
assert_eq!(report.executed_phases, vec![1]);
}
}