From 1c53ba3d4c7ce8ae64d19ecca0d9db3a79ac87b0 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Sun, 23 Jul 2017 12:50:42 +0200 Subject: [PATCH] Add a test ensuring that userdata is dropped --- src/tests.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/tests.rs b/src/tests.rs index a02ac37..cdeb245 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -844,3 +844,30 @@ fn test_expired_userdata() { hatch:access() "#, None).unwrap(); } + +#[test] +fn detroys_userdata() { + use std::sync::atomic::{Ordering, AtomicBool, ATOMIC_BOOL_INIT}; + + static DROPPED: AtomicBool = ATOMIC_BOOL_INIT; + + struct Userdata; + + impl LuaUserDataType for Userdata {} + + impl Drop for Userdata { + fn drop(&mut self) { + DROPPED.store(true, Ordering::SeqCst); + } + } + + let lua = Lua::new(); + { + let globals = lua.globals(); + globals.set("userdata", Userdata).unwrap(); + } + + assert_eq!(DROPPED.load(Ordering::SeqCst), false); + drop(lua); // should destroy all objects + assert_eq!(DROPPED.load(Ordering::SeqCst), true); +}