jay-compositor 1.15.0

The Jay compositor
use crate::it::test_client::TestClientExt;
use crate::it::test_error::TestError;
use crate::it::testrun::TestRun;
use crate::theme::Color;
use std::rc::Rc;

testcase!();

/// Test subsurface positioning
async fn test(run: Rc<TestRun>) -> Result<(), TestError> {
    run.backend.install_default().await?;

    let seat = run.get_seat("default")?;

    run.state.eng.yield_now().await;

    run.cfg.show_workspace(seat.id(), "")?;

    let client = run.create_client()?;

    let parent = client.create_window().await?;
    parent.map().await?;
    parent.set_color(0, 0, 0, 255);

    let child = client.create_surface().await?;
    let child_viewport = client.get_viewport(&child);
    let sub = client.get_subsurface(child.id, parent.surface.id);
    sub.set_position(100, 100);

    let buffer = client.create_single_pixel_buffer(Color::from_srgba_straight(255, 255, 255, 255));

    child.attach(buffer.id);
    child_viewport.set_source(0, 0, 1, 1);
    child_viewport.set_destination(100, 100);
    child.commit();

    parent.map().await?;

    client.compare_screenshot("1", false).await?;

    sub.place_below(parent.surface.id);
    child.commit();
    parent.map().await?;
    client.compare_screenshot("2", false).await?;

    sub.place_above(parent.surface.id);
    child.commit();
    parent.map().await?;
    client.compare_screenshot("1", false).await?;

    Ok(())
}