Bring back zed.rs tests (#3907)

At present 3 tests still fail; 2 are related to keymap issues that (I
believe) @maxbrunsfeld is working on. The other one
(`test_open_paths_action`) I'll look into. edit: done
This PR also fixes workspace unregistration, as we've put the code to do
that behind `debug_assert`
(https://github.com/zed-industries/zed/pull/3907/files#diff-041673bbd1947a35d45945636c0055429dfc8b5985faf93f8a8a960c9ad31e28L649).
Release Notes:
- N/A
This commit is contained in:
Piotr Osiewicz 2024-01-08 12:29:54 +01:00 committed by GitHub
parent d475f1373a
commit 53564fb269
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 2132 additions and 1869 deletions

View file

@ -532,6 +532,33 @@ impl<'a> VisualTestContext {
}
self.background_executor.run_until_parked();
}
/// Returns true if the window was closed.
pub fn simulate_close(&mut self) -> bool {
let handler = self
.cx
.update_window(self.window, |_, cx| {
cx.window
.platform_window
.as_test()
.unwrap()
.0
.lock()
.should_close_handler
.take()
})
.unwrap();
if let Some(mut handler) = handler {
let should_close = handler();
self.cx
.update_window(self.window, |_, cx| {
cx.window.platform_window.on_should_close(handler);
})
.unwrap();
should_close
} else {
false
}
}
}
impl Context for VisualTestContext {

View file

@ -266,7 +266,7 @@ impl Platform for TestPlatform {
}
fn local_timezone(&self) -> time::UtcOffset {
unimplemented!()
time::UtcOffset::UTC
}
fn path_for_auxiliary_executable(&self, _name: &str) -> Result<std::path::PathBuf> {

View file

@ -18,7 +18,7 @@ pub struct TestWindowState {
pub(crate) edited: bool,
platform: Weak<TestPlatform>,
sprite_atlas: Arc<dyn PlatformAtlas>,
pub(crate) should_close_handler: Option<Box<dyn FnMut() -> bool>>,
input_callback: Option<Box<dyn FnMut(InputEvent) -> bool>>,
active_status_change_callback: Option<Box<dyn FnMut(bool)>>,
resize_callback: Option<Box<dyn FnMut(Size<Pixels>, f32)>>,
@ -44,7 +44,7 @@ impl TestWindow {
sprite_atlas: Arc::new(TestAtlas::new()),
title: Default::default(),
edited: false,
should_close_handler: None,
input_callback: None,
active_status_change_callback: None,
resize_callback: None,
@ -117,6 +117,9 @@ impl TestWindow {
self.0.lock().input_handler = Some(input_handler);
}
pub fn edited(&self) -> bool {
self.0.lock().edited
}
}
impl PlatformWindow for TestWindow {
@ -235,8 +238,8 @@ impl PlatformWindow for TestWindow {
self.0.lock().moved_callback = Some(callback)
}
fn on_should_close(&self, _callback: Box<dyn FnMut() -> bool>) {
unimplemented!()
fn on_should_close(&self, callback: Box<dyn FnMut() -> bool>) {
self.0.lock().should_close_handler = Some(callback);
}
fn on_close(&self, _callback: Box<dyn FnOnce()>) {

View file

@ -6,7 +6,7 @@ use crate::{
};
use anyhow::{Context, Result};
use std::{
any::TypeId,
any::{type_name, TypeId},
fmt,
hash::{Hash, Hasher},
};
@ -104,6 +104,14 @@ impl<V> Clone for View<V> {
}
}
impl<T> std::fmt::Debug for View<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct(&format!("View<{}>", type_name::<T>()))
.field("entity_id", &self.model.entity_id)
.finish_non_exhaustive()
}
}
impl<V> Hash for View<V> {
fn hash<H: Hasher>(&self, state: &mut H) {
self.model.hash(state);