aboutsummaryrefslogtreecommitdiff
path: root/src/server/headless.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/headless.rs')
-rw-r--r--src/server/headless.rs64
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]