mirror of
https://github.com/fluencelabs/aquavm
synced 2025-04-25 07:12:16 +00:00
feat(testing-framework): prevalidate AIR script (#365)
Try to parse the annotated AIR script with the standard parser to catch to catch errors early with better error messages. We do it in the `TestExecutor` only to make testing framwork parser tests simplier. For user experience, it doesn't matter.
This commit is contained in:
parent
a60b61e1a1
commit
22fac9329e
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -184,6 +184,7 @@ dependencies = [
|
|||||||
name = "air-testing-framework"
|
name = "air-testing-framework"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"air-parser",
|
||||||
"air-test-utils",
|
"air-test-utils",
|
||||||
"itertools",
|
"itertools",
|
||||||
"maplit",
|
"maplit",
|
||||||
|
@ -15,6 +15,7 @@ path = "src/lib.rs"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
air-test-utils = { path = "../air-lib/test-utils" }
|
air-test-utils = { path = "../air-lib/test-utils" }
|
||||||
|
air-parser = { path = "../air-lib/air-parser" }
|
||||||
|
|
||||||
itertools = "0.10.4"
|
itertools = "0.10.4"
|
||||||
strum = { version="0.24.1", features=["derive"] }
|
strum = { version="0.24.1", features=["derive"] }
|
||||||
|
@ -42,6 +42,9 @@ impl TestExecutor {
|
|||||||
extra_peers: impl IntoIterator<Item = PeerId>,
|
extra_peers: impl IntoIterator<Item = PeerId>,
|
||||||
annotated_air_script: &str,
|
annotated_air_script: &str,
|
||||||
) -> Result<Self, String> {
|
) -> Result<Self, String> {
|
||||||
|
// validate the AIR script with the standard parser first
|
||||||
|
air_parser::parse(annotated_air_script)?;
|
||||||
|
|
||||||
let mut sexp = Sexp::from_str(annotated_air_script)?;
|
let mut sexp = Sexp::from_str(annotated_air_script)?;
|
||||||
let mut walker = Transformer::new();
|
let mut walker = Transformer::new();
|
||||||
walker.transform(&mut sexp);
|
walker.transform(&mut sexp);
|
||||||
@ -504,4 +507,26 @@ mod tests {
|
|||||||
ExecutionTrace::from(vec![scalar_number(1), request_sent_by("peer1"),]),
|
ExecutionTrace::from(vec![scalar_number(1), request_sent_by("peer1"),]),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_invalid_air() {
|
||||||
|
let res = TestExecutor::new(
|
||||||
|
TestRunParameters::from_init_peer_id("init_peer_id"),
|
||||||
|
vec![],
|
||||||
|
std::iter::empty(),
|
||||||
|
r#"(seq
|
||||||
|
(call "peer1" ("service" "func") [1 22] arg) ; behaviour=echo
|
||||||
|
)
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
|
||||||
|
assert!(res.is_err());
|
||||||
|
// TestExecutor doesn't implement Debug, so we have to unpack the error this way:
|
||||||
|
if let Err(err) = res {
|
||||||
|
assert_eq!(
|
||||||
|
err,
|
||||||
|
"error: \n ┌─ script.air:3:1\n │\n3 │ )\n │ ^ expected \"(\"\n\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user