Skip to content

Commit c07bdce

Browse files
committed
More scope tests
1 parent 084a85c commit c07bdce

File tree

1 file changed

+52
-17
lines changed

1 file changed

+52
-17
lines changed

tests/scope.rs

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,15 @@ fn test_scope_userdata_ref() -> Result<()> {
332332
let data = MyUserData(Cell::new(1));
333333
lua.scope(|scope| {
334334
let ud = scope.create_userdata_ref(&data)?;
335-
modify_userdata(&lua, ud)
335+
modify_userdata(&lua, &ud)?;
336+
337+
// We can only borrow userdata scoped
338+
assert!((matches!(ud.borrow::<MyUserData>(), Err(Error::UserDataTypeMismatch))));
339+
ud.borrow_scoped::<MyUserData, ()>(|ud_inst| {
340+
assert_eq!(ud_inst.0.get(), 2);
341+
})?;
342+
343+
Ok(())
336344
})?;
337345
assert_eq!(data.0.get(), 2);
338346

@@ -362,9 +370,16 @@ fn test_scope_userdata_ref_mut() -> Result<()> {
362370
let mut data = MyUserData(1);
363371
lua.scope(|scope| {
364372
let ud = scope.create_userdata_ref_mut(&mut data)?;
365-
modify_userdata(&lua, ud)
373+
modify_userdata(&lua, &ud)?;
374+
375+
assert!((matches!(ud.borrow_mut::<MyUserData>(), Err(Error::UserDataTypeMismatch))));
376+
ud.borrow_mut_scoped::<MyUserData, ()>(|ud_inst| {
377+
ud_inst.0 += 10;
378+
})?;
379+
380+
Ok(())
366381
})?;
367-
assert_eq!(data.0, 2);
382+
assert_eq!(data.0, 12);
368383

369384
Ok(())
370385
}
@@ -415,27 +430,47 @@ fn test_scope_any_userdata_ref() -> Result<()> {
415430
let data = Cell::new(1i64);
416431
lua.scope(|scope| {
417432
let ud = scope.create_any_userdata_ref(&data)?;
418-
modify_userdata(&lua, ud)
433+
modify_userdata(&lua, &ud)
419434
})?;
420435
assert_eq!(data.get(), 2);
421436

422437
Ok(())
423438
}
424439

425-
fn modify_userdata(lua: &Lua, ud: AnyUserData) -> Result<()> {
426-
let f: Function = lua
427-
.load(
428-
r#"
429-
function(u)
430-
u:inc()
431-
u:dec()
432-
u:inc()
433-
end
434-
"#,
435-
)
436-
.eval()?;
440+
#[test]
441+
fn test_scope_any_userdata_ref_mut() -> Result<()> {
442+
let lua = Lua::new();
437443

438-
f.call::<()>(ud)?;
444+
lua.register_userdata_type::<i64>(|reg| {
445+
reg.add_method_mut("inc", |_, data, ()| {
446+
*data += 1;
447+
Ok(())
448+
});
449+
450+
reg.add_method_mut("dec", |_, data, ()| {
451+
*data -= 1;
452+
Ok(())
453+
});
454+
})?;
455+
456+
let mut data = 1i64;
457+
lua.scope(|scope| {
458+
let ud = scope.create_any_userdata_ref_mut(&mut data)?;
459+
modify_userdata(&lua, &ud)
460+
})?;
461+
assert_eq!(data, 2);
439462

440463
Ok(())
441464
}
465+
466+
fn modify_userdata(lua: &Lua, ud: &AnyUserData) -> Result<()> {
467+
lua.load(
468+
r#"
469+
local u = ...
470+
u:inc()
471+
u:dec()
472+
u:inc()
473+
"#,
474+
)
475+
.call(ud)
476+
}

0 commit comments

Comments
 (0)