use crate::model::Scoring;
pub(super) const NEVER_RUN: &str = "Pending";
pub(super) fn scoring(status: &str) -> Option<Scoring> {
match status {
"Killed" => Some(Scoring::Detected),
"Survived" | "Timeout" | "NoCoverage" => Some(Scoring::Undetected),
"CompileError" | "Ignored" | "RuntimeError" | NEVER_RUN => Some(Scoring::Excluded),
_undefined => None,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_status_the_schema_defines_is_classified() {
for (status, expected) in [
("Killed", Scoring::Detected),
("Timeout", Scoring::Undetected),
("Survived", Scoring::Undetected),
("NoCoverage", Scoring::Undetected),
("CompileError", Scoring::Excluded),
("RuntimeError", Scoring::Excluded),
("Ignored", Scoring::Excluded),
("Pending", Scoring::Excluded),
] {
assert_eq!(scoring(status), Some(expected), "{status}");
}
}
#[test]
fn a_status_outside_the_schema_is_not_classified() {
for status in ["Kiled", "killed", "", "OutOfMemory", "NotBuilt"] {
assert_eq!(scoring(status), None, "{status}");
}
}
}