mirror of
https://github.com/ratatui/ratatui.git
synced 2025-09-27 04:50:46 +00:00
105 lines
3.1 KiB
Rust
105 lines
3.1 KiB
Rust
use ratatui_core::layout::{Constraint, Rect};
|
|
use ratatui_macros::{constraints, horizontal, vertical};
|
|
|
|
#[test]
|
|
fn layout_constraints_macro() {
|
|
let rect = Rect {
|
|
x: 0,
|
|
y: 0,
|
|
width: 10,
|
|
height: 10,
|
|
};
|
|
|
|
let [rect1, rect2] = vertical![==7, <=3].split(rect).to_vec().try_into().unwrap();
|
|
assert_eq!(rect1, Rect::new(0, 0, 10, 7));
|
|
assert_eq!(rect2, Rect::new(0, 7, 10, 3));
|
|
|
|
let [rect1, rect2] = horizontal![==7, <=3]
|
|
.split(rect)
|
|
.to_vec()
|
|
.try_into()
|
|
.unwrap();
|
|
assert_eq!(rect1, Rect::new(0, 0, 7, 10));
|
|
assert_eq!(rect2, Rect::new(7, 0, 3, 10));
|
|
|
|
let one = 1;
|
|
let two = 2;
|
|
let ten = 10;
|
|
let zero = 0;
|
|
let [a, b, c, d, e, f] = horizontal![==one, >=one, <=one, == 1 / two, == ten %, >=zero]
|
|
.split(rect)
|
|
.to_vec()
|
|
.try_into()
|
|
.unwrap();
|
|
|
|
assert_eq!(a, Rect::new(0, 0, 1, 10));
|
|
assert_eq!(b, Rect::new(1, 0, 1, 10));
|
|
assert_eq!(c, Rect::new(2, 0, 1, 10));
|
|
assert_eq!(d, Rect::new(3, 0, 5, 10));
|
|
assert_eq!(e, Rect::new(8, 0, 1, 10));
|
|
assert_eq!(f, Rect::new(9, 0, 1, 10));
|
|
|
|
let one = 1;
|
|
let two = 2;
|
|
let ten = 10;
|
|
let zero = 0;
|
|
let [a, b, c, d, e, f] = horizontal![
|
|
== one*one, // expr allowed here
|
|
>= one+zero, // expr allowed here
|
|
<= one-zero, // expr allowed here
|
|
== 1/two, // only single token allowed in numerator and denominator
|
|
== ten%, // only single token allowed before %
|
|
>= zero // no trailing comma
|
|
]
|
|
.split(rect)
|
|
.to_vec()
|
|
.try_into()
|
|
.unwrap();
|
|
|
|
assert_eq!(a, Rect::new(0, 0, 1, 10));
|
|
assert_eq!(b, Rect::new(1, 0, 1, 10));
|
|
assert_eq!(c, Rect::new(2, 0, 1, 10));
|
|
assert_eq!(d, Rect::new(3, 0, 5, 10));
|
|
assert_eq!(e, Rect::new(8, 0, 1, 10));
|
|
assert_eq!(f, Rect::new(9, 0, 1, 10));
|
|
|
|
let [a, b, c, d, e] = constraints![ >=0, ==1, <=5, ==10%, ==1/2 ];
|
|
assert_eq!(a, Constraint::Min(0));
|
|
assert_eq!(b, Constraint::Length(1));
|
|
assert_eq!(c, Constraint::Max(5));
|
|
assert_eq!(d, Constraint::Percentage(10));
|
|
assert_eq!(e, Constraint::Ratio(1, 2));
|
|
|
|
let [a, b, c, d, e] = constraints![ >=0; 5 ];
|
|
assert_eq!(a, Constraint::Min(0));
|
|
assert_eq!(b, Constraint::Min(0));
|
|
assert_eq!(c, Constraint::Min(0));
|
|
assert_eq!(d, Constraint::Min(0));
|
|
assert_eq!(e, Constraint::Min(0));
|
|
|
|
let [a, b, c, d, e] = constraints![ <=0; 5 ];
|
|
assert_eq!(a, Constraint::Max(0));
|
|
assert_eq!(b, Constraint::Max(0));
|
|
assert_eq!(c, Constraint::Max(0));
|
|
assert_eq!(d, Constraint::Max(0));
|
|
assert_eq!(e, Constraint::Max(0));
|
|
|
|
let [a, b] = constraints![ ==0; 2 ];
|
|
assert_eq!(a, Constraint::Length(0));
|
|
assert_eq!(b, Constraint::Length(0));
|
|
|
|
let [a, b] = constraints![ == 50%; 2 ];
|
|
assert_eq!(a, Constraint::Percentage(50));
|
|
assert_eq!(b, Constraint::Percentage(50));
|
|
|
|
let [a, b] = constraints![ == 1/2; 2 ];
|
|
assert_eq!(a, Constraint::Ratio(1, 2));
|
|
assert_eq!(b, Constraint::Ratio(1, 2));
|
|
}
|
|
|
|
#[test]
|
|
fn fails() {
|
|
let t = trybuild::TestCases::new();
|
|
t.compile_fail("tests/ui/fails.rs");
|
|
}
|