Test: add unit tests co-located with the code they cover
- model/cell.rs: CellKey (sorting, get, with, without, matches_partial, display) and DataStore (set/get, overwrite, empty-removes-key, sum_matching, matching_cells, text exclusion) - model/category.rs: item ids, deduplication, group assignment, top_level_groups, item_index insertion order - formula/parser.rs: subtraction, WHERE clause, SUM/AVG, IF, numeric literal, chained arithmetic, error on missing = - view/view.rs: auto-axis assignment, set_axis, categories_on, page_selection, group collapse toggle, hide/show, cycle_axis (all transitions + scroll/selection reset) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@ -119,3 +119,76 @@ impl Category {
|
||||
seen
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::{Category, Group};
|
||||
|
||||
fn cat() -> Category {
|
||||
Category::new(0, "Region")
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_item_returns_sequential_ids() {
|
||||
let mut c = cat();
|
||||
let id0 = c.add_item("East");
|
||||
let id1 = c.add_item("West");
|
||||
assert_eq!(id0, 0);
|
||||
assert_eq!(id1, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_item_duplicate_returns_same_id() {
|
||||
let mut c = cat();
|
||||
let id1 = c.add_item("East");
|
||||
let id2 = c.add_item("East");
|
||||
assert_eq!(id1, id2);
|
||||
assert_eq!(c.items.len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_item_in_group_sets_group() {
|
||||
let mut c = cat();
|
||||
c.add_item_in_group("Jan", "Q1");
|
||||
let item = c.item_by_name("Jan").unwrap();
|
||||
assert_eq!(item.group.as_deref(), Some("Q1"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_item_in_group_duplicate_returns_same_id() {
|
||||
let mut c = cat();
|
||||
let id1 = c.add_item_in_group("Jan", "Q1");
|
||||
let id2 = c.add_item_in_group("Jan", "Q1");
|
||||
assert_eq!(id1, id2);
|
||||
assert_eq!(c.items.len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_group_deduplicates() {
|
||||
let mut c = cat();
|
||||
c.add_group(Group::new("Q1"));
|
||||
c.add_group(Group::new("Q1"));
|
||||
assert_eq!(c.groups.len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn top_level_groups_returns_unique_groups_in_insertion_order() {
|
||||
let mut c = cat();
|
||||
c.add_item_in_group("Jan", "Q1");
|
||||
c.add_item_in_group("Feb", "Q1");
|
||||
c.add_item_in_group("Apr", "Q2");
|
||||
let groups = c.top_level_groups();
|
||||
assert_eq!(groups, vec!["Q1", "Q2"]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn item_index_reflects_insertion_order() {
|
||||
let mut c = cat();
|
||||
c.add_item("East");
|
||||
c.add_item("West");
|
||||
c.add_item("North");
|
||||
assert_eq!(c.item_index("East"), Some(0));
|
||||
assert_eq!(c.item_index("West"), Some(1));
|
||||
assert_eq!(c.item_index("North"), Some(2));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user