feat(command): update context and tests for registry

Update CmdContext to include registry reference.
Adjust make_ctx function signature to accept registry.
Update all tests to pass the default registry.
Ensure test contexts are constructed with registry.

Co-Authored-By: fiddlerwoaroof/git-smart-commit (bartowski/nvidia_Nemotron-Cascade-2-30B-A3B-GGUF)
This commit is contained in:
Edward Langley
2026-04-07 00:34:38 -07:00
parent 406debbc7c
commit 85ab5a3a54

View File

@ -13,6 +13,7 @@ use crate::view::{Axis, AxisEntry, GridLayout};
pub struct CmdContext<'a> {
pub model: &'a Model,
pub layout: &'a GridLayout,
pub registry: &'a CmdRegistry,
pub mode: &'a AppMode,
pub selected: (usize, usize),
pub row_offset: usize,
@ -2849,12 +2850,13 @@ mod tests {
GridLayout::new(model, model.active_view())
}
fn make_ctx<'a>(model: &'a Model, layout: &'a GridLayout) -> CmdContext<'a> {
fn make_ctx<'a>(model: &'a Model, layout: &'a GridLayout, registry: &'a CmdRegistry) -> CmdContext<'a> {
let view = model.active_view();
let (sr, sc) = view.selected;
CmdContext {
model,
layout,
registry,
mode: &AppMode::Normal,
selected: view.selected,
row_offset: view.row_offset,
@ -2902,7 +2904,7 @@ mod tests {
fn move_selection_down_produces_set_selected() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = Move {
kind: MoveKind::Relative(1, 0),
cursor: CursorState::from_ctx(&ctx),
@ -2917,7 +2919,7 @@ mod tests {
fn move_selection_clamps_to_bounds() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
// Try to move way past the end
let cmd = Move {
kind: MoveKind::Relative(100, 100),
@ -2934,7 +2936,7 @@ mod tests {
let mut bufs = HashMap::new();
bufs.insert("command".to_string(), "q".to_string());
let layout = make_layout(&m);
let mut ctx = make_ctx(&m, &layout);
let reg = default_registry(); let mut ctx = make_ctx(&m, &layout, &reg);
ctx.dirty = true;
ctx.buffers = &bufs;
let cmd = ExecuteCommand;
@ -2949,7 +2951,7 @@ mod tests {
let mut bufs = HashMap::new();
bufs.insert("command".to_string(), "q".to_string());
let layout = make_layout(&m);
let mut ctx = make_ctx(&m, &layout);
let reg = default_registry(); let mut ctx = make_ctx(&m, &layout, &reg);
ctx.buffers = &bufs;
let cmd = ExecuteCommand;
let effects = cmd.execute(&ctx);
@ -2969,7 +2971,7 @@ mod tests {
]);
m.set_cell(key, CellValue::Number(42.0));
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = ClearCellCommand {
key: ctx.cell_key().clone().unwrap(),
};
@ -2986,7 +2988,7 @@ mod tests {
]);
m.set_cell(key, CellValue::Number(99.0));
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = YankCell {
key: ctx.cell_key().clone().unwrap(),
};
@ -2998,7 +3000,7 @@ mod tests {
fn toggle_panel_open_and_focus() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = TogglePanelAndFocus {
panel: effect::Panel::Formula,
open: true,
@ -3017,7 +3019,7 @@ mod tests {
fn toggle_panel_close_and_unfocus() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = TogglePanelAndFocus {
panel: effect::Panel::Formula,
open: false,
@ -3031,7 +3033,7 @@ mod tests {
fn enter_advance_moves_down() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = EnterAdvance {
cursor: CursorState::from_ctx(&ctx),
};
@ -3048,7 +3050,7 @@ mod tests {
fn search_navigate_with_empty_query_returns_nothing() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = SearchNavigate(true);
let effects = cmd.execute(&ctx);
assert!(effects.is_empty());
@ -3058,7 +3060,7 @@ mod tests {
fn enter_edit_mode_produces_editing_mode() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = EnterEditMode {
initial_value: String::new(),
};
@ -3072,7 +3074,7 @@ mod tests {
fn enter_tile_select_with_categories() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = EnterTileSelect;
let effects = cmd.execute(&ctx);
assert_eq!(effects.len(), 2); // SetTileCatIdx + ChangeMode
@ -3089,7 +3091,7 @@ mod tests {
// select always has something to operate on.
let m = Model::new("Empty");
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = EnterTileSelect;
let effects = cmd.execute(&ctx);
assert_eq!(effects.len(), 2); // SetTileCatIdx + ChangeMode
@ -3099,7 +3101,7 @@ mod tests {
fn toggle_group_under_cursor_returns_empty_without_groups() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = ToggleGroupAtCursor { is_row: true };
let effects = cmd.execute(&ctx);
// No groups defined, so nothing to toggle
@ -3110,7 +3112,7 @@ mod tests {
fn search_or_category_add_without_query_opens_category_add() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = SearchOrCategoryAdd;
let effects = cmd.execute(&ctx);
assert_eq!(effects.len(), 2); // SetPanelOpen + ChangeMode
@ -3125,7 +3127,7 @@ mod tests {
fn cycle_panel_focus_with_no_panels_open() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = CyclePanelFocus {
formula_open: false,
category_open: false,
@ -3139,7 +3141,7 @@ mod tests {
fn cycle_panel_focus_with_formula_panel_open() {
let m = two_cat_model();
let layout = make_layout(&m);
let mut ctx = make_ctx(&m, &layout);
let reg = default_registry(); let mut ctx = make_ctx(&m, &layout, &reg);
ctx.formula_panel_open = true;
let cmd = CyclePanelFocus {
formula_open: true,
@ -3167,7 +3169,7 @@ mod tests {
fn law_move_to_start_idempotent() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = Move {
kind: MoveKind::ToStart(true),
cursor: CursorState::from_ctx(&ctx),
@ -3193,7 +3195,7 @@ mod tests {
fn law_toggle_group_involution() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = ToggleGroupAtCursor { is_row: true };
let first = effects_debug(&cmd.execute(&ctx));
let second = effects_debug(&cmd.execute(&ctx));
@ -3209,7 +3211,7 @@ mod tests {
fn law_sequence_associativity() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let mk_a = || {
Move {
@ -3259,7 +3261,7 @@ mod tests {
fn law_move_to_end_reaches_last_col() {
let m = two_cat_model();
let layout = make_layout(&m);
let ctx = make_ctx(&m, &layout);
let reg = default_registry(); let ctx = make_ctx(&m, &layout, &reg);
let cmd = Move {
kind: MoveKind::ToEnd(false),
cursor: CursorState::from_ctx(&ctx),