summaryrefslogtreecommitdiffstats
path: root/src/parse/test_ast.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse/test_ast.rs')
-rw-r--r--src/parse/test_ast.rs31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/parse/test_ast.rs b/src/parse/test_ast.rs
index 09d772b..a1f83dd 100644
--- a/src/parse/test_ast.rs
+++ b/src/parse/test_ast.rs
@@ -157,13 +157,23 @@ macro_rules! eval_eq {
_ => continue,
};
assert_eq!(
- async_std::task::block_on(pipeline.eval(&$env)).unwrap(),
+ pipeline.eval(&$env).await.unwrap(),
expected.remove(0)
);
}
}};
}
+macro_rules! deserialize_eq {
+ ($line:literal, $parsed:expr) => {{
+ use serde::de::IntoDeserializer as _;
+ use serde::Deserialize as _;
+ let exe: Result<_, serde::de::value::Error> =
+ Exe::deserialize($line.into_deserializer());
+ assert_eq!(exe.unwrap(), $parsed);
+ }};
+}
+
macro_rules! eval_fails {
($line:literal, $env:expr) => {{
let ast = Commands::parse($line).unwrap();
@@ -175,7 +185,7 @@ macro_rules! eval_fails {
}
_ => continue,
};
- if async_std::task::block_on(pipeline.eval(&$env)).is_err() {
+ if pipeline.eval(&$env).await.is_err() {
fail = true;
}
}
@@ -206,7 +216,7 @@ fn test_basic() {
);
// XXX this parse may change in the future
- let exe = std::env::current_exe()
+ let exe = crate::info::current_exe()
.unwrap()
.into_os_string()
.into_string()
@@ -223,6 +233,9 @@ fn test_basic() {
)
))
);
+
+ parse_eq!("foo ''", cs!(p!((0, 6), e!(w!("foo"), w!()))));
+ parse_eq!("foo \"\"", cs!(p!((0, 6), e!(w!("foo"), w!()))));
}
#[test]
@@ -426,8 +439,9 @@ fn test_alternation() {
);
}
+#[tokio::main]
#[test]
-fn test_eval_alternation() {
+async fn test_eval_alternation() {
let mut env = Env::new().unwrap();
env.set_var("HOME", "/home/test");
env.set_var("foo", "value-of-foo");
@@ -464,8 +478,9 @@ fn test_eval_alternation() {
);
}
+#[tokio::main]
#[test]
-fn test_eval_glob() {
+async fn test_eval_glob() {
let env = Env::new().unwrap();
eval_eq!(
@@ -484,3 +499,9 @@ fn test_eval_glob() {
eval_fails!("echo *.doesnotexist", env);
eval_fails!("echo *.{toml,doesnotexist}", env);
}
+
+#[test]
+fn test_deserialize() {
+ deserialize_eq!("foo", e!(w!("foo")));
+ deserialize_eq!("foo bar baz", e!(w!("foo"), w!("bar"), w!("baz")));
+}