mirror of
https://github.com/nushell/nushell
synced 2025-01-15 14:44:14 +00:00
throw error if any? or all? expression invokes invalid command (#6110)
* throw error if any? or all? expression invokes invalid command * fix tests for windows
This commit is contained in:
parent
0b429fde24
commit
5706eddee3
4 changed files with 70 additions and 38 deletions
|
@ -66,27 +66,31 @@ impl Command for All {
|
||||||
let ctrlc = engine_state.ctrlc.clone();
|
let ctrlc = engine_state.ctrlc.clone();
|
||||||
let engine_state = engine_state.clone();
|
let engine_state = engine_state.clone();
|
||||||
|
|
||||||
Ok(Value::Bool {
|
for value in input.into_interruptible_iter(ctrlc) {
|
||||||
val: input.into_interruptible_iter(ctrlc).all(move |value| {
|
if let Some(var_id) = var_id {
|
||||||
if let Some(var_id) = var_id {
|
stack.add_var(var_id, value);
|
||||||
stack.add_var(var_id, value);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
eval_block(
|
let eval = eval_block(
|
||||||
&engine_state,
|
&engine_state,
|
||||||
&mut stack,
|
&mut stack,
|
||||||
block,
|
block,
|
||||||
PipelineData::new(span),
|
PipelineData::new(span),
|
||||||
call.redirect_stdout,
|
call.redirect_stdout,
|
||||||
call.redirect_stderr,
|
call.redirect_stderr,
|
||||||
)
|
);
|
||||||
.map_or(false, |pipeline_data| {
|
match eval {
|
||||||
pipeline_data.into_value(span).is_true()
|
Err(e) => {
|
||||||
})
|
return Err(e);
|
||||||
}),
|
}
|
||||||
span,
|
Ok(pipeline_data) => {
|
||||||
|
if !pipeline_data.into_value(span).is_true() {
|
||||||
|
return Ok(Value::Bool { val: false, span }.into_pipeline_data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.into_pipeline_data())
|
Ok(Value::Bool { val: true, span }.into_pipeline_data())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,27 +65,31 @@ impl Command for Any {
|
||||||
let ctrlc = engine_state.ctrlc.clone();
|
let ctrlc = engine_state.ctrlc.clone();
|
||||||
let engine_state = engine_state.clone();
|
let engine_state = engine_state.clone();
|
||||||
|
|
||||||
Ok(Value::Bool {
|
for value in input.into_interruptible_iter(ctrlc) {
|
||||||
val: input.into_interruptible_iter(ctrlc).any(move |value| {
|
if let Some(var_id) = var_id {
|
||||||
if let Some(var_id) = var_id {
|
stack.add_var(var_id, value);
|
||||||
stack.add_var(var_id, value);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
eval_block(
|
let eval = eval_block(
|
||||||
&engine_state,
|
&engine_state,
|
||||||
&mut stack,
|
&mut stack,
|
||||||
block,
|
block,
|
||||||
PipelineData::new(span),
|
PipelineData::new(span),
|
||||||
call.redirect_stdout,
|
call.redirect_stdout,
|
||||||
call.redirect_stderr,
|
call.redirect_stderr,
|
||||||
)
|
);
|
||||||
.map_or(false, |pipeline_data| {
|
match eval {
|
||||||
pipeline_data.into_value(span).is_true()
|
Err(e) => {
|
||||||
})
|
return Err(e);
|
||||||
}),
|
}
|
||||||
span,
|
Ok(pipeline_data) => {
|
||||||
|
if pipeline_data.into_value(span).is_true() {
|
||||||
|
return Ok(Value::Bool { val: true, span }.into_pipeline_data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.into_pipeline_data())
|
Ok(Value::Bool { val: false, span }.into_pipeline_data())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,3 +55,15 @@ fn checks_all_columns_of_a_table_is_true() {
|
||||||
|
|
||||||
assert_eq!(actual.out, "true");
|
assert_eq!(actual.out, "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn checks_if_all_returns_error_with_invalid_command() {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: ".", pipeline(
|
||||||
|
r#"
|
||||||
|
[red orange yellow green blue purple] | all? ($it | st length) > 4
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
assert!(actual.err.contains("can't run executable") || actual.err.contains("type_mismatch"));
|
||||||
|
}
|
||||||
|
|
|
@ -31,3 +31,15 @@ fn checks_any_column_of_a_table_is_true() {
|
||||||
|
|
||||||
assert_eq!(actual.out, "true");
|
assert_eq!(actual.out, "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn checks_if_any_returns_error_with_invalid_command() {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: ".", pipeline(
|
||||||
|
r#"
|
||||||
|
[red orange yellow green blue purple] | any? ($it | st length) > 4
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
assert!(actual.err.contains("can't run executable") || actual.err.contains("type_mismatch"));
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue