use std::fmt::{self, Write as _};
use insta::assert_snapshot;
use niri_config::Config;
use rayon::iter::{IntoParallelIterator, ParallelIterator};
use super::*;
use crate::layout::LayoutElement as _;
use crate::utils::spawning::store_and_increase_nofile_rlimit;
use crate::utils::with_toplevel_role;
#[test]
fn simple_no_workspaces() {
let mut f = Fixture::new();
let id = f.add_client();
let window = f.client(id).create_window();
let surface = window.surface.clone();
window.commit();
f.roundtrip(id);
let window = f.client(id).window(&surface);
assert_snapshot!(
window.format_recent_configures(),
@"size: 0 × 0, bounds: 0 × 0, states: []"
);
window.attach_new_buffer();
window.set_size(100, 100);
window.ack_last_and_commit();
f.double_roundtrip(id);
let window = f.client(id).window(&surface);
assert_snapshot!(
window.format_recent_configures(),
@"size: 100 × 688, bounds: 1248 × 688, states: []"
);
}
#[test]
fn simple() {
let mut f = Fixture::new();
f.add_output(1, (1920, 1080));
let id = f.add_client();
let window = f.client(id).create_window();
let surface = window.surface.clone();
window.commit();
f.roundtrip(id);
let window = f.client(id).window(&surface);
assert_snapshot!(
window.format_recent_configures(),
@"size: 936 × 1048, bounds: 1888 × 1048, states: []"
);
window.attach_new_buffer();
window.ack_last_and_commit();
f.double_roundtrip(id);
let window = f.client(id).window(&surface);
assert_snapshot!(
window.format_recent_configures(),
@"size: 936 × 1048, bounds: 1888 × 1048, states: [Activated]"
);
}
#[test]
#[should_panic(expected = "Protocol error 3 on object xdg_surface")]
fn dont_ack_initial_configure() {
let mut f = Fixture::new();
f.add_output(1, (1920, 1080));
let id = f.add_client();
let window = f.client(id).create_window();
let surface = window.surface.clone();
window.commit();
f.roundtrip(id);
let window = f.client(id).window(&surface);
window.attach_new_buffer();
// Don't ack the configure.
window.commit();
f.double_roundtrip(id);
}
#[derive(Clone, Copy)]
enum WantFullscreen {
No,
UnsetBeforeInitial,
BeforeInitial(Option<&'static str>),
UnsetAfterInitial,
AfterInitial(Option<&'static str>),
}
impl fmt::Display for WantFullscreen {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
WantFullscreen::No => write!(f, "U")?,
WantFullscreen::UnsetBeforeInitial => write!(f, "BU")?,
WantFullscreen::UnsetAfterInitial => write!(f, "AU")?,
WantFullscreen::BeforeInitial(m) => write!(f, "B{}", m.unwrap_or("N"))?,
WantFullscreen::AfterInitial(m) => write!(f, "A{}", m.unwrap_or("N"))?,
}
Ok(())
}
}
#[derive(Clone, Copy)]
enum WantMaximized {
No,
UnsetBeforeInitial,
BeforeInitial,
UnsetAfterInitial,
AfterInitial,
}
impl fmt::Display for WantMaximized {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
WantMaximized::No => write!(f, "U")?,
WantMaximized::UnsetBeforeInitial => write!(f, "BU")?,
WantMaximized::UnsetAfterInitial => write!(f, "AU")?,
WantMaximized::BeforeInitial => write!(f, "B")?,
WantMaximized::AfterInitial => write!(f, "A")?,
}
Ok(())
}
}
#[derive(Clone, Copy)]
enum SetParent {
BeforeInitial(&'static str),
AfterInitial(&'static str),
}
impl fmt::Display for SetParent {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SetParent::BeforeInitial(m) => write!(f, "B{m}")?,
SetParent::AfterInitial(m) => write!(f, "A{m}")?,
}
Ok(())
}
}
#[derive(Clone, Copy)]
enum DefaultSize {
WindowChooses,