use crate::cli::validate::{RunnableCase, RunnableSuite, ValidateCmd};
use aufbau::validation::completable;
pub fn run(args: &ValidateCmd) {
let all = completable::all_suites();
let suites: Vec<RunnableSuite> = all
.into_iter()
.map(|(name, grammar, cases)| {
let runnable_cases: Vec<RunnableCase> = cases
.into_iter()
.map(|case| {
let g = grammar.clone();
let desc = case.description.to_string();
let input = case.input.to_string();
RunnableCase {
desc,
input,
run: Box::new(move || {
let (result, _duration, _meta) =
completable::run_test_timed_meta(&g, &case);
match result {
completable::TestResult::Pass(_) => (true, String::new()),
completable::TestResult::Fail(msg) => (false, msg),
}
}),
}
})
.collect();
RunnableSuite {
name,
cases: runnable_cases,
}
})
.collect();
super::run_suites("completable", suites, args);
}