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
+65
View File
@@ -0,0 +1,65 @@
use super::{ServerExperiment, ServerExperiments};
use crate::{GlobalResourceHandles, GlobalResourceHandlesProvider};
use warpui::{App, Entity, SingletonEntity};
/// A model for testing purposes only.
///
/// We use it to demonstrate how client-side
/// models can be mutated to reflect server
/// experiment state changes.
pub struct TestModel(pub usize);
impl Entity for TestModel {
type Event = ();
}
impl SingletonEntity for TestModel {}
fn initialize_app(app: &mut App) {
app.update(crate::settings::init_and_register_user_preferences);
let global_resources = GlobalResourceHandles::mock(app);
app.add_singleton_model(|_| GlobalResourceHandlesProvider::new(global_resources));
}
#[test]
fn test_new_from_cached() {
App::test((), |mut app| async move {
initialize_app(&mut app);
let model = app.add_singleton_model(|_| TestModel(0));
let cache = vec![ServerExperiment::TestExperiment];
app.add_singleton_model(|ctx| ServerExperiments::new_from_cache(cache, ctx));
// The experiment should have been enabled.
model.read(&app, |model, _| {
assert_eq!(model.0, 1);
});
});
}
#[test]
fn test_apply_latest_state() {
App::test((), |mut app| async move {
initialize_app(&mut app);
let model = app.add_singleton_model(|_| TestModel(0));
let experiments =
app.add_singleton_model(|ctx| ServerExperiments::new_from_cache(vec![], ctx));
// Enable the experiment.
experiments.update(&mut app, |experiments, ctx| {
experiments.apply_latest_state(vec![ServerExperiment::TestExperiment], ctx);
});
model.read(&app, |model, _| {
assert_eq!(model.0, 1);
});
// Redundant experiment state should be a no-op.
experiments.update(&mut app, |experiments, ctx| {
experiments.apply_latest_state(vec![ServerExperiment::TestExperiment], ctx);
});
model.read(&app, |model, _| {
assert_eq!(model.0, 1);
});
});
}