89 lines · 3.3 KB · Rust
RawDownload
use std::sync::Arc; use warp_core::ui::appearance::Appearance;use warp_editor::render::element::VerticalExpansionBehavior;use warp_util::user_input::UserInput;use warpui::elements::ScrollbarWidth;use warpui::elements::new_scrollable::ScrollableAppearance;use warpui::platform::WindowStyle;use warpui::{App, TypedActionView, ViewHandle, WindowId}; use super::{CodeEditorRenderOptions, CodeEditorView, CodeEditorViewAction};use crate::AuthStateProvider;use crate::cloud_object::model::persistence::CloudModel;use crate::editor::InteractionState;use crate::notebooks::editor::keys::NotebookKeybindings;use crate::server::server_api::team::MockTeamClient;use crate::server::server_api::workspace::MockWorkspaceClient;use crate::settings_view::keybindings::KeybindingChangedNotifier;use crate::test_util::settings::initialize_settings_for_tests;use crate::vim_registers::VimRegisters;use crate::workspace::ActiveSession;use crate::workspace::sync_inputs::SyncedInputState;use crate::workspaces::user_workspaces::UserWorkspaces; fn initialize_editor(app: &mut App) -> (WindowId, ViewHandle<CodeEditorView>) {    initialize_settings_for_tests(app);     // Add all required singleton models for EditorView dependencies    app.add_singleton_model(|_| Appearance::mock());    app.add_singleton_model(|_| SyncedInputState::mock());    app.add_singleton_model(|_| VimRegisters::new());    app.add_singleton_model(|_| KeybindingChangedNotifier::mock());    app.add_singleton_model(|_| AuthStateProvider::new_for_test());     // Add mocks required by rich text editor (used in CommentEditor)    app.add_singleton_model(CloudModel::mock);    app.add_singleton_model(|_| ActiveSession::default());    app.add_singleton_model(NotebookKeybindings::new);     // Add UserWorkspaces mock (required by EditorView)    let team_client_mock = Arc::new(MockTeamClient::new());    let workspace_client_mock = Arc::new(MockWorkspaceClient::new());    app.add_singleton_model(|ctx| {        UserWorkspaces::mock(            team_client_mock.clone(),            workspace_client_mock.clone(),            vec![],            ctx,        )    });     let (window, editor_view) = app.add_window(WindowStyle::NotStealFocus, |ctx| {        CodeEditorView::new(            None,            None,            CodeEditorRenderOptions::new(VerticalExpansionBehavior::GrowToMaxHeight),            ctx,        )        .with_horizontal_scrollbar_appearance(ScrollableAppearance::new(ScrollbarWidth::Auto, true))    });     (window, editor_view)} #[test]fn test_interaction_state_prevents_editing() {    App::test((), |mut app| async move {        let (_window, editor_view) = initialize_editor(&mut app);         let text = editor_view.update(&mut app, |view, ctx| {            view.handle_action(&CodeEditorViewAction::UserTyped(UserInput::new("abc")), ctx);            view.text(ctx)        });         assert_eq!(text.as_str(), "abc");         // Set to be only selectable        editor_view.update(&mut app, |view, ctx| {            view.set_interaction_state(InteractionState::Selectable, ctx);        });         let text = editor_view.update(&mut app, |view, ctx| {            view.handle_action(&CodeEditorViewAction::UserTyped(UserInput::new("def")), ctx);            view.text(ctx)        });         assert_eq!(text.as_str(), "abc");    });}