aboutsummaryrefslogtreecommitdiff
path: root/src/layout
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-12-29 11:42:54 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-12-29 11:42:54 +0400
commitc64e96d0d8c4b347549b3b6f08e1b6e54b680104 (patch)
treeb9ace70fa3d802c7a8da6b7ca00bde029240c2b2 /src/layout
parent44d3a5b9a2b0ce2bfeccfa0be16196052b6fdd50 (diff)
downloadniri-c64e96d0d8c4b347549b3b6f08e1b6e54b680104.tar.gz
niri-c64e96d0d8c4b347549b3b6f08e1b6e54b680104.tar.bz2
niri-c64e96d0d8c4b347549b3b6f08e1b6e54b680104.zip
Add test with i32::MAX max_size
Diffstat (limited to 'src/layout')
-rw-r--r--src/layout/mod.rs88
1 files changed, 81 insertions, 7 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs
index 0ef10b16..07e216e2 100644
--- a/src/layout/mod.rs
+++ b/src/layout/mod.rs
@@ -1421,18 +1421,27 @@ mod tests {
bbox: Cell<Rectangle<i32, Logical>>,
initial_bbox: Rectangle<i32, Logical>,
requested_size: Cell<Option<Size<i32, Logical>>>,
+ min_size: Size<i32, Logical>,
+ max_size: Size<i32, Logical>,
}
#[derive(Debug, Clone)]
struct TestWindow(Rc<TestWindowInner>);
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 {
id,
bbox: Cell::new(bbox),
initial_bbox: bbox,
requested_size: Cell::new(None),
+ min_size,
+ max_size,
}))
}
@@ -1494,11 +1503,11 @@ mod tests {
fn request_fullscreen(&self, _size: 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> {
- Size::from((0, 0))
+ self.0.max_size
}
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)]
enum Op {
AddOutput(#[proptest(strategy = "1..=5usize")] usize),
@@ -1547,6 +1574,8 @@ mod tests {
id: usize,
#[proptest(strategy = "arbitrary_bbox()")]
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),
FullscreenWindow(#[proptest(strategy = "1..=5usize")] usize),
@@ -1630,7 +1659,11 @@ mod tests {
layout.focus_output(&output);
}
- Op::AddWindow { id, bbox } => {
+ Op::AddWindow {
+ id,
+ bbox,
+ min_max_size,
+ } => {
match &mut layout.monitor_set {
MonitorSet::Normal { 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);
}
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);
}
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);
}
Op::FocusColumnLeft => layout.focus_left(),
@@ -1780,14 +1815,17 @@ mod tests {
Op::AddWindow {
id: 0,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::AddWindow {
id: 1,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::AddWindow {
id: 2,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::CloseWindow(0),
Op::CloseWindow(1),
@@ -1851,26 +1889,31 @@ mod tests {
Op::AddWindow {
id: 1,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::MoveWindowToWorkspaceDown,
Op::AddWindow {
id: 2,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::AddWindow {
id: 3,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::FocusColumnLeft,
Op::ConsumeWindowIntoColumn,
Op::AddWindow {
id: 4,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::AddOutput(2),
Op::AddWindow {
id: 5,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::MoveWindowToOutput(2),
Op::FocusOutput(1),
@@ -1894,14 +1937,17 @@ mod tests {
Op::AddWindow {
id: 0,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::AddWindow {
id: 1,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::AddWindow {
id: 2,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::CloseWindow(0),
Op::CloseWindow(1),
@@ -1963,11 +2009,13 @@ mod tests {
Op::AddWindow {
id: 0,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::FocusOutput(2),
Op::AddWindow {
id: 1,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::RemoveOutput(2),
Op::FocusWorkspace(3),
@@ -1984,6 +2032,7 @@ mod tests {
Op::AddWindow {
id: 0,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::FocusWorkspaceDown,
Op::CloseWindow(0),
@@ -1999,6 +2048,7 @@ mod tests {
Op::AddWindow {
id: 0,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::AddOutput(2),
Op::RemoveOutput(1),
@@ -2025,6 +2075,7 @@ mod tests {
Op::AddWindow {
id: 0,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::MoveWindowToWorkspace(2),
];
@@ -2048,11 +2099,13 @@ mod tests {
Op::AddWindow {
id: 0,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::FocusWorkspaceDown,
Op::AddWindow {
id: 1,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::FocusWorkspaceUp,
Op::CloseWindow(0),
@@ -2078,11 +2131,13 @@ mod tests {
Op::AddWindow {
id: 1,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::FocusWorkspaceDown,
Op::AddWindow {
id: 2,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::AddOutput(2),
Op::RemoveOutput(1),
@@ -2101,6 +2156,7 @@ mod tests {
Op::AddWindow {
id: 1,
bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)),
+ min_max_size: Default::default(),
},
Op::SetWindowHeight(SizeChange::AdjustProportion(-1e129)),
];
@@ -2112,6 +2168,24 @@ mod tests {
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_config(ProptestConfig {
cases: if std::env::var_os("RUN_SLOW_TESTS").is_none() {