Convert table of primitives to positional arguments for external cmd (#2232)

* Convert table of primitives to positional arguments for external cmd

* Multiple file test, fix for cococo
This commit is contained in:
k-brk 2020-07-22 23:41:34 +02:00 committed by GitHub
parent 2a084fc838
commit 6b4634b293
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 10 deletions

View file

@ -62,10 +62,30 @@ async fn run_with_stdin(
}
// Do the cleanup that we need to do on any argument going out:
match &value.value {
UntaggedValue::Table(table) => {
for t in table {
match &t.value {
UntaggedValue::Primitive(_) => {
command_args
.push(t.convert_to_string().trim_end_matches('\n').to_string());
}
_ => {
return Err(ShellError::labeled_error(
"Could not convert to positional arguments",
"could not convert to positional arguments",
value.tag(),
));
}
}
}
}
_ => {
let trimmed_value_string = value.as_string()?.trim_end_matches('\n').to_string();
command_args.push(trimmed_value_string);
}
}
}
let process_args = command_args
.iter()

View file

@ -7,12 +7,7 @@ pub fn cococo() {
// Write back out all the arguments passed
// if given at least 1 instead of chickens
// speaking co co co.
let mut arguments = args.iter();
arguments.next();
for arg in arguments {
println!("{}", &arg);
}
println!("{}", &args[1..].join(" "));
} else {
println!("cococo");
}

View file

@ -271,3 +271,34 @@ mod tilde_expansion {
assert_eq!(actual.out, "1~1");
}
}
mod external_command_arguments {
use super::nu;
use nu_test_support::fs::Stub::EmptyFile;
use nu_test_support::{pipeline, playground::Playground};
#[test]
fn expands_table_of_primitives_to_positional_arguments() {
Playground::setup(
"expands_table_of_primitives_to_positional_arguments",
|dirs, sandbox| {
sandbox.with_files(vec![
EmptyFile("jonathan_likes_cake.txt"),
EmptyFile("andres_likes_arepas.txt"),
EmptyFile("ferris_not_here.txt"),
]);
let actual = nu!(
cwd: dirs.test(), pipeline(
r#"
nu --testbin cococo $(ls | get name)
"#
));
assert_eq!(
actual.out,
"andres_likes_arepas.txt ferris_not_here.txt jonathan_likes_cake.txt"
);
},
)
}
}