Skip to main content

rumdl_lib/rules/
code_fence_utils.rs

1use std::fmt;
2
3/// The style for code fence markers (MD048)
4#[derive(Debug, PartialEq, Eq, Clone, Copy, Default, Hash)]
5pub enum CodeFenceStyle {
6    /// Consistent with the first code fence style found
7    #[default]
8    Consistent,
9    /// Backtick style (```)
10    Backtick,
11    /// Tilde style (~~~)
12    Tilde,
13}
14
15impl fmt::Display for CodeFenceStyle {
16    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17        match self {
18            CodeFenceStyle::Backtick => write!(f, "backtick"),
19            CodeFenceStyle::Tilde => write!(f, "tilde"),
20            CodeFenceStyle::Consistent => write!(f, "consistent"),
21        }
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    #[test]
30    fn test_code_fence_style_default() {
31        let style = CodeFenceStyle::default();
32        assert_eq!(style, CodeFenceStyle::Consistent);
33    }
34
35    #[test]
36    fn test_code_fence_style_equality() {
37        assert_eq!(CodeFenceStyle::Backtick, CodeFenceStyle::Backtick);
38        assert_eq!(CodeFenceStyle::Tilde, CodeFenceStyle::Tilde);
39        assert_eq!(CodeFenceStyle::Consistent, CodeFenceStyle::Consistent);
40
41        assert_ne!(CodeFenceStyle::Backtick, CodeFenceStyle::Tilde);
42        assert_ne!(CodeFenceStyle::Backtick, CodeFenceStyle::Consistent);
43        assert_ne!(CodeFenceStyle::Tilde, CodeFenceStyle::Consistent);
44    }
45
46    #[test]
47    fn test_code_fence_style_display() {
48        assert_eq!(format!("{}", CodeFenceStyle::Backtick), "backtick");
49        assert_eq!(format!("{}", CodeFenceStyle::Tilde), "tilde");
50        assert_eq!(format!("{}", CodeFenceStyle::Consistent), "consistent");
51    }
52
53    #[test]
54    fn test_code_fence_style_debug() {
55        assert_eq!(format!("{:?}", CodeFenceStyle::Backtick), "Backtick");
56        assert_eq!(format!("{:?}", CodeFenceStyle::Tilde), "Tilde");
57        assert_eq!(format!("{:?}", CodeFenceStyle::Consistent), "Consistent");
58    }
59
60    #[test]
61    fn test_code_fence_style_clone() {
62        let style1 = CodeFenceStyle::Backtick;
63        let style2 = style1;
64        assert_eq!(style1, style2);
65    }
66
67    #[test]
68    fn test_code_fence_style_hash() {
69        use std::collections::HashSet;
70
71        let mut set = HashSet::new();
72        set.insert(CodeFenceStyle::Backtick);
73        set.insert(CodeFenceStyle::Tilde);
74        set.insert(CodeFenceStyle::Consistent);
75
76        assert_eq!(set.len(), 3);
77        assert!(set.contains(&CodeFenceStyle::Backtick));
78        assert!(set.contains(&CodeFenceStyle::Tilde));
79        assert!(set.contains(&CodeFenceStyle::Consistent));
80    }
81}