diff options
Diffstat (limited to 'src/ui/tab_surface.rs')
| -rw-r--r-- | src/ui/tab_surface.rs | 108 |
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" - ); - } } |
