Skip to main content

use_test_suite/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4/// Grouped test case metadata.
5#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6pub struct TestSuite {
7    pub name: String,
8    pub description: Option<String>,
9    pub case_count: usize,
10}
11
12impl TestSuite {
13    pub fn new(name: impl Into<String>) -> Self {
14        Self {
15            name: name.into(),
16            description: None,
17            case_count: 0,
18        }
19    }
20
21    pub fn with_case_count(name: impl Into<String>, case_count: usize) -> Self {
22        Self {
23            name: name.into(),
24            description: None,
25            case_count,
26        }
27    }
28
29    pub fn with_description(name: impl Into<String>, description: impl Into<String>) -> Self {
30        Self {
31            name: name.into(),
32            description: Some(description.into()),
33            case_count: 0,
34        }
35    }
36
37    pub fn name(&self) -> &str {
38        &self.name
39    }
40
41    pub fn description(&self) -> Option<&str> {
42        self.description.as_deref()
43    }
44
45    pub const fn case_count(&self) -> usize {
46        self.case_count
47    }
48}
49
50#[cfg(test)]
51mod tests {
52    use super::TestSuite;
53
54    #[test]
55    fn creates_named_suite() {
56        let suite = TestSuite::new("core");
57
58        assert_eq!(suite.name(), "core");
59        assert_eq!(suite.description(), None);
60        assert_eq!(suite.case_count(), 0);
61    }
62
63    #[test]
64    fn creates_suite_with_case_count() {
65        let suite = TestSuite::with_case_count("core", 3);
66
67        assert_eq!(suite.name(), "core");
68        assert_eq!(suite.case_count(), 3);
69    }
70
71    #[test]
72    fn creates_described_suite() {
73        let suite = TestSuite::with_description("core", "core cases");
74
75        assert_eq!(suite.description(), Some("core cases"));
76    }
77}