use super::*;
use crate::test_suite::test_hook;
fn ascending() -> Sort {
Sort {
direction: SortDirection::Ascending,
}
}
fn descending() -> Sort {
Sort {
direction: SortDirection::Descending,
}
}
#[test]
fn test_cancel_on_empty_list() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::Cancel);
assert_eq!(context.sorts.read().len(), 0);
}
_ => panic!("Unexpected generation"),
},
|proxy| assert_eq!(proxy.generation, 1),
);
}
#[test]
fn test_cancel_removes_existing_sort() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::AddFirst(ascending()));
assert_eq!(context.sorts.read().len(), 1);
context.request_sort(0, SortGesture::Cancel);
assert_eq!(context.sorts.read().len(), 0);
}
1 | 2 => {
}
_ => panic!("Unexpected generation: {}", proxy.generation),
},
|proxy| {
assert!(proxy.generation >= 1, "Expected at least one rerender");
},
);
}
#[test]
fn test_cancel_on_column_without_sort() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(1, SortGesture::AddFirst(ascending()));
assert_eq!(context.sorts.read().len(), 1);
context.request_sort(0, SortGesture::Cancel);
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 1);
assert_eq!(sorts[0].column, 1);
}
1 => {
}
_ => panic!("Unexpected generation: {}", proxy.generation),
},
|proxy| {
assert!(proxy.generation >= 1, "Expected at least one rerender");
},
);
}
#[test]
fn test_cancel_preserves_other_column_sorts() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::AddFirst(ascending()));
context.request_sort(1, SortGesture::AddLast(descending()));
context.request_sort(2, SortGesture::AddLast(ascending()));
assert_eq!(context.sorts.read().len(), 3);
context.request_sort(1, SortGesture::Cancel);
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 2);
assert_eq!(sorts[0].column, 0);
assert_eq!(sorts[1].column, 2);
}
1..=4 => {
}
_ => panic!("Unexpected generation: {}", proxy.generation),
},
|proxy| {
assert!(proxy.generation >= 1, "Expected at least one rerender");
},
);
}
#[test]
fn test_add_first_ascending_on_empty_list() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::AddFirst(ascending()));
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 1);
assert_eq!(sorts[0].column, 0);
assert_eq!(sorts[0].sort.direction, SortDirection::Ascending);
}
_ => panic!("Unexpected generation"),
},
|proxy| assert_eq!(proxy.generation, 1),
);
}
#[test]
fn test_add_first_replaces_existing_sort_on_same_column() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::AddFirst(ascending()));
assert_eq!(context.sorts.read().len(), 1);
context.request_sort(0, SortGesture::AddFirst(descending()));
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 1);
assert_eq!(sorts[0].column, 0);
assert_eq!(sorts[0].sort.direction, SortDirection::Descending);
}
1 | 2 => {
}
_ => panic!("Unexpected generation: {}", proxy.generation),
},
|proxy| {
assert!(proxy.generation >= 1, "Expected at least one rerender");
},
);
}
#[test]
fn test_add_first_with_multiple_columns_sorted() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(1, SortGesture::AddFirst(ascending()));
context.request_sort(2, SortGesture::AddLast(descending()));
context.request_sort(0, SortGesture::AddFirst(ascending()));
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 3);
assert_eq!(sorts[0].column, 0);
assert_eq!(sorts[1].column, 1);
assert_eq!(sorts[2].column, 2);
}
_ => panic!("Unexpected generation"),
},
|proxy| assert_eq!(proxy.generation, 1),
);
}
#[test]
fn test_add_first_moves_column_from_last_to_first() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::AddFirst(ascending()));
context.request_sort(1, SortGesture::AddLast(ascending()));
context.request_sort(2, SortGesture::AddLast(ascending()));
context.request_sort(2, SortGesture::AddFirst(descending()));
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 3);
assert_eq!(sorts[0].column, 2);
assert_eq!(sorts[0].sort.direction, SortDirection::Descending);
assert_eq!(sorts[1].column, 0);
assert_eq!(sorts[2].column, 1);
}
_ => panic!("Unexpected generation"),
},
|proxy| assert_eq!(proxy.generation, 1),
);
}
#[test]
fn test_add_last_ascending_on_empty_list() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::AddLast(ascending()));
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 1);
assert_eq!(sorts[0].column, 0);
assert_eq!(sorts[0].sort.direction, SortDirection::Ascending);
}
_ => panic!("Unexpected generation"),
},
|proxy| assert_eq!(proxy.generation, 1),
);
}
#[test]
fn test_add_last_replaces_existing_sort_on_same_column() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::AddLast(ascending()));
assert_eq!(context.sorts.read().len(), 1);
context.request_sort(0, SortGesture::AddLast(descending()));
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 1);
assert_eq!(sorts[0].column, 0);
assert_eq!(sorts[0].sort.direction, SortDirection::Descending);
}
1 | 2 => {
}
_ => panic!("Unexpected generation: {}", proxy.generation),
},
|proxy| {
assert!(proxy.generation >= 1, "Expected at least one rerender");
},
);
}
#[test]
fn test_add_last_with_multiple_columns_sorted() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::AddFirst(ascending()));
context.request_sort(1, SortGesture::AddLast(ascending()));
context.request_sort(2, SortGesture::AddLast(descending()));
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 3);
assert_eq!(sorts[0].column, 0);
assert_eq!(sorts[1].column, 1);
assert_eq!(sorts[2].column, 2);
assert_eq!(sorts[2].sort.direction, SortDirection::Descending);
}
_ => panic!("Unexpected generation"),
},
|proxy| assert_eq!(proxy.generation, 1),
);
}
#[test]
fn test_add_last_moves_column_from_first_to_last() {
test_hook(
|| TableContextData {
sorts: use_signal(Vec::new),
column_names: use_signal(|| {
vec![
"Column 0".to_string(),
"Column 1".to_string(),
"Column 2".to_string(),
]
}),
column_order: use_signal(|| ColumnOrder::new(3)),
},
|context, proxy| match proxy.generation {
0 => {
context.request_sort(0, SortGesture::AddFirst(ascending()));
context.request_sort(1, SortGesture::AddLast(ascending()));
context.request_sort(2, SortGesture::AddLast(ascending()));
context.request_sort(0, SortGesture::AddLast(descending()));
let sorts = context.sorts.read();
assert_eq!(sorts.len(), 3);
assert_eq!(sorts[0].column, 1);
assert_eq!(sorts[1].column, 2);
assert_eq!(sorts[2].column, 0);
assert_eq!(sorts[2].sort.direction, SortDirection::Descending);
}
_ => panic!("Unexpected generation"),
},
|proxy| assert_eq!(proxy.generation, 1),
);
}