1#[derive(Debug)]
7pub struct TestResult {
8 pub name: String,
9 pub passed: bool,
10 pub duration_ms: u64,
11 pub message: Option<String>,
12}
13
14impl TestResult {
15 pub fn pass(name: impl Into<String>) -> Self {
16 Self {
17 name: name.into(),
18 passed: true,
19 duration_ms: 0,
20 message: None,
21 }
22 }
23
24 pub fn fail(name: impl Into<String>, msg: impl Into<String>) -> Self {
25 Self {
26 name: name.into(),
27 passed: false,
28 duration_ms: 0,
29 message: Some(msg.into()),
30 }
31 }
32}
33
34#[derive(Default)]
36pub struct TestSuite {
37 results: Vec<TestResult>,
38}
39
40impl TestSuite {
41 pub fn new() -> Self {
42 Self::default()
43 }
44
45 pub fn add(&mut self, result: TestResult) {
46 self.results.push(result);
47 }
48
49 pub fn passed(&self) -> usize {
50 self.results.iter().filter(|r| r.passed).count()
51 }
52
53 pub fn failed(&self) -> usize {
54 self.results.iter().filter(|r| !r.passed).count()
55 }
56
57 pub fn total(&self) -> usize {
58 self.results.len()
59 }
60}