1
0

fix: fix expand string error

This commit is contained in:
2026-05-18 20:46:31 +08:00
parent 53cc8edcfd
commit 3b0080849d
6 changed files with 82 additions and 20 deletions

View File

@@ -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