1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4#[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}