use luau::{Class, Lua, Object, ObjectLike, Result, Value};
#[test]
fn class_and_object_values_remain_usable_through_safe_handles() -> Result<()> {
let lua = Lua::new()?;
let (class, object, equal_object, different_object): (
Class<'_>,
Object<'_>,
Object<'_>,
Object<'_>,
) = lua
.load(
r#"
class Counter
public value
function get(self)
return self.value
end
function __eq(self, other)
return self.value == other.value
end
end
return Counter, Counter { value = 41 }, Counter { value = 41 }, Counter { value = 42 }
"#,
)
.call(())?;
assert_eq!(object.get::<i32>("value")?, 41);
object.set("value", 42)?;
assert_eq!(object.call_method::<i32>("get", ())?, 42);
assert_eq!(object.class()?, class);
object.set("value", 41)?;
assert!(object.equals(&equal_object)?);
assert!(!object.equals(&different_object)?);
assert!(Value::Object(object.try_clone()?).equals(&Value::Object(equal_object.try_clone()?))?);
Ok(())
}