extern crate gbm;
#[test]
fn user_data() {
let file = std::fs::OpenOptions::new().read(true).write(true).open("/dev/dri/card0").unwrap();
let dev = gbm::Device::from_file(&file).unwrap();
let format = gbm::Format::XRGB8888;
let flags = gbm::SCANOUT | gbm::RENDERING;
let buffer = dev.buffer((16, 16), format, flags).unwrap();
let get = unsafe { buffer.get_user_data::<u32>() };
assert_eq!(get, None);
{
let set = std::rc::Rc::new(12345);
buffer.set_user_data(Some(set.clone()));
}
let weak = {
let get = unsafe { buffer.get_user_data::<u32>().unwrap() };
assert_eq!(*get, 12345);
buffer.set_user_data::<()>(None);
std::rc::Rc::downgrade(&get)
};
assert_eq!(weak.upgrade(), None);
let get = unsafe { buffer.get_user_data::<()>() };
assert_eq!(get, None);
}