diff --git a/src/it/test_config.rs b/src/it/test_config.rs index a5e7adf9..41a6a4cc 100644 --- a/src/it/test_config.rs +++ b/src/it/test_config.rs @@ -16,7 +16,7 @@ use { }, input::{InputDevice, Seat}, keyboard::{Keymap, ModifiedKeySym}, - video::Connector, + video::{Connector, Transform}, Axis, Direction, }, std::{cell::Cell, ops::Deref, ptr, rc::Rc}, @@ -260,6 +260,13 @@ impl TestConfig { scale, }) } + + pub fn set_output_transform(&self, output: &OutputNode, transform: Transform) -> TestResult { + self.send(ClientMessage::ConnectorSetTransform { + connector: Connector(output.global.connector.connector.id().raw() as _), + transform, + }) + } } impl Drop for TestConfig { diff --git a/src/it/test_ifs/test_compositor.rs b/src/it/test_ifs/test_compositor.rs index 5c6162c6..1c9076b5 100644 --- a/src/it/test_ifs/test_compositor.rs +++ b/src/it/test_ifs/test_compositor.rs @@ -35,6 +35,7 @@ impl TestCompositor { server, destroyed: Cell::new(false), preferred_buffer_scale: Rc::new(Default::default()), + preferred_buffer_transform: Rc::new(Default::default()), }); self.tran.add_obj(surface.clone())?; Ok(surface) diff --git a/src/it/test_ifs/test_surface.rs b/src/it/test_ifs/test_surface.rs index 72c27524..e95f6d50 100644 --- a/src/it/test_ifs/test_surface.rs +++ b/src/it/test_ifs/test_surface.rs @@ -17,6 +17,7 @@ pub struct TestSurface { pub server: Rc, pub destroyed: Cell, pub preferred_buffer_scale: TEEH, + pub preferred_buffer_transform: TEEH, } impl TestSurface { @@ -66,6 +67,15 @@ impl TestSurface { self.preferred_buffer_scale.push(ev.factor); Ok(()) } + + fn handle_preferred_buffer_transform( + &self, + parser: MsgParser<'_, '_>, + ) -> Result<(), TestError> { + let ev = PreferredBufferTransform::parse_full(parser)?; + self.preferred_buffer_transform.push(ev.transform); + Ok(()) + } } impl Drop for TestSurface { @@ -80,6 +90,7 @@ test_object! { ENTER => handle_enter, LEAVE => handle_leave, PREFERRED_BUFFER_SCALE => handle_preferred_buffer_scale, + PREFERRED_BUFFER_TRANSFORM => handle_preferred_buffer_transform, } impl TestObject for TestSurface {} diff --git a/src/it/tests.rs b/src/it/tests.rs index 566218ae..8af439d5 100644 --- a/src/it/tests.rs +++ b/src/it/tests.rs @@ -56,6 +56,7 @@ mod t0022_toplevel_suspended; mod t0023_xdg_activation; mod t0024_foreign_toplevel_list; mod t0025_dnd_focus_change; +mod t0026_output_transform; pub trait TestCase: Sync { fn name(&self) -> &'static str; @@ -100,5 +101,6 @@ pub fn tests() -> Vec<&'static dyn TestCase> { t0023_xdg_activation, t0024_foreign_toplevel_list, t0025_dnd_focus_change, + t0026_output_transform, } } diff --git a/src/it/tests/t0026_output_transform.rs b/src/it/tests/t0026_output_transform.rs new file mode 100644 index 00000000..d99afba1 --- /dev/null +++ b/src/it/tests/t0026_output_transform.rs @@ -0,0 +1,27 @@ +use { + crate::it::{test_error::TestResult, testrun::TestRun}, + jay_config::video::Transform, + std::rc::Rc, +}; + +testcase!(); + +async fn test(run: Rc) -> TestResult { + let ds = run.create_default_setup().await?; + + run.cfg + .set_output_transform(&ds.output, Transform::FlipRotate90)?; + + let client = run.create_client().await?; + let win = client.create_window().await?; + + let transform = win.surface.preferred_buffer_transform.expect()?; + + win.map2().await?; + + tassert_eq!(transform.next()?, 5); + + client.compare_screenshot("1", false).await?; + + Ok(()) +} diff --git a/src/it/tests/t0026_output_transform/screenshot_1.qoi b/src/it/tests/t0026_output_transform/screenshot_1.qoi new file mode 100644 index 00000000..2206fc85 Binary files /dev/null and b/src/it/tests/t0026_output_transform/screenshot_1.qoi differ