Trap &mut String parameters.

This commit is contained in:
Stephen Chung
2021-03-06 14:41:35 +08:00
parent fe633ea7d3
commit e14bef4b10
3 changed files with 27 additions and 7 deletions

View File

@@ -64,6 +64,25 @@ fn test_string_dynamic() -> Result<(), Box<EvalAltResult>> {
Ok(())
}
#[test]
fn test_string_mut() -> Result<(), Box<EvalAltResult>> {
let mut engine = Engine::new();
engine.register_fn("foo", |x: INT, s: &str| s.len() as INT + x);
engine.register_fn("bar", |x: INT, s: String| s.len() as INT + x);
engine.register_fn("baz", |s: &mut String| s.len());
assert_eq!(engine.eval::<INT>(r#"foo(1, "hello")"#)?, 6);
assert_eq!(engine.eval::<INT>(r#"bar(1, "hello")"#)?, 6);
assert!(
matches!(*engine.eval::<INT>(r#"baz("hello")"#).expect_err("should error"),
EvalAltResult::ErrorFunctionNotFound(f, _) if f == "baz (&str | ImmutableString | String)"
)
);
Ok(())
}
#[cfg(not(feature = "no_object"))]
#[test]
fn test_string_substring() -> Result<(), Box<EvalAltResult>> {