mps/elements/
character.rs1use 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}