Implemented subshells and improved error handling
This commit is contained in:
@@ -10,6 +10,58 @@ fn cmd_not_found() {
|
||||
insta::assert_snapshot!(err_fmt)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unclosed_subsh() {
|
||||
let input = "(foo";
|
||||
let token = LexStream::new(Arc::new(input.into()), LexFlags::empty()).skip(1).next().unwrap();
|
||||
let Err(err) = token else {
|
||||
panic!("{:?}",token);
|
||||
};
|
||||
|
||||
let err_fmt = format!("{err}");
|
||||
insta::assert_snapshot!(err_fmt)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unclosed_dquote() {
|
||||
let input = "\"foo bar";
|
||||
let token = LexStream::new(Arc::new(input.into()), LexFlags::empty()).skip(1).next().unwrap();
|
||||
let Err(err) = token else {
|
||||
panic!();
|
||||
};
|
||||
|
||||
let err_fmt = format!("{err}");
|
||||
insta::assert_snapshot!(err_fmt)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unclosed_squote() {
|
||||
let input = "'foo bar";
|
||||
let token = LexStream::new(Arc::new(input.into()), LexFlags::empty()).skip(1).next().unwrap();
|
||||
let Err(err) = token else {
|
||||
panic!();
|
||||
};
|
||||
|
||||
let err_fmt = format!("{err}");
|
||||
insta::assert_snapshot!(err_fmt)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unclosed_brc_grp() {
|
||||
let input = "{ foo bar";
|
||||
let tokens = LexStream::new(Arc::new(input.into()), LexFlags::empty())
|
||||
.map(|tk| tk.unwrap())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let node = ParseStream::new(tokens).next().unwrap();
|
||||
let Err(err) = node else {
|
||||
panic!();
|
||||
};
|
||||
|
||||
let err_fmt = format!("{err}");
|
||||
insta::assert_snapshot!(err_fmt)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn if_no_fi() {
|
||||
let input = "if foo; then bar;";
|
||||
|
||||
@@ -5,7 +5,7 @@ use super::*;
|
||||
#[test]
|
||||
fn simple_expansion() {
|
||||
let varsub = "$foo";
|
||||
write_vars(|v| v.set_var("foo", "this is the value of the variable".into()));
|
||||
write_vars(|v| v.set_var("foo", "this is the value of the variable".into(), false));
|
||||
|
||||
let mut tokens: Vec<Tk> = LexStream::new(Arc::new(varsub.to_string()), LexFlags::empty())
|
||||
.map(|tk| tk.unwrap())
|
||||
@@ -14,7 +14,7 @@ fn simple_expansion() {
|
||||
let var_tk = tokens.pop().unwrap();
|
||||
|
||||
let var_span = var_tk.span.clone();
|
||||
let exp_tk = var_tk.expand(var_span, TkFlags::empty()).unwrap();
|
||||
let exp_tk = var_tk.expand().unwrap();
|
||||
write_vars(|v| v.vars_mut().clear());
|
||||
insta::assert_debug_snapshot!(exp_tk.get_words())
|
||||
}
|
||||
|
||||
@@ -6,5 +6,5 @@ expression: err_fmt
|
||||
[36m[1m->[0m [[36m[1m1[0m;[36m[1m1[0m]
|
||||
[36m[1m |[0m
|
||||
[36m[1m1 |[0m case foo foo) bar;; bar) foo;; esac
|
||||
[36m[1m |[0m [31m[1m^^^^^^^^^^^^^^^^^^^^[0m
|
||||
[36m[1m |[0m [31m[1m^^^^^^^^^^^^^^^^^^^[0m
|
||||
[36m[1m |[0m
|
||||
|
||||
@@ -6,5 +6,5 @@ expression: err_fmt
|
||||
[36m[1m->[0m [[36m[1m1[0m;[36m[1m1[0m]
|
||||
[36m[1m |[0m
|
||||
[36m[1m1 |[0m if foo; bar; fi
|
||||
[36m[1m |[0m [31m[1m^^^^^^^^^^^^^[0m
|
||||
[36m[1m |[0m [31m[1m^^^^^^^^^^^^[0m
|
||||
[36m[1m |[0m
|
||||
|
||||
@@ -6,5 +6,5 @@ expression: err_fmt
|
||||
[36m[1m->[0m [[36m[1m1[0m;[36m[1m1[0m]
|
||||
[36m[1m |[0m
|
||||
[36m[1m1 |[0m while true; echo foo; done
|
||||
[36m[1m |[0m [31m[1m^^^^^^^^^^^^^^^^^^^^^^[0m
|
||||
[36m[1m |[0m [31m[1m^^^^^^^^^^^^^^^^^^^^^[0m
|
||||
[36m[1m |[0m
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
source: src/tests/error.rs
|
||||
expression: err_fmt
|
||||
---
|
||||
[31m[1mParse Error[0m - Expected a closing brace for this brace group
|
||||
[36m[1m->[0m [[36m[1m1[0m;[36m[1m1[0m]
|
||||
[36m[1m |[0m
|
||||
[36m[1m1 |[0m { foo bar
|
||||
[36m[1m |[0m [31m[1m^^^^^^^^^[0m
|
||||
[36m[1m |[0m
|
||||
10
src/tests/snapshots/fern__tests__error__unclosed_dquote.snap
Normal file
10
src/tests/snapshots/fern__tests__error__unclosed_dquote.snap
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
source: src/tests/error.rs
|
||||
expression: err_fmt
|
||||
---
|
||||
[31m[1mParse Error[0m - Unterminated quote
|
||||
[36m[1m->[0m [[36m[1m1[0m;[36m[1m1[0m]
|
||||
[36m[1m |[0m
|
||||
[36m[1m1 |[0m "foo bar
|
||||
[36m[1m |[0m [31m[1m^^^^^^^^[0m
|
||||
[36m[1m |[0m
|
||||
10
src/tests/snapshots/fern__tests__error__unclosed_squote.snap
Normal file
10
src/tests/snapshots/fern__tests__error__unclosed_squote.snap
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
source: src/tests/error.rs
|
||||
expression: err_fmt
|
||||
---
|
||||
[31m[1mParse Error[0m - Unterminated quote
|
||||
[36m[1m->[0m [[36m[1m1[0m;[36m[1m1[0m]
|
||||
[36m[1m |[0m
|
||||
[36m[1m1 |[0m 'foo bar
|
||||
[36m[1m |[0m [31m[1m^^^^^^^^[0m
|
||||
[36m[1m |[0m
|
||||
10
src/tests/snapshots/fern__tests__error__unclosed_subsh.snap
Normal file
10
src/tests/snapshots/fern__tests__error__unclosed_subsh.snap
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
source: src/tests/error.rs
|
||||
expression: err_fmt
|
||||
---
|
||||
[31m[1mParse Error[0m - Unclosed subshell
|
||||
[36m[1m->[0m [[36m[1m1[0m;[36m[1m1[0m]
|
||||
[36m[1m |[0m
|
||||
[36m[1m1 |[0m (foo
|
||||
[36m[1m |[0m [31m[1m^[0m
|
||||
[36m[1m |[0m
|
||||
Reference in New Issue
Block a user