use insta::assert_debug_snapshot as check;
use super::ast::*;
fn parse(src: &str) -> Script<'_> {
Script::parse(src).unwrap()
}
#[test]
fn create_concept() {
check!(
parse("create concept C gtin=123456789 price=2.50€"),
@r#"
Script(
[
Stmt {
cmd: Create(
Concept,
),
args: Args(
[
Pos(
Name(
"C",
),
),
Named {
key: "gtin",
value: Gtin(
Gtin(
123456789,
),
),
},
Named {
key: "price",
value: Money(
Money(
250,
),
),
},
],
),
},
],
)
"#,
);
}
#[test]
fn pay() {
check!(
parse("pay 30ct from=A to=B"),
@r#"
Script(
[
Stmt {
cmd: Pay,
args: Args(
[
Pos(
Money(
Money(
30,
),
),
),
Named {
key: "from",
value: Name(
"A",
),
},
Named {
key: "to",
value: Name(
"B",
),
},
],
),
},
],
)
"#,
);
}
#[test]
fn deliver() {
check!(
parse("deliver 123456789 price=1€ from=A to=B"),
@r#"
Script(
[
Stmt {
cmd: Deliver,
args: Args(
[
Pos(
Gtin(
Gtin(
123456789,
),
),
),
Named {
key: "price",
value: Money(
Money(
100,
),
),
},
Named {
key: "from",
value: Name(
"A",
),
},
Named {
key: "to",
value: Name(
"B",
),
},
],
),
},
],
)
"#,
);
}
#[test]
fn two_of_them() {
check!(
parse(r#"
create concept A
create concept B
"#),
@r#"
Script(
[
Stmt {
cmd: Create(
Concept,
),
args: Args(
[
Pos(
Name(
"A",
),
),
],
),
},
Stmt {
cmd: Create(
Concept,
),
args: Args(
[
Pos(
Name(
"B",
),
),
],
),
},
],
)
"#,
)
}