#![no_std]
#![forbid(unsafe_code)]
#![warn(missing_docs)]
extern crate alloc;
#[cfg(feature = "std")]
extern crate std;
pub mod autobahn_ws;
pub mod coap_plugtest;
pub mod dds_xml_xvendor;
pub mod h2spec_grpc;
pub mod oasis_mqtt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CaseResult {
Pass,
Fail(alloc::string::String),
Skip(&'static str),
}
impl CaseResult {
#[must_use]
pub fn is_acceptable(&self) -> bool {
!matches!(self, Self::Fail(_))
}
}
pub struct TestCase {
pub name: &'static str,
pub run: fn() -> CaseResult,
}
#[must_use]
pub fn run_suite(suite: &[TestCase]) -> (usize, usize, usize) {
let mut pass = 0usize;
let mut skip = 0usize;
let mut fail = 0usize;
for c in suite {
match (c.run)() {
CaseResult::Pass => pass += 1,
CaseResult::Skip(_) => skip += 1,
CaseResult::Fail(_) => fail += 1,
}
}
(pass, skip, fail)
}
#[cfg(test)]
#[allow(clippy::expect_used, clippy::unwrap_used, clippy::panic)]
mod tests {
use super::*;
#[test]
fn case_result_pass_acceptable() {
assert!(CaseResult::Pass.is_acceptable());
assert!(CaseResult::Skip("foo").is_acceptable());
assert!(!CaseResult::Fail("bar".into()).is_acceptable());
}
#[test]
fn run_suite_reports_counts() {
fn p() -> CaseResult {
CaseResult::Pass
}
fn s() -> CaseResult {
CaseResult::Skip("x")
}
fn f() -> CaseResult {
CaseResult::Fail("y".into())
}
let suite = [
TestCase { name: "a", run: p },
TestCase { name: "b", run: s },
TestCase { name: "c", run: f },
];
let (p, s, f) = run_suite(&suite);
assert_eq!((p, s, f), (1, 1, 1));
}
}