fix: fix expand string error
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use std::str::FromStr;
|
||||
use std::{collections::HashMap, str::FromStr};
|
||||
use wfassoc::win32::concept::*;
|
||||
|
||||
// region: File Extension
|
||||
@@ -218,16 +218,36 @@ fn test_str_rc() {
|
||||
|
||||
#[test]
|
||||
fn test_expand_string() {
|
||||
fn tester(s: &str) {
|
||||
let rv = ExpandString::new(s);
|
||||
assert!(rv.is_ok());
|
||||
let rv = rv.unwrap();
|
||||
fn tester(fmt: &str, var_name: &str) {
|
||||
// We first insert variable name into format string to get the final string
|
||||
let mut vars = HashMap::new();
|
||||
vars.insert("0".to_string(), var_name.to_string());
|
||||
let final_string = strfmt::strfmt(fmt, &vars).unwrap();
|
||||
|
||||
let rv = rv.expand_string();
|
||||
assert!(rv.is_ok());
|
||||
// The we try expanding final string first
|
||||
let expand_final_string = ExpandString::new(&final_string);
|
||||
assert!(expand_final_string.is_ok());
|
||||
let expand_final_string = expand_final_string.unwrap();
|
||||
let expanded_final_string = expand_final_string.expand();
|
||||
assert!(expanded_final_string.is_ok());
|
||||
let expanded_final_string= expanded_final_string.unwrap();
|
||||
|
||||
// Then we expand variable name individually
|
||||
let expand_var_name = ExpandString::new(var_name);
|
||||
assert!(expand_var_name.is_ok());
|
||||
let expand_var_name = expand_var_name.unwrap();
|
||||
let expanded_var_name = expand_var_name.expand();
|
||||
assert!(expanded_var_name.is_ok());
|
||||
let expanded_var_name = expanded_var_name.unwrap();
|
||||
|
||||
// Finally, we directly insert expanded variable name into format string
|
||||
// to get the string which can be compared with final string.
|
||||
vars.insert("0".to_string(), expanded_var_name.clone());
|
||||
let built_final_string = strfmt::strfmt(fmt, &vars).unwrap();
|
||||
assert_eq!(expanded_final_string.to_string(), built_final_string);
|
||||
}
|
||||
|
||||
tester(r#"%SystemRoot%\System32\shell32.dll"#);
|
||||
tester(r#"{0}\System32\shell32.dll"#, "%SystemRoot%");
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
Reference in New Issue
Block a user