Tests: malformed id cases check and restore isolation mode and the shown mask

malformed_ids_are_refused_by_commands_that_default_to_the_selection put back
the document, the selection and the undo history after a case that changed
them, but not isolation mode or the opacity mask view. If object.isolate
entered isolation mode while refusing a bad id, the test did not report it,
and the later transparency.editOpacityMask and transparency.viewOpacityMask
cases failed with "exit isolation mode first" instead.

Each case now also compares isolation mode and the shown mask before and
after the command, and puts them back when they changed, so a failure is
reported against the command that caused it.
This commit is contained in:
dotCooCoo
2026-11-11 13:20:45 -08:00
parent b08e421445
commit 5ce2337715
+7 -5
View File
@@ -4245,8 +4245,8 @@ fn given_targets_are_used_as_given_and_range_style_takes_the_selected_type() {
/// #785: commands whose `ids` or `id` the shared check doesn't read (it reads `id` where it stands
/// for `ids` of one) refuse one that isn't an object id. They don't act on the selection, the
/// current layer or a new object instead, and the document, the selection and the undo history
/// stay as they are.
/// current layer or a new object instead, and the document, the selection, the undo history,
/// isolation mode and the shown opacity mask stay as they are.
#[test]
fn malformed_ids_are_refused_by_commands_that_default_to_the_selection() {
let mut s = session();
@@ -4294,17 +4294,19 @@ fn malformed_ids_are_refused_by_commands_that_default_to_the_selection() {
if let Some(p) = p.as_object_mut() {
p.insert(key.into(), bad.clone());
}
let (doc, selection, undo) = (s.doc().unwrap().doc.clone(), s.doc().unwrap().selection.clone(), s.doc().unwrap().history.undo.len());
let st = s.doc().unwrap();
let (doc, selection, undo, modes) = (st.doc.clone(), st.selection.clone(), st.history.undo.len(), (st.isolation, st.mask_view));
let r = s.execute(cmd, &p);
let named = |e: &str| e.contains("object id") || e.contains("step reference") || e.contains(&format!("`{key}` must be"));
let refused = r.as_ref().err().map(|e| e.to_string()).is_some_and(|e| named(&e));
let same = s.doc().unwrap().doc == doc && s.doc().unwrap().selection == selection && s.doc().unwrap().history.undo.len() == undo;
let st = s.doc().unwrap();
let same = st.doc == doc && st.selection == selection && st.history.undo.len() == undo && (st.isolation, st.mask_view) == modes;
if !(refused && same) {
wrong.push(format!("{cmd} {p}: {r:?}, document unchanged: {same}"));
}
if !same {
let st = s.doc_mut().unwrap();
(st.doc, st.selection) = (doc, selection);
(st.doc, st.selection, (st.isolation, st.mask_view)) = (doc, selection, modes);
st.history.undo.truncate(undo);
}
}