aboutsummaryrefslogtreecommitdiff
path: root/src/ui/tab_surface.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/tab_surface.rs')
-rw-r--r--src/ui/tab_surface.rs108
1 files changed, 2 insertions, 106 deletions
diff --git a/src/ui/tab_surface.rs b/src/ui/tab_surface.rs
index 99ca9727..766c1d83 100644
--- a/src/ui/tab_surface.rs
+++ b/src/ui/tab_surface.rs
@@ -1,8 +1,7 @@
use ratatui::{layout::Rect, Frame};
use super::panes::{compute_pane_infos, render_panes, resize_tab_panes};
-use crate::app::state::ViewState;
-use crate::app::{AppState, Mode};
+use crate::app::AppState;
use crate::layout::{PaneInfo, SplitBorder};
use crate::protocol::CursorState;
use crate::terminal::TerminalRuntimeRegistry;
@@ -18,15 +17,6 @@ pub(crate) struct TabSurfaceView<'a> {
pub(crate) split_borders: &'a [SplitBorder],
}
-impl ViewState {
- pub(crate) fn tab_surface(&self) -> TabSurfaceView<'_> {
- TabSurfaceView {
- pane_infos: &self.pane_infos,
- split_borders: &self.split_borders,
- }
- }
-}
-
pub(crate) fn compute_tab_surface(
app: &AppState,
terminal_runtimes: &TerminalRuntimeRegistry,
@@ -105,10 +95,6 @@ pub(crate) fn tab_surface_cursor(
terminal_runtimes: &TerminalRuntimeRegistry,
surface: TabSurfaceView<'_>,
) -> Option<CursorState> {
- if app.mode != Mode::Terminal {
- return None;
- }
-
let ws_idx = app.active?;
let info = surface.pane_infos.iter().find(|info| info.is_focused)?;
if !app.pane_exposes_host_cursor(ws_idx, info.id) {
@@ -189,12 +175,9 @@ mod tests {
app.workspaces = vec![workspace];
app.active = Some(0);
app.selected = 0;
- app.mode = Mode::Terminal;
let full_area = Rect::new(0, 0, 106, 20);
- crate::ui::compute_view(&mut app, full_area);
- let area = app.view.terminal_area;
- assert_eq!(area, Rect::new(26, 1, 80, 19));
+ let area = full_area;
let surface = compute_tab_surface(
&app,
&TerminalRuntimeRegistry::new(),
@@ -207,7 +190,6 @@ mod tests {
app.view.terminal_area = Rect::new(9, 8, 7, 6);
app.view.pane_infos.clear();
- app.view.split_borders.clear();
let surface_view = TabSurfaceView {
pane_infos: &surface.pane_infos,
@@ -238,90 +220,4 @@ mod tests {
.any(|(_, symbol, link)| { symbol == "L" && link == uri }));
assert!(tab_surface_cursor(&app, &TerminalRuntimeRegistry::new(), surface_view,).is_some());
}
-
- fn full_app_frame(app: &mut AppState, area: Rect) -> crate::protocol::FrameData {
- let (buffer, cursor) = crate::server::render_stream::render_virtual(app, area, true);
- let hyperlinks =
- crate::server::render_stream::visible_hyperlinks(app, &TerminalRuntimeRegistry::new());
- crate::protocol::FrameData::from_ratatui_buffer_with_hyperlinks(
- &buffer,
- cursor,
- &hyperlinks,
- )
- }
-
- fn frame_digest(frame: &crate::protocol::FrameData) -> String {
- use sha2::{Digest, Sha256};
-
- let encoded = bincode::serde::encode_to_vec(frame, bincode::config::standard()).unwrap();
- format!("{:x}", Sha256::digest(encoded))
- }
-
- fn full_app_characterization_state(uri: &str) -> AppState {
- let mut workspace = Workspace::test_new("characterization");
- workspace.identity_cwd = std::path::PathBuf::from("characterization");
- workspace.cached_git_branch = None;
- workspace.cached_git_ahead_behind = None;
- workspace.cached_git_space = None;
- workspace.test_add_tab(Some("logs"));
- workspace.switch_tab(0);
- let left = workspace.tabs[0].root_pane;
- let right = workspace.test_split(Direction::Horizontal);
- workspace.insert_test_runtime(
- left,
- crate::terminal::TerminalRuntime::test_with_screen_bytes(
- 40,
- 10,
- format!("\x1b]8;;{uri}\x1b\\LINK\x1b]8;;\x1b\\").as_bytes(),
- ),
- );
- workspace.insert_test_runtime(
- right,
- crate::terminal::TerminalRuntime::test_with_screen_bytes(40, 10, b"RIGHT\r\nPANE"),
- );
-
- let mut app = AppState::test_new();
- app.workspaces = vec![workspace];
- app.active = Some(0);
- app.selected = 0;
- app.mode = Mode::Terminal;
- app
- }
-
- #[tokio::test]
- async fn desktop_full_app_semantic_frame_is_characterized() {
- let uri = "https://example.com/full-app";
- let mut app = full_app_characterization_state(uri);
- let frame = full_app_frame(&mut app, Rect::new(0, 0, 106, 20));
-
- assert_eq!((frame.width, frame.height), (106, 20));
- assert_eq!(app.view.sidebar_rect, Rect::new(0, 0, 26, 20));
- assert_eq!(app.view.tab_bar_rect, Rect::new(26, 0, 80, 1));
- assert_eq!(app.view.terminal_area, Rect::new(26, 1, 80, 19));
- assert_eq!(app.view.pane_infos.len(), 2);
- assert!(!app.view.split_borders.is_empty());
- assert!(frame.cursor.is_some());
- assert_eq!(frame.hyperlinks, vec![uri.to_owned()]);
- assert_eq!(
- frame_digest(&frame),
- "a7c21fa42305a41231c7ae254f264f6ef923f46301d8fc4cd35ab6dfdd651b6b"
- );
- }
-
- #[tokio::test]
- async fn mobile_full_app_semantic_frame_is_characterized() {
- let mut app = full_app_characterization_state("https://example.com/mobile");
- app.mode = Mode::Navigate;
- let frame = full_app_frame(&mut app, Rect::new(0, 0, 44, 20));
-
- assert_eq!((frame.width, frame.height), (44, 20));
- assert_eq!(app.view.layout, crate::app::state::ViewLayout::Mobile);
- assert_eq!(app.view.mobile_header_rect, Rect::new(0, 0, 44, 2));
- assert_eq!(app.view.terminal_area, Rect::new(0, 2, 44, 18));
- assert_eq!(frame.cursor, None);
- assert_eq!(
- frame_digest(&frame),
- "295608a66067f1e1f066c0adb3cf427e8a2d68bba8f68949fb72d464dcd8baab"
- );
- }
}