From f834f55c16b38d86fbc243b2d7719667503f4b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Fri, 9 Oct 2026 10:50:01 -0400 Subject: [PATCH] Toaster::shown: the titles and severities on show, for owners and tests --- src/feedback/tests/mod.rs | 12 ++++++++++++ src/feedback/toast.rs | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/src/feedback/tests/mod.rs b/src/feedback/tests/mod.rs index 2135683..f7eb9a3 100644 --- a/src/feedback/tests/mod.rs +++ b/src/feedback/tests/mod.rs @@ -142,6 +142,18 @@ fn a_toast_folds_away_after_its_time(cx: &mut TestAppContext) { ); } +#[gpui::test] +fn the_owner_reads_what_is_shown(cx: &mut TestAppContext) { + let (view, cx) = desk(cx); + let first = push(&view, Toast::new("Saved"), cx); + push(&view, Toast::new("Denied").severity(Severity::Danger), cx); + let toaster = view.read_with(cx, |desk, _| desk.toaster.clone()); + let shown = |cx: &mut VisualTestContext| toaster.read_with(cx, |toaster, _| toaster.shown()); + assert_eq!(shown(cx), [("Saved".into(), None), ("Denied".into(), Some(Severity::Danger))]); + toaster.update(cx, |toaster, cx| toaster.dismiss(first, cx)); + assert_eq!(shown(cx), [("Denied".into(), Some(Severity::Danger))], "a leaving toast is not shown"); +} + #[gpui::test] fn the_pointer_on_the_stack_holds_the_clock(cx: &mut TestAppContext) { let (view, cx) = desk(cx); diff --git a/src/feedback/toast.rs b/src/feedback/toast.rs index 722f983..0e8b103 100644 --- a/src/feedback/toast.rs +++ b/src/feedback/toast.rs @@ -125,6 +125,12 @@ impl Toaster { id } + /// The titles and severities on show, oldest first. + pub fn shown(&self) -> Vec<(SharedString, Option)> { + let staying = self.live.iter().filter(|live| !live.leaving); + staying.map(|live| (live.toast.title.clone(), live.toast.severity)).collect() + } + /// Sends a toast away: it fades and folds, then leaves the stack. pub fn dismiss(&mut self, id: u64, cx: &mut Context) { let Some(live) = self