Skip to main content

orion_accessor/addr/
local.rs

1use crate::prelude::*;
2
3#[derive(Getters, Clone, Debug, Serialize, Deserialize, PartialEq)]
4#[getset(get = "pub")]
5#[serde(rename = "local")]
6pub struct LocalPath {
7    path: String,
8}
9
10impl EnvEvalable<LocalPath> for LocalPath {
11    fn env_eval(self, dict: &EnvDict) -> LocalPath {
12        Self {
13            path: self.path.env_eval(dict),
14        }
15    }
16}
17impl From<&str> for LocalPath {
18    fn from(value: &str) -> Self {
19        Self {
20            path: value.to_string(),
21        }
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28    use std::collections::HashMap;
29
30    #[test]
31    fn test_local_path_from_str() {
32        let local_path = LocalPath::from("/path/to/file");
33        assert_eq!(local_path.path, "/path/to/file");
34    }
35
36    #[test]
37    fn test_local_path_env_eval_no_vars() {
38        let local_path = LocalPath::from("/static/path");
39        let dict = EnvDict::new();
40        let result = local_path.env_eval(&dict);
41        assert_eq!(result.path, "/static/path");
42    }
43
44    #[test]
45    fn test_local_path_env_eval_with_vars() {
46        let local_path = LocalPath::from("${HOME}/project");
47        let mut dict = HashMap::new();
48        dict.insert("HOME".to_string(), "/Users/test".to_string());
49        let env_dict = EnvDict::from(dict);
50        let result = local_path.env_eval(&env_dict);
51        assert_eq!(result.path, "/Users/test/project");
52    }
53
54    #[test]
55    fn test_local_path_env_eval_multiple_vars() {
56        let local_path = LocalPath::from("${HOME}/${PROJECT_NAME}/src");
57        let mut dict = HashMap::new();
58        dict.insert("HOME".to_string(), "/Users/test".to_string());
59        dict.insert("PROJECT_NAME".to_string(), "my-project".to_string());
60        let env_dict = EnvDict::from(dict);
61        let result = local_path.env_eval(&env_dict);
62        assert_eq!(result.path, "/Users/test/my-project/src");
63    }
64
65    #[test]
66    fn test_local_path_env_eval_undefined_var() {
67        let local_path = LocalPath::from("${UNDEFINED_VAR}/path");
68        let dict = EnvDict::new();
69        let result = local_path.env_eval(&dict);
70        // 假设未定义的变量会被保留原样
71        assert_eq!(result.path, "${UNDEFINED_VAR}/path");
72    }
73
74    #[test]
75    fn test_local_path_clone() {
76        let local_path = LocalPath::from("/original/path");
77        let cloned = local_path.clone();
78        assert_eq!(local_path.path, cloned.path);
79    }
80
81    #[test]
82    fn test_local_path_partial_eq() {
83        let path1 = LocalPath::from("/same/path");
84        let path2 = LocalPath::from("/same/path");
85        let path3 = LocalPath::from("/different/path");
86
87        assert_eq!(path1, path2);
88        assert_ne!(path1, path3);
89    }
90
91    #[test]
92    fn test_local_path_debug() {
93        let local_path = LocalPath::from("/debug/path");
94        let debug_str = format!("{local_path:?}");
95        assert!(debug_str.contains("LocalPath"));
96        assert!(debug_str.contains("/debug/path"));
97    }
98}