diff options
Diffstat (limited to 'src/server/headless.rs')
| -rw-r--r-- | src/server/headless.rs | 64 |
1 files changed, 56 insertions, 8 deletions
diff --git a/src/server/headless.rs b/src/server/headless.rs index 9c21aa1b..c5e8ca62 100644 --- a/src/server/headless.rs +++ b/src/server/headless.rs @@ -3384,6 +3384,7 @@ impl HeadlessServer { && crate::kitty_graphics::has_visible_pane_graphics( &self.app.state, &self.app.terminal_runtimes, + self.app.state.view.tab_surface(), *cell_size, ) { @@ -3670,6 +3671,7 @@ impl HeadlessServer { .extend(crate::kitty_graphics::encode_local_pane_graphics( &self.app.state, &self.app.terminal_runtimes, + self.app.state.view.tab_surface(), cell_size, &mut next_graphics_cache, )); @@ -7145,16 +7147,28 @@ next_tab = "" ); } - #[test] - fn render_and_stream_uses_each_client_terminal_size() { + #[tokio::test] + async fn render_and_stream_uses_each_client_terminal_size() { let mut server = test_headless_server(); - server.app.state.workspaces = vec![crate::workspace::Workspace::test_new("test")]; + let mut workspace = crate::workspace::Workspace::test_new("test"); + let active_pane = workspace.tabs[0].root_pane; + let background_tab = workspace.test_add_tab(Some("background")); + let background_pane = workspace.tabs[background_tab].root_pane; + workspace.tabs[0].runtimes.insert( + active_pane, + crate::terminal::TerminalRuntime::test_with_screen_bytes(80, 24, b"active"), + ); + workspace.tabs[background_tab].runtimes.insert( + background_pane, + crate::terminal::TerminalRuntime::test_with_screen_bytes(80, 24, b"background"), + ); + server.app.state.workspaces = vec![workspace]; server.app.state.active = Some(0); server.app.state.selected = 0; server.app.state.mode = crate::app::Mode::Terminal; let (desktop_tx, _desktop_control_rx, desktop_rx) = test_client_writer(); - let (phone_tx, _phone_control_rx, phone_rx) = test_client_writer(); + let (mobile_tx, _mobile_control_rx, mobile_rx) = test_client_writer(); server.clients.insert( 1, @@ -7171,13 +7185,13 @@ next_tab = "" server.clients.insert( 2, ClientConnection::new( - (80, 24), + (44, 20), crate::kitty_graphics::HostCellSize::default(), crate::terminal_theme::TerminalTheme::default(), None, 2, RenderEncoding::SemanticFrame, - Some(phone_tx), + Some(mobile_tx), ), ); server.foreground_client_id = Some(1); @@ -7187,10 +7201,44 @@ next_tab = "" server.render_and_stream(); let desktop_frame = read_server_frame(desktop_rx.recv().expect("desktop frame")); - let phone_frame = read_server_frame(phone_rx.recv().expect("phone frame")); + let mobile_frame = read_server_frame(mobile_rx.recv().expect("mobile frame")); assert_eq!((desktop_frame.width, desktop_frame.height), (120, 40)); - assert_eq!((phone_frame.width, phone_frame.height), (80, 24)); + assert_eq!((mobile_frame.width, mobile_frame.height), (44, 20)); + let mobile_text = frame_text(&mobile_frame); + let mut mobile_rows = mobile_text.lines(); + let mobile_header = mobile_rows.by_ref().take(2).collect::<String>(); + let mobile_surface = mobile_rows.collect::<String>(); + assert!(mobile_header.contains("test"), "header: {mobile_header:?}"); + assert!( + mobile_surface.contains("active"), + "surface: {mobile_surface:?}" + ); + assert!(!mobile_surface.contains("background")); + + let foreground_terminal_area = Rect::new(26, 1, 94, 39); + let expected_pane_size = ( + foreground_terminal_area.height, + foreground_terminal_area.width.saturating_sub(1), + ); + assert_eq!( + server.app.state.view.layout, + crate::app::state::ViewLayout::Desktop + ); + assert_eq!(server.app.state.view.mobile_header_rect, Rect::default()); + assert_eq!( + server.app.state.view.terminal_area, + foreground_terminal_area + ); + assert_eq!( + server.app.state.workspaces[0].tabs[0].runtimes[&active_pane].current_size(), + expected_pane_size + ); + assert_eq!( + server.app.state.workspaces[0].tabs[background_tab].runtimes[&background_pane] + .current_size(), + expected_pane_size + ); } #[tokio::test] |
