aboutsummaryrefslogtreecommitdiff
path: root/src/server/headless.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-21 01:55:59 +0300
committerCan Celik <ogulcancelik@gmail.com>2026-05-21 03:10:52 +0300
commit7515695a1996e9b406a3cf1eef43208c6c248929 (patch)
treec0fd480d20b17a0309fad7a1933aa64d043dafc3 /src/server/headless.rs
parent6172275252f5f724d874163462f5394800f8d55b (diff)
fix: keep cjk ime agent allow-list safe
refs #149
Diffstat (limited to 'src/server/headless.rs')
-rw-r--r--src/server/headless.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/server/headless.rs b/src/server/headless.rs
index f56dbdeb..539892e0 100644
--- a/src/server/headless.rs
+++ b/src/server/headless.rs
@@ -2804,6 +2804,7 @@ mod tests {
state.reveal_hidden_cursor_for_cjk_ime = true;
// Filter only Claude, but the test pane has no detected agent, so the
// reveal must not apply.
+ state.cjk_ime_agent_filter_configured = true;
state.cjk_ime_agents = vec![crate::detect::Agent::Claude];
let mut ws = crate::workspace::Workspace::test_new("test");
let pane_id = ws.tabs[0].root_pane;
@@ -2828,6 +2829,34 @@ mod tests {
}
#[tokio::test]
+ async fn virtual_render_skips_reveal_when_agent_filter_has_no_valid_entries() {
+ let mut state = AppState::test_new();
+ state.reveal_hidden_cursor_for_cjk_ime = true;
+ state.cjk_ime_agent_filter_configured = true;
+ state.cjk_ime_agents = Vec::new();
+ let mut ws = crate::workspace::Workspace::test_new("test");
+ let pane_id = ws.tabs[0].root_pane;
+ ws.insert_test_runtime(
+ pane_id,
+ crate::terminal::TerminalRuntime::test_with_screen_bytes(20, 5, b"left\x1b[?25l"),
+ );
+
+ state.workspaces = vec![ws];
+ state.active = Some(0);
+ state.selected = 0;
+ state.mode = crate::app::Mode::Terminal;
+
+ let area = Rect::new(0, 0, 80, 24);
+ let (_buffer, cursor) =
+ crate::server::render_stream::render_virtual(&mut state, area, true);
+
+ assert!(
+ cursor.as_ref().is_none_or(|cursor| !cursor.visible),
+ "agent filter with no valid entries should suppress reveal; got {cursor:?}",
+ );
+ }
+
+ #[tokio::test]
async fn virtual_render_omits_focused_pane_cursor_while_mobile_switcher_open() {
let mut state = AppState::test_new();
let mut ws = crate::workspace::Workspace::test_new("test");