1
0
Fork 0
forked from wry/wry
wry/src/it/tests/t0034_workspace_restoration.rs
2026-03-18 20:37:14 +01:00

123 lines
3.5 KiB
Rust

use {
crate::{
backend::{
BackendConnectorState, BackendEvent, ConnectorEvent, ConnectorKernelId, MonitorInfo,
},
cmm::cmm_primaries::Primaries,
format::XRGB8888,
ifs::wl_output::OutputId,
it::{test_backend::TestConnector, test_error::TestResult, testrun::TestRun},
utils::numcell::NumCell,
video::drm::ConnectorType,
},
std::{cell::RefCell, rc::Rc},
};
testcase!();
async fn test(run: Rc<TestRun>) -> TestResult {
let ds = run.create_default_setup().await?;
let client1 = run.create_client().await?;
let win1 = client1.create_window().await?;
win1.map2().await?;
let surface = &win1.surface.server;
let Some(dummy_output) = run.state.dummy_output.get() else {
bail!("no dummy output");
};
let bcs = BackendConnectorState {
serial: run.state.backend_connector_state_serials.next(),
enabled: true,
active: true,
mode: Default::default(),
non_desktop_override: None,
vrr: false,
tearing: false,
format: XRGB8888,
color_space: Default::default(),
eotf: Default::default(),
gamma_lut: Default::default(),
};
let new_connector = Rc::new(TestConnector {
id: run.state.connector_ids.next(),
kernel_id: ConnectorKernelId {
ty: ConnectorType::VGA,
idx: 2,
},
events: Default::default(),
feedback: Default::default(),
idle: Default::default(),
damage_calls: NumCell::new(0),
state: RefCell::new(bcs.clone()),
});
let new_monitor_info = MonitorInfo {
modes: Some(vec![]),
output_id: Rc::new(OutputId {
connector: None,
manufacturer: "jay".to_string(),
model: "jay second connector".to_string(),
serial_number: "".to_string(),
}),
width_mm: 0,
height_mm: 0,
non_desktop: false,
non_desktop_effective: false,
vrr_capable: false,
eotfs: vec![],
color_spaces: vec![],
primaries: Primaries::SRGB,
luminance: None,
state: bcs,
};
run.backend
.state
.backend_events
.push(BackendEvent::NewConnector(new_connector.clone()));
new_connector
.events
.send_event(ConnectorEvent::Connected(new_monitor_info.clone()));
run.state.eng.yield_now().await;
tassert_eq!(
surface.get_output().global.connector.connector.id(),
ds.connector.id
);
ds.connector.events.send_event(ConnectorEvent::Disconnected);
run.state.eng.yield_now().await;
tassert_eq!(
surface.get_output().global.connector.connector.id(),
new_connector.id
);
new_connector
.events
.send_event(ConnectorEvent::Disconnected);
run.state.eng.yield_now().await;
tassert_eq!(
surface.get_output().global.connector.connector.id(),
dummy_output.global.connector.connector.id()
);
new_connector
.events
.send_event(ConnectorEvent::Connected(new_monitor_info.clone()));
run.state.eng.yield_now().await;
tassert_eq!(
surface.get_output().global.connector.connector.id(),
new_connector.id
);
ds.connector.events.send_event(ConnectorEvent::Connected(
run.backend.default_monitor_info.clone(),
));
run.state.eng.yield_now().await;
tassert_eq!(
surface.get_output().global.connector.connector.id(),
ds.connector.id
);
Ok(())
}