ratatui_toolkit/primitives/resizable_split/traits/
mod.rs

1use 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}