mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-06 02:37:21 +00:00
Use run_until_parked instead of blocked in tests
This commit is contained in:
parent
3f34a8e7ec
commit
cd10ba9e06
4 changed files with 17 additions and 16 deletions
|
@ -86,7 +86,20 @@ impl BackgroundExecutor {
|
|||
Task::Spawned(task)
|
||||
}
|
||||
|
||||
#[cfg(any(test, feature = "test-support"))]
|
||||
pub fn block_test<R>(&self, future: impl Future<Output = R>) -> R {
|
||||
self.block_internal(false, future)
|
||||
}
|
||||
|
||||
pub fn block<R>(&self, future: impl Future<Output = R>) -> R {
|
||||
self.block_internal(true, future)
|
||||
}
|
||||
|
||||
pub(crate) fn block_internal<R>(
|
||||
&self,
|
||||
background_only: bool,
|
||||
future: impl Future<Output = R>,
|
||||
) -> R {
|
||||
pin_mut!(future);
|
||||
let (parker, unparker) = parking::pair();
|
||||
let awoken = Arc::new(AtomicBool::new(false));
|
||||
|
@ -102,7 +115,7 @@ impl BackgroundExecutor {
|
|||
match future.as_mut().poll(&mut cx) {
|
||||
Poll::Ready(result) => return result,
|
||||
Poll::Pending => {
|
||||
if !self.dispatcher.poll(true) {
|
||||
if !self.dispatcher.poll(background_only) {
|
||||
if awoken.swap(false, SeqCst) {
|
||||
continue;
|
||||
}
|
||||
|
@ -184,7 +197,7 @@ impl BackgroundExecutor {
|
|||
|
||||
#[cfg(any(test, feature = "test-support"))]
|
||||
pub fn simulate_random_delay(&self) -> impl Future<Output = ()> {
|
||||
self.spawn(self.dispatcher.as_test().unwrap().simulate_random_delay())
|
||||
self.dispatcher.as_test().unwrap().simulate_random_delay()
|
||||
}
|
||||
|
||||
#[cfg(any(test, feature = "test-support"))]
|
||||
|
|
|
@ -28,7 +28,7 @@ pub fn run_test(
|
|||
}
|
||||
let result = panic::catch_unwind(|| {
|
||||
let dispatcher = TestDispatcher::new(StdRng::seed_from_u64(seed));
|
||||
test_fn(dispatcher, seed);
|
||||
test_fn(dispatcher.clone(), seed);
|
||||
});
|
||||
|
||||
match result {
|
||||
|
|
|
@ -136,7 +136,7 @@ pub fn test(args: TokenStream, function: TokenStream) -> TokenStream {
|
|||
&mut |dispatcher, _seed| {
|
||||
let executor = gpui2::BackgroundExecutor::new(std::sync::Arc::new(dispatcher.clone()));
|
||||
#cx_vars
|
||||
executor.block(#inner_fn_name(#inner_fn_args));
|
||||
executor.block_test(#inner_fn_name(#inner_fn_args));
|
||||
#cx_teardowns
|
||||
},
|
||||
#on_failure_fn_name,
|
||||
|
|
|
@ -2942,7 +2942,6 @@ async fn test_buffer_deduping(cx: &mut gpui2::TestAppContext) {
|
|||
#[gpui2::test]
|
||||
async fn test_buffer_is_dirty(cx: &mut gpui2::TestAppContext) {
|
||||
init_test(cx);
|
||||
dbg!("GAH");
|
||||
|
||||
let fs = FakeFs::new(cx.executor().clone());
|
||||
fs.insert_tree(
|
||||
|
@ -2954,7 +2953,6 @@ async fn test_buffer_is_dirty(cx: &mut gpui2::TestAppContext) {
|
|||
}),
|
||||
)
|
||||
.await;
|
||||
dbg!("NOOP");
|
||||
|
||||
let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;
|
||||
|
||||
|
@ -2964,8 +2962,6 @@ async fn test_buffer_is_dirty(cx: &mut gpui2::TestAppContext) {
|
|||
.unwrap();
|
||||
let events = Arc::new(Mutex::new(Vec::new()));
|
||||
|
||||
dbg!("BOOP");
|
||||
|
||||
// initially, the buffer isn't dirty.
|
||||
buffer1.update(cx, |buffer, cx| {
|
||||
cx.subscribe(&buffer1, {
|
||||
|
@ -2982,7 +2978,6 @@ async fn test_buffer_is_dirty(cx: &mut gpui2::TestAppContext) {
|
|||
|
||||
buffer.edit([(1..2, "")], None, cx);
|
||||
});
|
||||
dbg!("ADSASD");
|
||||
|
||||
// after the first edit, the buffer is dirty, and emits a dirtied event.
|
||||
buffer1.update(cx, |buffer, cx| {
|
||||
|
@ -3000,7 +2995,6 @@ async fn test_buffer_is_dirty(cx: &mut gpui2::TestAppContext) {
|
|||
cx,
|
||||
);
|
||||
});
|
||||
dbg!("1111");
|
||||
|
||||
// after saving, the buffer is not dirty, and emits a saved event.
|
||||
buffer1.update(cx, |buffer, cx| {
|
||||
|
@ -3012,8 +3006,6 @@ async fn test_buffer_is_dirty(cx: &mut gpui2::TestAppContext) {
|
|||
buffer.edit([(2..2, "D")], None, cx);
|
||||
});
|
||||
|
||||
dbg!("5555555");
|
||||
|
||||
// after editing again, the buffer is dirty, and emits another dirty event.
|
||||
buffer1.update(cx, |buffer, cx| {
|
||||
assert!(buffer.text() == "aBDc");
|
||||
|
@ -3035,7 +3027,6 @@ async fn test_buffer_is_dirty(cx: &mut gpui2::TestAppContext) {
|
|||
assert!(!buffer.is_dirty());
|
||||
});
|
||||
|
||||
dbg!("666666");
|
||||
assert_eq!(
|
||||
*events.lock(),
|
||||
&[language2::Event::Edited, language2::Event::DirtyChanged]
|
||||
|
@ -3055,8 +3046,6 @@ async fn test_buffer_is_dirty(cx: &mut gpui2::TestAppContext) {
|
|||
.detach();
|
||||
});
|
||||
|
||||
dbg!("0000000");
|
||||
|
||||
fs.remove_file("/dir/file2".as_ref(), Default::default())
|
||||
.await
|
||||
.unwrap();
|
||||
|
@ -3084,7 +3073,6 @@ async fn test_buffer_is_dirty(cx: &mut gpui2::TestAppContext) {
|
|||
.detach();
|
||||
});
|
||||
|
||||
dbg!(";;;;;;");
|
||||
buffer3.update(cx, |buffer, cx| {
|
||||
buffer.edit([(0..0, "x")], None, cx);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue