mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-23 02:05:33 +07:00
Add test with i32::MAX max_size
This commit is contained in:
+81
-7
@@ -1421,18 +1421,27 @@ mod tests {
|
|||||||
bbox: Cell<Rectangle<i32, Logical>>,
|
bbox: Cell<Rectangle<i32, Logical>>,
|
||||||
initial_bbox: Rectangle<i32, Logical>,
|
initial_bbox: Rectangle<i32, Logical>,
|
||||||
requested_size: Cell<Option<Size<i32, Logical>>>,
|
requested_size: Cell<Option<Size<i32, Logical>>>,
|
||||||
|
min_size: Size<i32, Logical>,
|
||||||
|
max_size: Size<i32, Logical>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
struct TestWindow(Rc<TestWindowInner>);
|
struct TestWindow(Rc<TestWindowInner>);
|
||||||
|
|
||||||
impl TestWindow {
|
impl TestWindow {
|
||||||
fn new(id: usize, bbox: Rectangle<i32, Logical>) -> Self {
|
fn new(
|
||||||
|
id: usize,
|
||||||
|
bbox: Rectangle<i32, Logical>,
|
||||||
|
min_size: Size<i32, Logical>,
|
||||||
|
max_size: Size<i32, Logical>,
|
||||||
|
) -> Self {
|
||||||
Self(Rc::new(TestWindowInner {
|
Self(Rc::new(TestWindowInner {
|
||||||
id,
|
id,
|
||||||
bbox: Cell::new(bbox),
|
bbox: Cell::new(bbox),
|
||||||
initial_bbox: bbox,
|
initial_bbox: bbox,
|
||||||
requested_size: Cell::new(None),
|
requested_size: Cell::new(None),
|
||||||
|
min_size,
|
||||||
|
max_size,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1494,11 +1503,11 @@ mod tests {
|
|||||||
fn request_fullscreen(&self, _size: Size<i32, Logical>) {}
|
fn request_fullscreen(&self, _size: Size<i32, Logical>) {}
|
||||||
|
|
||||||
fn min_size(&self) -> Size<i32, Logical> {
|
fn min_size(&self) -> Size<i32, Logical> {
|
||||||
Size::from((0, 0))
|
self.0.min_size
|
||||||
}
|
}
|
||||||
|
|
||||||
fn max_size(&self) -> Size<i32, Logical> {
|
fn max_size(&self) -> Size<i32, Logical> {
|
||||||
Size::from((0, 0))
|
self.0.max_size
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_wl_surface(&self, _wl_surface: &WlSurface) -> bool {
|
fn is_wl_surface(&self, _wl_surface: &WlSurface) -> bool {
|
||||||
@@ -1537,6 +1546,24 @@ mod tests {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn arbitrary_min_max() -> impl Strategy<Value = (i32, i32)> {
|
||||||
|
prop_oneof![
|
||||||
|
Just((0, 0)),
|
||||||
|
(1..65536).prop_map(|n| (n, n)),
|
||||||
|
(1..65536).prop_map(|min| (min, 0)),
|
||||||
|
(1..).prop_map(|max| (0, max)),
|
||||||
|
(1..65536, 1..).prop_map(|(min, max): (i32, i32)| (min, max.max(min))),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn arbitrary_min_max_size() -> impl Strategy<Value = (Size<i32, Logical>, Size<i32, Logical>)> {
|
||||||
|
(arbitrary_min_max(), arbitrary_min_max()).prop_map(|((min_w, max_w), (min_h, max_h))| {
|
||||||
|
let min_size = Size::from((min_w, min_h));
|
||||||
|
let max_size = Size::from((max_w, max_h));
|
||||||
|
(min_size, max_size)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, Arbitrary)]
|
#[derive(Debug, Clone, Copy, Arbitrary)]
|
||||||
enum Op {
|
enum Op {
|
||||||
AddOutput(#[proptest(strategy = "1..=5usize")] usize),
|
AddOutput(#[proptest(strategy = "1..=5usize")] usize),
|
||||||
@@ -1547,6 +1574,8 @@ mod tests {
|
|||||||
id: usize,
|
id: usize,
|
||||||
#[proptest(strategy = "arbitrary_bbox()")]
|
#[proptest(strategy = "arbitrary_bbox()")]
|
||||||
bbox: Rectangle<i32, Logical>,
|
bbox: Rectangle<i32, Logical>,
|
||||||
|
#[proptest(strategy = "arbitrary_min_max_size()")]
|
||||||
|
min_max_size: (Size<i32, Logical>, Size<i32, Logical>),
|
||||||
},
|
},
|
||||||
CloseWindow(#[proptest(strategy = "1..=5usize")] usize),
|
CloseWindow(#[proptest(strategy = "1..=5usize")] usize),
|
||||||
FullscreenWindow(#[proptest(strategy = "1..=5usize")] usize),
|
FullscreenWindow(#[proptest(strategy = "1..=5usize")] usize),
|
||||||
@@ -1630,7 +1659,11 @@ mod tests {
|
|||||||
|
|
||||||
layout.focus_output(&output);
|
layout.focus_output(&output);
|
||||||
}
|
}
|
||||||
Op::AddWindow { id, bbox } => {
|
Op::AddWindow {
|
||||||
|
id,
|
||||||
|
bbox,
|
||||||
|
min_max_size,
|
||||||
|
} => {
|
||||||
match &mut layout.monitor_set {
|
match &mut layout.monitor_set {
|
||||||
MonitorSet::Normal { monitors, .. } => {
|
MonitorSet::Normal { monitors, .. } => {
|
||||||
for mon in monitors {
|
for mon in monitors {
|
||||||
@@ -1654,15 +1687,17 @@ mod tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let win = TestWindow::new(id, bbox);
|
let win = TestWindow::new(id, bbox, min_max_size.0, min_max_size.1);
|
||||||
layout.add_window(win, None, false);
|
layout.add_window(win, None, false);
|
||||||
}
|
}
|
||||||
Op::CloseWindow(id) => {
|
Op::CloseWindow(id) => {
|
||||||
let dummy = TestWindow::new(id, Rectangle::default());
|
let dummy =
|
||||||
|
TestWindow::new(id, Rectangle::default(), Size::default(), Size::default());
|
||||||
layout.remove_window(&dummy);
|
layout.remove_window(&dummy);
|
||||||
}
|
}
|
||||||
Op::FullscreenWindow(id) => {
|
Op::FullscreenWindow(id) => {
|
||||||
let dummy = TestWindow::new(id, Rectangle::default());
|
let dummy =
|
||||||
|
TestWindow::new(id, Rectangle::default(), Size::default(), Size::default());
|
||||||
layout.toggle_fullscreen(&dummy);
|
layout.toggle_fullscreen(&dummy);
|
||||||
}
|
}
|
||||||
Op::FocusColumnLeft => layout.focus_left(),
|
Op::FocusColumnLeft => layout.focus_left(),
|
||||||
@@ -1780,14 +1815,17 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 0,
|
id: 0,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 1,
|
id: 1,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 2,
|
id: 2,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::CloseWindow(0),
|
Op::CloseWindow(0),
|
||||||
Op::CloseWindow(1),
|
Op::CloseWindow(1),
|
||||||
@@ -1851,26 +1889,31 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 1,
|
id: 1,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::MoveWindowToWorkspaceDown,
|
Op::MoveWindowToWorkspaceDown,
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 2,
|
id: 2,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 3,
|
id: 3,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::FocusColumnLeft,
|
Op::FocusColumnLeft,
|
||||||
Op::ConsumeWindowIntoColumn,
|
Op::ConsumeWindowIntoColumn,
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 4,
|
id: 4,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::AddOutput(2),
|
Op::AddOutput(2),
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 5,
|
id: 5,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::MoveWindowToOutput(2),
|
Op::MoveWindowToOutput(2),
|
||||||
Op::FocusOutput(1),
|
Op::FocusOutput(1),
|
||||||
@@ -1894,14 +1937,17 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 0,
|
id: 0,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 1,
|
id: 1,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 2,
|
id: 2,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::CloseWindow(0),
|
Op::CloseWindow(0),
|
||||||
Op::CloseWindow(1),
|
Op::CloseWindow(1),
|
||||||
@@ -1963,11 +2009,13 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 0,
|
id: 0,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::FocusOutput(2),
|
Op::FocusOutput(2),
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 1,
|
id: 1,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::RemoveOutput(2),
|
Op::RemoveOutput(2),
|
||||||
Op::FocusWorkspace(3),
|
Op::FocusWorkspace(3),
|
||||||
@@ -1984,6 +2032,7 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 0,
|
id: 0,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::FocusWorkspaceDown,
|
Op::FocusWorkspaceDown,
|
||||||
Op::CloseWindow(0),
|
Op::CloseWindow(0),
|
||||||
@@ -1999,6 +2048,7 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 0,
|
id: 0,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::AddOutput(2),
|
Op::AddOutput(2),
|
||||||
Op::RemoveOutput(1),
|
Op::RemoveOutput(1),
|
||||||
@@ -2025,6 +2075,7 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 0,
|
id: 0,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::MoveWindowToWorkspace(2),
|
Op::MoveWindowToWorkspace(2),
|
||||||
];
|
];
|
||||||
@@ -2048,11 +2099,13 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 0,
|
id: 0,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::FocusWorkspaceDown,
|
Op::FocusWorkspaceDown,
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 1,
|
id: 1,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::FocusWorkspaceUp,
|
Op::FocusWorkspaceUp,
|
||||||
Op::CloseWindow(0),
|
Op::CloseWindow(0),
|
||||||
@@ -2078,11 +2131,13 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 1,
|
id: 1,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::FocusWorkspaceDown,
|
Op::FocusWorkspaceDown,
|
||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 2,
|
id: 2,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::AddOutput(2),
|
Op::AddOutput(2),
|
||||||
Op::RemoveOutput(1),
|
Op::RemoveOutput(1),
|
||||||
@@ -2101,6 +2156,7 @@ mod tests {
|
|||||||
Op::AddWindow {
|
Op::AddWindow {
|
||||||
id: 1,
|
id: 1,
|
||||||
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: Default::default(),
|
||||||
},
|
},
|
||||||
Op::SetWindowHeight(SizeChange::AdjustProportion(-1e129)),
|
Op::SetWindowHeight(SizeChange::AdjustProportion(-1e129)),
|
||||||
];
|
];
|
||||||
@@ -2112,6 +2168,24 @@ mod tests {
|
|||||||
check_ops_with_options(options, &ops);
|
check_ops_with_options(options, &ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn large_max_size() {
|
||||||
|
let ops = [
|
||||||
|
Op::AddOutput(1),
|
||||||
|
Op::AddWindow {
|
||||||
|
id: 1,
|
||||||
|
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
|
||||||
|
min_max_size: (Size::from((0, 0)), Size::from((i32::MAX, i32::MAX))),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut options = Options::default();
|
||||||
|
options.border.off = false;
|
||||||
|
options.border.width = 1;
|
||||||
|
|
||||||
|
check_ops_with_options(options, &ops);
|
||||||
|
}
|
||||||
|
|
||||||
proptest! {
|
proptest! {
|
||||||
#![proptest_config(ProptestConfig {
|
#![proptest_config(ProptestConfig {
|
||||||
cases: if std::env::var_os("RUN_SLOW_TESTS").is_none() {
|
cases: if std::env::var_os("RUN_SLOW_TESTS").is_none() {
|
||||||
|
|||||||
Reference in New Issue
Block a user