implemented unit tests for variable parameter expansions. currently all green

This commit is contained in:
2025-05-12 17:00:07 -04:00
parent 3ce8f6d53d
commit 952298ed11
2 changed files with 198 additions and 21 deletions

View File

@@ -1,5 +1,7 @@
use std::collections::HashSet;
use crate::expand::perform_param_expansion;
use super::*;
#[test]
@@ -122,3 +124,179 @@ fn test_infinite_recursive_alias() {
});
}
#[test]
fn param_expansion_defaultunsetornull() {
write_vars(|v| {
v.set_var("foo", "foo", false);
v.set_var("set_var", "value", false);
});
let result = perform_param_expansion("unset:-default").unwrap();
assert_eq!(result, "default");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_defaultunset() {
write_vars(|v| {
v.set_var("foo", "foo", false);
v.set_var("set_var", "value", false);
});
let result = perform_param_expansion("unset-default").unwrap();
assert_eq!(result, "default");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_setdefaultunsetornull() {
write_vars(|v| {
v.set_var("foo", "foo", false);
v.set_var("set_var", "value", false);
});
let result = perform_param_expansion("unset:=assigned").unwrap();
assert_eq!(result, "assigned");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_setdefaultunset() {
write_vars(|v| {
v.set_var("foo", "foo", false);
v.set_var("set_var", "value", false);
});
let result = perform_param_expansion("unset=assigned").unwrap();
assert_eq!(result, "assigned");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_altsetnotnull() {
write_vars(|v| {
v.set_var("foo", "foo", false);
v.set_var("set_var", "value", false);
});
let result = perform_param_expansion("set_var:+alt").unwrap();
assert_eq!(result, "alt");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_altnotnull() {
write_vars(|v| {
v.set_var("foo", "foo", false);
v.set_var("set_var", "value", false);
});
let result = perform_param_expansion("set_var+alt").unwrap();
assert_eq!(result, "alt");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_len() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("#foo").unwrap();
assert_eq!(result, "3");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_substr() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo:1").unwrap();
assert_eq!(result, "oo");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_substrlen() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo:0:2").unwrap();
assert_eq!(result, "fo");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_remshortestprefix() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo#f*").unwrap();
assert_eq!(result, "oo");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_remlongestprefix() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo##f*").unwrap();
assert_eq!(result, "");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_remshortestsuffix() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo%*o").unwrap();
assert_eq!(result, "fo");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_remlongestsuffix() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo%%*o").unwrap();
assert_eq!(result, "");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_replacefirstmatch() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo/foo/X").unwrap();
assert_eq!(result, "X");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_replaceallmatches() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo//o/X").unwrap();
assert_eq!(result, "fXX");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_replaceprefix() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo/#f/X").unwrap();
assert_eq!(result, "Xoo");
write_vars(|v| v.vars_mut().clear());
}
#[test]
fn param_expansion_replacesuffix() {
write_vars(|v| {
v.set_var("foo", "foo", false);
});
let result = perform_param_expansion("foo/%o/X").unwrap();
assert_eq!(result, "foX");
write_vars(|v| v.vars_mut().clear());
}