1
0
Fork 0
forked from wry/wry
wry/src/it/test_ifs/test_display.rs
2024-04-03 17:08:27 +02:00

56 lines
1.5 KiB
Rust

use {
crate::{
client::MIN_SERVER_ID,
it::{
test_error::TestError, test_object::TestObject, test_transport::TestTransport,
testrun::ParseFull,
},
object::ObjectId,
utils::buffd::MsgParser,
wire::{wl_display::*, WlDisplayId},
},
std::rc::Rc,
};
pub struct TestDisplay {
pub tran: Rc<TestTransport>,
pub id: WlDisplayId,
}
impl TestDisplay {
fn handle_error(&self, parser: MsgParser<'_, '_>) -> Result<(), TestError> {
let ev = Error::parse_full(parser)?;
let msg = format!("Compositor sent an error: {}", ev.message);
self.tran.error(&msg);
self.tran.kill();
Ok(())
}
fn handle_delete_id(&self, parser: MsgParser<'_, '_>) -> Result<(), TestError> {
let ev = DeleteId::parse_full(parser)?;
match self.tran.objects.remove(&ObjectId::from_raw(ev.id)) {
None => {
bail!(
"Compositor sent delete_id for object {} which does not exist",
ev.id
);
}
Some(obj) => {
obj.on_remove(&self.tran);
if ev.id < MIN_SERVER_ID {
self.tran.obj_ids.borrow_mut().release(ev.id);
}
}
}
Ok(())
}
}
test_object! {
TestDisplay, WlDisplay;
ERROR => handle_error,
DELETE_ID => handle_delete_id,
}
impl TestObject for TestDisplay {}