mod util;
use grabapl::prelude::*;
use util::semantics::*;
#[test_log::test]
fn types_must_be_subtypes() {
let op_ctx = OperationContext::<TestSemantics>::new();
let mut builder = OperationBuilder::new(&op_ctx, 0);
builder
.expect_parameter_node("p0", NodeType::Object)
.unwrap();
builder
.expect_parameter_node("p1", NodeType::Integer)
.unwrap();
let p0 = AbstractNodeId::param("p0");
let p1 = AbstractNodeId::param("p1");
let res = builder.add_operation(
BuilderOpLike::Builtin(TestOperation::SetTo {
op_typ: NodeType::String,
target_typ: NodeType::String,
value: NodeValue::String("hello".to_string()),
}),
vec![p0],
);
assert!(
res.is_err(),
"Expected error when using Object argument as String"
);
let res = builder.add_operation(
BuilderOpLike::Builtin(TestOperation::SetTo {
op_typ: NodeType::Integer,
target_typ: NodeType::Integer,
value: NodeValue::Integer(42),
}),
vec![p0],
);
assert!(
res.is_err(),
"Expected error when using Object argument as Integer"
);
}