in src/app.rs [452:503]
fn test_next_program() {
let mut app = App::new();
let prog_1 = BpfProgram {
id: 1,
bpf_type: "test".to_string(),
name: "test".to_string(),
prev_runtime_ns: 100,
run_time_ns: 200,
prev_run_cnt: 1,
run_cnt: 2,
instant: Instant::now(),
period_ns: 0,
processes: vec![],
};
let prog_2 = BpfProgram {
id: 2,
bpf_type: "test".to_string(),
name: "test".to_string(),
prev_runtime_ns: 100,
run_time_ns: 200,
prev_run_cnt: 1,
run_cnt: 2,
instant: Instant::now(),
period_ns: 0,
processes: vec![],
};
// Add some dummy BpfPrograms to the items vector
app.items.lock().unwrap().push(prog_1.clone());
app.items.lock().unwrap().push(prog_2.clone());
// Initially no item is selected
assert_eq!(app.selected_program(), None, "expected no program");
assert_eq!(app.vertical_scroll, 0, "expected init with 0, got: {}", app.vertical_scroll);
// After calling next, the first item should be selected
app.next_program();
assert_eq!(app.selected_program(), Some(prog_1.clone()), "expected prog_1");
assert_eq!(app.vertical_scroll, 0, "expected scroll 0, got: {}", app.vertical_scroll);
// After calling next again, the second item should be selected
app.next_program();
assert_eq!(app.selected_program(), Some(prog_2.clone()), "expected prog_2");
assert_eq!(app.vertical_scroll, 1, "expected scroll 1, got: {}", app.vertical_scroll);
// After calling next again, the second item should still be selected without wrapping
app.next_program();
assert_eq!(app.selected_program(), Some(prog_2.clone()), "expected prog_2; no wrap around");
assert_eq!(app.vertical_scroll, 1, "expected scroll 1, got: {}", app.vertical_scroll);
}