2024-11-25 18:16:10 -05:00
|
|
|
use ironcalc::base::Model;
|
2025-01-19 17:57:51 -05:00
|
|
|
use ratatui::style::Color;
|
2024-11-25 18:16:10 -05:00
|
|
|
|
2024-12-05 17:27:06 -05:00
|
|
|
use crate::ui::AppState;
|
|
|
|
|
2024-11-25 22:09:57 -05:00
|
|
|
use super::{Address, Book, Viewport, ViewportState};
|
2024-11-25 18:16:10 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_viewport_get_visible_columns() {
|
|
|
|
let mut state = ViewportState::default();
|
2025-01-30 19:43:25 -05:00
|
|
|
let book = Book::from_model(
|
2024-12-05 17:27:06 -05:00
|
|
|
Model::new_empty("test", "en", "America/New_York").expect("Failed to make model"),
|
|
|
|
);
|
2024-11-25 18:16:10 -05:00
|
|
|
let default_size = book.get_col_size(1).expect("Failed to get column size");
|
|
|
|
let width = dbg!(dbg!(default_size) * 12 / 2);
|
2024-12-05 17:27:06 -05:00
|
|
|
let app_state = AppState::default();
|
2025-02-08 18:33:26 -05:00
|
|
|
let viewport = Viewport::new(&book, Some(&app_state.range_select))
|
|
|
|
.with_selected(Address { row: 1, col: 17 });
|
2024-12-05 17:27:06 -05:00
|
|
|
let cols = viewport
|
|
|
|
.get_visible_columns((width + 5) as u16, &mut state)
|
|
|
|
.expect("Failed to get visible columns");
|
2024-11-25 18:16:10 -05:00
|
|
|
assert_eq!(5, cols.len());
|
|
|
|
assert_eq!(17, cols.last().expect("Failed to get last column").idx);
|
|
|
|
}
|
2024-11-25 22:09:57 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_viewport_get_visible_rows() {
|
|
|
|
let mut state = dbg!(ViewportState::default());
|
2025-01-30 19:43:25 -05:00
|
|
|
let book = Book::from_model(
|
2024-12-05 17:27:06 -05:00
|
|
|
Model::new_empty("test", "en", "America/New_York").expect("Failed to make model"),
|
|
|
|
);
|
2024-11-25 22:09:57 -05:00
|
|
|
let height = 6;
|
2024-12-05 17:27:06 -05:00
|
|
|
let app_state = AppState::default();
|
2025-02-08 18:33:26 -05:00
|
|
|
let viewport = Viewport::new(&book, Some(&app_state.range_select))
|
|
|
|
.with_selected(Address { row: 17, col: 1 });
|
2024-11-25 22:09:57 -05:00
|
|
|
let rows = dbg!(viewport.get_visible_rows(height as u16, &mut state));
|
|
|
|
assert_eq!(height - 1, rows.len());
|
2024-12-05 17:27:06 -05:00
|
|
|
assert_eq!(
|
|
|
|
17 - (height - 2),
|
|
|
|
*rows.first().expect("Failed to get first row")
|
|
|
|
);
|
2024-11-25 22:09:57 -05:00
|
|
|
assert_eq!(17, *rows.last().expect("Failed to get last row"));
|
|
|
|
}
|
2024-11-27 19:35:23 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_viewport_visible_columns_after_length_change() {
|
|
|
|
let mut state = ViewportState::default();
|
2025-01-30 19:43:25 -05:00
|
|
|
let mut book = Book::from_model(
|
2024-12-05 17:27:06 -05:00
|
|
|
Model::new_empty("test", "en", "America/New_York").expect("Failed to make model"),
|
|
|
|
);
|
2024-11-27 19:35:23 -05:00
|
|
|
let default_size = book.get_col_size(1).expect("Failed to get column size");
|
|
|
|
let width = dbg!(dbg!(default_size) * 12 / 2);
|
|
|
|
{
|
2024-12-05 17:27:06 -05:00
|
|
|
let app_state = AppState::default();
|
2024-12-14 07:49:00 -05:00
|
|
|
let viewport = Viewport::new(&book, Some(&app_state.range_select))
|
2024-12-05 17:27:06 -05:00
|
|
|
.with_selected(Address { row: 1, col: 17 });
|
|
|
|
let cols = viewport
|
|
|
|
.get_visible_columns((width + 5) as u16, &mut state)
|
|
|
|
.expect("Failed to get visible columns");
|
2024-11-27 19:35:23 -05:00
|
|
|
assert_eq!(5, cols.len());
|
|
|
|
assert_eq!(17, cols.last().expect("Failed to get last column").idx);
|
|
|
|
}
|
|
|
|
|
2024-12-05 17:27:06 -05:00
|
|
|
book.set_col_size(1, default_size * 6)
|
|
|
|
.expect("Failed to set column size");
|
2024-11-27 19:35:23 -05:00
|
|
|
{
|
2024-12-05 17:27:06 -05:00
|
|
|
let app_state = AppState::default();
|
2025-02-08 18:33:26 -05:00
|
|
|
let viewport = Viewport::new(&book, Some(&app_state.range_select))
|
|
|
|
.with_selected(Address { row: 1, col: 1 });
|
2024-12-05 17:27:06 -05:00
|
|
|
let cols = viewport
|
|
|
|
.get_visible_columns((width + 5) as u16, &mut state)
|
|
|
|
.expect("Failed to get visible columns");
|
2024-11-27 19:35:23 -05:00
|
|
|
assert_eq!(1, cols.len());
|
|
|
|
assert_eq!(1, cols.last().expect("Failed to get last column").idx);
|
|
|
|
}
|
|
|
|
}
|
2025-01-19 17:57:51 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_color_mapping() {
|
|
|
|
for (s, c) in [
|
|
|
|
("red", Color::Red),
|
|
|
|
("blue", Color::Blue),
|
|
|
|
("green", Color::Green),
|
|
|
|
("magenta", Color::Magenta),
|
|
|
|
("cyan", Color::Cyan),
|
|
|
|
("white", Color::White),
|
|
|
|
("yellow", Color::Yellow),
|
|
|
|
("black", Color::Black),
|
|
|
|
("gray", Color::Gray),
|
|
|
|
("grey", Color::Gray),
|
|
|
|
("lightred", Color::LightRed),
|
|
|
|
("lightblue", Color::LightBlue),
|
|
|
|
("lightgreen", Color::LightGreen),
|
|
|
|
("lightmagenta", Color::LightMagenta),
|
|
|
|
("lightcyan", Color::LightCyan),
|
|
|
|
("lightyellow", Color::LightYellow),
|
|
|
|
("darkgrey", Color::DarkGray),
|
|
|
|
("darkgray", Color::DarkGray),
|
|
|
|
("#35f15b", Color::Rgb(53, 241, 91)),
|
2025-02-08 18:33:26 -05:00
|
|
|
]
|
|
|
|
.map(|(s, c)| (Some(s.to_string()), c))
|
|
|
|
{
|
2025-01-19 17:57:51 -05:00
|
|
|
assert_eq!(super::viewport::map_color(s.as_ref(), Color::Gray), c);
|
|
|
|
}
|
|
|
|
}
|