diff --git a/cli/src/native/snapshot.rs b/cli/src/native/snapshot.rs index 77c554f..02db790 100644 --- a/cli/src/native/snapshot.rs +++ b/cli/src/native/snapshot.rs @@ -1030,7 +1030,7 @@ fn compact_tree(tree: &str, interactive: bool) -> String { let mut keep = vec![false; lines.len()]; for (i, line) in lines.iter().enumerate() { - if line.contains("[ref=") || line.contains(": ") { + if line.contains("ref=") || line.contains(": ") { keep[i] = true; // Mark ancestors let my_indent = count_indent(line); @@ -1200,6 +1200,26 @@ mod tests { assert!(result.contains("Hello")); } + #[test] + fn test_compact_tree_radio_checkbox() { + // Radio/checkbox lines have attributes before ref (e.g. [checked=false, ref=e1]) + // so "ref=" appears without a leading "[" — compact_tree must still keep them. + let tree = "- form\n - radio \"Single unit\" [checked=false, ref=e1]\n - checkbox \"I agree\" [checked=false, ref=e2]\n - button \"Submit\" [ref=e3]\n"; + let result = compact_tree(tree, true); + assert!( + result.contains("radio \"Single unit\""), + "radio should be kept" + ); + assert!( + result.contains("checkbox \"I agree\""), + "checkbox should be kept" + ); + assert!( + result.contains("button \"Submit\""), + "button should be kept" + ); + } + #[test] fn test_compact_tree_empty_interactive() { let result = compact_tree("- generic\n", true);