Initial public release of Warp.

Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
David Stern
2026-04-28 08:43:33 -05:00
commit 0dbd3d567a
4982 changed files with 1431549 additions and 0 deletions
+125
View File
@@ -0,0 +1,125 @@
//! Module for test-only convenience methods on `TerminalView`.
use warpui::ModelHandle;
use crate::terminal::find::TerminalFindModel;
cfg_if::cfg_if! {
if #[cfg(test)] {
use std::sync::Arc;
use parking_lot::FairMutex;
use warpui::{ViewContext};
use crate::{
ai::blocklist::SerializedBlockListItem, pane_group::TerminalViewResources,
resource_center::TipsCompleted,
};
use crate::terminal::model::session::Sessions;
use crate::terminal::model_events::ModelEventDispatcher;
use crate::terminal::view::WARP_PROMPT_HEIGHT_LINES;
use crate::terminal::{SizeInfo, TerminalModel};
use crate::context_chips::prompt_type::PromptType;
use crate::terminal::color::List;
}
}
use super::TerminalView;
impl TerminalView {
#[cfg(test)]
pub fn new_for_test(
tips_model: ModelHandle<TipsCompleted>,
restored_blocks: Option<&[SerializedBlockListItem]>,
ctx: &mut ViewContext<Self>,
) -> Self {
use pathfinder_geometry::vector::vec2f;
use warpui::units::{IntoPixels as _, Pixels};
use crate::{
server::server_api::ServerApiProvider,
terminal::{
event_listener::ChannelEventListener, model::block::BlockSize, BlockPadding,
},
themes::default_themes::dark_theme,
};
let size_info = SizeInfo::new(
vec2f(7., 10.5),
1.0.into_pixels(),
1.0.into_pixels(),
Pixels::zero(),
Pixels::zero(),
);
let (wakeups_tx, wakeups_rx) = async_channel::unbounded();
let (events_tx, events_rx) = async_channel::unbounded();
let event_proxy = ChannelEventListener::builder_for_test()
.with_terminal_events_tx(events_tx)
.with_wakeups_tx(wakeups_tx)
.build();
let colors = List::from(&dark_theme().into());
let block_padding = BlockPadding {
padding_top: 0.5,
command_padding_top: 0.5,
middle: 0.5,
bottom: 0.5,
};
let max_block_scroll_limit = 1000;
let sizes = BlockSize {
block_padding,
size: size_info,
max_block_scroll_limit,
warp_prompt_height_lines: WARP_PROMPT_HEIGHT_LINES,
};
let server_api = ServerApiProvider::new_for_test().get();
let terminal_view_resources = TerminalViewResources {
tips_completed: tips_model,
server_api: server_api.clone(),
model_event_sender: None,
};
let model = Arc::new(FairMutex::new(TerminalModel::new_for_test(
sizes,
colors,
event_proxy,
ctx.background_executor().clone(),
false,
restored_blocks,
false, /* honor_ps1 */
false, /* is_inverted */
None, /* startup_directory */
)));
let sessions = ctx.add_model(|_| Sessions::new_for_test());
let model_events =
ctx.add_model(|ctx| ModelEventDispatcher::new(events_rx, sessions.clone(), ctx));
let prompt_type =
ctx.add_model(|ctx| PromptType::new_dynamic_from_sessions(sessions.clone(), ctx));
Self::new(
terminal_view_resources,
wakeups_rx,
model_events,
model,
sessions,
size_info,
colors,
None,
prompt_type,
None,
None, // conversation_restoration - not used for test
None, // inactive_pty_reads_rx - not used for test
ctx,
)
}
pub fn find_model(&self) -> &ModelHandle<TerminalFindModel> {
&self.find_model
}
#[cfg(test)]
pub fn rich_content_view_count_for_test(&self) -> usize {
self.rich_content_views.len()
}
}