ratatui_toolkit/primitives/resizable_split/traits/
mod.rs1use crate::primitives::resizable_split::ResizableSplit;
2
3impl Default for ResizableSplit {
4 fn default() -> Self {
5 Self::new(70)
6 }
7}
8
9#[cfg(test)]
10mod tests {
11 use super::*;
12 use crate::SplitDirection;
13 use ratatui::layout::Rect;
14
15 #[test]
16 fn test_new_clamps_percentage() {
17 let split = ResizableSplit::new(150);
18 assert_eq!(split.split_percent, 95);
19
20 let split = ResizableSplit::new(0);
21 assert_eq!(split.split_percent, 5);
22 }
23
24 #[test]
25 fn test_update_divider_position_vertical() {
26 let mut split = ResizableSplit::new(50);
27 let area = Rect::new(0, 0, 100, 20);
28
29 split.update_divider_position(area);
30 assert_eq!(split.divider_pos, 50);
31 }
32
33 #[test]
34 fn test_update_divider_position_horizontal() {
35 let mut split = ResizableSplit::new_with_direction(50, SplitDirection::Horizontal);
36 let area = Rect::new(0, 0, 100, 20);
37
38 split.update_divider_position(area);
39 assert_eq!(split.divider_pos, 10);
40 }
41
42 #[test]
43 fn test_is_on_divider_vertical() {
44 let mut split = ResizableSplit::new(50);
45 let area = Rect::new(0, 0, 100, 20);
46 split.update_divider_position(area);
47
48 assert!(split.is_on_divider(49, 10, area));
49 assert!(split.is_on_divider(50, 10, area));
50 assert!(split.is_on_divider(51, 10, area));
51 assert!(!split.is_on_divider(47, 10, area));
52 assert!(!split.is_on_divider(53, 10, area));
53 }
54
55 #[test]
56 fn test_is_on_divider_horizontal() {
57 let mut split = ResizableSplit::new_with_direction(50, SplitDirection::Horizontal);
58 let area = Rect::new(0, 0, 100, 20);
59 split.update_divider_position(area);
60
61 assert!(split.is_on_divider(50, 9, area));
62 assert!(split.is_on_divider(50, 10, area));
63 assert!(split.is_on_divider(50, 11, area));
64 assert!(!split.is_on_divider(50, 7, area));
65 assert!(!split.is_on_divider(50, 13, area));
66 }
67
68 #[test]
69 fn test_update_from_mouse_vertical() {
70 let mut split = ResizableSplit::new(50);
71 let area = Rect::new(0, 0, 100, 20);
72
73 split.update_from_mouse(75, 10, area);
74 assert_eq!(split.split_percent, 50);
75
76 split.start_drag();
77 split.update_from_mouse(75, 10, area);
78 assert_eq!(split.split_percent, 75);
79
80 split.update_from_mouse(99, 10, area);
81 assert_eq!(split.split_percent, 90);
82
83 split.update_from_mouse(1, 10, area);
84 assert_eq!(split.split_percent, 10);
85 }
86
87 #[test]
88 fn test_update_from_mouse_horizontal() {
89 let mut split = ResizableSplit::new_with_direction(50, SplitDirection::Horizontal);
90 let area = Rect::new(0, 0, 100, 20);
91
92 split.update_from_mouse(50, 15, area);
93 assert_eq!(split.split_percent, 50);
94
95 split.start_drag();
96 split.update_from_mouse(50, 15, area);
97 assert_eq!(split.split_percent, 75);
98
99 split.update_from_mouse(50, 19, area);
100 assert_eq!(split.split_percent, 90);
101
102 split.update_from_mouse(50, 1, area);
103 assert_eq!(split.split_percent, 10);
104 }
105}