use crate::test_mode::base::decide;
use std::fmt::Display;
#[derive(Debug)]
pub enum ExecutionOutcome {
Executed,
CompileError(String),
}
#[derive(Debug)]
pub enum ValidationResult {
Pass,
Fail(String),
Error(String),
Skipped(String),
}
#[derive(Debug)]
pub enum TestOutcome {
Validated(ValidationResult),
CompileError(String),
}
impl TestOutcome {
#[track_caller]
pub fn enforce(self) {
decide(self).enforce();
}
}
#[derive(Debug)]
pub enum TestDecision {
Accept,
Reject(String),
}
impl TestDecision {
#[track_caller]
pub fn enforce(self) {
match self {
TestDecision::Accept => {}
TestDecision::Reject(reason) => panic!("Test failed: {}", reason),
}
}
}
impl ValidationResult {
pub fn as_test_outcome(self) -> TestOutcome {
TestOutcome::Validated(self)
}
}
impl<E: Display> From<Result<(), E>> for ExecutionOutcome {
fn from(result: Result<(), E>) -> Self {
match result {
Ok(_) => ExecutionOutcome::Executed,
Err(err) => ExecutionOutcome::CompileError(format!("Test did not run: {}", err)),
}
}
}