UPDATE: Dump of initial files
This commit is contained in:
275
base/src/test/test_worksheet.rs
Normal file
275
base/src/test/test_worksheet.rs
Normal file
@@ -0,0 +1,275 @@
|
||||
#![allow(clippy::unwrap_used)]
|
||||
|
||||
use crate::{
|
||||
constants::{LAST_COLUMN, LAST_ROW},
|
||||
test::util::new_empty_model,
|
||||
worksheet::{NavigationDirection, WorksheetDimension},
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn test_worksheet_dimension_empty_sheet() {
|
||||
let model = new_empty_model();
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 1,
|
||||
min_column: 1,
|
||||
max_row: 1,
|
||||
max_column: 1
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_worksheet_dimension_single_cell() {
|
||||
let mut model = new_empty_model();
|
||||
model._set("W11", "1");
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 11,
|
||||
min_column: 23,
|
||||
max_row: 11,
|
||||
max_column: 23
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_worksheet_dimension_single_cell_set_empty() {
|
||||
let mut model = new_empty_model();
|
||||
model._set("W11", "1");
|
||||
model.set_cell_empty(0, 11, 23).unwrap();
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 11,
|
||||
min_column: 23,
|
||||
max_row: 11,
|
||||
max_column: 23
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_worksheet_dimension_single_cell_deleted() {
|
||||
let mut model = new_empty_model();
|
||||
model._set("W11", "1");
|
||||
model.delete_cell(0, 11, 23).unwrap();
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 1,
|
||||
min_column: 1,
|
||||
max_row: 1,
|
||||
max_column: 1
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_worksheet_dimension_multiple_cells() {
|
||||
let mut model = new_empty_model();
|
||||
model._set("W11", "1");
|
||||
model._set("E11", "1");
|
||||
model._set("AA17", "1");
|
||||
model._set("G17", "1");
|
||||
model._set("B19", "1");
|
||||
model.delete_cell(0, 11, 23).unwrap();
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 11,
|
||||
min_column: 2,
|
||||
max_row: 19,
|
||||
max_column: 27
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_worksheet_dimension_progressive() {
|
||||
let mut model = new_empty_model();
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 1,
|
||||
min_column: 1,
|
||||
max_row: 1,
|
||||
max_column: 1
|
||||
}
|
||||
);
|
||||
|
||||
model.set_user_input(0, 30, 50, "Hello World".to_string());
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 30,
|
||||
min_column: 50,
|
||||
max_row: 30,
|
||||
max_column: 50
|
||||
}
|
||||
);
|
||||
|
||||
model.set_user_input(0, 10, 15, "Hello World".to_string());
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 10,
|
||||
min_column: 15,
|
||||
max_row: 30,
|
||||
max_column: 50
|
||||
}
|
||||
);
|
||||
|
||||
model.set_user_input(0, 5, 25, "Hello World".to_string());
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 5,
|
||||
min_column: 15,
|
||||
max_row: 30,
|
||||
max_column: 50
|
||||
}
|
||||
);
|
||||
|
||||
model.set_user_input(0, 10, 250, "Hello World".to_string());
|
||||
assert_eq!(
|
||||
model.workbook.worksheet(0).unwrap().dimension(),
|
||||
WorksheetDimension {
|
||||
min_row: 5,
|
||||
min_column: 15,
|
||||
max_row: 30,
|
||||
max_column: 250
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_worksheet_navigate_to_edge_in_direction() {
|
||||
let inline_spreadsheet = [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0], // row 1
|
||||
[0, 1, 0, 1, 1, 1, 0, 1], // row 2
|
||||
[0, 1, 0, 1, 1, 0, 0, 0], // row 3
|
||||
[0, 1, 0, 1, 1, 0, 0, 0], // row 4
|
||||
[0, 0, 0, 1, 0, 0, 0, 0], // row 5
|
||||
[0, 1, 1, 0, 1, 0, 0, 0], // row 6
|
||||
[0, 0, 0, 0, 0, 0, 0, 0], // row 7
|
||||
];
|
||||
// 1, 2, 3, 4, 5, 6, 7, 8 - columns
|
||||
|
||||
let mut model = new_empty_model();
|
||||
for (row_index, row) in inline_spreadsheet.into_iter().enumerate() {
|
||||
for (column_index, value) in row.into_iter().enumerate() {
|
||||
if value != 0 {
|
||||
model.update_cell_with_number(
|
||||
0,
|
||||
(row_index as i32) + 1,
|
||||
(column_index as i32) + 1,
|
||||
value.into(),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let worksheet = model.workbook.worksheet(0).unwrap();
|
||||
|
||||
// Simple alias for readability of tests
|
||||
let navigate = |row, column, direction| {
|
||||
worksheet
|
||||
.navigate_to_edge_in_direction(row, column, direction)
|
||||
.unwrap()
|
||||
};
|
||||
|
||||
assert_eq!(navigate(1, 1, NavigationDirection::Up), (1, 1));
|
||||
assert_eq!(navigate(1, 1, NavigationDirection::Left), (1, 1));
|
||||
assert_eq!(navigate(1, 1, NavigationDirection::Down), (LAST_ROW, 1));
|
||||
assert_eq!(navigate(1, 1, NavigationDirection::Right), (1, LAST_COLUMN));
|
||||
|
||||
assert_eq!(navigate(LAST_ROW, 1, NavigationDirection::Up), (1, 1));
|
||||
assert_eq!(
|
||||
navigate(LAST_ROW, 1, NavigationDirection::Left),
|
||||
(LAST_ROW, 1)
|
||||
);
|
||||
assert_eq!(
|
||||
navigate(LAST_ROW, 1, NavigationDirection::Down),
|
||||
(LAST_ROW, 1)
|
||||
);
|
||||
assert_eq!(
|
||||
navigate(LAST_ROW, 1, NavigationDirection::Right),
|
||||
(LAST_ROW, LAST_COLUMN)
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
navigate(1, LAST_COLUMN, NavigationDirection::Up),
|
||||
(1, LAST_COLUMN)
|
||||
);
|
||||
assert_eq!(navigate(1, LAST_COLUMN, NavigationDirection::Left), (1, 1));
|
||||
assert_eq!(
|
||||
navigate(1, LAST_COLUMN, NavigationDirection::Down),
|
||||
(LAST_ROW, LAST_COLUMN)
|
||||
);
|
||||
assert_eq!(
|
||||
navigate(1, LAST_COLUMN, NavigationDirection::Right),
|
||||
(1, LAST_COLUMN)
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
navigate(LAST_ROW, LAST_COLUMN, NavigationDirection::Up),
|
||||
(1, LAST_COLUMN)
|
||||
);
|
||||
assert_eq!(
|
||||
navigate(LAST_ROW, LAST_COLUMN, NavigationDirection::Left),
|
||||
(LAST_ROW, 1)
|
||||
);
|
||||
assert_eq!(
|
||||
navigate(LAST_ROW, LAST_COLUMN, NavigationDirection::Down),
|
||||
(LAST_ROW, LAST_COLUMN)
|
||||
);
|
||||
assert_eq!(
|
||||
navigate(LAST_ROW, LAST_COLUMN, NavigationDirection::Right),
|
||||
(LAST_ROW, LAST_COLUMN)
|
||||
);
|
||||
|
||||
// Direction = right
|
||||
assert_eq!(navigate(2, 1, NavigationDirection::Right), (2, 2));
|
||||
assert_eq!(navigate(2, 2, NavigationDirection::Right), (2, 4));
|
||||
assert_eq!(navigate(2, 4, NavigationDirection::Right), (2, 6));
|
||||
assert_eq!(navigate(2, 6, NavigationDirection::Right), (2, 8));
|
||||
assert_eq!(navigate(2, 8, NavigationDirection::Right), (2, LAST_COLUMN));
|
||||
|
||||
assert_eq!(navigate(2, 3, NavigationDirection::Right), (2, 4));
|
||||
assert_eq!(navigate(5, 1, NavigationDirection::Right), (5, 4));
|
||||
assert_eq!(navigate(5, 2, NavigationDirection::Right), (5, 4));
|
||||
|
||||
// Direction = left
|
||||
assert_eq!(navigate(2, LAST_COLUMN, NavigationDirection::Left), (2, 8));
|
||||
assert_eq!(navigate(2, 8, NavigationDirection::Left), (2, 6));
|
||||
assert_eq!(navigate(2, 6, NavigationDirection::Left), (2, 4));
|
||||
assert_eq!(navigate(2, 4, NavigationDirection::Left), (2, 2));
|
||||
assert_eq!(navigate(2, 2, NavigationDirection::Left), (2, 1));
|
||||
|
||||
assert_eq!(navigate(2, 3, NavigationDirection::Left), (2, 2));
|
||||
assert_eq!(navigate(5, 8, NavigationDirection::Left), (5, 4));
|
||||
assert_eq!(navigate(5, 7, NavigationDirection::Left), (5, 4));
|
||||
|
||||
// Direction = down
|
||||
assert_eq!(navigate(1, 5, NavigationDirection::Down), (2, 5));
|
||||
assert_eq!(navigate(2, 5, NavigationDirection::Down), (4, 5));
|
||||
assert_eq!(navigate(4, 5, NavigationDirection::Down), (6, 5));
|
||||
assert_eq!(navigate(6, 5, NavigationDirection::Down), (LAST_ROW, 5));
|
||||
|
||||
assert_eq!(navigate(2, 3, NavigationDirection::Down), (6, 3));
|
||||
assert_eq!(navigate(3, 3, NavigationDirection::Down), (6, 3));
|
||||
assert_eq!(navigate(5, 3, NavigationDirection::Down), (6, 3));
|
||||
|
||||
// Direction = up
|
||||
assert_eq!(navigate(LAST_ROW, 5, NavigationDirection::Up), (6, 5));
|
||||
assert_eq!(navigate(6, 5, NavigationDirection::Up), (4, 5));
|
||||
assert_eq!(navigate(4, 5, NavigationDirection::Up), (2, 5));
|
||||
assert_eq!(navigate(2, 5, NavigationDirection::Up), (1, 5));
|
||||
|
||||
assert_eq!(navigate(7, 3, NavigationDirection::Up), (6, 3));
|
||||
assert_eq!(navigate(8, 3, NavigationDirection::Up), (6, 3));
|
||||
assert_eq!(navigate(9, 3, NavigationDirection::Up), (6, 3));
|
||||
}
|
||||
Reference in New Issue
Block a user