Panics · P13 Lists: a directory selection gone from its entries picks none

This commit is contained in:
ZacharyZhang-NY committed 2026-10-06 17:41:53 -04:00
1 parent 4a05c12889
commit f2fc17118c
2 files changed
+23 -7

No files matched your search

+21 -6
View File
@@ -152,11 +152,17 @@ impl DirectoryListing {
/// The entry picked, by name.
pub fn selected(mut self, name: impl Into<SharedString>) -> Self {
let name = name.into();
assert!(
self.entries.iter().any(|entry| entry.name == name),
"no entry {name}"
);
self.selected = Some(name);
self.selected = self
.entries
.iter()
.any(|entry| entry.name == name)
.then(|| name.clone());
if self.selected.is_none() {
log::error!(
"directory listing {:?}: no entry {name}; none picked",
self.id
);
}
self
}
@@ -350,7 +356,16 @@ impl RenderOnce for DirectoryListing {
mod tests {
use jiff::Timestamp;
use super::{Column, DirEntry, sorted};
use super::{Column, DirEntry, DirectoryListing, sorted};
#[test]
fn a_selected_name_gone_from_the_entries_picks_none() {
let entries = || [DirEntry::file("a.txt", 1, Timestamp::UNIX_EPOCH)];
let gone = DirectoryListing::new("dir", ["home"], entries()).selected("b.txt");
assert_eq!(gone.selected, None);
let kept = DirectoryListing::new("dir", ["home"], entries()).selected("a.txt");
assert_eq!(kept.selected.as_deref(), Some("a.txt"));
}
fn names(entries: Vec<DirEntry>) -> Vec<String> {
entries