mirror of
https://github.com/sagiegurari/duckscript
synced 2024-10-14 20:02:32 +00:00
Fix variable expansion and support single $ and % characters #132
This commit is contained in:
parent
a7e696ff62
commit
37b72d9153
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue