From 10d3ad4e33ed5003483fc328c5e77cd4c6b994f4 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Thu, 13 Jun 2024 16:38:53 -0700 Subject: [PATCH] Enable linux tests (#12493) Note: - We have disabled all tests that rely on Postgres in the Linux CI. We only really need to test these once, and as macOS is our team's primary platform, we'll only enable them on macOS for local reproduction. - We have disabled all tests that rely on the font metrics. We standardized on Zed Mono in many fonts, but our CoreText Text System and Cosmic Text System proved to be very different in effect. We should revisit if we decide to standardize our text system across platforms (e.g. using Harfbuzz everywhere) - Extended the condition timeout significantly. Our CI machines are slow enough that this is causing spurious errors in random tests. Release Notes: - N/A --------- Co-authored-by: Conrad Irwin --- .github/workflows/ci.yml | 4 +++- crates/collab/src/auth.rs | 2 +- crates/collab/src/db/tests.rs | 3 +++ crates/collab/src/db/tests/db_tests.rs | 7 +++--- crates/collab/src/tests/dev_server_tests.rs | 3 ++- crates/collab/src/tests/test_server.rs | 6 +---- crates/editor/src/display_map.rs | 24 ++++++++++---------- crates/editor/src/display_map/block_map.rs | 9 +++++++- crates/editor/src/editor.rs | 4 +++- crates/editor/src/editor_tests.rs | 2 ++ crates/editor/src/element.rs | 4 ++-- crates/editor/src/hover_links.rs | 14 +++++++----- crates/editor/src/test.rs | 2 +- crates/extension/src/extension_store_test.rs | 8 +++++++ crates/gpui/src/app/test_context.rs | 6 ++++- crates/gpui/src/platform/keystroke.rs | 9 ++++++++ crates/gpui/src/platform/test/platform.rs | 20 +++++++++------- crates/gpui/src/text_system.rs | 1 + crates/gpui/src/text_system/line_wrapper.rs | 22 +++++++++++++----- crates/project/src/project_tests.rs | 2 +- crates/storybook/build.rs | 5 +++- crates/vim/src/test.rs | 2 ++ 22 files changed, 107 insertions(+), 52 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3b66927411bdc30c68794fde7eeeccd02c120584..38ecd4228c48bb842fc47bd258ba5c0314b0e1e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -101,7 +101,6 @@ jobs: - name: Build other binaries and features run: cargo build --workspace --bins --all-features; cargo check -p gpui --features "macos-blade" - # todo(linux): Actually run the tests linux_tests: timeout-minutes: 60 name: (Linux) Run Clippy and tests @@ -120,6 +119,9 @@ jobs: - name: cargo clippy run: cargo xtask clippy + - name: Run tests + uses: ./.github/actions/run_tests + - name: Build Zed run: cargo build -p zed diff --git a/crates/collab/src/auth.rs b/crates/collab/src/auth.rs index 915563d6b44738a1b5596ff9f743649d00c538d6..14c07742d4eaba9271a316b3128915e4c5a0bfe3 100644 --- a/crates/collab/src/auth.rs +++ b/crates/collab/src/auth.rs @@ -277,7 +277,7 @@ mod test { #[gpui::test] async fn test_verify_access_token(cx: &mut gpui::TestAppContext) { - let test_db = crate::db::TestDb::postgres(cx.executor().clone()); + let test_db = crate::db::TestDb::sqlite(cx.executor().clone()); let db = test_db.db(); let user = db diff --git a/crates/collab/src/db/tests.rs b/crates/collab/src/db/tests.rs index e3ce834295818ef35e8a1a7d8c3a62eb8ea8c4f5..b8460c41e82c92cc3e77258d9ed1576095105b7f 100644 --- a/crates/collab/src/db/tests.rs +++ b/crates/collab/src/db/tests.rs @@ -2,6 +2,8 @@ mod buffer_tests; mod channel_tests; mod contributor_tests; mod db_tests; +// we only run postgres tests on macos right now +#[cfg(target_os = "macos")] mod embedding_tests; mod extension_tests; mod feature_flag_tests; @@ -108,6 +110,7 @@ impl TestDb { #[macro_export] macro_rules! test_both_dbs { ($test_name:ident, $postgres_test_name:ident, $sqlite_test_name:ident) => { + #[cfg(target_os = "macos")] #[gpui::test] async fn $postgres_test_name(cx: &mut gpui::TestAppContext) { let test_db = $crate::db::TestDb::postgres(cx.executor().clone()); diff --git a/crates/collab/src/db/tests/db_tests.rs b/crates/collab/src/db/tests/db_tests.rs index c78ba9ec917512fa448c3653d840cf1481cafe71..92baf29837d13f8650dace55b99cddbf501c4f78 100644 --- a/crates/collab/src/db/tests/db_tests.rs +++ b/crates/collab/src/db/tests/db_tests.rs @@ -1,9 +1,7 @@ use super::*; use crate::test_both_dbs; -use gpui::TestAppContext; use pretty_assertions::{assert_eq, assert_ne}; use std::sync::Arc; -use tests::TestDb; test_both_dbs!( test_get_users, @@ -564,9 +562,10 @@ fn test_fuzzy_like_string() { assert_eq!(Database::fuzzy_like_string(" z "), "%z%"); } +#[cfg(target = "macos")] #[gpui::test] -async fn test_fuzzy_search_users(cx: &mut TestAppContext) { - let test_db = TestDb::postgres(cx.executor()); +async fn test_fuzzy_search_users(cx: &mut gpui::TestAppContext) { + let test_db = tests::TestDb::postgres(cx.executor()); let db = test_db.db(); for (i, github_login) in [ "California", diff --git a/crates/collab/src/tests/dev_server_tests.rs b/crates/collab/src/tests/dev_server_tests.rs index c5a13a431dc5ed8deceadeb7c51ea8ec5b9c2544..932d5a559379e22624d03cb2563197ae3caf7356 100644 --- a/crates/collab/src/tests/dev_server_tests.rs +++ b/crates/collab/src/tests/dev_server_tests.rs @@ -575,7 +575,8 @@ async fn test_save_as_remote(cx1: &mut gpui::TestAppContext, cx2: &mut gpui::Tes let title = remote_workspace .update(&mut cx, |ws, cx| { - ws.active_item(cx).unwrap().tab_description(0, &cx).unwrap() + let active_item = ws.active_item(cx).unwrap(); + active_item.tab_description(0, &cx).unwrap() }) .unwrap(); diff --git a/crates/collab/src/tests/test_server.rs b/crates/collab/src/tests/test_server.rs index 91a0d810660760a4ec01cea71d0342ba1fcfe9b2..231dd08e7c42cd8f714e5a2c2dbff7a6ec90c8e7 100644 --- a/crates/collab/src/tests/test_server.rs +++ b/crates/collab/src/tests/test_server.rs @@ -277,11 +277,7 @@ impl TestServer { node_runtime: FakeNodeRuntime::new(), }); - let os_keymap = if cfg!(target_os = "linux") { - "keymaps/default-linux.json" - } else { - "keymaps/default-macos.json" - }; + let os_keymap = "keymaps/default-macos.json"; cx.update(|cx| { theme::init(theme::LoadThemes::JustBase, cx); diff --git a/crates/editor/src/display_map.rs b/crates/editor/src/display_map.rs index 5bed94a7ecbc0d2f62278d3c3df4658b4a6f4496..4b7de01b9c0942a20ff3232f2492663c2b7fcddc 100644 --- a/crates/editor/src/display_map.rs +++ b/crates/editor/src/display_map.rs @@ -1111,14 +1111,11 @@ impl ToDisplayPoint for Anchor { #[cfg(test)] pub mod tests { use super::*; - use crate::{ - movement, - test::{editor_test_context::EditorTestContext, marked_display_snapshot}, - }; + use crate::{movement, test::marked_display_snapshot}; use gpui::{div, font, observe, px, AppContext, BorrowAppContext, Context, Element, Hsla}; use language::{ language_settings::{AllLanguageSettings, AllLanguageSettingsContent}, - Buffer, Language, LanguageConfig, LanguageMatcher, SelectionGoal, + Buffer, Language, LanguageConfig, LanguageMatcher, }; use project::Project; use rand::{prelude::*, Rng}; @@ -1393,6 +1390,7 @@ pub mod tests { } } + #[cfg(target_os = "macos")] #[gpui::test(retries = 5)] async fn test_soft_wraps(cx: &mut gpui::TestAppContext) { cx.background_executor @@ -1401,7 +1399,7 @@ pub mod tests { init_test(cx, |_| {}); }); - let mut cx = EditorTestContext::new(cx).await; + let mut cx = crate::test::editor_test_context::EditorTestContext::new(cx).await; let editor = cx.editor.clone(); let window = cx.window; @@ -1457,39 +1455,39 @@ pub mod tests { movement::up( &snapshot, DisplayPoint::new(DisplayRow(1), 10), - SelectionGoal::None, + language::SelectionGoal::None, false, &text_layout_details, ), ( DisplayPoint::new(DisplayRow(0), 7), - SelectionGoal::HorizontalPosition(x.0) + language::SelectionGoal::HorizontalPosition(x.0) ) ); assert_eq!( movement::down( &snapshot, DisplayPoint::new(DisplayRow(0), 7), - SelectionGoal::HorizontalPosition(x.0), + language::SelectionGoal::HorizontalPosition(x.0), false, &text_layout_details ), ( DisplayPoint::new(DisplayRow(1), 10), - SelectionGoal::HorizontalPosition(x.0) + language::SelectionGoal::HorizontalPosition(x.0) ) ); assert_eq!( movement::down( &snapshot, DisplayPoint::new(DisplayRow(1), 10), - SelectionGoal::HorizontalPosition(x.0), + language::SelectionGoal::HorizontalPosition(x.0), false, &text_layout_details ), ( DisplayPoint::new(DisplayRow(2), 4), - SelectionGoal::HorizontalPosition(x.0) + language::SelectionGoal::HorizontalPosition(x.0) ) ); @@ -1679,6 +1677,8 @@ pub mod tests { ); } + // todo(linux) fails due to pixel differences in text rendering + #[cfg(target_os = "macos")] #[gpui::test] async fn test_chunks_with_soft_wrapping(cx: &mut gpui::TestAppContext) { use unindent::Unindent as _; diff --git a/crates/editor/src/display_map/block_map.rs b/crates/editor/src/display_map/block_map.rs index 73b7c4d94845b73477a8138f54cfe2a6b924d8cb..e17333a195f45f542f82faad5873c5e22a90bc01 100644 --- a/crates/editor/src/display_map/block_map.rs +++ b/crates/editor/src/display_map/block_map.rs @@ -1157,7 +1157,7 @@ mod tests { use super::*; use crate::display_map::inlay_map::InlayMap; use crate::display_map::{fold_map::FoldMap, tab_map::TabMap, wrap_map::WrapMap}; - use gpui::{div, font, px, Element}; + use gpui::{div, font, px, AssetSource, Element}; use multi_buffer::MultiBuffer; use rand::prelude::*; use settings::SettingsStore; @@ -1452,6 +1452,7 @@ mod tests { } } + #[cfg(target_os = "macos")] #[gpui::test] fn test_blocks_on_wrapped_lines(cx: &mut gpui::TestAppContext) { cx.update(|cx| init_test(cx)); @@ -1940,6 +1941,12 @@ mod tests { let settings = SettingsStore::test(cx); cx.set_global(settings); theme::init(theme::LoadThemes::JustBase, cx); + cx.text_system() + .add_fonts(vec![assets::Assets + .load("fonts/zed-mono/zed-mono-extended.ttf") + .unwrap() + .unwrap()]) + .unwrap(); } impl TransformBlock { diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 19a04446ebfde02176d4653d20f98b294ef929d0..1583c1e22756a2400f07fecd73f5b09733eb2ca4 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -2746,7 +2746,9 @@ impl Editor { Some(Selection { start, end, .. }) => start != end, None => false, }; - pending_nonempty_selection || self.columnar_selection_tail.is_some() + + pending_nonempty_selection + || (self.columnar_selection_tail.is_some() && self.selections.disjoint.len() > 1) } pub fn has_pending_selection(&self) -> bool { diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index a767f9eabb141748c1b529e48f272def030039a3..65c4fadb733018726305c05212d2616b5fe5e587 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -936,6 +936,8 @@ fn test_move_cursor(cx: &mut TestAppContext) { }); } +// TODO: Re-enable this test +#[cfg(target_os = "macos")] #[gpui::test] fn test_move_cursor_multibyte(cx: &mut TestAppContext) { init_test(cx, |_| {}); diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 7be7564ce18e3f566b47f5058b533be4b004084b..37efdd87af755138662123c0fdc09fd9df6a34ca 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -586,7 +586,7 @@ impl EditorElement { editor.handle_click_hovered_link(point, event.modifiers, cx); cx.stop_propagation(); - } else if end_selection { + } else if end_selection && pending_nonempty_selections { cx.stop_propagation(); } else if cfg!(target_os = "linux") && event.button == MouseButton::Middle { if !text_hitbox.is_hovered(cx) || editor.read_only(cx) { @@ -594,7 +594,7 @@ impl EditorElement { } #[cfg(target_os = "linux")] - if let Some(item) = cx.read_from_clipboard() { + if let Some(item) = cx.read_from_primary() { let point_for_position = position_map.point_for_position(text_hitbox.bounds, event.position); let position = point_for_position.previous_valid; diff --git a/crates/editor/src/hover_links.rs b/crates/editor/src/hover_links.rs index 41002abd0cc608f84098672bad394b4145799b34..ad769b86df6261ba7c3552766da1a5e7e5fba3b1 100644 --- a/crates/editor/src/hover_links.rs +++ b/crates/editor/src/hover_links.rs @@ -748,9 +748,13 @@ mod tests { ]))) }); - cx.cx - .cx - .simulate_mouse_move(screen_coord.unwrap(), None, Modifiers::command_shift()); + let modifiers = if cfg!(target_os = "macos") { + Modifiers::command_shift() + } else { + Modifiers::control_shift() + }; + + cx.simulate_mouse_move(screen_coord.unwrap(), None, modifiers); requests.next().await; cx.run_until_parked(); @@ -767,9 +771,7 @@ mod tests { let variable = A; "}); - cx.cx - .cx - .simulate_click(screen_coord.unwrap(), Modifiers::command_shift()); + cx.simulate_click(screen_coord.unwrap(), modifiers); cx.assert_editor_state(indoc! {" struct «Aˇ»; diff --git a/crates/editor/src/test.rs b/crates/editor/src/test.rs index 15cd9e0c35a5da8e0ab032b96dd0cb2c24d7dc18..cf568522b134ade08af6b91d753d1bf64e399e83 100644 --- a/crates/editor/src/test.rs +++ b/crates/editor/src/test.rs @@ -25,7 +25,7 @@ pub fn marked_display_snapshot( let (unmarked_text, markers) = marked_text_offsets(text); let font = Font { - family: "Courier".into(), + family: "Zed Mono".into(), features: FontFeatures::default(), weight: FontWeight::default(), style: FontStyle::default(), diff --git a/crates/extension/src/extension_store_test.rs b/crates/extension/src/extension_store_test.rs index 6f068fc460c622c56ca59081845e90e5838f7edb..e55659d22b0cb56cd7aea4cdace84d7aac97ad8e 100644 --- a/crates/extension/src/extension_store_test.rs +++ b/crates/extension/src/extension_store_test.rs @@ -510,6 +510,14 @@ async fn test_extension_store_with_gleam_extension(cx: &mut TestAppContext) { { "name": format!("gleam-{version}-aarch64-apple-darwin.tar.gz"), "browser_download_url": asset_download_uri + }, + { + "name": format!("gleam-{version}-x86_64-unknown-linux-musl.tar.gz"), + "browser_download_url": asset_download_uri + }, + { + "name": format!("gleam-{version}-aarch64-unknown-linux-musl.tar.gz"), + "browser_download_url": asset_download_uri } ] } diff --git a/crates/gpui/src/app/test_context.rs b/crates/gpui/src/app/test_context.rs index 80ca8edf6ad44a93649616283b7f58c2d255cdcd..944a95501df47182bf42687e05a625fc56a802b1 100644 --- a/crates/gpui/src/app/test_context.rs +++ b/crates/gpui/src/app/test_context.rs @@ -571,7 +571,11 @@ impl View { use postage::prelude::{Sink as _, Stream as _}; let (tx, mut rx) = postage::mpsc::channel(1024); - let timeout_duration = Duration::from_millis(100); + let timeout_duration = if cfg!(target_os = "macos") { + Duration::from_millis(100) + } else { + Duration::from_secs(1) + }; let mut cx = cx.app.borrow_mut(); let subscriptions = ( diff --git a/crates/gpui/src/platform/keystroke.rs b/crates/gpui/src/platform/keystroke.rs index 55f8658cd3d40e0999bc0bebf5721af153ac5967..fa408165a66be4688c73fbd95744a8f42576751d 100644 --- a/crates/gpui/src/platform/keystroke.rs +++ b/crates/gpui/src/platform/keystroke.rs @@ -296,6 +296,15 @@ impl Modifiers { } } + /// helper method for Modifiers with command + shift + pub fn control_shift() -> Modifiers { + Modifiers { + shift: true, + control: true, + ..Default::default() + } + } + /// Checks if this Modifiers is a subset of another Modifiers pub fn is_subset_of(&self, other: &Modifiers) -> bool { (other.control || !self.control) diff --git a/crates/gpui/src/platform/test/platform.rs b/crates/gpui/src/platform/test/platform.rs index 19b45a801fbfe7f7a559f5c0f8017c666d4c8ff5..f73ec5216a278732fbfa3e8c7b8a282a5cb7ce27 100644 --- a/crates/gpui/src/platform/test/platform.rs +++ b/crates/gpui/src/platform/test/platform.rs @@ -27,6 +27,7 @@ pub(crate) struct TestPlatform { current_primary_item: Mutex>, pub(crate) prompts: RefCell, pub opened_url: RefCell>, + pub text_system: Arc, weak: Weak, } @@ -44,6 +45,15 @@ impl TestPlatform { .expect("unable to initialize Windows OLE"); } + #[cfg(target_os = "macos")] + let text_system = Arc::new(crate::platform::mac::MacTextSystem::new()); + + #[cfg(target_os = "linux")] + let text_system = Arc::new(crate::platform::cosmic_text::CosmicTextSystem::new()); + + #[cfg(target_os = "windows")] + let text_system = Arc::new(crate::platform::windows::DirectWriteTextSystem::new().unwrap()); + Rc::new_cyclic(|weak| TestPlatform { background_executor: executor, foreground_executor, @@ -56,6 +66,7 @@ impl TestPlatform { current_primary_item: Mutex::new(None), weak: weak.clone(), opened_url: Default::default(), + text_system, }) } @@ -132,14 +143,7 @@ impl Platform for TestPlatform { } fn text_system(&self) -> Arc { - #[cfg(target_os = "macos")] - return Arc::new(crate::platform::mac::MacTextSystem::new()); - - #[cfg(target_os = "linux")] - return Arc::new(crate::platform::cosmic_text::CosmicTextSystem::new()); - - #[cfg(target_os = "windows")] - return Arc::new(crate::platform::windows::DirectWriteTextSystem::new().unwrap()); + self.text_system.clone() } fn run(&self, _on_finish_launching: Box) { diff --git a/crates/gpui/src/text_system.rs b/crates/gpui/src/text_system.rs index 5cfec6a15ebf80f396afa77b3b6bbaecf595a5d0..8c6dcb50ca499687a70102ce15740ad70b9af7dc 100644 --- a/crates/gpui/src/text_system.rs +++ b/crates/gpui/src/text_system.rs @@ -69,6 +69,7 @@ impl TextSystem { font("Cantarell"), // Gnome font("Ubuntu"), // Gnome (Ubuntu) font("Noto Sans"), // KDE + font("DejaVu Sans") ], } } diff --git a/crates/gpui/src/text_system/line_wrapper.rs b/crates/gpui/src/text_system/line_wrapper.rs index a4f407e1fa646cb1597a523ec9dbaab9168332e1..28e450d9b45245e00e4589ae853d7f82a2393ff3 100644 --- a/crates/gpui/src/text_system/line_wrapper.rs +++ b/crates/gpui/src/text_system/line_wrapper.rs @@ -143,21 +143,28 @@ impl Boundary { #[cfg(test)] mod tests { use super::*; - use crate::{font, TestAppContext, TestDispatcher, TextRun, WindowTextSystem, WrapBoundary}; + use crate::{font, TestAppContext, TestDispatcher}; + #[cfg(target_os = "macos")] + use crate::{TextRun, WindowTextSystem, WrapBoundary}; use rand::prelude::*; #[test] fn test_wrap_line() { let dispatcher = TestDispatcher::new(StdRng::seed_from_u64(0)); let cx = TestAppContext::new(dispatcher, None); + cx.text_system() + .add_fonts(vec![std::fs::read( + "../../assets/fonts/zed-mono/zed-mono-extended.ttf", + ) + .unwrap() + .into()]) + .unwrap(); + let id = cx.text_system().font_id(&font("Zed Mono")).unwrap(); cx.update(|cx| { let text_system = cx.text_system().clone(); - let mut wrapper = LineWrapper::new( - text_system.font_id(&font("Courier")).unwrap(), - px(16.), - text_system.platform_text_system.clone(), - ); + let mut wrapper = + LineWrapper::new(id, px(16.), text_system.platform_text_system.clone()); assert_eq!( wrapper .wrap_line("aa bbb cccc ddddd eeee", px(72.)) @@ -213,8 +220,11 @@ mod tests { } // For compatibility with the test macro + #[cfg(target_os = "macos")] use crate as gpui; + // These seem to vary wildly based on the the text system. + #[cfg(target_os = "macos")] #[crate::test] fn test_wrap_shaped_line(cx: &mut TestAppContext) { cx.update(|cx| { diff --git a/crates/project/src/project_tests.rs b/crates/project/src/project_tests.rs index 293a8d58673502d8ed89295b13d96acc7807ccbc..29a27faef242fcd4af58cbd6b9a3bb03008d858c 100644 --- a/crates/project/src/project_tests.rs +++ b/crates/project/src/project_tests.rs @@ -24,7 +24,7 @@ async fn test_block_via_channel(cx: &mut gpui::TestAppContext) { let (tx, mut rx) = futures::channel::mpsc::unbounded(); let _thread = std::thread::spawn(move || { - std::fs::metadata("/Users").unwrap(); + std::fs::metadata("/tmp").unwrap(); std::thread::sleep(Duration::from_millis(1000)); tx.unbounded_send(1).unwrap(); }); diff --git a/crates/storybook/build.rs b/crates/storybook/build.rs index 4975cd33b751512875612fac6cf6e776fc1ec8b7..ec0e8944f5abfde5e7294a77a4ebc0a8ba695db4 100644 --- a/crates/storybook/build.rs +++ b/crates/storybook/build.rs @@ -1,7 +1,10 @@ fn main() { // Find WebRTC.framework as a sibling of the executable when running outside of an application bundle. // TODO: We shouldn't depend on WebRTC in editor - println!("cargo:rustc-link-arg=-Wl,-rpath,@executable_path"); + #[cfg(target_os = "macos")] + { + println!("cargo:rustc-link-arg=-Wl,-rpath,@executable_path"); + } #[cfg(target_os = "windows")] { diff --git a/crates/vim/src/test.rs b/crates/vim/src/test.rs index 590f0fea14ea9e83ceca184abc6dd3a6ad133ad4..7a2d6fa5e8da27544ac03c4d13717d918266831d 100644 --- a/crates/vim/src/test.rs +++ b/crates/vim/src/test.rs @@ -400,6 +400,7 @@ async fn test_join_lines(cx: &mut gpui::TestAppContext) { "}); } +#[cfg(target_os = "macos")] #[gpui::test] async fn test_wrapped_lines(cx: &mut gpui::TestAppContext) { let mut cx = NeovimBackedTestContext::new(cx).await; @@ -706,6 +707,7 @@ async fn test_selection_goal(cx: &mut gpui::TestAppContext) { Lorem Ipsum"}); } +#[cfg(target_os = "macos")] #[gpui::test] async fn test_wrapped_motions(cx: &mut gpui::TestAppContext) { let mut cx = NeovimBackedTestContext::new(cx).await;