From 8a730912c2ac9a4eaf4ae936cc05d64e00c50c07 Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Sun, 25 Oct 2026 07:02:08 +0000 Subject: [PATCH] Keep auto-advance when transition.timing gets an invalid `after` Found while testing crates/engine/src/cmd/transition.rs:112-115 (timing) Co-Authored-By: Claude Haiku 5.5 Co-Authored-By: Claude Sonnet 5.5 --- crates/engine/src/cmd/transition.rs | 6 +++++- crates/engine/src/tests.rs | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/crates/engine/src/cmd/transition.rs b/crates/engine/src/cmd/transition.rs index 327298c6..ec66482b 100644 --- a/crates/engine/src/cmd/transition.rs +++ b/crates/engine/src/cmd/transition.rs @@ -111,7 +111,11 @@ fn timing(s: &mut Session, p: &Value) -> Result { } match p.get("after") { Some(Value::Null) => t.advance_after_ms = None, - Some(v) => t.advance_after_ms = v.as_u64().map(|x| x.min(86_400_000) as u32), + Some(v) => { + if let Some(x) = v.as_u64() { + t.advance_after_ms = Some(x.min(86_400_000) as u32); + } + } None => {} } } diff --git a/crates/engine/src/tests.rs b/crates/engine/src/tests.rs index 770d341e..8dd52b59 100644 --- a/crates/engine/src/tests.rs +++ b/crates/engine/src/tests.rs @@ -5406,3 +5406,17 @@ fn slide_hide_and_layout_reject_invalid_index() { } assert!(s.doc().unwrap().doc.slides.iter().all(|x| !x.hidden)); } + +#[test] +fn transition_timing_invalid_after_keeps_value() { + let mut s = session(); + let after = |s: &Session| s.doc().unwrap().doc.slides[0].transition.as_ref().and_then(|t| t.advance_after_ms); + s.execute("transition.timing", &json!({"after": 5000})).unwrap(); + assert_eq!(after(&s), Some(5000)); + for bad in [json!(-5), json!(1.5), json!("abc")] { + let _ = s.execute("transition.timing", &json!({"after": bad})); + assert_eq!(after(&s), Some(5000), "after:{bad} must not clear the auto-advance"); + } + s.execute("transition.timing", &json!({"after": null})).unwrap(); + assert_eq!(after(&s), None); +}