refactor: Pre-phase-6 review cleanup.
- Propagate serialization errors in output path instead of unwrap_or_default() silently writing blank lines (main.rs, handler.rs). - Cap selection undo stack at 50 entries to bound memory on heavy multi-select usage (menu.rs). - Break TUI event loop on dead action channel instead of silently dropping keypresses (lib.rs). - Log dropped handler hook events when channel is full (handler.rs). - Reject menu and headless DSL tests that have no assertions at compile time (codegen.rs). - Document filter_text ownership design in TUI and exec/handler error asymmetry in CompositeHandler.
This commit is contained in:
@@ -141,6 +141,16 @@ fn gen_headless(case: &TestCase, fixtures: &Fixtures) -> syn::Result<TokenStream
|
||||
});
|
||||
}
|
||||
|
||||
if asserts.is_empty() {
|
||||
return Err(syn::Error::new(
|
||||
case.name.span(),
|
||||
format!(
|
||||
"headless test '{}' has no assertions (expected stdout, stderr contains, or exit)",
|
||||
case.name
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
Ok(quote! {
|
||||
#[test]
|
||||
fn #test_name() {
|
||||
@@ -364,8 +374,13 @@ fn gen_menu(case: &TestCase, fixtures: &Fixtures) -> syn::Result<TokenStream> {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// No assertion on result. Probably an error, but let it compile.
|
||||
quote! {}
|
||||
return Err(syn::Error::new(
|
||||
case.name.span(),
|
||||
format!(
|
||||
"menu test '{}' has no result assertion (expected selected, selected_items, or cancelled)",
|
||||
case.name
|
||||
),
|
||||
));
|
||||
};
|
||||
|
||||
// If test expects cancellation via sender drop (no cancel action, no confirm),
|
||||
|
||||
Reference in New Issue
Block a user