Fix variable expansion and support single $ and % characters #132

This commit is contained in:
sagie gur ari 2020-10-01 20:17:24 +00:00
parent a7e696ff62
commit 37b72d9153
3 changed files with 90 additions and 1 deletions

View file

@ -1,5 +1,9 @@
## CHANGELOG
### v0.6.8 (2020-10-01)
* Runtime - Fix variable expansion and support single $ and % characters #132
### v0.6.7 (2020-08-27)
* New --get-exit-code flag for exec command #127

View file

@ -50,7 +50,7 @@ pub(crate) fn expand_by_wrapper(
if next_char == '\\' && prefix_index == 0 {
force_push = true
} else if force_push {
if next_char != '$' {
if next_char != '$' && next_char != '%' {
value_string.push('\\');
}
value_string.push(next_char);
@ -100,6 +100,9 @@ pub(crate) fn expand_by_wrapper(
push_prefix(&mut value_string, single_type, found_prefix);
}
value_string.push_str(&key);
} else if prefix_index == 1 {
push_prefix(&mut value_string, single_type, false);
single_type = true;
}
if value_string.is_empty() {

View file

@ -228,6 +228,48 @@ value4:test4
);
}
#[test]
fn expand_by_wrapper_multi_with_escape() {
let mut variables = HashMap::new();
variables.insert("FOUND1".to_string(), "test1".to_string());
variables.insert("FOUND2".to_string(), "test2".to_string());
variables.insert("FOUND3".to_string(), "test3".to_string());
variables.insert("FOUND4".to_string(), "test4".to_string());
let output = expand_by_wrapper(
r#"
value1:\${FOUND1}
value2:\${FOUND2}
value3:\%{FOUND3}
value4:\%{FOUND4}
value1:${FOUND1}
value2:${FOUND2}
value3:${FOUND3}
value4:${FOUND4}
"#,
&InstructionMetaInfo::new(),
&mut variables,
);
let value = get_single_value(output);
assert_eq!(
r#"
value1:${FOUND1}
value2:${FOUND2}
value3:%{FOUND3}
value4:%{FOUND4}
value1:test1
value2:test2
value3:test3
value4:test4
"#,
value
);
}
#[test]
fn expand_by_wrapper_control_chars_multi() {
let mut variables = HashMap::new();
@ -275,3 +317,43 @@ lines"#
assert_eq!("in quotes", value[2]);
assert_eq!("2\nlines", value[3]);
}
#[test]
fn expand_by_wrapper_dollar_sign() {
let mut variables = HashMap::new();
let output = expand_by_wrapper("$", &InstructionMetaInfo::new(), &mut variables);
let value = get_single_value(output);
assert_eq!("$", value);
}
#[test]
fn expand_by_wrapper_dollar_sign_with_escape() {
let mut variables = HashMap::new();
let output = expand_by_wrapper("\\$", &InstructionMetaInfo::new(), &mut variables);
let value = get_single_value(output);
assert_eq!("$", value);
}
#[test]
fn expand_by_wrapper_percentage_sign() {
let mut variables = HashMap::new();
let output = expand_by_wrapper("%", &InstructionMetaInfo::new(), &mut variables);
let value = get_single_value(output);
assert_eq!("%", value);
}
#[test]
fn expand_by_wrapper_percentage_sign_with_escape() {
let mut variables = HashMap::new();
let output = expand_by_wrapper("\\%", &InstructionMetaInfo::new(), &mut variables);
let value = get_single_value(output);
assert_eq!("%", value);
}