use { crate::{ ifs::wl_surface::xdg_surface::xdg_toplevel::XdgToplevel, it::{ test_error::TestError, test_object::TestObject, test_transport::TestTransport, testrun::ParseFull, }, utils::buffd::MsgParser, wire::{xdg_toplevel::*, XdgToplevelId}, }, ahash::AHashSet, std::{ cell::{Cell, RefCell}, rc::Rc, }, }; pub struct TestXdgToplevel { pub id: XdgToplevelId, pub tran: Rc, pub destroyed: Cell, pub server: Rc, pub width: Cell, pub height: Cell, pub states: RefCell>, pub close_requested: Cell, } impl TestXdgToplevel { pub fn destroy(&self) { if !self.destroyed.replace(true) { self.tran.send(Destroy { self_id: self.id }); } } fn handle_configure(&self, parser: MsgParser<'_, '_>) -> Result<(), TestError> { let ev = Configure::parse_full(parser)?; self.width.set(ev.width); self.height.set(ev.height); *self.states.borrow_mut() = ev.states.iter().copied().collect(); Ok(()) } fn handle_close(&self, parser: MsgParser<'_, '_>) -> Result<(), TestError> { let _ev = Close::parse_full(parser)?; self.close_requested.set(true); Ok(()) } fn handle_configure_bounds(&self, parser: MsgParser<'_, '_>) -> Result<(), TestError> { let _ev = ConfigureBounds::parse_full(parser)?; Ok(()) } } impl Drop for TestXdgToplevel { fn drop(&mut self) { self.destroy(); } } test_object! { TestXdgToplevel, XdgToplevel; CONFIGURE => handle_configure, CLOSE => handle_close, CONFIGURE_BOUNDS => handle_configure_bounds, } impl TestObject for TestXdgToplevel {}