use luaur_rt::{Lua, Result};
#[test]
fn test_chunk_methods() -> Result<()> {
let lua = Lua::new();
let default_chunk = lua.load("return 123");
assert_eq!(default_chunk.name(), "chunk");
let chunk2 = lua.load("return 123").set_name("@new_name");
assert_eq!(chunk2.name(), "@new_name");
assert_eq!(chunk2.eval::<i32>()?, 123);
Ok(())
}
#[test]
fn test_chunk_eval_exec() -> Result<()> {
let lua = Lua::new();
assert_eq!(lua.load("return 1 + 1").eval::<i32>()?, 2);
lua.load("result = 5 * 5").exec()?;
assert_eq!(lua.globals().get::<i32>("result")?, 25);
let f = lua.load("return ...").into_function()?;
assert_eq!(f.call::<i32>(42)?, 42);
Ok(())
}
#[test]
fn test_chunk_impls() -> Result<()> {
let lua = Lua::new();
assert_eq!(lua.load(String::from("return 1")).eval::<i32>()?, 1);
assert_eq!(lua.load(&String::from("return 2")).eval::<i32>()?, 2);
assert_eq!(lua.load("return 3").eval::<i32>()?, 3);
Ok(())
}
#[test]
fn test_chunk_syntax_error() -> Result<()> {
let lua = Lua::new();
let err = lua.load("this is not + valid lua %").exec().unwrap_err();
assert!(
matches!(err, luaur_rt::Error::SyntaxError { .. }),
"expected SyntaxError, got {err:?}"
);
Ok(())
}
#[test]
fn test_chunk_runtime_error() -> Result<()> {
let lua = Lua::new();
let err = lua.load(r#"error("boom")"#).exec().unwrap_err();
assert!(err.to_string().contains("boom"), "got: {err}");
Ok(())
}