Skip to main content

mps/elements/
character.rs

1use super::split_args;
2
3#[derive(Debug, Clone)]
4pub struct CharacterData {
5    pub name: Option<String>,
6    pub tags: Vec<String>,
7}
8
9impl CharacterData {
10    pub fn parse_args(raw: &str) -> Self {
11        let p = split_args(raw);
12        CharacterData {
13            name: p.attrs.get("name").cloned(),
14            tags: p.tags,
15        }
16    }
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22
23    #[test]
24    fn test_parse_args_empty() {
25        let d = CharacterData::parse_args("");
26        assert!(d.name.is_none());
27        assert!(d.tags.is_empty());
28    }
29
30    #[test]
31    fn test_parse_args_name_only() {
32        let d = CharacterData::parse_args("name: Mahfuz Vai");
33        assert_eq!(d.name.as_deref(), Some("Mahfuz Vai"));
34        assert!(d.tags.is_empty());
35    }
36
37    #[test]
38    fn test_parse_args_name_and_single_tag() {
39        let d = CharacterData::parse_args("name: Mahfuz Vai, mahfuz-vai");
40        assert_eq!(d.name.as_deref(), Some("Mahfuz Vai"));
41        assert_eq!(d.tags, vec!["mahfuz-vai"]);
42    }
43
44    #[test]
45    fn test_parse_args_name_and_multiple_tags() {
46        let d = CharacterData::parse_args("name: Mahfuz Vai, mahfuz-vai, favor");
47        assert_eq!(d.name.as_deref(), Some("Mahfuz Vai"));
48        assert_eq!(d.tags, vec!["mahfuz-vai", "favor"]);
49    }
50
51    #[test]
52    fn test_parse_args_tags_only_no_name() {
53        let d = CharacterData::parse_args("mahfuz-vai, favor");
54        assert!(d.name.is_none());
55        assert_eq!(d.tags, vec!["mahfuz-vai", "favor"]);
56    }
57
58    #[test]
59    fn test_parse_args_name_with_spaces_in_value() {
60        let d = CharacterData::parse_args("name: Dr. Alice Smith");
61        assert_eq!(d.name.as_deref(), Some("Dr. Alice Smith"));
62    }
63
64    #[test]
65    fn test_parse_args_name_trimmed() {
66        let d = CharacterData::parse_args("name:  Mahfuz Vai ");
67        assert_eq!(d.name.as_deref(), Some("Mahfuz Vai"));
68    }
69
70    #[test]
71    fn test_parse_args_name_with_hyphenated_tag() {
72        let d = CharacterData::parse_args("name: Alex, friend-of-work, trusted");
73        assert_eq!(d.name.as_deref(), Some("Alex"));
74        assert_eq!(d.tags, vec!["friend-of-work", "trusted"]);
75    }
76
77    #[test]
78    fn test_parse_args_no_name_single_tag() {
79        let d = CharacterData::parse_args("colleague");
80        assert!(d.name.is_none());
81        assert_eq!(d.tags, vec!["colleague"]);
82    }
83}