#![cfg(not(feature = "unchecked"))] use rhai::{Engine, EvalAltResult, ParseError, ParseErrorType}; #[cfg(not(feature = "no_index"))] use rhai::Array; #[cfg(not(feature = "no_object"))] use rhai::Map; #[test] fn test_max_string_size() -> Result<(), Box> { let mut engine = Engine::new(); engine.set_max_string_size(10); assert!(matches!( engine.compile(r#"let x = "hello, world!";"#).expect_err("should error"), ParseError(x, _) if *x == ParseErrorType::BadInput("Length of string literal exceeds the maximum limit (10)".to_string()) )); assert!(matches!( *engine .eval::( r#" let x = "hello, "; let y = "world!"; x + y "# ) .expect_err("should error"), EvalAltResult::ErrorDataTooLarge(_, 10, 13, _) )); engine.set_max_string_size(0); assert_eq!( engine.eval::( r#" let x = "hello, "; let y = "world!"; x + y "# )?, "hello, world!" ); Ok(()) } #[test] #[cfg(not(feature = "no_index"))] fn test_max_array_size() -> Result<(), Box> { let mut engine = Engine::new(); engine.set_max_array_size(10); assert!(matches!( engine .compile("let x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];") .expect_err("should error"), ParseError(x, _) if *x == ParseErrorType::LiteralTooLarge("Size of array literal".to_string(), 10) )); assert!(matches!( *engine .eval::( r" let x = [1,2,3,4,5,6]; let y = [7,8,9,10,11,12]; x + y " ) .expect_err("should error"), EvalAltResult::ErrorDataTooLarge(_, 10, 12, _) )); engine.set_max_array_size(0); assert_eq!( engine .eval::( r" let x = [1,2,3,4,5,6]; let y = [7,8,9,10,11,12]; x + y " )? .len(), 12 ); Ok(()) } #[test] #[cfg(not(feature = "no_object"))] fn test_max_map_size() -> Result<(), Box> { let mut engine = Engine::new(); engine.set_max_map_size(10); assert!(matches!( engine .compile("let x = #{a:1,b:2,c:3,d:4,e:5,f:6,g:7,h:8,i:9,j:10,k:11,l:12,m:13,n:14,o:15};") .expect_err("should error"), ParseError(x, _) if *x == ParseErrorType::LiteralTooLarge("Number of properties in object map literal".to_string(), 10) )); assert!(matches!( *engine .eval::( r" let x = #{a:1,b:2,c:3,d:4,e:5,f:6}; let y = #{g:7,h:8,i:9,j:10,k:11,l:12}; x + y " ) .expect_err("should error"), EvalAltResult::ErrorDataTooLarge(_, 10, 12, _) )); engine.set_max_map_size(0); assert_eq!( engine .eval::( r" let x = #{a:1,b:2,c:3,d:4,e:5,f:6}; let y = #{g:7,h:8,i:9,j:10,k:11,l:12}; x + y " )? .len(), 12 ); Ok(()) }